アーキテクチャ / Action Gateway

Action Gateway

エージェントは、許可証なしに1円も動かせない。capability-based security の正攻法。

直接書込権を与えない

軍師OSのエージェントは、副作用(支出・投稿・本番書込)を直接実行できません。実行したい行動は、まずゲートウェイに「チケット」を要求します。承認境界を満たした時だけ、署名付きの使い捨てチケットが発行されます。

Execution Ticket

Ticket = ( action, args_hash, agent_id, risk, nonce, expires_at, signature )

signature = HMAC-SHA256( secret, canonical(body) )

発行(request)

行動の引数からリスクを分類し、階層が要求する承認者が揃っていなければ GateDeniedチケットは発行されません(=実行不能)。

実行(execute)— すべて fail-closed に検証

  • 署名:HMAC を compare_digest で定数時間比較。改竄不可
  • 期限expires_at 超過なら拒否
  • 使い捨てnonce は一度きり。再利用は replayed で拒否
  • 引数束縛:実行時の引数ハッシュがチケットの args_hash と一致しなければ拒否(途中ですり替え不能)
# gateway.py — execute の検証(抜粋) if not hmac.compare_digest(ticket.signature, self._sign(ticket.body())): reject("bad_signature") if time.time() > ticket.expires_at: reject("expired") if ticket.nonce in self._used: reject("replayed") if ticket.args_hash != _args_hash(args): reject("args_mismatch") self._used.add(ticket.nonce) # single-use result = action_fn(**args)

なぜ効くか

これは capability-based security の定石で、エージェントが暴走しても「チケットが無ければ何も起きない」。¥34万のAPI暴走、想定外のクラウド課金、SNS連投によるアカウント凍結——こうした「勝手に実行して事故る」クラスを、しきい値超ならチケット非発行=実行不能にして構造的に止めます。

"No ticket, no side effect."