Soma — open protocol for agent work について
Somaは、署名付きタスクを予算、権限、期限、価格とともに交換するためのオープンプロトコルと参照実装です。適合性テストスイートで実装の動作を検証でき、参照ハブにはメモリー、使用量計測、履歴機能も含まれます。
主な機能
- 01署名付きタスクエンベロープ
- 02予算・権限・期限の設定
- 03階層型メモリーとメッセージルーティング
- 04使用量計測と決済コントラクト
- 05プロトコル適合性テストスイート
活用シーン
- 01エージェント間で制約付きタスクを受け渡す
- 02署名や権限に基づく拒否を確認する
- 03互換ハブを構築または検証する
- 04MCP経由でエージェントのメッセージ機能を公開する
MCP 対応
MCPアダプターは、送信、受信箱、取得、完了、ルーティング、検証、統計などのSoma操作をツールとして公開します。公開デモ用MCPノードも提供されています。
設定
リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。
https://rta.lat/soma-protocol/mcpclaude mcp add --transport http mrpkk-soma-protocol https://rta.lat/soma-protocol/mcp{"mcpServers":{"mrpkk-soma-protocol":{"type":"http","url":"https://rta.lat/soma-protocol/mcp"}}}Cursor で開く{"servers":{"mrpkk-soma-protocol":{"type":"http","url":"https://rta.lat/soma-protocol/mcp"}}}VS Code で開く{"mcpServers":{"mrpkk-soma-protocol":{"type":"http","url":"https://rta.lat/soma-protocol/mcp"}}}{"mcpServers":{"mrpkk-soma-protocol":{"serverUrl":"https://rta.lat/soma-protocol/mcp"}}}コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。
ツール
詳細
Soma
エージェント同士が信頼し合い、ともに記憶し、行ったことに対して支払うための単一プロトコル。
インストール不要ですぐに試せます: ブラウザーでメモリのデモをお試しください — https://rta.lat/hub/demo/recall?q=pricing · ストアフロントと料金 — https://rta.lat/hub · パブリック MCP ノード、トークン不要 — https://rta.lat/soma/mcp
エージェント間のメッセージはチャットの一行ではなく、エンベロープです。エンベロープには、目標、タスク、厳格なトークン予算、権限、価格、期限、署名が含まれます。メモリ、トランスポート、資金、履歴は、すべてこのエンベロープを運ぶ仕組みにすぎません。
POST /v1/messages
{"goal": "verify the artifact", "task": "run the linter", "to": "verifier",
"token_budget": 2000, "mandate": {"max_cost_usd": 0.5}, "price_usdc": 0.005}
- 予算はメッセージとともに移動します。 受信側は処理を開始する前に上限を把握できます。
- 拒否には理由が付されます。 拒否のたびに、発動したルールが示されます。
- 機能低下は明示されます。 コンテキストが収まらなかった場合、レポートに何が除外されたかが記載されます。
- 署名はオフラインで検証できます。 Ed25519 で公開鍵も含まれるため、サービスも秘密情報も不要です。 ブラウザーでお試しください:https://rta.lat/hub/verify(フィールドを改ざんして、検証に失敗することをご確認ください)。
- コストは列挙するのではなく、測定します。 トークン、CPU、バイト、書き込み、外部呼び出しを測定します。
60 秒
pip install -e ".[dev]"
soma keygen # ключ подписи Ed25519
soma serve # хаб на http://127.0.0.1:8765
soma send --to research --goal "find the market" --task "scan 3 sources" --budget 2000
soma inbox --agent research
または、Python で:
from soma import Envelope, Hub
hub = Hub()
env = Envelope(goal="verify the artifact", task="run the linter", to="verifier",
token_budget=2000)
hub.send(env) # подписан и поставлен в очередь
hub.inbox("verifier") # что ждёт агента
hub.claim(env.id, "verifier") # забрать (атомарно)
hub.complete(env.id, {"text": "ok"})
理由
エージェントはすでに機能しています。足りないのは共有の神経系です。それぞれが自分のセッションしか記憶せず、根拠なく信頼し、権限なしで支出し、何をしたか証明できません。メモリ、来歴、認可、会計の仕組みはすべて存在しますが、それぞれが別々の製品で、互いに連携していません。
Soma はその接着剤です。意図的に小さく設計されており、中核となるのはプロトコル、リファレンス実装、適合性テストスイートです。プラットフォームでも、フレームワークでも、ベンダーでもありません。
同梱内容
| 構成要素 | 内容 |
|---|---|
src/soma/envelope.py | プロトコルの中核:エンベロープ、正規化、署名、権限ルール、ルーター、JSON Schema |
src/soma/memory.py | 3 層のメモリ — ホットキュー、ウォームファクト(SQLite + FTS5)、ハッシュによるコールドアーティファクト |
src/soma/server.py | HTTP トランスポート(標準ライブラリのみ) — /v1/messages、/v1/inbox、/v1/claim、/v1/complete、/v1/route |
src/soma/mcp_adapter.py | MCP アダプター — 同じ操作を MCP ツールとして提供(soma_send、soma_inbox、soma_claim、soma_complete、soma_route、soma_verify、soma_stats) |
src/soma/payments.py | 使用量の計測(トークン/CPU/バイト/書き込み/呼び出し)と x402 互換の支払い契約 |
src/soma/anchors.py | 追記専用の履歴チェーン(ハッシュリンク方式)。Arweave/IPFS/Nostr と接続するための接続点を備えています |
src/soma/registry.py | エージェントレジストリ — ファイル形式のため、エージェントと一緒に持ち運べます |
tests/test_protocol.py | プロパティテスト:改ざんすると署名が無効になる、権限不足はルール名とともに拒否される、予算が厳格に守られる、TTL が期限切れになる |
tests/test_conformance.py | 適合性テストスイート — あらゆる実装がこのテストに合格できます |
schemas/envelope.schema.json | ワイヤーフォーマット(コードからエクスポートされる、唯一の信頼できる情報源) |
PROTOCOL.md | 仕様 |
独自のハブを構築し、Mitra との通信を証明する
適合性テストスイートは、このプロジェクトの要です。実行方法は 2 通りあります:
# 1) any MCP endpoint, including the language you wrote yours in
python3 tools/check_conformance.py https://rta.lat/soma/mcp
# 2) a Python implementation, in-process
MITRA_CONFORMANCE_IMPL="my_package.hub:MyHubFactory" pytest tests/test_conformance.py -v
パブリックデモノードは https://rta.lat/soma/mcp で稼働しています。トークン不要で、クライアントごとに 1 時間あたり 30 リクエストまで利用できます。また、保存するすべてのエンベロープに visibility: public を強制します。非公開のデータは一切保存されません。手順を追ったガイドはこちら:docs/IMPLEMENT.md。
ファクトリーは一時ディレクトリを受け取り、send、inbox、claim、complete、route、verify、stats を備えたオブジェクトを返す必要があります。
12 項目を検証します:署名が検証できること、改ざんすると検証に失敗すること、予算が守られること、機能低下が明示されること、期限切れのエンベロープが配信されないこと、クレームが排他的であること、拒否理由が説明されること、完了によってエンベロープが閉じられること、予算と権限がエンベロープとともに移動すること、権限による拒否でルールが示されること、そして同じエンベロープ ID の再送信で元の内容が上書きされないこと。
既存のものとの組み合わせ
Soma はこれらのどれも置き換えません。それらの間でエンベロープを運びます。
- MCP — アダプターによって、同じ操作を MCP ツールとして公開できます。
- A2A — このリポジトリの
agents.jsonは A2A Agent Card です。エンベロープは A2A タスクに対応します。 - x402 — 支払いヘッダーの契約は
src/soma/payments.pyで定義されています。 - OPA / Cedar — マンデートのインターフェースは通常の関数です。ポリシーエンジンを接続できます。
- Sigstore / EIP-712 — 同じプリミティブ(署名済みペイロードと、それに付随する公開鍵)です。
- Arweave / IPFS / Nostr — アンカーのインターフェースは接続点です。ローカルのハッシュチェーンはオフラインで動作します。
オープンなものと、そうでないもの
これは分割の要点なので、明確に記しておきます。
| レイヤー | 例 | ライセンス | 理由 |
|---|---|---|---|
| プロトコル | エンベロープ、3 つのメモリ層、ルーター、5 つの接続点、適合性テストスイート | MIT、永久 | プロトコルが普及するのは、ほかの人たちが実装した場合に限られます。これは私たちが提案する候補であり、規則ではありません |
| エンジン | 詳細なアーティファクト検証、台帳を備えたマンデートエンジン、正確なコスト計測、スキルリンターのルールベース | クローズド | これが私たちの販売するものです |
| サービス | ホスト型ハブ、保証、x402 決済、レピュテーション、共有履歴、レジストリ | クローズド | 継続的な収益源であり、レピュテーションはコピーできず、蓄積するしかありません |
このリポジトリのリファレンス実装は、意図的に最小限にしています。実行、テスト、理解に必要な分だけです。これらはエンジンではありません。商用バンドル(Mitra Core)は同じ接続点にプラグインでき、それらについて私たちが持つ最良の実装ですが、このリポジトリには含まれていません。
Soma を基盤に構築するかどうかを決めるためにこれを読んでいるなら、答えは「はい、構築してください」です。自分で運用する代わりに、私たちのホスト型バージョンを使うかどうかを決めるために読んでいるなら、それは妥当な疑問です。保証、共有履歴、マネージド鍵管理が必要か、それともすべて自分で運用したいかによって、答えは変わります。
独自のエンジンを接続する
5 つの接続点はプロトコル(soma/interfaces.py)です。Signer、MandateEvaluator、MemoryTier、Meter、Anchor が該当します。これらの要件を満たすオブジェクトなら、どれでもプラグインとして使えます。
# my_engine.py
from soma.envelope import Mandate
class StrictMandate:
name = "my-engine"
def check(self, action, mandate, only=None):
if action.get("payee") == "mallory":
return False, "payee: blocked by my engine"
return True, "ok"
def components():
return {"mandate": StrictMandate()}
次の 2 通りの方法で読み込みます。
# 1) environment — for experiments and local runs
SOMA_PLUGINS="my_engine:components" soma serve
# 2) entry point — for a distributed package
# [project.entry-points."soma.plugins"]
# my_engine = "my_engine:components"
pip install my-engine && soma serve
GET /healthz には、実際に接続されているものが表示されます。
{"components": {"signer": "ed25519", "mandate": "my-engine", "meter": "usage",
"memory": "Memory", "anchor": "LocalChain", "plugins": ["my-engine"]}}
プラグインに問題があっても致命的なエラーにはならず、そのプラグインはスキップされます。ハブはリファレンス実装で起動し、その旨を /healthz に表示します。
誰が誰なのか、そしてそれが重要な理由
レジストリはファイルです。エージェントは、自分が鍵を保有していることを証明して登録します。ハブが一度限りのノンスを発行し、エージェントが署名します。秘密鍵を持たない者は登録できません。作業が完了すると、実行者がレシートに署名し、ハブがそれを検証して数えます。マンデートによって拒否された操作は違反として数えられます。レピュテーションはそこから導かれる事実です。つまり、レシートから誰でも再計算できる verified_receipts − 4 × breaches であり、主観や星評価はありません。
2 つのノード、1 つのプロトコル
ノード間で作業と履歴を共有できます。デフォルトはプライベートです。エンベロープがノードの外に出るのは、明示的に shared または public とマークされた場合に限られ、到着するすべてのエンベロープは署名され、受信側のレジストリに照らして検証されます。履歴はハッシュで連結されたチェーンであり、ほかのノードがインポートして検証できます。そのため、それを記録したノードがなくなっても履歴は残ります。これらにブロックチェーンは必要ありません。必要に応じて、外部アンカー(Arweave、IPFS)でチェーンを公開できます。
サーバープロファイル
デフォルトでは、参照トランスポートはローカルです。認証はなく、127.0.0.1 にバインドされます。独自のゲートウェイの背後に配置するコンポーネントです。公開環境にデプロイする場合は、管理プロファイルを利用できます。
SOMA_MANAGED=1 SOMA_TOKEN=<secret> SOMA_QUOTA_PER_HOUR=100 soma serve
| 変数 | 意味 |
|---|---|
SOMA_MANAGED=1 | すべてのリクエストで Authorization: Bearer $SOMA_TOKEN を必須にします |
SOMA_TOKEN | トークンです。設定されていない場合、管理プロファイルはすべてのリクエストを拒否します |
SOMA_QUOTA_PER_HOUR | 送信者ごとの1時間あたりの最大エンベロープ数(0 = 制限なし) |
SOMA_MAX_BODY | リクエストボディの最大サイズ(バイト単位、デフォルトは1 MiB) |
トークンが設定されていない場合、管理プロファイルは閉じた状態になります。設定ミスによってアクセスが可能になってはなりません。クォータは送信者ごとにカウントされるため、1つの騒がしいエージェントがほかのエージェントの予算を使い切ることはありません。
信頼について、率直に
- 参照 HTTP トランスポートには認証がなく、
127.0.0.1にバインドされます。公開する前に、独自のゲートウェイ(TLS、認証、レート制限)の背後に配置してください。ボディのサイズ上限は1 MiBです。 - 署名がそれだけで証明するのは完全性です。送信元を証明できるのは、送信者の公開鍵がエージェントレジストリに登録されている場合だけです。登録されていなければ、誰でも自分の鍵で自分のエンベロープに署名できます。参照実装は、レジストリがある場合にこれを確認します。
- ローカルの履歴チェーンが証明するのは順序と連続性です。最新のエントリを確定するには、外部のアンカーが必要です。
主張ではなく、測定結果
メモリの品質は主張ではなく、測定されています。ベンチマークはオフラインで、LLM を使わずに実行されます。bench/memory_bench.py(数値)と tests/test_recall_abilities.py(能力)を参照してください。
| 測定項目 | 結果 |
|---|---|
| 1,000件の事実、100件のクエリに対する Recall@1 | 100 %(直近20件の事実を対象とした場合:30 %) |
| 回答あたりのトークン数 | 約24(全コンテキストの場合:8,921) |
| 個別にテストされた能力 | 5 — 抽出、セッション間の想起、時間範囲、置き換え、回答の保留 |
| 署名 | オフラインで検証済み。過去のボディは明示的に検証され、その旨が記されています |
ここでいう回答の保留とは、裏付けとなる事実がない質問には、もっともらしい近似の答えを返すのではなく、何も返さないことです。常に回答するメモリは、事実を捏造するものと見分けがつきません。
ステータス
ベータ版です。プロトコルはバージョン管理されています(soma/1)。エンベロープには署名が付与され、予算は厳格に適用され、拒否の理由も説明されます。今後の予定については ROADMAP.md を、信頼モデルについては SECURITY.md を参照してください。
ライセンス
MIT。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。