hachiflow.com

この記事は、当社の以前の製品 Buzz についてのものです。現在、当社は Waggle を作っています。

エージェント

マシンは使い捨てでいい

Buzz のエージェントは、アイデンティティとメモリをすでにどのマシンへも持ち運ぶ。どちらもエージェントの鍵に従う。最後に残った錨がクレデンシャルだ。サブスクリプション、API キー、MCP の権限、すべてが 1 台のマシンの環境に貼り付いている。NIP-AK、エージェントキーリングが、スツールの第三の脚になる。

二本の脚はすでに出荷済み

Buzz のエージェントは Nostr の鍵ペアであり、それで何が得られるかは「エージェントは鍵であって、コンピュータではない」に書いた。アイデンティティはすでに持ち運べる。私がエージェントの公開鍵に対して署名した承認は、エージェントが発行するすべてのイベントに同乗し、リレーは誰かの目に触れる前に、エージェントの署名、私の署名、私のメンバーシップを検証する。この検証はどのマシンからでも通る。プロセスがどこで起動したかを、この仕組みは知らないし、気にもしない。

メモリもすでに持ち運べる。エージェントのメモリはリレー上の暗号化されたイベントで、復号鍵はエージェントの秘密鍵と私の公開鍵から導出される。だから鍵がどこにあっても、コアメモリは新しいセッションのたびに取得され、注入される。鍵に従うものは、マシンが替わっても生き残る。スツールの二本の脚は今日すでに出荷されている。三本目は、まだ私のラップトップにボルトで留められたままだ。

三本目の脚はマシンに貼り付いている

三本目の脚はクレデンシャルだ。Claude のサブスクリプショントークン、つまりエージェントが API の従量課金ではなく私のプランに課金されるように claude setup-token が発行するトークンは、1 台のマシンの環境の中にある。ツールの API キーも同じだ。MCP サーバーの権限も同じだ。アイデンティティは持ち運べる。メモリも持ち運べる。それなのに、エージェントが実際に仕事をするために必要なものはすべて、最初に設定した 1 台に留め付けられている。

ここで、私たち自身のデプロイについて白状しておく。あるツールの API キーが、手書きのラッパースクリプトを通じてエージェントの 1 体に渡っていた。製品の目の届かないところで、こっそり持ち込まれたものだ。その権限を一覧できる画面はどこにもなかった。監査もできなかった。ローテーションもできなかった。そして動いていた。それが最悪の点だ。黙って動く回避策は、いつのまにかインフラになる。一覧できない権限は、取り消すこともできない。

ローテーションの段階で、厄介ごとは障害に変わる。ラップトップで /login をやり直すと、あらゆるエージェントのあらゆるリモートのコピーが持っているトークンが、黙って失効する。誰が取り残されたのかを教えてくれるものは何もない。アイデンティティの脚は自然に回復する。メモリの脚も自然に回復する。クレデンシャルの脚はただ壊れる。1 台ずつ。

あなたのエージェント、どこでも アイデンティティ NIP-OA 出荷済み メモリ NIP-AE 出荷済み キーリング NIP-AK ドラフト mac mini · フリート · kubernetes · fountain
スツール。アイデンティティとメモリはすでに鍵に従う。キーリングが第三の脚だ。三本すべてが支えれば、その下の地面は何でもよくなる。

キーリング: ローテーションは再発行だ

今日ドラフトを書いた NIP-AK が三本目の脚になる。エージェントのキーリングを、オーナーが作成する暗号化イベントとしてリレーに置く仕組みだ。各権限はそれぞれ固有のアドレスに置かれる。アドレスは key/claude-sub や key/mcp/blotato のようなスラッグで、HMAC でブラインド化されるので、リレーは保存している内容から何も知ることができない。権限には型がある。env、oauth、mcp、file だ。そして MCP の権限の一覧は参考情報ではない。それこそが、エージェントのツールの許可リストである。

ローテーションは再発行だ。同じアドレスに新しいヘッドを発行すれば、すべての利用側がそこへ収束する。オーナー側のウォッチャーがローカルの /login に気づき、数秒以内に再発行する。私の側で儀式めいた手順は何もいらない。利用側は起動時にヘッドを取得し、プッシュを受けるためにライブのサブスクリプションを張り続け、認証に失敗したら再試行の前にヘッドを問い合わせ直す。だから取り残された実行環境は自ら回復する。ローテーション 5 回分を眠って過ごしたエージェントも、起きればヘッドはひとつで、追いつくためのプロトコルはない。さらに利用側は、最後に受け入れたヘッドより古いヘッドを拒否するので、古い権限をリプレイされても誰も巻き戻らない。取り消しとは、トゥームストーンへのローテーションである。

このモデルを支えるルールはひとつ。エージェントはキーリングのイベントを作成できない。キーリングは私が書き、エージェントが読むものだ。乗っ取られたエージェントでも、自分に新しい鍵を与えることも、許可リストを広げることも、他人のクレデンシャルを手に入れることもできない。できるのは、私が与えたものを、私がローテーションするまで使うことだけだ。そしてローテーションは一度の発行で済む。

あなたのラップトップ /login ウォッチャー 新しいトークンを検知 封印されたヘッド あなたのリレー ひとつのアドレス · 最新が勝つ プッシュ mac mini kubernetes ポッド fountain サンドボックス 認証失敗 · ヘッドを再取得
ローテーションは再発行だ。ウォッチャーがローカルの /login を見て、同じアドレスに新しい封印済みヘッドを発行する。すべての実行環境はプッシュで収束し、失効したトークンを抱えた実行環境は、再試行の前にヘッドを再取得して自ら回復する。

パネルに表示されるもの

この仕様は UX のルールを組み込んでいて、そのルールこそが肝心だ。クレデンシャルはキーリングを通じてしかエージェントに届かず、キーリングは目に見える。エージェントごとにパネルがあり、すべての権限、その出どころ、最後にローテーションした時期、各実行環境のコピーがどれだけ新しいかが表示される。同期できるソースは、エージェントごとのチェックボックスになっている。チェックを入れればサブスクリプションがそのエージェントに付いていき、外せば次のローテーションでそのエージェントは置いていかれる。

このパネルを、私たちのデプロイにあったラッパースクリプトと並べてみてほしい。こっそり持ち込まれた鍵には、どこにも行がなかった。そうした回避策は、住む場所がなくなることで、種類ごと消える。パネルに表示されているものが、エージェントの持っているものだ。パネルに載っていなければ、エージェントはそれを持っていない。

これが勝負のすべてである理由

エージェントは 2 本の鍵でできている。アイデンティティの鍵と推論の鍵で、どちらも持ち運べる。アイデンティティの鍵は仕事に署名する。推論の鍵は思考の代金を払う。メモリ、ツール、メンバーシップ、それ以外のものはすべて、このどちらかにぶら下がっている。

推論の鍵は、経済性そのものでもある。月額 $200 の Claude サブスクリプションは、同じ金額を API 料金で使う場合より一桁多い推論をまかなえる。そして一連のエージェント系スタートアップを倒した資金の燃焼は、サブスクリプション型の価格の裏で API の推論を再販していたことから生じていた。その燃焼の上に築かれたシステムは、オーナーのサブスクリプションを使うエージェントには太刀打ちできない。レート制限の枠は厄介ごとではない。人ひとりあたりの自然な予算なのだ。

三本の脚がそろえば、マシンは問題でなくなる。エージェントはどこで作ってもいい。机の上の mac mini でも、フリートのコンテナでも、Kubernetes のポッドでも、Fountain のサンドボックスでも。アイデンティティは鍵に従う。メモリは鍵に従う。そしていま、サブスクリプションとツールも鍵に従う。マシンは使い捨てだ。そのように扱えばいい。

← フィールドノート一覧