> ## Documentation Index
> Fetch the complete documentation index at: https://kawax.biz/llms.txt
> Use this file to discover all available pages before exploring further.

# Token GitHub

> Découvrez comment basculer le token GitHub à l'exécution, par utilisateur, avec Laravel Copilot SDK.

## Bascule à l'exécution du token GitHub utilisé pour l'authentification

Comment exécuter le Copilot CLI avec le token GitHub d'un utilisateur authentifié (par exemple via Socialite).

<Note>
  Un Personal Access Token doit disposer de la permission `Copilot Requests`. Les tokens Socialite ont vraisemblablement les mêmes exigences.
  Si vous ne pouvez pas obtenir un token utilisable via Socialite, demandez à l'utilisateur de saisir directement un PAT.
</Note>

Cette méthode ne fonctionne qu'en mode stdio.
En mode TCP, le processus Copilot CLI reste démarré, il n'est donc pas possible de basculer à l'exécution.
Spécifier `github_token` ou `use_logged_in_user` en mode TCP (`cli_url`) provoque une erreur.

<Note>
  La section « Token GitHub par session (v0.3.0+) » ci-dessous fonctionne aussi en mode TCP.
</Note>

## Option `github_token`

Option officielle du SDK. Le token est transmis au CLI via la variable d'environnement `COPILOT_SDK_AUTH_TOKEN`.

```php theme={null}
use Revolution\Copilot\Facades\Copilot;

$config = array_merge(
    config('copilot'),
    [
        'github_token' => $user->github_token,
    ]
);

$response = Copilot::useStdio($config)->run(prompt: '...');
Copilot::stop(); // Détruit par précaution le client portant le token utilisateur
```

## Option `use_logged_in_user`

Quand `github_token` est spécifié, `use_logged_in_user` passe automatiquement à `false`.
Le CLI n'utilise donc ni le token OAuth enregistré ni l'authentification du CLI `gh`, uniquement le token explicitement passé.

Vous pouvez aussi activer explicitement `use_logged_in_user` à `true`.

```php theme={null}
$config = [
    'github_token' => $user->github_token,
    'use_logged_in_user' => true, // Activation explicite
];
```

Si vous mettez `use_logged_in_user` à `false` sans `github_token`, le flag `--no-auto-login` est ajouté et le CLI ne se connecte pas automatiquement.

## Token GitHub par session (v0.3.0+)

Le champ `gitHubToken` de `SessionConfig` permet de spécifier un token GitHub différent par session au sein d'un même processus CLI (compatible multi-locataire).

Ce token étant transmis en paramètre de la requête JSON-RPC `session.create`, il est **utilisable en mode stdio et TCP**. Même en mode TCP avec CLI déjà démarré, vous pouvez basculer le token par session.

```php theme={null}
use Revolution\Copilot\Facades\Copilot;
use Revolution\Copilot\Types\SessionConfig;

$response = Copilot::run(
    prompt: '...',
    config: new SessionConfig(gitHubToken: $user->github_token),
);
```

Exemple en mode TCP :

```php theme={null}
// Le serveur CLI est déjà démarré (mode TCP)
// On peut passer un token utilisateur distinct par session
$response = Copilot::useTcp(url: 'tcp://127.0.0.1:12345')->run(
    prompt: '...',
    config: new SessionConfig(gitHubToken: $user->github_token),
);
```

Ce mécanisme est indépendant du `github_token` de niveau client (le token utilisé au démarrage du CLI).
Utilisez-le si vous voulez basculer le token utilisateur session par session.

<Info>
  Pour les dernières informations, consultez le [dépôt GitHub](https://github.com/invokable/laravel-copilot-sdk).
</Info>


## Related topics

- [GitHub Actions - GitHub Copilot SDK pour Laravel](/fr/packages/laravel-copilot-sdk/github-actions.md)
- [Authentification - GitHub Copilot SDK pour Laravel](/fr/packages/laravel-copilot-sdk/auth.md)
- [Laravel Cloud - GitHub Copilot SDK pour Laravel](/fr/packages/laravel-copilot-sdk/laravel-cloud.md)
- [GitHub Copilot SDK pour Laravel](/fr/packages/laravel-copilot-sdk/index.md)
- [Laravel Package Skeleton — le template de démarrage pour packages officiels](/fr/blog/package-skeleton-introduction.md)
