api.github.comに繋がらないClaude.aiで、GitHubエコシステムを自律運用する

publicとprivateの非対称性が、制約を設計に変えた

この記事で言いたいこと:Claude.aiはAPIサーバーに直接アクセスできない。しかしgitプロトコルは通る。この一行の発見が、AIチャット画面だけで動くゼロコストGitHubエコシステムを生んだ。壁を迂回するのではなく、壁を橋として使う設計の話だ。

1. 壁に気づく

あるAIチャットサービスのコンテキストでGitHubのAPIを直接叩こうとした瞬間に、それは起きた。接続が通らない。ネットワーク制限がある。api.github.comへのアクセスがブロックされている。

最初は「できないこと」として処理した。しかしすぐに別の問いが浮かんだ。「github.com(gitプロトコル)はどうか?」と。試してみると、通った。git cloneも、git pushも、問題なく動く。

この非対称性——APIは通らないがgitは通る——が、以降の設計をすべて決めた。

2. 非対称性を地図にする

整理すると、利用できるものと利用できないものが明確になった。

✅ 通るもの:github.com(git clone / git push / git pull)
❌ 通らないもの:api.github.com(REST API / GraphQL / Projects API)

GitHub Projects APIを直接叩けなければ、タスク管理も自動化できない。一見すると詰んでいる。しかし視点を変えると、別の経路が見える。GitHubには、リポジトリへのpushをトリガーにして任意のスクリプトを走らせる仕組みが存在する。GitHub Actionsだ。そして、ActionsはAPIを叩ける。

AIチャット → git push → Actions起動 → API呼び出し → privateリポジトリへ書き戻し → AIチャット → git pull

APIに直接アクセスできないなら、APIを叩ける別のシステムに橋渡しをすればいい。publicリポジトリがその橋になる。

3. アーキテクチャの全体像

システムは二つのリポジトリで構成される。publicリポジトリ(エンジン)とprivateリポジトリ(記憶)だ。

publicリポジトリ(エンジン)
・GitHub Actionsのワークフロー定義
・AIチャットが書き込むagent/request.json
・pushをトリガーに動くブリッジ

privateリポジトリ(記憶)
・日次ログ・プロジェクトキャッシュ・スキル定義
・Actionsが書き込み、AIチャットがpullして読む
・外部からは見えない個人の脳

AIチャットが何かをしたいとき、まずagent/request.jsonにアクションの指示をJSONで書く。そのファイルをpushした瞬間、Actionsが起動する。ActionsはAPIを叩き、結果をprivateリポジトリへ書き戻す。AIチャットがpullすれば、結果が手元に届く。

APIへの直接アクセスは一度も起きていない。しかしその恩恵はすべて受けている。

4. リクエストとレスポンスの設計

AIチャットが書くリクエストは、シンプルなJSONだ。

{"action": "fetch_project", "payload": {}}

{"action": "update_task", "payload": {"updates": [{"task_id": "xxx", "new_status": "Done"}]}}

{"action": "write_memory", "payload": {"path": "daily/2026-03-26.md", "content": "..."}}

Actionsのワークフローはこのauthority(action)フィールドを読んで処理を分岐させる。プロジェクトのタスク取得・ステータス変更・ファイル書き込み・Issueの作成——それぞれのアクションがAPIを経由して実行される。

pushを確実にトリガーするため、request.jsonにはタイムスタンプフィールドを自動付与する。内容が同じでも毎回差分が生まれるので、Actionsは必ず起動する。

5. publicとprivateが果たす役割分担

この設計の面白さは、publicとprivateを使い分ける理由がコスト以外にもあることだ。

GitHub Actionsは、publicリポジトリなら無制限・無料で動く。privateリポジトリには月あたりの上限がある。だからエンジンはpublicに置く。逆に記憶——日次ログ、プロジェクトの状況、個人のスキル定義——は外部に見せたくない。だからprivateに置く。

コスト最適化とプライバシー保護が、同じ設計判断から同時に解決される。制約から生まれた構造が、意図せず理想的な役割分担を実現していた。

6. 非同期であることの強さ

このアーキテクチャは非同期だ。AIチャットがpushして、Actionsが処理して、結果をpullする。リアルタイムではない。

しかしこれは弱点ではない。日常業務の大半は、数十秒の待機を許容できる。タスクの更新、ログの保存、プロジェクトの状況確認——これらはリアルタイムである必要がない。必要なのは確実性と継続性だ。

非同期だからこそ、AIチャットのセッションが終わっても処理は続く。ネットワークが不安定でも、pushさえ通れば後はActionsが完走する。障害ポイントが少なく、回復も自動だ。

7. 記憶が蓄積するシステム

このシステムで最も価値があるのは、記憶が外部化されることだ。AIチャットはセッションをまたいで記憶を持てない。しかしprivateリポジトリにgit pullすれば、過去のすべての文脈を読み込める。

セッション開始時に日次ログとプロジェクトキャッシュを読む。これだけで、前回の会話の続きから始められる。記憶はAIの内側ではなく、Gitの外側に積み上がっていく。使えば使うほど文脈が豊かになる。道具ではなくインフラとして育っていく。

道具は消耗する。インフラは育つ。

8. 制約が問いを立て、問いが設計を生む

「できない」という事実は、問いの起点だ。できない理由を調べると、何が通って何が通らないかが分かる。その境界線を精密に把握した瞬間に、設計の余地が生まれる。

APIが通らないなら、gitを通す。gitしか通らないなら、gitをトリガーにする。トリガーにできるなら、その先でAPIを叩く。一つ一つの問いが次の問いを引き出し、迂回路が主道に変わっていく。

制約を「壁」として見ると、諦める理由になる。「地形」として見ると、設計の素材になる。今回の発見は技術的な工夫というより、視点の転換だったと思っている。

api.github.comが通らないなら、github.comを通す。その一行が、ゼロコストで自律するGitHubエコシステムを生んだ。

トキストレージは、声・画像・テキストを1000年保管する「存在証明の民主化」プロジェクトです。このエッセイのシステム自体も、トキストレージのインフラ上で動いています。

トキストレージを知る すべてのエッセイを読む