Actionproof について
Actionproofは、AIエージェントの操作に暗号署名付きレシートを発行し、バックエンドなしでオフライン検証を可能にします。エージェントの操作とその主体を示す、持ち運び可能で改ざんを検出できる証拠を必要とする開発者や監査担当者向けです。
主な機能
- 01Ed25519署名付き操作レシート
- 02オフラインでのレシート検証
- 03`did:key` によるエージェント識別
- 04機密入出力のハッシュ化
- 05TypeScriptとPythonの相互運用
- 06ラッパーによるレシート自動発行
活用シーン
- 01メール送信や支払いの証跡記録
- 02エージェント操作レシートのオフライン検証
- 03監査向けの改ざん検出可能な記録
- 04フレームワークのツール呼び出しへのレシート発行
MCP 対応
MCPサーバーは `attest_action`、`verify_receipt`、`get_identity` ツールを公開します。初回起動時に安定したEd25519 IDを作成し、標準入出力で通信します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
ActionProof
AI エージェントの改ざん不能な監査証跡です。 検証可能な可観測性により、エージェントが実行するすべてのアクションに、どこでもオフラインで検証できる暗号署名付きのレシートが発行されます。バックエンドは不要です。
可観測性ツール(LangSmith、Langfuse、Arize)では、エージェントが「そうしたと報告している」内容が表示されます。つまり、プラットフォーム内に記録されたトレースを、プラットフォームの言葉を信頼して見ることになります。しかし、そのログは自己申告です。エージェント、バグ、攻撃者は何でも書き込めますし、後になって記録が編集されていないことを証明することもできません。
ActionProof は、欠けていた層である検証可能な可観測性を追加します。メール送信、フォーム提出、支払いなど、各アクションに、何が、どのエージェントによって、いつ、誰の権限で実行されたかを記録する、改ざんを検知できる Ed25519 署名付きのレシートが発行されます。フィールドを1つでも編集すると、検証に失敗します。これは、エージェント、ベンダー、あるいは私たちを信頼せずとも、あなた(または監査人、ユーザー、取引相手)が信頼できる監査証跡です。
今後求められるコンプライアンスの基盤として構築されています。EU AI Act(第12条)と ISO 42001 は、自動化された意思決定について、追跡可能で改ざんを検知できるログを求めています。ActionProof は、ウォールドガーデン型のプラットフォームではなく、持ち運び可能なプリミティブとして、それをそのまま実現します。
インストール
npm install actionproof # TypeScript / JavaScript
pip install actionproof # Python
レシートには相互互換性があります。TypeScript で署名したレシートは Python で検証でき、その逆も可能です。
クイックスタート(TypeScript)
import { attest, verify, generateKeypair } from "actionproof";
const agent = generateKeypair(); // agent's identity = its key (did:key)
const receipt = attest(agent, {
type: "email.send",
summary: "Sent renewal quote to [email protected]",
params: { to: "[email protected]", amount: 4200 }, // hashed, not stored in clear
result: { smtp: 250 },
outcome: "ok",
});
verify(receipt); // -> { valid: true, agent: "did:key:z6Mk..." }
クイックスタート(Python)
from actionproof import attest, verify, generate_keypair
agent = generate_keypair()
receipt = attest(
agent,
type="email.send",
summary="Sent renewal quote to [email protected]",
params={"to": "[email protected]", "amount": 4200}, # hashed, not stored in clear
result={"smtp": 250},
outcome="ok",
)
verify(receipt) # -> VerifyResult(valid=True, agent="did:key:z6Mk...")
このレシートのフィールドを1つでも編集すると、verify は無効を返します。それがすべてです。
活用方法:エージェントの可観測性における検証可能なレイヤー
ActionProof は可観測性スタックを置き換えるのではなく、補完します。豊富なトレース、レイテンシ、コストの把握には引き続き LangSmith/Langfuse/Arize を使い、重要なアクション(資金を移動する、状態を変更する、ユーザーデータを扱うもの)には ActionProof のレシートを添付します。そうすることで、証跡のその部分を改ざん検知可能かつ独立して検証可能にできます。
| 可観測性プラットフォーム | ActionProof | |
|---|---|---|
| 記録 | ベンダー内のトレース/ログ | あなたが保持する署名付きレシート |
| 信頼モデル | プラットフォームに保存された記録を信頼する | 暗号技術で検証し、誰も信頼しない |
| 改ざん検知 | DB にアクセスできる人なら編集可能 | 編集すると署名が無効になる |
| ポータビリティ | ベンダー内に保存される | オフライン、言語間で利用可能、どこでも使える |
| 大規模利用時のコスト | イベントごとの従量課金 | 約0ドル(ローカル署名、バックエンド不要) |
これは単なるログエントリーではなく、証明です。「ダッシュボードにはエージェントがこれを実行したと表示されている」と「誰でも検証できる署名付きレシートはこちらです」の違いです。
設計原則
- オフラインでバックエンド不要です。 エージェントは独自の Ed25519 キーを持ちます。署名と検証にはネイティブの暗号機能だけを使います。サーバー、アカウント、ネットワークは不要です。(これが、どの規模でも実行コストがほぼかからない理由でもあります。)
- プライバシーを保護します。 機密性の高い入力/出力は SHA-256 ハッシュとして保存されます。値をレシートに記録せずに、後からその値が一致することを証明できます。
- 競合するのではなく、組み合わせて使えます。 ActionProof はレシートのエンベロープです。
result_hashに、より強力な証拠(x402 の決済、AP2 の権限参照、DKIM 署名付き SMTP250など)を紐づけることで、取引相手の証拠に見合う強度のレシートにできます。 - レジストリ不要のアイデンティティです。 エージェントのアイデンティティは
did:key(自己記述型の公開鍵)です。何を信頼するかは、あなたのポリシー(固定したキー、許可リスト、または以下のオプションのログ)で決まります。
ワイヤーフォーマットについては SPEC.md を参照してください。
MCP サーバーとして使う(コード不要)
エージェントにレシート機能を最速で追加する方法は、ActionProof を MCP サーバーとして実行し、Claude Desktop/Cursor に追加することです。エージェントは attest_action、verify_receipt、get_identity の3つのツールを使えるようになり、何かを実行した直後にレシートを発行できます。
MCP クライアントの設定(例:Claude Desktop の claude_desktop_config.json)に追加します。
{
"mcpServers": {
"actionproof": {
"command": "npx",
"args": ["-y", "actionproof-mcp"]
}
}
}
サーバーは初回起動時に、固定の Ed25519 アイデンティティを生成します(~/.actionproof/agent.key.pem に保存されます。ACTIONPROOF_KEY_PATH で変更できます)。サーバーが署名するすべてのレシートは、この1つのエージェント did:key に紐づきます。
自動でレシートを発行(フレームワークラッパー)
各アクションの後に毎回手動で attest を呼び出す必要はありません。ツールを一度ラップすれば、呼び出すたびにレシートが発行されます。
TypeScript(フレームワークに依存せず、LangChain.js、Mastra、Vercel AI SDK で動作します):
import { withReceipts, generateKeypair } from "actionproof";
const agent = generateKeypair();
const send = withReceipts(agent, rawSendEmail, {
type: "email.send",
onReceipt: (r) => store(r), // called with a signed receipt on every call
});
Python(@attest_action デコレーター、または LangChain/CrewAI コールバック):
from actionproof import attest_action, ActionProofCallbackHandler
@attest_action(agent, type="email.send", on_receipt=store)
def send_email(to, body): ...
# or attest every tool a framework agent runs, no per-tool code:
handler = ActionProofCallbackHandler(agent, on_receipt=store)
agent_executor.invoke(input, config={"callbacks": [handler]})
ローカルで開発する
git clone https://github.com/Burakfenerci5/actionproof
cd actionproof && npm install
npm run demo # full sign → verify → tamper loop
npm test # TS suite (9 tests)
npm run mcp # start the MCP server over stdio
cd python && pip install -e ".[dev]" && pytest # Python suite (7 tests, incl. TS↔Python interop)
ロードマップ
- 現在(リリース済み): TypeScript ライブラリ+MCP サーバー+フレームワークラッパー、およびデコレーターと LangChain/CrewAI コールバックを備えた Python パッケージ。両者の間でレシートを相互運用できます。
- 次の予定: LlamaIndex / CrewAI のファーストクラスプラグイン、既存のオブザーバビリティスタック(OpenTelemetry、LangSmith、Langfuse)のスパンにレシートを付加するエクスポーター。
- 後日(オプション、ホスト型): 検証可能な監査ダッシュボード — 検索・共有が可能で、改ざんの痕跡を確認できる、エージェント群の活動のタイムラインです。追記専用ログを基盤とし、自力で構築することなくコンプライアンスレベルの証跡(EU AI Act / ISO 42001)を必要とするチーム向けです。ライブラリと MCP サーバーは今後も無料で、オフラインで利用できます。 有料サービスとなるのはホスト型ダッシュボードのみです。
ライセンス
MIT。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。