메인 콘텐츠로 건너뛰기

인증하는 GitHub 토큰의 런타임 전환

Socialite 등을 사용해 인증한 사용자별 GitHub 토큰으로 Copilot CLI를 실행하는 방법입니다.
Personal Access Token에는 Copilot Requests 권한이 필요합니다. Socialite 토큰에서도 동일한 요건이 될 것입니다. Socialite에서 사용할 수 있는 토큰을 얻을 수 없는 경우, PAT를 직접 입력받는 방식으로 합니다.
이 방법은 stdio 모드에서만 사용할 수 있습니다. TCP 모드는 Copilot CLI 프로세스를 기동한 상태로 사용하기 때문에 런타임에 전환할 수 없습니다. TCP 모드(cli_url)에서 github_token이나 use_logged_in_user를 지정하면 에러가 발생합니다.
아래 “세션별 GitHub 토큰(v0.3.0+)“은 TCP 모드에서도 사용할 수 있습니다.

github_token 옵션

SDK의 공식 옵션입니다. 토큰은 환경 변수 COPILOT_SDK_AUTH_TOKEN을 통해 CLI에 전달됩니다.
use Revolution\Copilot\Facades\Copilot;

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

$response = Copilot::useStdio($config)->run(prompt: '...');
Copilot::stop(); // 만약을 위해 사용자 토큰을 가진 클라이언트를 파기

use_logged_in_user 옵션

github_token을 지정하면 자동으로 use_logged_in_userfalse가 됩니다. 이로써 CLI는 저장된 OAuth 토큰이나 gh CLI 인증을 사용하지 않고, 명시적으로 전달한 토큰만 사용합니다. 명시적으로 use_logged_in_usertrue로 설정할 수도 있습니다.
$config = [
    'github_token' => $user->github_token,
    'use_logged_in_user' => true, // 명시적으로 활성화
];
github_token 없이 use_logged_in_userfalse로 하면 --no-auto-login 플래그가 추가되어 CLI는 자동 로그인을 수행하지 않습니다.

세션별 GitHub 토큰(v0.3.0+)

SessionConfiggitHubToken 필드를 사용하면 동일한 CLI 프로세스 내에서 세션별로 다른 GitHub 토큰을 지정할 수 있습니다(멀티테넌트 대응). 이 토큰은 session.create JSON-RPC의 매개변수로 전달되므로 stdio 모드와 TCP 모드 모두에서 사용 가능합니다. CLI가 이미 기동된 TCP 모드에서도 세션 단위로 토큰을 전환할 수 있습니다.
use Revolution\Copilot\Facades\Copilot;
use Revolution\Copilot\Types\SessionConfig;

$response = Copilot::run(
    prompt: '...',
    config: new SessionConfig(gitHubToken: $user->github_token),
);
TCP 모드에서의 사용 예:
// CLI 서버는 기동됨(TCP 모드)
// 세션별로 다른 사용자 토큰을 전달 가능
$response = Copilot::useTcp(url: 'tcp://127.0.0.1:12345')->run(
    prompt: '...',
    config: new SessionConfig(gitHubToken: $user->github_token),
);
클라이언트 레벨의 github_token(CLI 프로세스 기동 시의 토큰)과는 별도로 동작합니다. 세션 단위로 사용자 토큰을 전환하려면 이 옵션을 사용하세요.
최신 정보는 GitHub 저장소를 참고하세요.
마지막 수정일 2026년 7월 13일