Claude Codeでgh apiを使って情報を取得しようとすると、毎回権限プロンプトが表示されてつらい。例えば以下のようなただコミット一覧を取得するだけのコマンドでも、毎回許可が必要になる。
gh api "repos/anthropics/claude-code/commits?per_page=100&page=1"

かといって利便性のためにgh api全体に対してallowを設定するのは怖い。ghコマンドはissueの作成やPRのマージなど書き込み操作もできるため、意図しない操作をしてしまうリスクがある。readonly操作だけに絞って許可できればいいのに、と思っていた。
何かいい方法はないかと調べていたところ、ghコマンドにはGH_CONFIG_DIR環境変数でプロファイルを切り替えられる仕組みがあることを発見した。これを利用してreadonly専用のghプロファイルを用意し、ラッパーコマンドghroを作って、それだけをallow設定するようにした。
まずGitHubでFine-grained personal access tokenを作成する。権限はリポジトリのreadonly系だけに絞り、secretアクセスなどは閉じておく。
次にreadonly用のプロファイルで認証する。GH_CONFIG_DIRを変えることで通常のghとは別の認証情報を持たせられる。
GH_CONFIG_DIR=~/.config/ghro gh auth login --with-token <<< "<your-token>"
そしてghroラッパースクリプトを作成してPATHの通った場所に置く。
#!/bin/sh GH_CONFIG_DIR=~/.config/ghro exec gh "$@"
chmod +x ghro
最後にCLAUDE.mdでClaude Codeにghroを使うよう指示する。自分は以下のように設定している。
## GitHub上の情報やコンテンツを取得する場合 - GitHubの情報をreadonlyで取得するときは、ghroコマンドを使う - ファイル内容を取得するとき、Fetchを使うと取れない。ghroコマンドを使うこと - 何らかの書き込み操作を行うときはghroではなくghコマンドを利用する
これでreadonly操作は権限プロンプトなしで実行されるようになり、書き込み操作は通常のghコマンドでちゃんと許可が出る。readとwriteの使い分けによりガードレールを設けながら利便性を両立できるようになった。