人の確認は入りません(設計による)
CommandAGI は、無人で動く機械のために作られています。権限付与を持つエージェントは、ユニットをアームし、プログラムを実行し、コマンドをリアルタイムで送ります。ワークベンチ、API、MCP のどれを通しても、操作ごとの確認は必要ありません。安全を守るのは人の監視ではありません。付与、ドライバーの上限、そして記録です。
プリンシパル
操作するものはすべて プリンシパル です。形式は agent:<name> または person:<name> です。プリンシパルは認証情報で自分が誰かを証明します。名前を名乗るだけでは認められません。自分が誰かを 言う だけのリクエストは拒否されます。
- ホストの認証情報 —
cagp_…。commandagi grant token --principal agent:<name>で一度発行されます(または、権限付与を追加するときに発行されます)。ホストが保存するのは SHA-256 だけです。grant tokenで更新し、grant forgetで削除します。 - アカウントの認証情報 —
cagc.<payload>.<signature>。クラウドで動くエージェント用に、アカウントの鍵(Ed25519)で署名されます。プリンシパル、アカウント、有効期限、必要に応じて一つのホストを示します。この認証情報は、そのアカウントが行った付与に対してだけ有効です。grant revoke-credentialで取り消します。
常設の権限付与
常設の権限付与 は、アカウントが一つのプリンシパルに与える権限です。人の明示的な操作で行われます。ツールもエージェントのルートも、付与を作ったり広げたりはしません。エージェントの API キーは、権限を変えるすべてのルートで拒否されます。
commandagi grant add --principal agent:night-shift \
--world shop --unit mill-1 --channel gcode \
--verb open --verb arm --verb run --verb send \
--for 8h --note "night shift"
commandagi grant list
commandagi grant revoke g-3f9a1c20b7de付与は、ワールドと、必要に応じてユニット、チャンネル、動詞を指定します。省略すると、すべてが対象になります。期限を付けられます(--for 8h、--expires <ISO 時刻>)。付与は ~/.commandagi/grants.json に保存され、操作のたびに読み込まれます。ワークベンチの 設定 → 付与 からも作れます。付与ファイルが壊れている場合、どの付与も有効になりません。
{ "grants": [ { "id": "g-3f9a1c20b7de", "principal": "agent:night-shift",
"grantedBy": "acct:user:u_8f2k", "world": "shop", "units": ["mill-1"],
"channels": ["gcode"], "verbs": ["open", "arm", "run", "send"],
"expires": "2026-10-01T06:00:00Z", "note": "night shift" } ] }同じコマンドで、ほかに三種類の付与を作れます。--file PREFIX…(パスの下にファイルを書く)、--outreach APP… --per-day N(接続されたアプリでメッセージを送る)、--market VENUE… --symbol S --max-qty N --max-notional N --per-day N(注文を出す)です。
付与は 物理 ワールドに適用されます。シミュレーションのワールドには付与が要りません。
動詞、アームと安全化
付与で与えられる動詞は四つです。チャンネルを open する、ユニットを arm する、プログラムを run する、コマンドを send する、です。
- ハードウェアを動かすドライバーは アームなし で開きます。ユニットに付与を持つプリンシパルなら、だれでもアームできます。五分間アイドルのままのアーム済みセッションは、自動でアームを解除します。
- 入力だけを受け取るドライバー(シェル、Python カーネル、ジョブの引き渡し)は、アームが要りません。付与は入力のたびに確認されます。
- 安全化は常に許可されます。
stop、disarm、close、そして送り保持、一時停止、非常停止、トルクオフなどの安全化コマンドは、そのユニットに期限内の付与を持つ全員、セッションを開いた人、アカウントの本人に許可されます。注文の取り消しも安全化です。
すべての操作が従うルール
- 送信の前に記録されます。 ドライバーを呼ぶ前に、プリンシパルと操作の記録が実行のストリームに追記され、書き出されます。読み取り専用のプロジェクトは、記録なしに操作することを拒否します。
- 確認応答は状態ではありません。 返信や
okは、指令した状態に達したことを意味しません。機械が状態を報告するまで、コマンドは保留のままです。 - 不明は不明のまま残します。 通信が切れた場合は
state: unknownと記録されます。終了の記録がないまま終わったストリームは 中断: 状態は不明 と表示されます。 - 黙って再試行しません。 物理コマンドをシステムが再試行することはありません。エージェントは再試行を決められます。その決定は、それ自体が記録されるコマンドになります。
- 上限はドライバーの仕事です。 宣言された上限、間隔、許可された動詞は、人ではなくドライバーが守ります。入力ストリームは間隔を置いて送られます。一度に一つの操作を、少なくとも 30 ミリ秒の間隔で行います。
- シミュレーションと物理は混ざりません。 実行は一つのワールドに属し、その記録のソースはワールドの種類と一致しなければなりません。
会話とそのエージェント
物理ワールドで会話を始めると、その会話のエージェント(既定では threads.agent、agent:mcp)に、そのワールドのユニットに対するすべての動詞が、最長 24 時間付与されます。会話を閉じると、その付与は取り消されます。この動作は設定 "threads.agentControl": false で止められます。
次へ
MCP を通じてエージェントをこれらすべてに接続します。SDK と MCP を読んでください。