ここから触る。copilot-sdk セットアップは大変なのでCodepacesで始めます。
ちなみに手動でセットアップする場合に必要なものは以下の通りです。
- Copilot CLI
- 各ランタイムで利用できるGitHub Copilot SDK
- github-copilot-sdk
おまけですが、GitHub CLIも入れておくと便利です。
getting-started.mdを参考に進めてみよう。
copilot --version
# 0.0.395
# Commit: 4b4fe6eまずはメッセージを送信してみます。
python python/your_first_message.py実行結果
2 + 2 = 4 です。
まずはこれが動けばOKです。 しかし、メッセージが届くまでに時間がかかる場合があります。それまでターミナルを見つめないといけません。 そこで、メッセージを少しずつ流してくれるストリーミングの方法を試してみます。
ストリーミングでメッセージを送信するには以下のようにします。
python python/streaming_response.pyこれでメッセージが少しずつ流れてくるようになります。
次はツールを使ってみます。ツール呼び出しを使うと、外部のAPIやデータベースにアクセスして情報を取得したり、操作を実行したりできます。
python python/custom_tool.py実行結果
シアトルは晴れで気温は51°F、東京も晴れで気温は65°Fです。どちらも晴れですが、東京の方が暖かいです。
次は諦めずにCopilotとの対話を続けてみます。
python python/interactive.py実行すると、対話モードに入って、Copilotと連続してメッセージをやり取りできます。
サーバーモードを使うと、CopilotクライアントがアクセスするURLを指定できます。 これにより、ローカルでホストされているカスタムサーバーやプロキシサーバーを利用できます。
まずはサーバーを起動します。
copilot --server --port 4321別のターミナルでクライアントを起動します。
python python/server_mode.pyポイントはcli_urlを指定することです。
async def main():
client = CopilotClient({
"cli_url": "localhost:4321"
})
await client.start()では、これまでの応用で対話をサーバーモードで試してみます。
まずはサーバーを起動します。
copilot --server --port 4321別のターミナルでクライアントを起動します。
python python/interactive_server.pyこれでサーバーモードで対話が始まります。(対話の始まり!!!)
cd in_dockerdocker build -t copilot-server .
docker run -p 4321:4321 -it --rm copilot-sdk /bin/bashgh auth loginexport COPILOT_MODEL=gemini-3-pro-previewcopilot -i "Hello, world!"copilot help configcopilot --server --port 4321KubernetesクラスタでGitHub Copilot SDKを実行できます。詳細は k8s/README.md を参照してください。
- イメージのビルド
cd in_docker
docker build -t copilot-sdk:latest .- GitHubトークンのシークレット作成
kubectl create secret generic github-token \
--from-literal=token=YOUR_GITHUB_TOKEN \
-n copilot-sdk- デプロイ
cd ../k8s
kubectl apply -f namespace.yaml
kubectl apply -f deployment.yaml
kubectl apply -f service.yaml- Pod内でスクリプトを実行
# PowerShell
.\k8s\run-in-pod.ps1# Bash
bash k8s/run-in-pod.sh複数のCopilotエージェントが相互に連携するA2A構成については、k8s_copilot/README.md を参照してください。
この構成では、各エージェントが独自のツールセットを持ち、Dispatcherが能力に基づいてリクエストをルーティングします。
GitHub Copilot Python SDKはv0.2.2で大きなAPI変更がありました。
| 項目 | 旧API (v0.1.x) | 新API (v0.2.x) |
|---|---|---|
| クライアント初期化 | CopilotClient({"cli_url": "..."}) |
CopilotClient() (引数なし) |
| セッション作成 | await client.create_session({"streaming": True, ...}) |
await client.create_session(streaming=True, on_permission_request=PermissionHandler.approve_all, ...) |
| メッセージ送信 | await session.send_and_wait({"content": message}) |
await session.send_and_wait(message) (文字列を直接渡す) |
| PermissionHandler | from copilot import PermissionHandler |
from copilot.session import PermissionHandler |
| 必須パラメータ | なし | on_permission_request が必須 |
| パッケージ名 | copilot (Flask関連パッケージと衝突) |
github-copilot-sdk (正式パッケージ) |
旧コード (v0.1.x):
from copilot import CopilotClient, PermissionHandler
client = CopilotClient({"cli_url": "localhost:4321"})
session = await client.create_session({
"streaming": True,
"tools": [get_weather]
})
await session.send_and_wait({"content": "Hello"})新コード (v0.2.x):
from copilot import CopilotClient
from copilot.session import PermissionHandler # インポート元変更
from copilot.tools import define_tool
client = CopilotClient() # 引数なし
session = await client.create_session(
on_permission_request=PermissionHandler.approve_all, # 必須
streaming=True,
tools=[get_weather],
)
await session.send_and_wait("Hello") # 文字列を直接渡すExternalServerConfigは非推奨: 外部サーバーを指定しても、内部的にローカルCLIが必要なため、Pod内で実行する方が確実ですon_permission_requestは必須: ツールを使う場合は必ず指定してください(PermissionHandler.approve_allが推奨)- パッケージ名に注意: PyPIの
copilotパッケージはFlask関連で別物です。github-copilot-sdkを使用してください
GitHub Copilot CLIの設定項目を以下にまとめます。
| 項目名 | 説明 | デフォルト値 | 補足・選択肢 |
|---|---|---|---|
allowed_urls |
プロンプトなしでアクセスを許可するURL/ドメインのリスト。 | - | 完全一致、ドメイン指定、ワイルドカード(*.github.com)に対応。 |
auto_update |
CLIの自動アップデートを有効にするか。 | true |
- |
banner |
アニメーションバナーを表示する頻度。 | "once" |
always, never, once |
beep |
ユーザーの注意が必要な際にビープ音を鳴らすか。 | true |
- |
compact_paste |
長い貼り付け内容をコンパクトなトークンに折り畳むか。 | true |
trueの場合、10行以上は [Paste #N - X lines] と表示。 |
custom_agents.default_local_only |
ローカルのカスタムエージェントのみを使用するか。 | false |
- |
denied_urls |
アクセスを拒否するURL/ドメインのリスト。 | - | 許可ルールよりも優先されます。 |
experimental |
実験的な機能を有効にするか。 | false |
フラグや /experimental コマンドで変更可能。 |
launch_messages |
起動時に表示するメッセージのリスト。 | - | 起動時にランダムに1つ表示。チーム用のお知らせなどに。 |
log_level |
CLIのログレベル。 | "default" |
デバッグ時は "all" を推奨。 |
model |
使用するAIモデルの指定。 | - | Claude 4.5系、Gemini 3 Pro、GPT-5系など。 |
parallel_tool_execution |
ツールの並列実行を有効にするか。 | true |
- |
render_markdown |
ターミナル内でMarkdownをレンダリングするか。 | true |
- |
screen_reader |
スクリーンリーダー用の最適化を有効にするか。 | false |
- |
stream |
ストリーミングモードを有効にするか。 | true |
- |
theme |
出力のカラーテーマ。 | "auto" |
auto, dark, light |
trusted_folders |
ファイル操作権限を付与するフォルダリスト。 | - | - |
undo_without_confirmation |
Esc 2回でのUndo時に確認をスキップするか。 | false |
実験的機能。trueで即座に実行。 |
update_terminal_title |
ターミナルのタイトルを作業内容で更新するか。 | true |
対応するエミュレータ(iTerm, Windows Terminal等)が必要。 |
モデルの一覧を箇条書きのマークダウン形式でまとめました。
claude-sonnet-4.5:デフォルト設定。速度と精度のバランスが取れた主力モデル。claude-haiku-4.5:軽量・高速。レスポンスの速さを重視する場合に最適。claude-opus-4.5:最高性能モデル。複雑なアルゴリズムの実装や設計判断に。claude-sonnet-4:安定性に定評のある前世代モデル。
gpt-5.2:最新の汎用フラグシップモデル。gpt-5.2-codex:最新のコード生成特化型モデル。gpt-5.1/gpt-5.1-codex:標準的なGPT-5系バリエーション。gpt-5.1-codex-max:大規模なコンテキスト処理に特化したCodex。gpt-5.1-codex-mini/gpt-5-mini:軽量版。簡単な修正や説明に。gpt-5:GPT-5系のベースモデル。gpt-4.1:軽量でリソース消費の少ない安定版。
gemini-3-pro-preview:非常に長いコンテキスト(長大なコードベース)の読み込みに強い。
ここからはよくあるトラブルシューティングをまとめていきます。
Copilot CLIがインストールされていない場合には以下のようなエラーが発生します。
TypeError: unsupported operand type(s) for |: '_TypedDictMeta' and 'types.GenericAlias'