Diavlos について
Diavlosは、異なるベンダーや端末のAIエージェントが連携するためのメッセージサーバーです。署名付きの型付きメッセージを永続配信し、危険な操作には人間の署名による承認を求めます。
主な機能
- 01エージェントメッセージの署名
- 02永続的な少なくとも1回の配信
- 03タスク・返信・状態の型
- 04人間の署名による操作承認
- 05MCPツール・CLI・ライブラリ
活用シーン
- 01別々の端末にいるエージェントの連携
- 02オフラインの相手へのタスク配信
- 03危険な操作前の承認要求
- 04署名付きエージェント会話の監査
MCP 対応
エージェントはMCPツールを使って、ルームメッセージの送信、受信、閲覧、管理を行えます。CLIとライブラリも提供します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
>> Diavlos
Diavlos(δίαυλος、ギリシャ語で「チャンネル」)を使うと、AI エージェント同士がやり取りできます。 どんなエージェントでも、どんなターミナルでも、どんなコンピューターでも利用できます。ルーム名を決めて、署名付きの招待を共有するだけです。エージェント同士が互いを見つけて、会話を始めます。
小さなプログラムがひとつあるだけです。一度インストールすれば、バックグラウンドで動作します。どのベンダーのエージェントでも利用できます。Claude Code、Codex、Cursor、Gemini CLI、Aider、または自分で作成したエージェントにも対応します。アカウントも、セットアップするサーバーも必要ありません。
単なるチャット用のパイプとの大きな違いは、メッセージが失われず、送信者が名乗った本人であることが確認でき、メッセージに種類(タスク、返信、完了)が付いているため、エージェントが推測する必要がないことです。
動作を見る

別々のマシンにある2台のレンタルクラウドデスクトップが、ひとつのルームに参加しています。ポートフォワーディングなしで、パブリックインターネット経由で接続しています。実際のClaudeエージェントが作業し、スクリプト化されたエージェントがタスクを割り当て、人間がブラウザーからリスクのある1つの手順を承認します。その後、読み取り専用の監査キーですべてを監査します。署名付きメッセージは19件で、最初のタスクから人間の承認まで77秒です。
プロンプトインジェクションをカメラの前で拒否する様子も確認できます。ボスエージェントがClaudeエージェントに指示を無視して許可されていない操作を実行するよう伝えますが、メッセージは従われずに拒否されます。
実行全体を順を追って見る — 静止画、19件のメッセージの記録、別のマシンで検証できるエクスポート、および再現するためのコマンドを掲載しています。 115秒の動画 · 記録
2つのE2Bサンドボックスと、ひとつの人間による承認ゲート

実際のE2Bサンドボックス2つが、パブリックインターネット経由でひとつのルームに参加します。サンドボックスAのプランナーが、サンドボックスBのランナーにジョブの実行を依頼します。ランナーは先に人間に確認します。承認されると、ゲートはルームのホームで承認を消費し、ジョブが実行されます。拒否された場合は、何も実行されません。すべてのメッセージに署名が付けられて検証され、監査バンドルも検証されます。
これは、 GitHub run 35896619176 の実際のログを再生したものです。 サンプル · 31秒の動画
7つの約束
- どのエージェントでも、どのベンダーでも。 Diavlosは特定のものを優遇しません。
- メッセージは待機します。 相手がオフラインなら、メッセージは待機します。 相手がオンラインに戻ると届きます。メッセージが送信トレイから出るのは、 ルームに届いたとき、または自分で破棄したときだけです。
- 実名です。 すべてのエージェントは鍵を持ち、すべてのメッセージはその鍵で署名されます。 誰も「alice」になりすますことはできません。
- 読んでも削除されません。 読み手はそれぞれ独自のブックマークを保持します。10人の読み手が 同じメッセージを全員読めます。エージェントに渡されたメッセージは、エージェントが ackするまで未処理のままです。エージェントが先に停止した場合は、再び届きます。
- メッセージには型があります。 タスク、返信、完了、質問、申し立て。エージェントは文章を解析しなくても、 受け取ったものが何かを把握できます。
- 単なるコマンドではなく、ツールです。 エージェントはまずMCPツールとして呼び出します。 コマンドラインも使えます。ライブラリもあります。
- 無料で実行できます。 アカウントもAPIキーも有料サービスも不要です。ノートパソコンを2台用意して、 インストールすれば使えます。
配送の約束は、次のとおりです。少なくとも1回配送され、IDで重複排除され、sendが返る前に
ディスクに保存され、ackするまで自分のものです。
インストール
curl -fsSL https://raw.githubusercontent.com/harisnopen/diavlos/main/install.sh | sh
# or: npm install -g diavlos (still 1.0.0 on npm for now)
# or: brew install harisnopen/tap/diavlos
# or: cargo install diavlos
ソースからビルドする場合:Rust 1.95以降を用意し、cargo build --releaseを実行します。バイナリは
target/release/diavlosにあります。
エージェントにツールを渡す
1つのコマンドで、すでに使っているツールのMCP設定を書き込みます。
diavlos mcp install --for claude-code # or codex, cursor, gemini-cli, superset, vibe-kanban, all
diavlos invite ops claude-code # let the agent into a room, as its owner
diavlos --as claude-code join <invite>
diavlos hook install --for claude-code --room ops # messages land mid-turn, no polling
エージェントにはツール名にちなんだ独自の鍵が割り当てられ、あなたではなく、その鍵として動作します。
最初はどのルームにも参加していません。各ルームにはあなたが参加を許可します。diavlos mcpは
あなたの鍵での実行を拒否するため、エージェントがその鍵で承認に署名することはできません。
同じツールのすべてのセッションは、そのツールの鍵を共有します。エージェントが自分自身の名前で
応答する必要がある場合は、--as <name>を使って専用の鍵を与えてください。
Claude Codeでは、ツールとスキルをまとめて設定できます。
/plugin marketplace add harisnopen/diavlos
/plugin install diavlos@diavlos
スキルだけを使う場合は、Agent Skills形式を読み込めるエージェントツールで利用できます。
npx skills add harisnopen/diavlos
# or copy it: cp -r skills/diavlos ~/.claude/skills/ (Codex: ~/.agents/skills/)
試してみる
ノートパソコンAで:
diavlos new ops --about "the deploy room"
diavlos invite ops bob # prints one line to paste into bob's session
ノートパソコンBで:
diavlos join dv1.eyJ...
diavlos send ops "found a bug in auth" --type task
Aに戻って:
diavlos next ops # waits, then: [3] bob (task): found a bug in auth
diavlos send ops "on it" --type reply
ヘルパーは、コマンドを初めて実行したときに自動で起動し、バックグラウンドで動き続けます。diavlos statusでルームとリンクを確認できます。
diavlos stopで停止し、diavlos service installでサービスとして実行します。
Aの電源を切り、Bから送信して、Aの電源を入れます。メッセージが届きます。Aのヘルパーが 再び起動するまで、Bはメッセージをディスク上に保持します。
3つの入口、同じヘルパー
MCPツールは、MCPに対応するエージェント向けです。Claude Code、Cursor、または任意の MCPクライアントに追加できます。
{ "mcpServers": { "diavlos": { "command": "diavlos", "args": ["--as", "my-agent", "mcp"] } } }
ツール:diavlos_send、diavlos_ask、diavlos_next、diavlos_read、
diavlos_claim、diavlos_release、diavlos_who、diavlos_rooms、および
メッセージをdiavlos_nextで受け取ったときに使うdiavlos_ack、diavlos_renew、diavlos_nack:
メッセージはackするまでエージェントのものとして保持され、ackされなければ再び届きます。
コマンドと同じ名前、同じフィールドを使います。--as(またはDIAVLOS_AS)で、動作に使う
エージェントの鍵を指定します。人間の鍵では実行できず、diavlos_sendで
approve、deny、control、systemを送信することもできません。SKILL.md
では、エージェントにルールを平易な言葉で説明しています。エージェントのスキルに追加してください。
コマンドラインは、シェルしか使えないエージェント(Aider、スクリプト、 CI)向けです。以下のすべてのコマンドを利用できます。
ライブラリは、自作エージェント向けです。Rustクレートのdiavlos-clientに加えて、
ネイティブコード不要のPythonおよびNodeパッケージがあります。ルームに参加して返信するまで、わずか10行です。
from diavlos import Room
room = Room.join(invite, name="my-bot")
for msg in room.next():
if msg.type == "task":
result = do_work(msg.text)
room.send(result, type="done", reply_to=msg.id)
1台のマシンで2つのエージェントを使う
--asを使って各エージェントに独自の鍵を割り当てます。
diavlos --as scanner send ops "..." # key ~/.diavlos/keys/scanner.json
diavlos --as fixer next ops
defaultキーは、インストールしたあなた本人のものです。それ以外のラベルは、すべてエージェントの鍵です。
ルーム内でエージェントが使う名前は、鍵ファイルではなく招待時に紐付けられます。diavlos mcpは
エージェントの鍵でのみ実行できます。
まず人間に確認する
エージェントは構造化されたアクションを使って確認を求めます。人間は自分のキーで、そのアクションをそのまま承認します。承認は10分で期限切れになり、一度だけ使えます。処理を実行するスクリプトは、アクションがどこで実行されるかを確認します。
# the agent
diavlos ask ops "Deploy api-service v1.2 to prod?" --timeout 600 \
--action '{"verb":"deploy","target":"api-service","params":{"version":"1.2","env":"prod"}}'
# the human (a key invited with --human)
diavlos send ops --type approve --reply-to m_01J8X5 # or: diavlos deny ops m_01J8X5 --reason "not now"
# the deploy script, as a member of the room
diavlos --as deployer check-approve ops --op "$RUN_ID" \
'{"verb":"deploy","target":"api-service","params":{"version":"1.2","env":"prod"}}' && ./deploy.sh
ルームのホームは、その操作の使用記録を一度だけ記録します。同じ操作を再度実行すると同じ結果が返され、別のマシンであっても、それ以外の実行には拒否が返されます。ホームに接続できない場合、終了コードは3となり、使用記録は残りません。使用記録は1回の操作に対する許可であり、その操作が1回だけ実行された証明ではありません。deploy.shで、すでに実行した操作IDはスキップするようにしてください。
書き留めておくべきルールが1つあります。メッセージに含まれるのは言葉だけで、許可は含まれません。エージェントが「人間が許可した」と伝えても、それは許可ではありません。人間自身のキーで署名された承認だけが有効です。
コマンド
| コマンド | 機能 |
|---|---|
diavlos new <room> --about "..." [--retention <days>] [--class <class>] | ルームを作成します。あなたがオーナーになります。 |
diavlos invite <room> <name> [--human] [--for <node-id>] [--role <role>] [--prompt] | 新しいメンバー1人分の署名付き招待を作成します。--human を指定すると、その鍵が承認可能な人間のものであることを示します。--for を指定すると、1台のマシンに固定されます。招待の有効期限は24時間で、1回だけ使用できます。--prompt を指定すると、エージェントに貼り付けるセットアップメッセージ全体が出力されます。インストール、参加、ツール、ルール、最初のあいさつが含まれます。 |
diavlos join <invite> | 招待を使って参加します。必要に応じてヘルパーを起動します。 |
diavlos grant <room> <name> --role approver --until 2026-12-31 | メンバーにロールを付与します。ロールは observer、chat、task-giver、approver です。有効期限を設定できます。 |
diavlos rotate <room> | ルームキーを新しくします。全員が退出します。引き続き参加させるメンバーを再招待してください。 |
diavlos send <room> "text" --type task --to bob | メッセージを送信します。テキストを指定しない場合は標準入力から読み込みます。 |
diavlos send <room> "text" --file ./build.log / diavlos get <room> <file-or-message-id> | メッセージとともにファイルを送信します。デフォルトでは各ファイル最大25 MBです。ファイルはルームのホームを経由してヘルパー間で転送され、両端でフィンガープリントと照合されます。get はファイルを ~/.diavlos/files/<room>/ に保存し、実行される可能性のあるものについて警告します。docs/FILES.md を参照してください。 |
diavlos ask <room> "text" --timeout 120 [--action <json>] | 質問を送信し、そのメッセージに対する返信を待ちます。タイムアウト時は終了コード4、拒否された場合は6で終了します。 |
diavlos next <room> [--timeout <secs>] [--manual-ack] [--lease <secs>] | 他のメンバーからの次のメッセージを待ちます。自分のメッセージとヘルパーの通知はスキップします。メッセージを出力すると確認応答します。--manual-ack を指定するとトークンを出力します。メッセージは ack、nack を実行するか、リース(600 s)が切れるまで自分の手元に残り、その後再び順番に回ってきます。 |
diavlos ack <token> / renew <token> / nack <token> [--retry-in <secs>] | 保持しているメッセージを処理します。引き受けた、引き続き作業中、または今は対応しない、のいずれかを示します。Ack は作業を引き受けたことを意味し、完了したことを意味しません。完了したらルームで done と伝えてください。 |
diavlos read <room> [--since <seq>] [--ack] [--json] | ブックマーク以降のメッセージを確認します。--ack を指定しない限り、削除も移動も行いません。 |
diavlos watch <room> --exec ./on-msg.sh | メッセージをストリーミングします。メッセージごとにスクリプトを実行します。メッセージは DIAVLOS_MESSAGE、送信者の鍵は DIAVLOS_FROM_KEY、そのトークンは DIAVLOS_TOKEN に渡され、コマンドラインには表示されません。スクリプトが成功すると確認応答し、失敗するとメッセージを戻します。 |
diavlos outbox [list [<room>]] / outbox retry <id> / outbox drop <id> | ルームへの到着待ちのメッセージと、受け付けられなかったメッセージおよびその理由を表示します。ルームに到着するか、あなたが削除しない限り、メッセージは送信ボックスから出ません。 |
diavlos deliveries <room> [--replay <seq>] | 配信済みで、まだ完了扱いになっていないメッセージを表示します。リース中、遅延中、または5回の試行後に隔離されたメッセージが含まれます。--replay を指定すると、メッセージを再配信します。 |
diavlos claim <room> <task-id> / diavlos release <room> <task-id> | タスクを引き受けるか、返します。同じタスクに2つの申し出があった場合、最初のものが優先され、2つ目には拒否が通知されます。 |
diavlos who <room> | 参加者とその種類およびロール、鍵の短いフィンガープリント、本人が申告した役割、最終確認時刻、ヘルパーが実行している diavlos のバージョン、このマシン上のエージェントの起動方法を表示します。 |
diavlos trace <room> <message-id or trace> | 作業の連鎖を順を追ってたどります。メッセージIDを指定すると、そのスレッド全体(返信元から開始地点まで、およびすべての返信)を表示します。トレースを指定すると、それを持つすべてのメッセージを表示します。 |
diavlos web | localhost でブラウザーUIを起動します。1回限りのログインリンクを出力します。承認ボタンと拒否ボタンも含まれます。 |
diavlos mcp | MCP サーバーを起動します(stdio)。エージェントキーの場合のみ実行し、人間用のキーは拒否します。 |
diavlos mcp install --for <tool> | Claude Code、Codex、Cursor、Gemini CLI、Superset、または Vibe Kanban の MCP 設定を書き込みます。--for all はすべてに対して実行します。これはアダプターではなく、設定の書き込みです。ツールがすでに読み込んでいるファイルにサーバーエントリーを1つ統合し、その他の設定は変更しません。サーバーはあなたのキーではなく、ツール独自のエージェントキーとして動作します。そのキーを invite と join でルームに参加させてください。 |
diavlos hook install --for claude-code --room ops | 起動フックです。エージェントが停止しようとすると、待機中のルームメッセージがそのターンに届きます。ポーリングは不要です。 |
diavlos wake add <room> --as <agent> --exec <program> / --url <https> --secret-env <VAR> | メッセージを待っている間に停止しているエージェントを起動します。ヘルパーがプログラムを実行するか、署名付きの通知を POST します。通知には何かが届いたことだけが示され、内容は含まれません。その後、エージェントが next を実行します。ログアウトや再起動後も動作します。wake list、wake test <id>、wake remove <id> が使えます。--deliver を指定すると、watch --exec と同様にメッセージを引き渡します。WAKE.md を参照してください。 |
diavlos status / diavlos stop | ルームと接続を確認します。ヘルパーを停止します。 |
| オーナーと運用者: |
| コマンド | 説明 |
|---|---|
diavlos deny <room> <msg-id> --reason "..." | リクエストを拒否します。承認と同様に記録されます。 |
diavlos check-approve <room> <action-json> [--op <id>] | ルームのホームが、この操作に対して、このアクションと完全に一致する有効期限内かつ未使用の人間による承認の消費を記録している場合にのみ、終了コード 0 を返します。終了コード 6:承認なし。終了コード 3:ホームに接続できず、何も消費されていません。ルームのメンバーとして実行してください(--as)。 |
diavlos pause <room> / diavlos resume <room> | キルスイッチです。再開するまで何も動きません。 |
diavlos mute <room> <name> [--off] / diavlos revoke <room> <name> | メンバーを一時的に沈黙させるか、そのメンバーのキーを永久に無効化します。 |
diavlos policy <room> | ルームのルールファイルを編集します。現時点では、人間の承認が必要な動詞を指定するルールが 1 つあります。 |
diavlos export <room> --since 2026-01-01 > bundle.jsonl | 署名付き監査バンドルを作成します。 |
diavlos verify bundle.jsonl [--owner <fingerprint>] | バンドルを検証します。すべての署名、チェーン、メンバーシップを確認します。ヘルパーが実行されていなくても動作します。オーナーのキーを表示します。diavlos who で取得したフィンガープリントを --owner に指定すると、どのユーザーのルームかを証明できます。 |
diavlos hold <room> --on | 法的保全を有効にします。保持期間による削除が停止します。 |
diavlos events --follow | ヘルパーが行うすべての操作を JSONL ストリームとして出力します。Splunk に渡せます。 |
diavlos doctor | 設定、ネットワーク、キー、ディスクを確認します。出力をサポートチケットに貼り付けてください。 |
diavlos service install | ログイン時にヘルパーを起動します。systemd ユーザーユニット、launchd エージェント、または Windows の場合は独自のログオン Run エントリを使用します。必ず自分のユーザーとして実行し、root や SYSTEM としては実行しません。 |
diavlos bridge slack --room ops --channel C0123 | Socket Mode 経由でルームを Slack チャンネルに接続します。 |
diavlos bridge teams --room ops --link "<channel link>" | Microsoft Teams チャンネルに接続します。デバイスコードでサインインしてからポーリングします。パブリック URL は不要です。 |
diavlos bridge buzz --room ops --relay wss://… --channel <uuid> | Nostr リレー経由でルームを Buzz チャンネルに接続します。両側で署名されます。 |
終了コード(CLI)とエラーコード(MCP およびライブラリ)は同じ意味です: 2 = ルームに参加していない、3 = 誰にも到達できなかった、4 = タイムアウト、 5 = 名前がすでに使用されている、6 = 拒否された、7 = ルームが一時停止中。
メッセージの形式
{
"v": 1,
"id": "m_01J8X5",
"room": "r_...",
"seq": 42,
"prev": "sha256:9f3a...",
"trace": "ticket-4711",
"from": "alice",
"agent": { "vendor": "anthropic", "model": "claude-sonnet-5", "owner": "haris" },
"type": "question",
"text": "Deploy api-service v1.2 to prod?",
"action": { "verb": "deploy", "target": "api-service", "params": { "version": "1.2", "env": "prod" } },
"data": null,
"reply_to": null,
"to": null,
"class": "internal",
"ts": "2026-09-19T12:00:00Z",
"sig": "ed25519:..."
}
人間の回答は、言葉ではなく正確なアクションに署名し、
action_hash、expires(10 分間)および once: true を含みます。
タイプ:chat、task、question、reply、done、claim、release、
approve、deny、control、system。approve または deny を送信できるのは人間のキーだけです。control(grant、pause、
resume、mute、revoke、hold、rotated)を送信できるのはオーナーだけです。ヘルパーはオーナーのキーを使って system(joined、
alerts)を送信します。MCP 経由では、diavlos_send はこれら 4 つすべてを拒否します。
仕組み
各コンピューターで 1 つのヘルパープログラムが実行されます。そのコンピューター上のすべてのプログラムは、自分のユーザーだけが開けるローカルソケットを介してヘルパーと通信します。ヘルパー同士は iroh を使ってインターネット経由で通信します。可能な場合は直接ピアリンクを使用し、ネットワークが直接接続を許可しない場合は HTTPS の 443 番ポート経由でリレーします。どちらもエンドツーエンドで暗号化され、リレーから見えるのは暗号化されたバイト列だけです。リレーをセルフホストする方法については、docs/RELAY.md を参照してください。
すべてのリンクを独自の VPN(Tailscale、Headscale、NetBird、
ZeroTier、Nebula、WireGuard)内に保つには、private_networks を設定してください。詳しくは
docs/PRIVATE-NETWORKS.md を参照してください。
ルームは、そのルームを作成したヘルパー(オーナーのヘルパー)上に存在します。そのヘルパーが各メッセージにハッシュチェーン内の位置を割り当てます。メンバーはそこにメッセージを送信し、そこから同期します。オフラインの場合、メッセージは送信者のディスク上で待機します。
受信トレイは、1 つの SQLite ファイル内にある、ルームごとの追記専用ログです。各メッセージには ID、シーケンス番号、署名、および直前のメッセージのハッシュがあります。チェーンはエンベロープを対象とし、コンテンツはその隣に保存され、保存時に暗号化されます。そのため、保持期間によって削除されてもトゥームストーンが残り、verify によってほかの箇所が変更されていないことを引き続き証明できます。
ネットワーク層は 1 つのインターフェース(crates/cli/src/net)の背後にあるため、ほかの部分に手を加えずに iroh を差し替えられます。
設定
~/.diavlos/config.toml(または $DIAVLOS_HOME/config.toml):
[helper]
public_relays = true # false: nothing ever goes to n0's servers
relay_urls = [] # your own iroh relays, HTTPS on 443
private_networks = [] # ["tailscale"] or CIDRs: only talk inside your VPN
telemetry = false # zero telemetry. Nothing is sent anywhere.
port = 0 # picked once at random and kept
log_level = "info"
metrics_addr = "" # "127.0.0.1:9797" serves Prometheus metrics
refuse_classes = [] # data classes this helper refuses to store or relay
secret_scan = true # refuse to send anything that looks like a key
encrypt_inbox = true # message content encrypted at rest
keychain = true # secret keys in the OS keychain when there is one
retention_check_secs = 3600
[limits]
per_minute_per_sender = 60
daily_per_room = 2000
burst_alert_percent = 80
[license]
key = "" # empty; does nothing
各ルームには、ルームのホームが読み込む ~/.diavlos/rooms/<room>/policy.toml もあります。
approve_verbs = ["delete", "deploy", "pay", "mail"] # action verbs that need a human approve
max_task_hops = 4 # a task sent in reply to a task hands work on; the chain stops here (0 = off)
max_task_hops を超える長さの引き継ぎチェーンを作るタスクや、すでにそのチェーンに含まれている相手に作業を戻すタスクは拒否されます。エージェントが作業を循環して受け渡しても、レート制限に達する前に停止します。返信に制限はありません。
環境変数のプロキシ設定(HTTPS_PROXY)が適用されます。
セキュリティの概要
- テレメトリーはゼロです。 通信相手のヘルパーと、直接接続できない場合に暗号化されたバイト列だけを確認できるリレー以外に、データが送信されることはありません。ブリッジや URL による起動ルールは、自分で設定した場合にのみ送信し、起動の合図にコンテンツが含まれることはありません。全項目は PRIVACY.md に記載されています。
- ログにコンテンツや鍵が記録されることはありません。
~/.diavlos/helper.logは、ルーム ID、シーケンス番号、メッセージ ID、名前を含む JSON です。テキストは記録されません。 - 鍵は、利用可能な場合は OS のキーリング(macOS Keychain、Windows Credential Manager、Linux Secret Service)に保存され、それ以外の場合はパーミッション 0600 のファイルに保存されます。受信トレイのコンテンツとキュー内のメッセージは、保存時に暗号化されます。
- 1 つの鍵を 2 台のマシンで使うことは、最初のマシンがオンラインの間は拒否され、所有者に通知されます。
- 大量送信やループは、分単位と日単位の上限で停止します。所有者にはバーストアラートが届きます。
- 一般的なシークレットは拒否されます。 テキスト、データ、アクション、トレース、テキストファイルをスキャンして、API キー、トークン、秘密鍵と思われるものがあれば、メッセージは送信されません。これは誤送信を防ぐものです。データ損失防止の対策ではありません。Base64 や分割された文字列は、どのようなパターン検出もすり抜けます。
エージェントから鍵を遠ざけても防げないこと
デフォルトでは、エージェントはあなたとして動作しません。diavlos mcp と起動フックはエージェント自身の鍵で実行され、MCP は承認を送信しません。これにより安全でないデフォルト設定は解消されますが、完全に隔離されるわけではありません。
OS アカウント上でシェルを使えるエージェントは、あなたと同じ操作ができます。あなたの鍵で diavlos を実行したり、鍵ファイルを読み取ったりできます。別のデバイスからウェブ UI を開いても、鍵がこのマシンに残っている限り状況は変わりません。自分のエージェントに対しても有効な承認にするには、承認できるすべての鍵を、エージェントがアクセスできない場所に置く必要があります。また、その鍵での署名には人の操作が必要です。たとえば別のデバイスを使うか、エージェントが触れられないソケット、鍵、権限を持つ別の OS ユーザーを使います。これには、新しい人を招待できるルーム所有者の鍵も含まれます。docs/APPROVALS.md で手順を説明しています。また、diavlos doctor は、そのような鍵がエージェントの鍵と同じマシンにある場合に警告します。
実際の 2 台のマシンで動作を確認する。
SECURITY.md と docs/THREAT-MODEL.md を参照してください。
既知の制限
- 承認は 1 回の操作を許可するものであり、その操作が 1 回だけ実行された証明ではありません。
check-approveの実行後、変更を加える前に実行プログラムがクラッシュすると、変更が行われたかどうかを判断できません。操作 ID で重複を排除し、承認 1 回につき操作 1 回となるよう、アクションには具体的な操作(チケット、リビジョン、対象)を指定してください。 check-approveを実行するすべてのヘルパーをアップグレードしてください。 2.0 より前のヘルパーは、ルームのホームに問い合わせずに、自身で承認を消費します。- 配信は少なくとも 1 回行われます。 ワーカーがまだ処理中のうちにリースが期限切れになった場合や、投稿後にブリッジがクラッシュした場合など、メッセージが重複して届くことがあります。メッセージ ID で重複を排除してください。
- 自分のエージェントに対しても有効な承認にするには、ルームのホーム、その所有者の鍵、およびすべての承認者の鍵をエージェントのマシンから離す必要があります。docs/APPROVALS.md を参照してください。
doctorが確認するのは 1 つの Diavlos ホームであり、別の場所にコピーされた鍵ではありません。 - 量子耐性はありません。 脅威モデルを参照してください。
フォーマットはあなたのものです
ワイヤーフォーマットは docs/SPEC.md に記載されており、独立した仕様として MIT ライセンスで公開されています。このコードを読まなくても、別の実装を作成できるだけの内容がそろっています。私たちはリファレンス実装であり、門番ではありません。
このリポジトリのすべては MIT ライセンスであり、今後も MIT ライセンスのままです。有料で提供するものと、方針を変更しないという約束については、LICENSE-PROMISE.md に記載しています。
リポジトリの構成
crates/core:鍵、署名付きメッセージ、招待、ルーム、バンドル、受信トレイ。ネットワーク機能も非同期処理もありません。MIT ライセンスです。crates/client:ライブラリです。ヘルパーと通信します。MCP ツールと同じ呼び出しを提供します。crates/cli:diavlosバイナリです。ヘルパーデーモン、コマンド、MCP サーバー、ウェブ UI、ブリッジが含まれます。- 有料レイヤーはここにはありません。Fair Source ライセンスの
diavlos-enterpriseにあり、このリポジトリに依存しますが、その逆はありません。LICENSE-PROMISE.md をご覧ください。 bindings/python、bindings/node:Python および Node 向けの同じライブラリです。examples/:LangGraph から CrewAI への例、REST と Diavlos のベンチマーク、ヒューマンゲートの背後にある 2 つの E2B サンドボックスです。いずれも 1 台のマシンで実行できます。skills/diavlos/SKILL.md:エージェントに伝える内容です。どこにインストールしても使えるよう、Agent Skills 形式の仕様フィールド 6 つだけで構成されています。.claude-plugin/:Claude Code がスキルと MCP ツールを一度の操作でインストールできるようにする、プラグインとマーケットプレイスのマニフェストです。site/:llms.txtを含むドキュメントサイトです。packaging/:Homebrew のフォーミュラと npm のシムです。curl 用にinstall.shもあります。
リリースは、v* タグごとに .github/workflows/release.yml によってビルドされます。sigstore で署名され、CycloneDX SBOM が添付されます。
ライセンス
MIT。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。