はじめに

この前、AIエージェントが使うgitコマンドをGitHubの特定リポジトリだけに制限する記事を書いた。

個人的に思っているのだが、AIエージェントはGitHub Actionsのworkflowの記述を結構間違える。

これはgitコマンドだけだと、Actionsの結果が見られないので、修正が難しいからだろう。

GitHub CLIを使えば、Actionsの結果をCLIから見ることができる。

普段使いのSSH鍵やgh CLIの認証情報を使わせると、自分が操作できるリポジトリに対して、AIエージェントも操作できてしまう可能性がある。

作業ディレクトリを間違えたり、想定外のコマンドを実行したりしたときに、関係ないリポジトリへpushしたり、IssueやPull Requestを作ったりするかもしれない。

なので、今回はGitHub CLIの権限を特定リポジトリだけにする手順を備忘録として残す。

元々、GitHub CLIをインストールしていなかったので、インストールと初期設定の手順も残しておく。

GitHub CLIのインストール

Windowsの場合、以下コマンドをPowerShellから実行すれば、インストールできる。公式はここ

winget install --id GitHub.cli

GitHub CLIの初期設定

まず、普段使いの設定を行う。以下コマンドで、GitHubアカウントを認証して、gh cliを使えるようになる。

gh auth login

実行すると、以下質問が来るので、答えていく。

# 「GitHub.com」を選択
? Where do you use GitHub?  [Use arrows to move, type to filter]
> GitHub.com
  Other

# 「SSH」を選択
? What is your preferred protocol for Git operations on this host?  [Use arrows to move, type to filter]
  HTTPS
> SSH

# 普段からGitHubを使っていて、公開鍵をもう登録してあるなら、「Skip」を選択
? Upload your SSH public key to your GitHub account?  [Use arrows to move, type to filter]
  C:\Users\hogehoge\.ssh\id_ed25519.pub
> Skip

# 「Login with a web browser」を選択し、ブラウザからGitHubにワンタイムコードを入力する
? How would you like to authenticate GitHub CLI?  [Use arrows to move, type to filter]
> Login with a web browser
  Paste an authentication token

これで、ghコマンドが使えるようになる。ただ、この状態だと、自分のアカウントが権限を持つリポジトリに対して、好き勝手ができる状態になる。

gh auth statusコマンドを打てば、ログイン状態を確認できる。

gh auth status
github.com
  ✓ Logged in to github.com account <ユーザ名> (keyring)
  - Active account: true
  - Git operations protocol: ssh
  - Token: gho_************************************
  - Token scopes: 'gist', 'read:org', 'repo'

AIエージェント用の設定

AIエージェント操作用に「fine-grained personal access token」を使う。

fine-grained personal access token

アカウントから、以下の順に進む。

Settings
→ Developer settings
→ Personal access tokens
→ Fine-grained tokens
→ Generate new token

Generate new token

好きな「Token name」にした後、「Repository access」で「Only select repositories」にチェックした後、AIエージェントにタスクをしてほしいリポジトリだけを選択する。

「Permissions」で必要な権限を設定する。

今回は、「Actions」と「Contents」に「Read-only」を付けた。

Permissions

これで、「Generate token」ボタンをクリックする。

その後、「access token」が表示されるので、コピペしてメモしておく。別の画面に行くと、もう表示されなくなるので、注意。

アクセストークンを使う

環境変数GH_TOKENにさっきメモしたトークンを入力する。

以下はPowerShellでの例。

$env:GH_TOKEN = "<アクセストークン>"

新しいトークンで認証されているか確認する。

gh auth status
github.com
  ✓ Logged in to github.com account <ユーザ名> (GH_TOKEN)
  - Active account: true
  - Git operations protocol: ssh
  - Token: <アクセストークン>

  ✓ Logged in to github.com account <ユーザ名> (keyring)
  - Active account: false
  - Git operations protocol: ssh
  - Token: gho_************************************
  - Token scopes: 'gist', 'read:org', 'repo'

Active accounttrueのアカウントが使われるので、環境変数GH_TOKENの設定をした方が使われていることが分かる。

例えば、GitHub Actionsの結果一覧は以下コマンドで確認できる。

cd <権限を与えたリポジトリ>
gh run list

AIエージェントに使わせる

正直、ベストプラクティスは分からないのだが、自分は環境変数GH_TOKENを設定した後に、AIエージェントを起動しなおすことで、権限を渡している。

以下手順で実際にAIエージェントからアクセストークンを使えるか試せる。

  1. gh auth logoutでログアウトする。
  2. AIエージェントに「gh run listでActionsの結果みることできる?」と聞いて、結果を見られないことを確認。
  3. 環境変数GH_TOKENにアクセストークンを設定する。
  4. AIエージェントを再起動して、環境変数を渡すようにする。
  5. AIエージェントに「gh run listでActionsの結果みることできる?」と聞いて、結果を見られることを確認する。

GH_TOKENが優先されるので、普段はgh auth logoutでログアウトしなくていい。

トークンを使い終わったら、環境変数GH_TOKENを削除する。GitHub上でもトークンを消しといた方がいいかもしれない。