4つのハーネスで読み替える
枠組みを5層に分けて測ったが、実物も同じところで切れている。Hermes は窓が半分埋まった時点で畳み、要点は 2,200 字の上限つきで窓の外に置く。Pi は道具を4つに絞る。やり直しは節に戻るのではなく、子に真っ新な窓を与えて要約だけ返させる。そして境目は技術だけで引かれていない。規格が合っていても、サブスクの枠は外のハーネスには効かないことがある。
この章で読むもの
この章はコードを書かない。エージェントの枠組みでは、言語モデルに仕事をさせる枠組みを5層に分けて、窓に何を残すかで同じ台本が終わったり終わらなかったりすることを測った。あそこで作ったものが、実物のどこに当たるのかを見ていく。
取り上げるのは4つだ。どれも枠組みの章で言うハーネス、つまり種類としては同じものになる。
- Claude Code(Anthropic): 端末でコードを触る。道具は多く、絞るのは呼ぶ側
- Codex(OpenAI、Apache-2.0): 同じく端末で動くが、既定でサンドボックスの中にいる
- Hermes Agent(Nous Research、MIT): 常駐して指示を受ける側。記憶と圧縮と委譲を持つ
- Pi(Earendil Works、MIT): 道具を4つしか渡さず、足りないものは拡張へ追い出す
前の3つと Hermes は競合というより層が違う。Hermes は上に立って、残りを呼ぶ側に回れる。
図に出てくる言葉を2つ先に置く。ループもグラフも、止まるまで繰り返す点は同じだ。違うのは回る道になる。ループは1手ごとにモデルへ「次はどうする?」と訊いて順番もモデルが決め、グラフは順番を先に書いておいて、書けないところだけ訊く。どちらも枠組みの章で作って測った。
本書の層 1回ぶんの単位 実物が置いているもの
------------------------------------------------------------------
グラフ ジョブ全体 Hermes delegate_task
子に真っ新な窓・返るのは要約だけ
ループ 実行全体 Hermes max_iterations 50 / 既定 3 並列
Claude Code --max-turns / --max-budget-usd
------------------------------------------------------------------
コンテキスト 窓に残るもの Hermes 50% で畳む / 85% で安全網
MEMORY.md 2,200 字(窓の外)
USER.md 1,375 字(窓の外)
------------------------------------------------------------------
ハーネス 1パス Claude Code Read Edit Write Bash ...
Pi read write edit bash の4つだけ
==================================================================
ここが API の境目
ANTHROPIC_BASE_URL / OpenAI 互換
------------------------------------------------------------------
プロンプト 1入力 モデル(次の章)順に見ていく。
- 窓の手当ては、実物では2段になっている: 畳むのと、窓の外へ書き出すのが、両方とも上限つきで実装されている
- 道具をいくつ渡すかに、実物は答えを出している: 4つに絞ると、足りないものは外へ出る
- やり直しの単位は、節ではなく窓で切られている: 子は親の履歴を1つも知らない
- 外の実行役を呼ぶ口は同梱されているが、選ぶ基準は書かれていない: 推奨されているのは呼び方だけだ
- 差し替えられるかは、技術だけでは決まらない: 規格が合っていても、財布が変わることがある
① 窓の手当ては、実物では2段になっている
枠組みの章で作った手当ては2つだった。溢れたぶんを道具名と引数だけの行に畳む Fold と、要点を窓の外へ書き出す note だ。窓200・上限40回の測定では、畳むと12手で終わり、覚え書き24字を足すと11手になった。
Hermes は両方を持っている。しかも畳むほうは2段だ。
| いつ動くか | 何をするか | |
|---|---|---|
| 圧縮器 | 入力が窓の 50% に達したとき | 中ほどの往復を要約に置き換える |
| 安全網 | 窓の 85% に達したとき | 取りこぼしを受け止める |
ここで大事なのは、満杯になってから畳むのではないということだ。枠組みの章の測定でも、全部残す走りは記録462字が窓200を262字超えていた。超えてから慌てても、そのとき捨てるものを選ぶ余裕はもう無い。
畳み方にも差がある。枠組みの章の Fold は毎回ぜんぶを一から畳み直していた。Hermes は前回の要約を渡して、更新させる。要約の要約を重ねると情報が落ちていくので、そうしないための作りだ。要約の型も決まっていて、目標・制約・進捗・決めたこと・触ったファイル・次の手、の6項目を埋める。
残す側の決め方も、枠組みの章より細かい。
- 頭は常に残す: システムプロンプトと最初の往復
- 中ほどを要約する
- 尾はトークン予算で残す: 末尾から遡ってトークンを積み、予算を使い切るまで。加えて、実際に指示を出したユーザ発言を最低1つは必ず残す
枠組みの章の Recent は末尾から手数で詰めていたが、実物はトークン予算で遡るうえに、頭を無条件で守る。枠組みの章の測定で「直近だけ」が終わらなかった理由の一つは、探索を始めた最初の手ごと落としていたからだ。頭を守るというのは、その穴をふさぐ手当てになっている。
窓の外へ書き出すほうは、2つのファイルになっている。
| ファイル | 何を書くか | 上限 |
|---|---|---|
~/.hermes/memories/MEMORY.md | 環境の事実、決まりごと、学んだこと | 2,200 字 |
~/.hermes/memories/USER.md | 使う人の像、話し方の好み、期待 | 1,375 字 |
枠組みの章では覚え書きに上限を置いていなかった。実物には字数の上限がある。窓の外に置いたからといって無限に書けるわけではなく、書ける量が決まっている資源になる。枠組みの章で「捨てた観測299字を24字で置き換えた」と書いたが、その24字が積み上がっていく先には天井がある。
そしてもう1つ、枠組みの章の実装では出てこなかった制約がある。この2つのファイルはセッション開始時に凍結されて、途中では変わらない。セッションの途中で書き換えても、ディスクには即座に落ちるが、システムプロンプトに現れるのは次のセッションからだ。理由はキャッシュにある。プロンプトの先頭が変わるとそこから先のキャッシュが効かなくなるので、動かさない。
枠組みの章は窓の大きさを文字数だけで数えていた。実物では先頭を動かさないという別の制約が効いていて、覚え書きの反映が1セッション遅れる。これは文字数だけ数えていても出てこない。
② 道具をいくつ渡すかに、実物は答えを出している
枠組みの章の②では、道具を渡して観測を返す形を作った。だが道具を何個渡すかは決めていない。題材が4つだったから4つだった、というだけだ。
Pi はここに答えを出している。モデルに渡すのは4つだけだ。
read write edit bashそして、入れていないものを明示している。サブエージェント、plan モード、MCP、権限の確認ダイアログ、バックグラウンド実行、作り付けのタスク管理。どれも「実装が追いついていない」のではなく、入れない判断として書かれている。足したければ TypeScript の拡張として自分で書く。
比べる相手として、Claude Code は道具を絞らない方向にある。--allowedTools Read,Edit のように呼ぶ側が絞る形で、既定では読み書き・シェル・検索・サブエージェント・git まで持つ。
Codex はもっと少ない。中心にあるのはシェルを走らせるのと、差分を当てるの2つになる。ファイルの書き換えを apply_patch という1つの形に寄せていて、道具を増やす代わりに渡す形を決めている。
| 道具の数 | 足りないとき | 絞るのは誰か | |
|---|---|---|---|
| Codex | 2 に近い | シェルで済ませる | 形のほうを決めている |
| Pi | 4 | TypeScript の拡張を書く | 作り手が先に決めている |
| Claude Code | 多い | 既にある | 呼ぶ側が --allowedTools で |
数の少ない2つが、別の方向で少ないのが読みどころになる。Pi は道具を絞って足りないものを拡張へ出した。Codex はシェル1本に寄せて、その上で編集だけ決まった形にした。どちらも「道具を増やさない」だが、増やさないぶんを引き受ける先が違う。
どちらが正しいという話ではなく、枠組みを自分で組みたいかどうかで分かれる。枠組みの章で作ったような、窓に何を残すかを自分で決める実験をするなら、素材に近いのは Pi のほうだ。逆に、今日仕事を終わらせたいなら道具が揃っているほうが速い。
③ やり直しの単位は、節ではなく窓で切られている
枠組みの章の⑤では、失敗したときに節1つぶん戻る形を作った。test が落ちたら edit へ戻る、と先に書いてあるので、search と read はやり直さない。手数は8から6に、モデルの呼び出しは9から2に減った。
Hermes は別の切り方をしている。delegate_task で子を立てて、子には真っ新な窓を渡す。
- 子は親の会話履歴も、それまでの道具呼び出しも、1つも知らない
- 子が知っているのは、親が
goalとcontextに書いたものだけ - 親に返るのは、子の最終要約だけ。途中経過は親の窓に入らない
枠組みの章の測定で言えば、これは InputChars に直接効く。親の窓は子の作業で汚れないので、親が渡す量は増えない。枠組みの章のループが後半になるほど1回が重くなったのは、それまでの記録をぜんぶ渡していたからだった。窓を分ければ、そこが切れる。
代わりに失うものが2つある。
子は自分で何も思い出せない。親が context に書き落としたことは、子にとって存在しない。枠組みの章の測定で「直近だけ残す」走りが終わらなかったのと、構造は同じだ。何が窓に入っているかだけがすべてで、外の事実は見えない。
そして親も、子の現物を見ていない。返るのは最終要約だけなので、複数の子に配ったときに「どれを採るか」を決める判断は、実装した側の自己申告に乗ることになる。自分でレビューさせない設計にしたはずが、統合のところで戻ってくる。配ったときに何が増えて何が増えないかは、配ると何が増えるかで測った。
上限も外から与えられている。
| 既定 | |
|---|---|
| 同時に走る子 | 3(設定可能、上限なし) |
| 入れ子の深さ | 1(平たい。孫を作るには上げる) |
| 子1つの反復 | 50 |
| 実時間の上限 | 無し(child_timeout_seconds で任意に付ける) |
枠組みの章の②で「上限を置かなければ止まらない」と測ったが、実物では反復の上限だけが既定で入っていて、実時間の上限は既定で入っていない。止まらなくなる形が2つあるうち、片方しか塞がれていない。
子に渡せない道具も決まっている。delegate_task 自身(孫を作らせないため)、clarify、memory、send_message、cronjob。それと、子は親が持っていない道具を持てない。親より強い子を作れないようにしてある。
④ 外の実行役を呼ぶ口は同梱されているが、選ぶ基準は書かれていない
ここまでは、Hermes が自分の中で仕事を回す形を見てきた。外の実行役に投げる口も、最初から入っている。skills/autonomous-ai-agents/ に5つあって、ドキュメントには「同梱(既定で導入済み)」と書かれている。
うち3つが、外のコーディング CLI を呼ぶものだ。並べてみると分かる。
claude-code "Delegate coding to Claude Code CLI (features, PRs)."
codex "Delegate coding to OpenAI Codex CLI (features, PRs)."
opencode "Delegate coding to OpenCode CLI (features, PR review)."書式まで揃っていて、優劣はどこにも書かれていない。3つとも互いを related_skills で指している。つまり「Claude Code を使え」という推奨ではなく、「どれでも呼べる」という並べ方になっている。
ここで、この1行の重さに気づいておきたい。スキルの本体は745行ある。それを常に窓へ置いたら、それだけで埋まる。だから窓に置いてあるのは上の1行だけで、要ると判断したときに本体を読み込む。③で見た「子には要約だけ返す」と同じ考え方が、道具の説明そのものにも効いている。
では何が推奨されているのか。呼び方だ。本体を読むと、モードの選び方がはっきり書いてある。
| モード | 位置づけ | 向いている仕事 |
|---|---|---|
claude -p(一往復) | ほとんどの仕事で優先 | 1つ直す、機能を足す、整える、CI |
| tmux で対話 | 多ターンが要るときだけ | 直す→見る→直す、人が途中で決める |
理由は前者が確認画面を一切踏まないことにある。対話モードは初回に信頼と権限で2つ画面が出るので、Enter と ↓ Enter を送る手順が要る。自動化には向かない。
章末には「Hermes エージェントのための規則」が10箇条あって、その4番がこうなっている。
一往復モードでは
--max-turnsを必ず設定すること。無限ループと暴走する費用を防ぐ。
枠組みの章の②で「上限を置かなければ止まらない」と測ったものが、そのまま外部の実行役に対する規則になっている。層を1つまたいでも、同じ性質が同じ形で出てくる。
書かれていないことが1つある。自前の子(delegate_task)に投げるのか、外の実行役に投げるのか、その基準だ。公式の委譲ガイドは「1回の道具呼び出しで済むなら直接やれ」「軽いファイル編集は自分でやれ」まで線を引いているのに、外部の CLI エージェントには一度も触れていない。
枠組みの章の5層で言うと、これはどの層の話でもない。「同じ1パスを、誰に実行させるか」という別の軸で、層の表には出てこない。実物を触るときは、この軸が増える。
⑤ 差し替えられるかは、技術だけでは決まらない
枠組みの章の5層は、説明のための区切りだった。実物では、その区切りのいくつかがAPI の境目になっている。境目になっていれば、片側だけ替えられる。
Claude Code は、推論の相手を環境変数で差し替える。
ANTHROPIC_BASE_URL どこに投げるか
ANTHROPIC_AUTH_TOKEN その相手の鍵実行役のコード、道具、権限の設定、CLAUDE.md、どれも触らない。触るのは推論の相手だけだ。Hermes も同じことを設定で持っていて、provider: custom と base_url を書けば任意の互換エンドポイントを向く。Pi も30以上のプロバイダから選べる。
ここで注意が1つある。ANTHROPIC_BASE_URL は起動時に一度だけ読まれる。走っている途中で環境変数を変えても何も起きない。入れ直しが要る。枠組みの章の言い方をすれば、これは実行全体を単位とする設定であって、1パスの設定ではない。
差し替えられるということは、層が本当に分かれているということだ。逆に言えば、分かれていないところは差し替えられない。Hermes の圧縮のしきい値や、Pi の道具の数は、その製品の中に埋まっている。替えたければ製品を替えるか、拡張を書くことになる。
枠組みの章で「どの層が壊れているか」を見分ける表を作ったが、実物を触るときはもう1つ問いが増える。その層は、この製品では差し替えられるのか。差し替えられない層で困っているなら、設定をいじっても直らない。
ところが、ここで話が終わらない。技術的に差し替えられることと、差し替えてよいことは別だからだ。
Anthropic はこう書いている。
OAuth 認証は Claude Free / Pro / Max / Team / Enterprise の各プランの購入者だけを対象としたもので、Claude Code および Anthropic 純正アプリケーションの通常の利用を支えるために設計されている。
Claude の能力を利用する製品やサービスを作る開発者は、Agent SDK を使う場合も含め、Claude Console または対応するクラウド提供者を通じた API キー認証を使うべきである。
同じ節に、第三者の開発者が Claude.ai のログインを提供したり、ユーザに代わって Free / Pro / Max の資格情報でリクエストを通したりすることは認めない、とも書かれている。
効き方が独特だ。使えなくなるのではなく、どの財布から出るかが変わる。
先に語をひとつ。追加利用(extra usage / usage credits)というのは、プランに含まれる枠を使い切ったあとも続けて使うための仕組みで、標準の API 料金で課金される。月額とは別の請求になる。Anthropic のサポート記事に「利用は標準の API 料金で課金される(Pro/Max プランの価格とは別)」と書かれている。
そのうえで、Hermes と Pi がそれぞれ独立に同じことを書いている。
| 書いてあること | |
|---|---|
| Pi | Anthropic のサブスク認証は Claude Pro/Max で有効。ただし第三者ハーネスからの利用は追加利用から引かれ、トークン単位で課金される。Claude のプラン上限に対しては数えられない |
| Hermes | Claude Max プランで追加のクレジットを買ってある場合にのみ動く。基本の枠は消費されず、追加ぶんだけが使われる |
言い方は違うが、指しているものは同じだ。サブスクの枠は、外のハーネスには効かない。
ただし、ここは食い違っている
上の2つは製品側の記述だが、Anthropic 側の現行の記述はこれと逆を言っている。
Claude Agent SDK の利用に関する下記の変更を一時停止します。当面、何も変わりません。Claude Agent SDK、
claude -p、および第三者アプリの利用は、引き続きサブスクリプションの利用上限から引かれます。
同じ記事に、変更に伴って配られる予定だった月次クレジットは「利用できない」とも書かれている。つまり別枠に移す変更が announced されたが、発効していない状態になる。
経緯を並べると、この線がどれだけ動いたかが見える。
| 時期 | 何が起きたか |
|---|---|
| 禁止 | 第三者エージェントでのサブスク利用を止めた |
| 再開 | 撤回。ただし別枠のクレジットへ移すと発表(対象に claude -p・GitHub Actions・第三者アプリ) |
| 停止 | 実施予定日に一時停止。以後そのまま |
だから、この節の結論は書いた時点のものとして読んでほしい。製品側の記述が古いのか、それとも特定の経路についてだけ言っているのかは、当たった資料からは判断できなかった。
確かめる方法はある。実行役なら /status でどの資格情報が使われているかが分かり、利用のダッシュボードでどの枠から引かれたかが分かる。規約と課金の話は、読むより自分の請求を見るほうが速い。
ここは読み違えやすいので、はっきり書いておく。使えなくなるのではない。動く。だが月額に含まれる枠は1トークンも減らず、通した利用はまるごと API 料金として別に請求される。枠を使い切ってから従量に切り替わるのではなく、最初から全部が従量になる。追加利用を有効にしていなければ引く先が無いので、そもそも通らない。Hermes が「追加クレジットを買ってある場合にのみ動く」と書いているのは、その意味だ。
| 実行役で直接使う | 外のハーネス経由で使う | |
|---|---|---|
| 動くか | 動く | 動く |
| 月額の枠 | 減る | 減らない |
| 請求 | 月額に含まれる | API 料金で別請求 |
| 前提 | 無し | 追加利用を有効にしてあること |
サブスクで使っている人の移行
いま Claude Code や Codex をサブスクで使っている人の移行は、3通りに分かれる。
実行役を残して、上に足す。Claude Code はそのまま自分の OAuth で認証し、Hermes は④で見た同梱スキルから claude -p を叩くだけにする。Hermes はトークンに触らない。呼んでいるのは端末のコマンドで、認証しているのは Claude Code 自身だ。だからサブスクの枠はそのまま効く。加えて、既存の CLAUDE.md・権限設定・フックも効いたままになる。差し替えていないのだから、当たり前ではある。
推論を差し替える。ハーネスの推論の相手を Anthropic に向けて、サブスクの認証を使う。上の表がそのまま効いて、枠の外で課金される。動く動かないではなく、値段の出どころが変わる。
鍵を買う。API キーを使う。Anthropic が開発者向けに指しているのはこの道だ。
3つを並べると、動かす層の数が違う。
| 移行の道 | 動かす層 | 認証しているのは | サブスクの枠 |
|---|---|---|---|
| 実行役を残して上に足す | 0(足すだけ) | 実行役自身 | 効く |
| 推論を差し替える | 1(いちばん下) | ハーネス | 効かない |
| 鍵を買う | 1(いちばん下) | ハーネス | 関係なくなる |
いちばん上が素直なのは、差し替えていないからだ。枠組みの章で層に分けた意味がここに出る。上に足すのと、下を替えるのは、別の操作になる。
値段の面でも同じことが効く。実行役を残せば認証しているのは実行役なので、月額の枠がそのまま使われる。推論を差し替えた瞬間に、その月額は使われなくなる。払い続けているのに、枠だけが余るという状態になる。
自動で回してよいかは、別に決まっている
「実行役を残して上に足す」には、条件が1つ付く。Anthropic の消費者向け利用規約に、こういう条項がある。
当社のサービスを Anthropic の API キー経由で利用する場合、または当社が別途明示的に許可する場合を除き、ボット、スクリプト、その他を問わず、自動的または非人間的な手段でサービスにアクセスすること。
禁止行為の一覧に入っている。文面だけ読むと、-p をスクリプトから回すのは引っかかりそうに見える。ここまで書いてきた形は、まさにそれだ。
効いているのは**「別途明示的に許可する場合」**のほうになる。同じ会社の文書に、こう書いてある。
- 法務のページ: 「Pro および Max プランの表示された利用上限は、Claude Code および Agent SDK の、通常の個人的な利用を前提としている」
- 認証のページ:
claude setup-tokenは「ブラウザでの対話的ログインができない CI パイプラインやスクリプト」のためのもので、「Pro、Max、Team、Enterprise のいずれかのプランを要求する」
CI とスクリプトのための機能を、サブスクを要求する形で自分で出している。禁止条項の例外に当たると読める。
つまり線は、-p と対話モードの間には引かれていない。通常の個人的な利用かどうかで引かれている。同じ法務ページの「第三者の開発者が…ユーザに代わって Free / Pro / Max の資格情報でリクエストを通すことは認めない」は、その反対側を指している。自分の仕事を自分の環境で回すのと、他人のために回すのは別になる。
そして、この線は動いてきた。2026年3月に「サブスクのアカウントで headless を使うと利用停止になりうるのに、ドキュメントが警告していない」という報告が出ていて、根拠として引かれているのが上の同じ条項だ。その報告は解決ではなく、反応が無いまま自動でクローズされている。いま読める文面がこうなっているというだけで、過去のある時点では別の運用だったことになる。
上に足しただけのつもりで、下が替わっていることがある
実行役が資格情報を複数持っていたら、どれを使うかは順番で決まっている。Claude Code はこの順で選ぶ。
1 クラウド提供者の資格情報(Bedrock 等の環境変数が立っているとき)
2 ANTHROPIC_AUTH_TOKEN
3 ANTHROPIC_API_KEY
4 apiKeyHelper が返す鍵
5 CLAUDE_CODE_OAUTH_TOKEN
6 /login で入れたサブスクの資格情報 ← いちばん下サブスクはいちばん下だ。上の5つのどれかが環境にあれば、そちらが勝つ。そして一往復モードについては「非対話モード(-p)では、鍵があるときは常にそれが使われる」と明記されている。対話モードなら一度は承認を訊かれるが、-p では訊かれない。
これが④で見た呼び方と噛み合う。Hermes が叩くのは claude -p で、そのプロセスは Hermes の環境変数を引き継ぐ。もし推論を差し替える設定(ANTHROPIC_BASE_URL と ANTHROPIC_AUTH_TOKEN)がシェルに残っていたら、2番が効いてサブスクは使われない。上に足しただけのつもりで、下も替わっている。しかも -p は何も訊かないので、気づく口が無い。
確かめる方法はある。/status に、いまどの資格情報で通っているかが出る。鍵が効いていればその行が増える。外すなら unset ANTHROPIC_API_KEY。
ブラウザを開けない環境には claude setup-token があって、1年もつ OAuth トークンを作る。これはサブスクのプランを要求するので、CI でもサブスクのまま通せる。ただし --bare(フック・スキル・MCP・CLAUDE.md の読み込みを飛ばして起動を速くする旗)はこのトークンを読まない。使うなら鍵か apiKeyHelper が要る。軽くするための旗が、財布も替えるという形になっている。
OpenAI 側は方向が違う。まず Codex は純正なので、ChatGPT のプラン(Plus / Pro / Business / Edu / Enterprise)でそのまま入る。上の表で言えば「実行役で直接使う」の行に当たり、枠は普通に効く。ここは Anthropic 側と同じ形だ。
違うのは第三者ハーネスの扱いになる。Pi は /login で ChatGPT Plus/Pro を選べるし、Hermes は端末からの認証か、Codex CLI が置いた資格情報の取り込みで通る。ただし Pi の説明にある「公式に是認されている」の根拠として挙がっているページを読むと、書いてあるのは「開発者は好きな道具で書けばよく、このプログラムはその作業を支援する」という趣旨で、サブスクの資格情報を第三者ハーネスで使うことには触れていない。名前の並びに Pi や OpenCode が挙がっているのは事実だが、資格情報の話とは別の段落になる。
まとめると、層の境目は技術だけで引かれていない。互換の皮があるかどうかとは別に、契約がどこを越えてよいかを決めている。差し替えを考えるときは、規格が合うかの前に、どの財布から出るかを見ることになる。
なお、この手の規約と課金の扱いは動く。ここに書いたのは読んだ時点のもので、実際に切り替えるなら自分で確認する話になる。
設計の観点
- 畳むのは満杯の手前で: 超えてから選ぶ余裕は無い。Hermes は 50% で動き、85% を安全網にしている
- 要約は更新する、作り直さない: 要約の要約を重ねると落ちていく。前回の要約を渡して直させる
- 頭は無条件で守る: 目的を書いた最初の往復が落ちると、何をしていたかごと消える
- 窓の外にも上限がある: 書き出せば無限、ではない。何を書かないかも決まりに入る
- 先頭を動かさない: 覚え書きの反映が1セッション遅れても、キャッシュを守るほうを取る設計がある
- 道具の数を決めるのは設計判断: 絞れば足りないものが外に出る。揃えれば呼ぶ側が絞ることになる
- 窓ごと分けるやり直しがある: 節に戻るのと、子に真っ新な窓を渡すのは別の解き方だ
- 子に渡し忘れたものは存在しない: 窓を分けると、渡す内容を書くのが親の仕事になる
- 道具の説明も窓を食う: 常に置くのは1行の説明だけにして、本体は要ると判断してから読む
- どの実行役に投げるかは、層とは別の軸: 自前の子か外の CLI かは、5層のどこにも出てこない
- 差し替えられるかを先に見る: 埋め込まれている層は、設定では直らない
- 差し替えてよいかも先に見る: 規格が合っていることと、その資格情報で通してよいことは別だ
- 移行するなら、動かす層を最小にする: 実行役を残して上に足せば、認証も既存の設定もそのまま効く
- 既定でいちばん弱いものが何かを見る: 資格情報の優先順位でサブスクが最下段なら、環境に何か残っているだけで負ける
- 訊いてこない経路ほど確かめる: 対話なら承認を求めるものが、一往復モードでは黙って通ることがある
対照と実例
| 本書で作ったもの | Hermes | Claude Code | Codex | Pi | |
|---|---|---|---|---|---|
| 畳む | Fold(毎回作り直す) | 50% / 85% の2段・要約を更新 | /compact | 確認していない | 自動圧縮 + /compact |
| 窓の外 | note(上限なし) | MEMORY.md / USER.md(字数上限つき) | CLAUDE.md | AGENTS.md | — |
| 道具 | 題材ぶんだけ | 道具箱を子に継承 | 多い・--allowedTools で絞る | シェルと差分当て | 4つだけ |
| やり直し | 節に戻る | 子に真っ新な窓 | サブエージェント | 確認していない | 無し(拡張で書く) |
| 上限 | 呼び出し回数 | 反復 50・並列 3 | --max-turns / --max-budget-usd | 確認していない | 確認していない |
| 推論の差し替え | — | provider: custom | ANTHROPIC_BASE_URL | 確認していない | 30以上のプロバイダ |
| 外の実行役を呼ぶ | — | 同梱スキル3つ・優劣なし | 自前でサブエージェント | — | 無し(拡張で書く) |
| サブスクの枠 | — | 製品側と Anthropic 側で記述が食い違う | 自分で認証するので効く | 自分で認証するので効く | 同上 |
裏どり:
- 圧縮のしきい値: 圧縮器は「プロンプトのトークンが
threshold × context_length以上」で動き、既定は 0.50。ゲートウェイ側の安全網は「モデルのコンテキスト長の 85%」。設定はthreshold/target_ratio(既定 0.20)/protect_last_n(既定 20)/min_tail_user_messages(既定 1) - 要約を更新する: 「2回目以降の圧縮では、前回の要約を LLM に渡し、一から要約し直すのではなく更新するよう指示する」と明記されている
- 記憶ファイルの凍結: 「セッション開始時に凍結された断片としてシステムプロンプトへ差し込まれ、セッション中は変わらない」。理由は前置きキャッシュの保持
- 委譲: 「子は完全に真っ新な会話から始まる。親の会話履歴、それまでの道具呼び出し、委譲前に話したことを一切知らない」「親のコンテキストに入るのは最終要約だけ」。
delegate_taskはモデルから見えるtoolsets引数を取らず、子は親の有効な道具箱を継承する - Pi の入れていないもの: サブエージェント、plan モード、MCP、権限ダイアログ、バックグラウンド実行、作り付けのタスク管理を「意図的に除いている」と README が明示している。追加は拡張・スキル・テンプレート・テーマを束ねた Pi パッケージで配る
- 環境変数を読む回数: プロセス起動時に一度だけ読む、というのは env で設定を渡す作りの一般的な性質で、製品として保証されているわけではない。ここは製品の記述ではなく仕組みの話として書いている
- Codex: OpenAI の「ローカルで動くコーディングエージェント」。導入は
npm install -g @openai/codexほか。ChatGPT のアカウント(Plus / Pro / Business / Edu / Enterprise)でサインインするか、API キーを使う。非対話はcodex execで、進捗を標準エラーへ流し、最後の返答だけ標準出力に出す。指示の置き場はAGENTS.md。畳み方・やり直し・推論の差し替えは調べていないので、対照の表では空けてある - Pi のパッケージ名:
@mariozechner/pi-coding-agentは「今後は@earendil-works/pi-coding-agentを使うこと」と非推奨になっている。npm レジストリで直接確認したところ、旧 0.73.1 で停止、新 0.83.0。実行ファイル名はどちらもpi - 同梱と、推奨の在りか: ドキュメントには
Source: Bundled (installed by default)と書かれている。スキル本体は745行あり、### Mode 1: Print Mode (-p) — Non-Interactive (PREFERRED for most tasks)と見出しに書いてある。規則10箇条の1番が「単発の仕事では一往復モードを優先」、4番が「一往復モードでは--max-turnsを必ず設定すること」。推奨されているのはモードの選び方であって、Claude Code を選べという推奨ではない - 横並びであること:
claude-code/codex/opencodeの3つは description の書式まで揃っていて、互いをrelated_skillsに挙げている。同じ場所にある残り2つはcomputer-useとhermes-agent。Pi 向けの口は無いが、Pi にもpi -pがあるので呼び方は同じ形になる - 選ぶ基準が無い: 公式の委譲ガイドは
delegate_taskの使いどころ(「1回の道具呼び出しで済むなら直接」「軽いファイル編集は自分で」)まで書いているのに、外部の CLI エージェントには一度も触れていない。自前の子と外の実行役をどう使い分けるかは、文書化されていない - 認証の扱い(一次資料): Claude Code の法務ページに「OAuth 認証は…Claude Code および他の純正 Anthropic アプリケーションの通常の利用を支えるためのもの」「開発者は…API キー認証を使うべき」「第三者の開発者が Claude.ai のログインを提供したり、Free / Pro / Max プランの資格情報でユーザに代わってリクエストを通すことは認めない」と書かれている
- 枠が効かないこと: Pi の provider 文書に「第三者ハーネスからの利用は extra usage から引かれ、トークン単位で課金される。Claude のプラン上限に対しては数えられない」。Hermes の provider 文書にも、Claude Max で追加クレジットを買ってある場合にのみ動き、基本の枠は消費されないと書かれている。別々の製品が独立に同じことを書いている
- 追加利用そのもの: Anthropic のサポート記事に「利用は標準の API 料金で課金される(Pro/Max プランの価格とは別)」とある。プランの枠を使い切ったあとも続けるための仕組みで、月額とは別の請求になる
- 食い違いが1つ: Hermes は Max 限定と書いているが、Anthropic のサポート記事は Pro でも追加利用を有効にできると読める。Hermes 側の制限なのか記述が古いのかは、当たった資料からは判断できなかった
- 自動アクセスの禁止条項: 消費者向け利用規約の禁止行為の一覧(第3節7項、発効 2025-10-08)に「Anthropic の API キー経由で利用する場合、または当社が別途明示的に許可する場合を除き、ボット、スクリプト、その他を問わず、自動的または非人間的な手段でサービスにアクセスすること」とある。例外の書き方が広いぶん、どこまでが許可なのかは product 側の文書で読むことになる
- 許可の側: 法務のページの「Pro および Max プランの表示された利用上限は、Claude Code および Agent SDK の、通常の個人的な利用を前提としている」と、
claude setup-tokenが CI・スクリプト向けと明記されたうえでサブスクのプランを要求すること。この2つが、-pを自分の環境で回すことを許可の側に置いている - 過去は違った: 2026-03-19 に「headless のドキュメントが、サブスクのアカウントでは使うべきでないと警告していない」という報告が立ち、同じ規約の条項が引かれている。04-16 に反応が無いまま自動でクローズされた。この間に運用がどう変わったかは二次資料でしか確認できていないので、この章では経過の日付を書いていない
- 認証の優先順位(一次資料): 6段の順番は認証のドキュメントに列挙されている。サブスクの
/loginは最下段。ANTHROPIC_API_KEYの項に「非対話モード(-p)では、鍵があるときは常にそれが使われる」、別の段落に「有効なサブスクがあっても環境にANTHROPIC_API_KEYがあれば、承認後は鍵が優先される」と書かれている。unsetしてから/statusで確かめられる - CI 向けのトークン:
claude setup-tokenが作る1年もちの OAuth トークンは「Pro、Max、Team、Enterprise のいずれかのプランを要求する」。ただし「bare モードはCLAUDE_CODE_OAUTH_TOKENを読まない。--bareを渡すならANTHROPIC_API_KEYかapiKeyHelperで認証すること」とも書かれている - 過去に不具合があった: 「
claude -pを OAuth(鍵なし)で使うと Max のサブスクではなく API 利用として課金される」という報告が 2026-04-04 に出て、04-08 に「修正済み」としてクローズされている。関連として挙がっているものに「Max 契約者が-pを勧められて2日で $1,800 超」という報告もある。いまの版で再現するかは確かめていない。請求の出どころは自分の目で見るのが早い - OpenAI 側: Pi は ChatGPT Plus/Pro のサブスクで
/loginでき、Hermes は端末での認証か Codex CLI の資格情報の取り込みに対応している。ただし Pi が「公式に是認」の根拠に挙げているページを読むと、道具の選択の自由には触れているものの、サブスクの資格情報を第三者ハーネスで使う件には触れていない - 時期と数字: 制限がいつ始まり、いつ課金の扱いが変わったかを日付で書いている記事はあるが、一次資料で確認できた日付は1つだけだった。一時停止の告知が「6月15日の更新」として置かれている。それ以前の経過の日付は二次資料しか無いので、この章では書いていない
- 一時停止の一次資料: Anthropic のサポート記事の冒頭に「Claude Agent SDK の利用に関する下記の変更を一時停止します。当面、何も変わりません。Claude Agent SDK、
claude -p、および第三者アプリの利用は、引き続きサブスクリプションの利用上限から引かれます」とあり、月次クレジットは「利用できない」と書かれている。別枠へ移す変更は発表されたが発効していない - 食い違いの扱い: 上の一次資料と、Pi / Hermes の provider 文書が逆のことを言っている。製品側が古いのか、経路によって違うのかは判断できなかったので、両方を並べたうえで自分の請求を見るように書いた
簡略化したこと
- どれも動かしていない: しきい値も上限も、ドキュメントと実装の記述から読み取ったもので、手元で測っていない。枠組みの章の数字は測ったもの、この章の数字は読んだもの、という違いがある
- 版が動く: Hermes は2026年2月公開で、既定値は版によって変わる。ここに書いた数値は執筆時点のもの
- 規約と課金はもっと動く: ⑤で引いたものは読んだ時点の記述で、この本が扱う技術の話と違って、書き換えられれば翌日から別のことになる。実際この線は 2026年の前半だけで、禁止・再開・別枠への移行発表・その一時停止と何度も動いた。契約の助言ではないので、切り替えるなら自分で当たること
- 「通常の個人的な利用」の線を引いていない: どこからが通常でなくなるのかは、当たった文書のどこにも数字で書かれていない。だからこの章も引けていない
- 移行を試していない: 3通りの道を並べたが、実際に切り替えて課金がどう出るかは確かめていない
- Claude Code 側を浅くしている: サブエージェント、フック、MCP、権限の書式は枠組みの章の層に直接は当たらないので触れていない
- 費用を比べていない: 同じ仕事を3通りで走らせて値段を比べる、はやっていない
- Pi の拡張を書いていない: 「足りないものは拡張で」の実際の書き味は確かめていない
参考資料
- Hermes Agent — 本体
- Context Compression and Caching — 圧縮のしきい値と要約の型
- Persistent Memory — 窓の外に置くファイル
- Subagent Delegation — 委譲の仕様と上限
- AI Providers — 推論の差し替えと、サブスクで通す場合の条件
- Claude Code の同梱スキル — 呼び方の推奨と規則10箇条
- Delegation & Parallel Work — 自前の子の使いどころ(外部 CLI には触れていない)
- earendil-works/pi — Pi 本体と、入れていないものの一覧
- Pi の provider 文書 — サブスクで通した場合にどこから引かれるか
- Legal and compliance — OAuth と API キーの使い分けについての一次資料
- Use the Claude Agent SDK with your Claude plan — 別枠への移行が一時停止されていること
- Using Claude Code with your Pro or Max plan — 追加利用が標準の API 料金で課金されること
- Authentication — 資格情報の優先順位と、CI 向けのトークン
- Consumer Terms of Service — 自動アクセスの禁止条項と、その例外
- 枠組みの章: エージェントの枠組み