github-bot について
github-botは、GitHub AppのIDとインストールトークンを使ってGitHub APIを呼び出すスキルです。認証、ボット名義での操作、リポジトリアクション、ページネーションを説明し、この連携を明示的に使うワークフローを対象とします。
主な機能
- 01短時間有効なインストールトークンの生成
- 02認証付きGitHub API呼び出し
- 03ボットIDでの操作記録
- 04リポジトリとプルリクエストの操作
- 05ページ分割されたAPI一覧の処理
活用シーン
- 01Issue、プルリクエスト、リリースの作成
- 02リポジトリ情報の読み取りや更新
- 03ページ分割された結果の全件取得
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ joelhooks/ joelclaw --skill github-botインストール後、Claude Code で/github-botを入力して読み込まれたか確認します。
同梱ファイルscripts/github-token.sh
詳細
GitHub Bot
ShitRat が作成した作業には、インストール済みの shitrat ツールと shitratgit[bot] のアイデンティティを使用してください。以下で説明する従来のアプリは、それを明示的に所有するインテグレーション向けであり、Joel のエージェントが作成するコミット、PR、コメントのデフォルトのアクターではありません。実際のアプリアクセスを確認してください。以前のリポジトリ数は根拠になりません。
joelclawgithub[bot] GitHub App を介して GitHub API を操作します。@joelhooks の個人アカウントと組織アカウントにある 280 以上のすべてのリポジトリにアクセスできるボットアイデンティティとして動作します。
認証
有効期間が 1 時間のインストールトークンを生成します。
TOKEN=$(SKILL_DIR/scripts/github-token.sh)
API 呼び出しで使用します。
curl -H "Authorization: token $TOKEN" -H "Accept: application/vnd.github+json" \
https://api.github.com/repos/OWNER/REPO/...
トークンの有効期限は 1 時間です。リクエストが 401 を返した場合は、新しいトークンを生成してください。
シークレット
agent-secrets に保存されています(ハードコードしないでください)。
| シークレット | 内容 |
|---|---|
github_app_id | アプリ ID(2867136) |
github_app_client_id | クライアント ID |
github_app_installation_id | インストール ID |
github_app_pem | RSA 秘密鍵 |
ボットのアイデンティティ
- コミット:
joelclawgithub[bot] <2867136+joelclawgithub[bot]@users.noreply.github.com> - すべての API アクション(コメント、レビュー、PR)は
joelclawgithub[bot]として表示されます - 以下への読み取り/書き込みアクセス権があります:contents、issues、PRs、actions、deployments、environments、secrets、packages、workflows、checks、statuses、hooks、projects
実行記録
書き込みの実行記録には、検証済みの GitHub URL、識別子、コミット SHA、または API レスポンスを使用してください。呼び出し元のワークフローが対応している場合は、正規の OTel を出力し、永続的な決定事項を Brain .svx に記録してください。以前の slog ジャーナルは廃止されています。再作成しないでください。
関連するアクションには create-pr、push-commit、create-issue、merge-pr、create-release、update-workflow があります。
ページネーション
GitHub API は 100 件ごとにページ分割されます。全件を一覧表示するには、次を使用します。
PAGE=1
while true; do
RESULT=$(curl -s -H "Authorization: token $TOKEN" \
"https://api.github.com/endpoint?per_page=100&page=$PAGE")
# process $RESULT
[ "$(echo "$RESULT" | python3 -c 'import json,sys; print(len(json.load(sys.stdin)))')" -lt 100 ] && break
PAGE=$((PAGE+1))
done