Kāhea について
Kāheaは、コーディングエージェント向けのローカル優先API呼び出しカーネルです。API記述や記録したリクエストから封印済みプランを作成し、厳密な権限付与後に実行します。有限のWebSocketセッションにも対応し、応答を参照可能な証拠として保存します。
主な機能
- 01OpenAPIなどのAPIソースを検査
- 02整合性を封印した呼び出しプランを作成
- 03厳密な権限付与後にのみ実行
- 04有限のWebSocketセッションに対応
- 05応答を型付き証拠として保存
- 06複数のリクエスト記録形式をインポート
活用シーン
- 01API呼び出し前にリクエストと権限を確認
- 02OpenAPIから操作を計画して実行
- 03ポリシーに沿って順序付きWebSocketを実行
- 04HAR、cURL、Postmanのリクエストからプランを作成
MCP 対応
Kāheaはローカルのstdio MCPサーバーを提供し、同じ4つのツールと、検査・計画・権限付与・実行・証拠の安全フローを公開します。Claude Code、OpenAI Codexプラグイン、その他のMCP対応クライアントから接続できます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
Kāhea
ウェブサイト · ドキュメント · リリース · エージェントプラグイン · MCP メタデータ
Kāhea は、コーディングエージェント向けのローカルファーストで決定論的な API 呼び出しカーネルです。
意図は確率的でもかまいません。呼び出しは正確でなければなりません。
OpenAPI の記述、リクエストのキャプチャ、Arazzo ワークフロー、有限 WebSocket セッションを、完全性が保証されたプランに変換します。呼び出しは別個の操作であり、正確な機能許可によって保護されています。レスポンスと受信フレームは、型付きの観測結果およびコンテンツアドレス指定可能な証拠になります。
Kāhea をインストールする
ホストに合った方法を選択してください。Claude Code、OpenAI Codex、直接接続する MCP クライアントは、いずれも同じ 4 つのローカル MCP ツールを使用し、inspect → plan → grant → invoke → evidence という同一の安全性契約に従います。
1. ネイティブバイナリをインストールする
お使いの OS とアーキテクチャに対応するアーカイブを GitHub Releasesからダウンロードしてください。各アーカイブには、SHA-256 チェックサム、CycloneDX SBOM、GitHub ビルド来歴が付属しています。インストール前にチェックサムを検証し、次のコマンドで来歴を検証してください。
gh attestation verify kahea-ARCHIVE --repo copyleftdev/kahea
Kāhea はインストーラーを実行せず、シェル設定も変更しません。アーカイブを展開し、kahea バイナリを PATH 上の任意の場所に配置してください。
タグ付きアーカイブは、GitHub がホストする Linux、macOS、Windows のランナー上で、各ランナーのアーキテクチャ向けにビルドおよびテストされています。WebSocket のサポート範囲とリリースゲートの正確な説明については、有限 WebSocket ガイドを参照してください。
2a. Claude Code
このリポジトリをマーケットプレイスとして追加し、プラグインをインストールしてください。
claude plugin marketplace add copyleftdev/kahea
claude plugin install kahea@kahea
2b. OpenAI Codex
同じリポジトリのマーケットプレイスと正式なプラグインパッケージを追加してください。
codex plugin marketplace add copyleftdev/kahea
codex plugin add kahea@kahea
どちらのプラグインも、検証済みの kahea バイナリが PATH 上にある必要があります。正式なエージェント利用スキルを追加し、実行時にコードや認証情報をダウンロードすることなく、ローカルの stdio MCP サーバーを起動します。共通のホストパッケージは plugins/kahea にあり、ホスト固有の安全性ワークフローは個別に管理していません。
2c. 任意の MCP クライアント
Kāhea を stdio 経由で起動するようにクライアントを設定してください。
command: kahea
args: mcp serve --stdio
タグ付きリリースでは、自己完結型でチェックサム付きの MCPB バンドルも公開され、公式 MCP Registryに io.github.copyleftdev/kahea が登録されます。
ソースからビルドする
ソースからビルドするには、Rust 1.95 以降をインストールしてください。
cargo build --release -p kahea
ビルドと検証
リポジトリでは、リリース用ツールチェーンを rust-toolchain.toml で固定しています。
scripts/gates.sh
# Requires cargo-mutants; run locally, not in CI.
scripts/mutation-gate.sh
リリースゲートでは、シードを指定したループバック WebSocket オラクルも起動し、そのオラクルが生成した有限セッションをパブリック CLI で計画して、計画に指定された許可だけを使って呼び出し、クライアント側の観測結果と、オラクル側の再現可能なシード/ケースの観測結果の両方を検証します。このライフサイクルを再実行するには scripts/websocket-oracle-smoke.sh を使用してください。個別の障害を選択するには、kahea-test-server --protocol websocket --websocket-fault FAULT --seed SEED を使用します。
ミューテーションゲートはリソースを制限しているため、ワークステーションに過剰な負荷がかかることはありません。4 つのジョブを実行し、GNU ジョブサーバーで全ジョブのコンパイラー並列数に上限を設け、ビルド用コピーを tmpfs の TMPDIR ではなくディスク上のパスに置きます。また、ユーザーセッションバスを利用できる場合は、CPU とメモリーを制限した一時的な systemd スコープ内で実行します。KAHEA_MUTANT_JOBS、KAHEA_MUTANT_TASKS、KAHEA_MUTANT_CPU_QUOTA、KAHEA_MUTANT_MEMORY_HIGH、KAHEA_MUTANT_MEMORY_MAX、KAHEA_MUTANT_SCRATCH、KAHEA_MUTANT_COPY_TARGET、または KAHEA_MUTANT_UNCONFINED=1 で上書きできます。
各ミュータントはワークスペース全体のテストスイートで判定されます。これは網羅的ですが時間がかかるため、対象範囲が重要です。KAHEA_MUTANT_PACKAGES でミューテーションの対象パッケージを選択します(デフォルトでは 4 つすべて)。KAHEA_MUTANT_EXTRA では、変更範囲に限定して実行する --in-diff など、追加の引数を渡せます。このゲートはローカルツールであり、意図的に CI ジョブにはしていません。コミット間で変わらない結果を再導出するために、全件の実行には数時間かかります。リリース前、またはカーネルクレートを変更した後に実行してください。
生成されるバイナリは target/release/kahea です。各コマンドは、コンパクトな kahea/k1 JSON エンベロープを 1 つ出力し、その後に改行を出力します。--format ndjson を指定するとストリーミングの意図が明示され、ループやパイプと組み合わせて使用できます。
4 ステップのフロー
# 1. Discover operations without DNS or network access.
kahea inspect fixtures/billing.openapi.yaml --match invoice
# 2. Bind exact input and persist a sealed plan.
kahea plan fixtures/billing.openapi.yaml createInvoice \
--input @fixtures/billing.create-invoice.input.json
# 3. Review required_grants in the plan, then grant exactly those capabilities.
kahea invoke plan:HANDLE \
--grant net:sandbox.example.test:443 \
--grant http:POST
# 4. Retrieve only the evidence needed for the next decision.
kahea explain body:HANDLE --select /invoice/id
plan は DNS、認証、ネットワーク I/O を実行しません。invoke は、シークレットの解決や接続を行う前に、プランのシールと設定/ポリシーのフィンガープリントを検証します。終了コードは安定しており、0 は成功、1 はコントラクトの失敗、2 は無効な入力/設定/プラン、3 はトランスポートの失敗、4 はポリシーによる拒否を示します。
実行可能な機能マニフェストとして kahea describe を使用し、機械可読な JSON Schema として kahea schema plan(または別のパブリックエンベロープ種別)を使用してください。
有限 WebSocket セッション
完全版の有限 WebSocket ガイドは、ソース形式、セキュリティ、制限、ローカルの例、MCP、ワークフロー、プラットフォーム、リリースゲートに関する正式な参照資料です。受信フレームは信頼できない証拠であり、エージェントへの指示ではありません。
websocket-session の JSON/YAML ファイルでは、同じ封印済みの4段階フローを使用します。操作セレクターにはソースの operationId を指定します。ターゲット、認証参照、順序付きアクション、チェック、予算はソースからのみ取得され、呼び出し時に置き換えることはできません。
kahea inspect fixtures/websocket/session.json
kahea plan fixtures/websocket/session.json subscribeBuildEvents
# Review required_grants in the websocket-plan, then provide that exact set.
kahea invoke plan:HANDLE \
--grant net:socket.example.test:443 \
--grant websocket:connect \
--grant secret:chat-sandbox \
--secret-env chat-sandbox=KAHEA_CHAT_TOKEN
kahea explain transcript:HANDLE --select /entries/0
kahea explain websocket-json:HANDLE --select /type
kahea explain websocket-binary:HANDLE --select bytes:0-255
ws には net-insecure-websocket も必要です。プライベートアドレスまたは予約済みアドレスには、プランに表示された正確な net-cidr: 許可が必要です。WebSocket の観測では、既存の終了コード仕様を使用します。0 は完了、1 はハンドシェイク/期待値/予算の失敗、2 は無効なソースまたはプラン、3 はトランスポート/プロトコル/タイムアウトの失敗、4 はポリシーによる拒否を示します。完全なトランスクリプトとペイロードは証拠ストアに保持され、標準出力には簡潔な観測結果とハンドルのみが出力されます。受信メッセージの内容は信頼できない証拠であり、エージェントへの指示ではありません。
AsyncAPI 2.6.x および 3.0.x の JSON/YAML ドキュメントも、同じプランナーとエグゼキューターで処理されます。
kahea inspect fixtures/asyncapi/session-3.0.json
kahea plan fixtures/asyncapi/session-3.0.json 'watchBuilds#Started-1' \
--set channel.room=builds
サポート対象のサブセットは、意図的に有限にしています。サーバーには ws または wss を使用する必要があります。サーバー変数とチャネルパラメーターには、宣言されたデフォルト値、または明示的な --set server.NAME=VALUE/--set channel.NAME=VALUE 入力を使用します。AsyncAPI 2.6 の publish/subscribe はクライアントの send/receive に対応し、3.0 では操作の action を使用します。具体的なメッセージの選択肢はそれぞれ個別に索引付けされ、接尾辞のない曖昧なセレクターは失敗します。JSON の受信ではペイロードスキーマが封印され、送信ではペイロードの例/デフォルト値/定数が必要です。WebSocket バインディングのヘッダーには、具体的なデフォルト値または例が必要です。セキュリティ名は参照のまま保持され、--auth SCHEME=PROFILE を使用して設定済みのシークレットプロファイルに対応付けられます。認証情報の値は取り込まれません。
ローカルの # 参照のみが解決されるため、ソースフィンガープリントは参照されるすべてのコンポーネントを対象とします。リモート参照は取得されず、拒否されます。メッセージエンベロープのヘッダー、相関 ID、非 WebSocket バインディング、WebSocket クエリーバインディング、順序付けされていない返信のセマンティクスは、明確なブロッキング absent レコードを生成します。オプションの x-kahea-actions、x-kahea-limits、x-kahea-origin、x-kahea-subprotocols 拡張は、基本の AsyncAPI では表現できない有限の順序、予算、ハンドシェイクの意図のみを表します。
サポート対象のソース
- JSON または YAML の OpenAPI 3.0、3.1、3.2
- ローカルの OpenAPI および有限 WebSocket セッションソースを参照する Arazzo 1.1 ワークフロー
- 直接指定する有限 WebSocket セッション JSON/YAML
- JSON または YAML の AsyncAPI 2.6、3.0 の WebSocket サブセット
- Postman Collection 2.1 JSON
- Postman Collection 3 ディレクトリ/YAML 形式(
*.request.yamlおよび.resources) - HAR 1.2、一般的な cURL、
.http/.rest、直接指定するリクエスト YAML/JSON - 決定的なテキスト形式の標準入力:
kahea inspect -
「サポート対象」とは、その形式が決定的に検出され、検査可能であり、文書化されたサブセットのシール済みプランを生成できることを意味します。上流アプリケーションのすべての機能が再現されるわけではありません。未サポートの重要な動作は absent に報告され、対象範囲が判明している場合は、該当するリクエストのみをブロックします。
Postman 2.1 では、ネストされたリクエスト、文字列形式および構造化形式の URL、機密情報を含まないコレクション/フォルダー変数、認証情報の値を含まない、継承された Basic/Bearer/OAuth 形式の Bearer/API キーのメタデータ、raw ボディ、レスポンス例、および限定的なステータスアサーションのサブセットをインポートします。Postman v3 では、*.request.yaml/*.request.yml、リクエストの順序、ルートおよびネストされた definition.yaml の変数/認証メタデータ、ヘッダー、raw ボディをインポートします。v3 のスクリプトはリクエスト単位でブロックされる未対応項目です。v3 の例ファイルおよび未知のリソースファイルは、現在、黙って破棄されるのではなく、明示的にブロックされる未対応項目です。raw 以外の Postman ボディモード、解決できないシークレット変数、未サポートの認証、重要な JavaScript は、該当するリクエストをブロックします。Kāhea は Node を組み込まず、pm.* コードも実行しません。HAR のレスポンスと Postman 2.1 のレスポンス例は、構造的なコントラクトとなり、レスポンスのシークレットがコピーされることはありません。
fixtures/corpus にある固定されたオフラインコーパスには、Swagger Petstore、Swagger Generator、PokéAPI、OpenAI、httpbin、OpenAPI 3.0~3.2、JSON/YAML、大規模スキーマ、セキュリティスキーム、コールバック、Webhook、バイナリメディア、および意図的に拒否される Swagger 2 が含まれています。インポート用フィクスチャは fixtures/imports に、Arazzo の例は fixtures/workflows にあります。公開フィクスチャは説明用のみであり、テストスイートから呼び出されることはありません。
入力とボディ
入力ドキュメントでは、値を path、query、header、cookie、body の下にまとめることができます。ボディのみの操作では、ドキュメント自体をボディとして指定できます。正確なオーバーライドには、繰り返し指定できる --set LOCATION.NAME=JSON_OR_TEXT を使用します。
Kāhea は、正規化された JSON、text/XML、form-urlencoded、決定的な multipart、および base64 バイナリのボディをサポートします。multipart のファイルフィールドには、シール済みの記述子を使用します。
{
"body": {
"file": {
"$file": "./artifact.bin",
"filename": "artifact.bin",
"content_type": "application/octet-stream"
},
"label": "release-candidate"
}
}
ファイルはプランニング時に読み込まれ、そのバイト列と multipart の境界文字列がボディダイジェストおよびプランシールの一部になります。呼び出し時にファイルが再読み込みされることはありません。
認証とシークレット
プランには、secret://billing/sandbox のようなプロファイル参照のみが含まれます。呼び出し時に環境変数を指定してプロファイルを解決します。値を CLI/MCP 引数に含めてはいけません。
kahea plan api.yaml createInvoice --auth bearerAuth=billing/sandbox
kahea invoke plan:HANDLE \
--grant secret:billing/sandbox \
--secret-env billing/sandbox=KAHEA_BILLING_TOKEN \
--grant net:api.example.com:443 \
--grant http:POST
Bearer および API キーのプロファイルには raw トークンが含まれます。Basic プロファイルには username:password が含まれます。mTLS プロファイルには PEM ID 素材が含まれます。OAuth クライアントクレデンシャルおよびリフレッシュのプロファイルは、client_id と client_secret または refresh_token を含む JSON 文字列です。OAuth トークンエンドポイントには、それぞれ専用のプラン済みネットワーク/HTTP グラントが付与されます。リダイレクトと暗黙のプロキシは無効化され、DNS の応答はポリシーに照らして検証されたうえで固定されます。プライベート/予約済みアドレスには、CIDR の完全一致によるグラントが必要です。認証情報がプランに含まれていないオリジンに付与されることはありません。
解決済みのシークレット値、そこから派生した機密ヘッダー、設定された機密レスポンスヘッダー、および設定されたレスポンス JSON Pointer は、証跡が永続化される前にマスキングされます。
設定とポリシー
Kāhea はデフォルトで .kahea/config.toml を読み込みます。または、明示的に --config を指定できます。examples/config.toml と examples/policy.toml を参照してください。
名前付きサーバーは本番環境として分類できます。本番環境のオリジンへの書き込みには approve:production-write が必要で、破壊的な操作にはさらに approve:destructive が必要です。ホストの許可リスト/拒否リスト、最大リクエストバイト数、レスポンスの編集、リスクの上書き、デフォルト値、シークレット専用の認証参照は、シールされた設定/ポリシーのフィンガープリントに含まれます。異なるポリシーを使用する呼び出しは、ネットワークアクセスの前に拒否されます。
宣言的チェック
OpenAPI のステータスとレスポンススキーマのチェックはデフォルトで追加されます。--check を繰り返すと、明示的なチェックセットを指定できます。
status:200
status:any(200,201,204)
content-type:application/json
response-schema:openapi
header:X-Request-Id:exists
header:X-Mode=ready
json-pointer:/data/id:exists
json-pointer:/data/count:type=integer
json-pointer:/data/state="ready"
jsonpath:$.data[*]:exists
xpath:/root/item:exists
body-digest:b3:...
response-bytes:max:1048576
latency-ms:max:500
不明なチェックはすべてフェイルクローズします。検証の詳細は証跡として保存され、終了コード 1 に影響します。
Arazzo ワークフロー
同じコマンドで Arazzo の検査と計画を行えます。
kahea inspect fixtures/workflows/billing.arazzo.yaml
kahea plan fixtures/workflows/billing.arazzo.yaml createAndReadInvoice \
--input @fixtures/workflows/billing.input.json
kahea invoke workflow-plan:HANDLE --grant ...
V1 は、順序付きの HTTP ステップと有限の WebSocket ステップ、前のステップへの依存関係、範囲が制限された実行時バインディング、集約リスクと厳密な許可、範囲が制限された再試行/終了アクション、ワークフロー全体およびステップごとのタイムアウト上限、シールされた子プラン、試行ごとの観測ツリーに対応しています。HTTP ソースには type: openapi を使用します。一方、直接の WebSocket ソース記述には仕様拡張 x-kahea-source-kind: websocket-session(誤解を招く Arazzo の type は指定しません)を使用し、ソースの operationId を選択します。fixtures/workflows/mixed.arazzo.yaml を参照してください。
WebSocket ステップでは、以前の出力を x-kahea-websocket-bindings 経由でのみバインドできます。各バインディングは /actions/N/ 配下にある既存の JSON Pointer を指定し、置換できるのは text、payload_base64、equals、reason のみです。ターゲット、認証、上限、スキーマ、アクションの順序、操作の識別情報は、呼び出し時に変更できません。WebSocket の出力では、ハンドシェイクおよびクローズのメタデータ、アクションインデックスで指定した一致メッセージ(text、json、json#/pointer、base64、evidence)、トランスクリプト、ハンドシェイク、トレースの証跡ハンドルに対応しています。トランスクリプト全体が暗黙的に入力になることはありません。バイナリデータは、明示的な証跡ハンドルまたは Base64 値として保持されます。シークレットプロファイルの参照は、シークレット値を実体化せずにシールされた子プランに引き継がれます。
HTTP ステップではさらに、operationPath、リクエスト入力、シンプルな成功条件/JSONPath/XPath の成功条件、レスポンスボディの出力に対応しています。AsyncAPI ワークフローのソース記述、コールバック、人的承認ノード、分散スケジューリング、ネストされたワークフローステップ、goto、再利用可能なアクションコンポーネントは、引き続き明示的に対象外です。
決定論的な適合性ファジング
conform は、Python の Schemathesis などのツールに相当する、Kāhea ネイティブの単一バイナリです。ネットワークアクセスなしで OpenAPI 操作から範囲を制限した正例と負例を生成し、各リクエストを通常のプランとして厳密にシールして、再生可能なキャンペーンを保存します。
kahea conform fixtures/conformance/widgets.openapi.yaml updateWidget \
--cases 32 --seed 42 --mode mixed --delay-ms 25
kahea invoke conformance-plan:HANDLE \
--grant conformance:execute:32 \
--grant conformance:negative \
--grant net:api.example.test:443 \
--grant http:POST
正例では、スキーマ例、列挙型、ユニオン、オブジェクト/配列の形状、形式、範囲が制限された文字列、数値、コレクションの境界値を検証します。負例では、必須値を省略するか、名前付きの型、列挙型、長さ、未知のプロパティ、パラメーターのいずれかの違反を 1 つ導入します。レスポンスオラクルは 5xx レスポンスを拒否し、すべてのレスポンスを宣言されたステータス/コンテンツ/スキーマの契約と照合し、負例のデータが適合する 4xx の拒否を受けることを確認します。検出結果は、ケースごとの証跡と厳密なリクエストプランハンドルにリンクされます。
シード、ケース数、実行間隔、失敗上限、戦略、リクエストダイジェスト、ポリシーフィンガープリント、許可はキャンペーンシールで保護されます。同じシードからはバイト単位で同一のキャンペーンが生成されます。生成されるリクエストは最大 256 件に制限され、明示的な基準値が必要な複雑なスキーマキーワードやバイナリ入力に対してはフェイルクローズします。リソース識別子を固定する場合や、範囲が制限された生成器では推測できない値を指定する場合は、--input と --set を使用してください。
動的ライフサイクルのオラクル
テスト専用の kahea-test-server は、起動するたびに異なる API を作成し、そのインスタンスの正確な OpenAPI 3.1 コントラクトを公開するとともに、別個のランタイムバリデーターを通じて同じシード済みシナリオを適用します。各 API には、GET、POST、PUT、PATCH にまたがる 3~6 個の操作、ランダム化されたパスと操作 ID、パス・クエリ・ヘッダーの各パラメーター、JSON ボディ、列挙型、ブール値、長さ制限付き文字列、制約付き整数、成功応答と拒否応答が含まれます。
次のコマンドで、ブラックボックスのライフサイクルを繰り返し実行します。
scripts/dynamic-conformance.sh 25
各イテレーションでは、OS が割り当てたループバックポートで起動し、アトミックな準備完了マニフェストを待ち、生成されたすべての操作を検査し、有効性と適合性を組み合わせたキャンペーンを計画して実行します。さらに、すべての操作に有効なトラフィックと無効なトラフィックが送られたことを検証し、起動ごとの制御トークンを使ってシャットダウンします。アーティファクトのパスと再現用シードは、実行ごとに出力されます。失敗は次のように正確に再現できます。
KAHEA_DYNAMIC_SEED=424242 KAHEA_DYNAMIC_CASES=12 \
scripts/dynamic-conformance.sh 1
KAHEA_DYNAMIC_ARTIFACTS を設定すると、指定したディレクトリに出力を保持できます。KAHEA_DYNAMIC_FAULT では、accept-invalid、malformed-response、server-error、undocumented-status の各ネガティブコントロールを利用できます。正しい Kāhea ビルドでは、これらの実行が拒否されます。サーバーは 127.0.0.1 のみにバインドし、リクエストを 1 MiB に制限します。また、環境に設定された認証情報は受け付けず、出荷用の kahea バイナリには含まれません。
エビデンスとエクスポート
デフォルトのストアは .kahea/store です。SQLite の WAL メタデータと、zstd で圧縮された BLAKE3 アドレス方式のブロブで構成されます。大きなボディが標準出力やエージェントのコンテキストに出力されることはありません。セレクターは JSON Pointer、RFC 9535 JSONPath、XPath、header:NAME、bytes:START-END に対応しています。
kahea explain trace:HANDLE
kahea explain body:HANDLE --select '$.items[0].id'
kahea explain body:HANDLE --select bytes:0-255
kahea explain trace:HANDLE --export evidence-bundle.json
エクスポートには、参照されているエビデンスが再帰的に含まれ、自己完結型の JSON バンドルが作成されます。リモートコンテンツは信頼できないエビデンスであり、指示ではありません。
MCP
kahea mcp serve --stdio
kahea mcp serve --stdio --store .kahea-local --config .kahea-local/config.toml
ストアのルートと設定ファイルはプロセス引数で指定し、起動時に一度だけ読み込まれます。どのツール引数からもストアの場所を変更したり、別の設定ファイルを指定したりすることはできません。kahea_invoke が受け付けるのは、ファイルシステムパスではなく封印済みのプランハンドルです。また、宣言されていない引数を含む呼び出しは、黙って無視されるのではなく拒否されます。ソースの取り込み方法は変更されていません。kahea_inspect と kahea_plan が引き続きローカルの source パスを受け取るのは、そのためのツールだからです。CLI では、オペレーターが入力するプランファイルのパスも引き続き受け付けます。
サーバーは、改行区切りの stdio JSON-RPC を介して MCP 2025-11-25 を実装し、kahea_inspect、kahea_plan、kahea_invoke、kahea_explain の 4 つのツールのみを公開します。同じツールは、直接指定する有限な websocket-session JSON/YAML と、文書化された AsyncAPI 2.6/3.0 の WebSocket サブセットにも対応します。kahea_plan は、正規化されたターゲット、認証参照、順序付きアクション、チェック、制限を封印します。kahea_invoke は、プランに明示された権限を必要とし、簡潔な websocket-observation を返します。完全なトランスクリプトとペイロードは、kahea_explain で選択されるまでエビデンス内に保持されます。
{"name":"kahea_inspect","arguments":{"source":"fixtures/websocket/session.json"}}
{"name":"kahea_plan","arguments":{"source":"fixtures/websocket/session.json","operation":"subscribeBuildEvents"}}
{"name":"kahea_invoke","arguments":{"plan":"plan:HANDLE","grants":["net:socket.example.test:443","websocket:connect"]}}
{"name":"kahea_explain","arguments":{"handle":"transcript:HANDLE","select":"/entries/0"}}
kahea_plan に conformance オプションオブジェクトを渡すと、HTTP キャンペーンを作成できます。kahea_invoke は、その封印済みハンドルを実行します。すべてのツールは、厳密な入出力スキーマを公開します。HTTP、ワークフロー、適合性、WebSocket の各プランニングと呼び出しでは、CLI と同じ Rust ライブラリ呼び出しが使用され、意味的な同等性をテストで検証しています。固定リソースは describe と、公開されている websocket-session、websocket-plan、websocket-observation の各スキーマを公開します。一方、テンプレートは、デフォルトの .kahea ストアにある封印済みプランと信頼できないエビデンスを公開します。最新の MCP スキーマ と stdio トランスポート要件 を参照してください。
エージェント利用の契約は
plugins/kahea/skills/kahea/SKILL.md
にパッケージされています。検査し、プランを作成し、権限を確認し、封印済みハンドルを実行してから、選択したエビデンスのみを説明します。
構成
各呼び出しは 1 つの NDJSON レコードなので、繰り返しの観測結果を anomalyx などのツールに直接送信できます。
for run in $(seq 1 100); do
kahea --format ndjson invoke plan:HANDLE --grant net:api.example.com:443 --grant http:GET
done | anomalyx scan --format ndjson
環境を比較する場合は、名前付きサーバーを対象にプランを作成し、その設定とソースのフィンガープリントを保持したうえで、変更可能なコレクションの状態ではなく、観測ストリームを比較してください。
アーキテクチャと制約
ワークスペースでは、プロトコル型(kahea-core)、取り込み、プランニング、実行、エビデンス、ワークフロー、MCP、CLI が分離されていますが、配布されるのは単一のバイナリです。パーサーやトランスポートの型がパブリックエンベロープに漏れることはありません。
OpenAPI の参照は、読み込まれたドキュメント内で解決されます。プランニング中にリモート参照が取得されることはありません。Postman v3 のディレクトリは 10,000 ファイル/64 MiB までに制限され、シンボリックリンクは拒否されます。個々のテキストソースは 64 MiB までに制限され、深さとノード数にも上限があります。HAR のインポートにはバージョン 1.2 が必須で、Postman JSON のインポートにはコレクションスキーマ 2.1 が必須です。HTTP リダイレクトは追跡せず、拒否されます。ワークフローの再試行は明示的に宣言する必要があり、上限は 10 回です。
製品要件については、KAHEA_PRD_v1.0.md を参照してください。Arazzo の動作は公式の Arazzo 1.1 仕様に準拠し、Postman v3 ディレクトリの処理は最新の Postman コレクションスキーマのドキュメントに準拠します。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。