phaedo-mcp について
phaedo-mcpは、個人の文章や判断の好みをAIアプリに提供し、重要な操作をスマートフォンで承認できるMCPサーバーです。委任作業に自分の好みや承認判断を反映したいユーザー向けです。
主な機能
- 01文章の好みを含むプロファイルの読み込み
- 02重要な操作の事前確認
- 03スマートフォンへの承認依頼
- 04承認判断からの学習
- 05購入権限への署名
- 06プロファイルの暗号化キャッシュ
活用シーン
- 01AIチャットに好みの口調や長さを反映
- 02ペアリング済み端末でエージェントの操作を確認
- 03委任作業の扱い方をエージェントに学習
- 04スマートフォンで購入権限を承認
MCP 対応
プロファイルの注入、相談、権限確認、承認へのエスカレーション、結果記録、権限署名のためのツール、リソース、プロンプトを提供します。ローカルのstdioで動作します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
Phaedo MCP サーバー(phaedo-mcp)
Phaedo はあなたの文章の書き方、仕事の進め方、意思決定の方法を学習し、そのプロフィールをスマートフォンに保存します。 このサーバーを使うと、Claude Desktop、Claude Code、Cursor など、MCP に対応するあらゆるアプリから Phaedo を利用できます。次のことが可能になります。
- 好みに合わせて回答する — 毎回のチャットで伝えなくても、好みの長さ、口調、形式で回答します。
- 実行前にあなたに確認する — AI エージェントが Phaedo に、作業を進めてもよいか尋ねます。判断に迷うと、スマートフォンに承認/拒否のカードが届きます。
- あなたの回答から学習する — 承認または拒否するたびに、あなたが見ていないときに仕事をどう進めるべきかを学習します。
- 購入に署名する — Face ID を使い、スマートフォンで支出の許可に署名します。エージェントがキーを持つことはありません。
プロフィールはスマートフォンから暗号化されて取り込まれます。スマートフォンがオフラインのときに備えて、このコンピューターに保存されるコピーも暗号化されています。
必要なもの
- プロフィール。次のいずれかから取得できます。
- Phaedo のスマートフォンアプリ — 完全なプロフィールはアプリに保存されます。アプリはまだ一般公開されていません。公開時のお知らせを受け取るには、phaedo.so のリンクをご利用ください。
- 自分の Claude Code セッション — スマートフォンは不要です。Phaedo が Claude Code での作業方法をもとに、このコンピューター上に初期プロフィールを作成します(以下を参照)。
- Node.js — nodejs.org から無料で入手できます(LTS ボタン)。
どちらもない場合、プロフィールがないことをサーバーは推測で補わず、明確に伝えます。架空のサンプルプロフィールで Phaedo を試すことはできます。
サンプルプロフィールで試す(スマートフォンは不要)
架空の人物のプロフィールを読み込み、自分のプロフィールがなくても Phaedo がどのように役立つかを確認できます。
Claude Code — ターミナルで次を実行します(すべてのプロジェクトに適用されます)。
claude mcp add -s user phaedo -e PHAEDO_FINGERPRINT=sample -- npx -y phaedo-mcp
Claude Desktop — Settings → Developer → Edit Config を開き、mcpServers 内に次の phaedo エントリーを追加して保存し、Claude Desktop を終了して再起動します。
{
"mcpServers": {
"phaedo": {
"command": "npx",
"args": ["-y", "phaedo-mcp"],
"env": { "PHAEDO_FINGERPRINT": "sample" }
}
}
}
Claude Desktop でサーバーの起動に失敗したと表示される場合は、npx が見つかっていません。次のコマンドで表示されるフルパスに "npx" を置き換えてください。
which npx
その後、新しいチャットを開始して、"Load my Phaedo profile." と尋ねてください。サンプルの使用をやめるには、Claude Desktop では env 行を削除します。または Claude Code で claude mcp remove -s user phaedo を実行し、-e … を付けずに追加し直します。スマートフォンをペアリングするまでは、サーバーがプロフィールがないことを伝えます。
Claude Code のセッションからプロフィールを作成する(スマートフォンは不要)
Claude Code を使っている場合、Phaedo はそこでの作業方法から学習し、このコンピューター上に初期プロフィールを作成できます。たとえば、見出しなしの短い回答を好むことなどです。最初は簡素ですが、作業を続けるうちに充実していきます。
- 以下の手順 1 と同様にこのフォルダーを取得します(Code → Download ZIP を選択し、解凍して
mcpフォルダーを開きます)。 - Claude Code フックをインストールします。 ターミナルで
mcpフォルダーから次を実行します。npm install
これにより、Phaedo が AI アプリに追加され、Claude Code で次の 3 つの機能が有効になります。セッション開始時にプロフィールを読み込むこと、マージまたは公開する前にあなたに確認すること、セッションから学習することです。npm run setup:code-hook - Claude Code を終了して再起動し、作業を続けます。最初のセッションでプロフィールを作成し、その後の各セッションで学習内容を取り込みます。
読み取られた内容はこのコンピューターから外に出ません。各セッションは「短い回答を4回求めた」のような回数に集約され、テキスト自体は破棄されます。後からスマートフォンアプリをペアリングすると、完全なプロフィールが初期プロフィールに置き換わり、これまでに学習した内容も引き継がれます。
スマートフォンアプリを使って自分のプロフィールを使う
-
このフォルダーを取得します。 GitHub ページで Code → Download ZIPをクリックして解凍し、中にある
mcpフォルダーを開きます。 -
インストーラーを実行します。
- macOS:**
installers/macos/Install Phaedo MCP.commandをダブルクリックします。macOS に開けないと表示された場合は、右クリックして「開く」**を選択します。 - Windows:**
installers/windows/Install Phaedo MCP.bat**をダブルクリックします。 - Linux:
bash installers/linux/install-phaedo-mcp.shを実行します。
他の設定を保持し、各ファイルを先にバックアップしたうえで、Phaedo を Claude Desktop、Cursor、Claude Code に追加し、ペアリングを開始します。
- macOS:**
-
**スマートフォンとペアリングします。スマートフォンで Phaedo を開きます。同じ Wi-Fi に接続している場合は、"Phaedo MCP Server"**を承認し、コードが Terminal に表示されたコードと一致していることを確認します。別のネットワークに接続している場合は、Pair with codeをタップして、Terminal に表示されるコードを入力します。
-
AI アプリを終了して再度開き、新しいチャットを開始して、次のように尋ねます:「Phaedo プロフィールを読み込んでください。」
スマートフォンのAgents画面から、いつでもこのコンピューターとの接続を解除できます。
リファレンス
以下はすべて開発者向けです。ツールの全一覧、プロフィールの読み込み方法、テストスイートを説明します。
このサーバーは、Anamnesis プロトコルの MCP バインディング(docs/protocol/mcp-binding.md §3.1)を実装しています。
| サーフェス | 名前 | 返される内容 |
|---|---|---|
| ツール | phaedo_request_injection | §9.2 リクエスト → §9.3 Injection Response |
| リソース | phaedo://fingerprint/projection | デフォルトのプロジェクション(すべてのレイヤー、標準) |
| プロンプト | phaedo | ワンクリックの/phaedo — プロジェクションをメッセージとして挿入します |
| ツール | phaedo_consult | §10.2 リクエスト → §10.3 Consultation シグナル(レイヤーの内容は返しません) |
| ツール | phaedo_check_authorization | 決定論的な事前確認のみ:既存の常設承認(§10.5)によって、このアクションの実行可否がすでに決まっていますか?(推論は行いません) |
| ツール | phaedo_escalate | 相談を実行し、ブロッキングシグナル(escalate、または重大な結果を伴うclarify)がある場合は、対象者のペアリング済みデバイスを起動して、ライブの承認/拒否/変更を求めます。request_idを返します(非ブロッキング)。応答がない場合の安全なデフォルトは保留です。 |
| ツール | phaedo_escalation_status | request_idでエスカレーションの状態を確認します。解決時には、§10.6 の結果として対象者のライブ判断を自動的に記録します(リアルタイムの承認/拒否は、「本人として行動する」ための最も強いシグナルです)。 |
| ツール | phaedo_record_outcome | §10.6 — 相談したアクションについて対象者が下した判断(approved/rejected/modified/unknown)を記録します。rejected/modifiedの結果は、本人として行動するチャネル(委任された作業をユーザーがどのように扱ってほしいか)に学習させます。 |
| ツール | phaedo_sign_mandate | §8.3 — 対象者の常設承認から作成された AP2 Intent Mandate(検証可能な決済認証情報)への署名を対象者に求めます。リクエストを登録し、request_idと未署名の委任状を返します(非ブロッキング)。対象者は Secure Enclave 内でスマートフォンを使って署名するか、拒否します。 |
| ツール | phaedo_sign_status | request_id(および返された委任状)を使ってphaedo_sign_mandateリクエストの状態を確認します。署名後は検証済みの署名付き委任状を、拒否された場合はrefusedを、処理中または期限切れの場合はその状態を返します。返却前に、署名が対象者の公開署名鍵と照合されます。 |
プロジェクションは、拡張機能が挿入するものと同じcontext-block.jsでレンダリングされるため、MCP による挿入はウェブからの挿入とバイト単位で同一です。
ステータス
以下のフェーズは、フィンガープリントの取得元(サーバーがフィンガープリントをどのように取得するか)を示しています。相談、リアルタイムのエスカレーション、代理としての操作/委任、監査証跡の各機能(上記のツール表)は、0.2.x 系でこれらの機能を基盤としてリリースされ、§8.3 の署名ペアは 0.3.0 でリリースされました。詳細は CHANGELOG.md をご覧ください。
0.3.0 以降をインストールしてください。 0.2.0、0.2.1、0.2.2 は、パッケージに 3 つのモジュールが欠けた状態で公開されたため、起動せずに
ERR_MODULE_NOT_FOUNDで終了します。0.3.0 は 0.1.1 以来、初めて動作するリリースです。また、test-package-closure.mjsにより、CI でパッケージ化された tarball が起動することを確認するようになりました。
- フェーズ 1a(今回のリリース): ローカルの JSON ファイルからフィンガープリントを読み込みます(フィンガープリントの取得元を参照)。暗号処理なしで、現在実際のクライアントでインジェクションを利用できます。
- フェーズ 1b-i(完了): 仕様に忠実な鍵の境界です。認可 →
/v1/profileの取得 → ペアリング済みのスマートフォンから §7.2 のエンベロープを復号し、リポジトリの暗号モジュール(protocol/envelope/kdf/identity.js)を Node.js で再利用します。復号されたフィンガープリントはメモリ内に保持され、ディスクには書き込まれません。ペアリング記録が設定されている場合は自動選択されます(フィンガープリントの取得元を参照)。計画と判断内容:../docs/roadmap/mcp-1b-plan.md。 - フェーズ 1b-iii(完了): 保存時の暗号化キャッシュ — スマートフォンからの取得に成功すると、フィンガープリントをサーバーが保持する鍵で暗号化してキャッシュします。スマートフォンに接続できない場合、サーバーはそのキャッシュを提供するため、スマートフォンが不在でも動作します(手間のかからないデフォルト動作で、拡張機能のオプション C と同様に、多層防御を採用し、スマートフォンへの接続を必須としません)。状態ディレクトリのデフォルトは
~/.phaedo-mcp/です(PHAEDO_MCP_STATE_DIRで変更できます)。ここには0600の鍵ファイルと、暗号文のみのキャッシュが保存されます。失効は反映されます: スマートフォンがこのクライアントを拒否した場合(認証の失効/無効な認証情報 → 4xx)、キャッシュは消去され、取得は失敗します。失効したエージェントがキャッシュされたコピーを提供し続けることはできません。キャッシュが使われるのは、スマートフォンに実際に接続できない場合(ネットワーク/タイムアウト)に限られます。v1 の注意点:生の鍵がディスク上に保存されます(抽出不可能な鍵を使う拡張機能より保護が弱くなります)。セキュリティ強化として、OS のキーチェーン対応を今後実施する予定です。 - エージェントごとの失効可能なペアリング(実装済み、デバイス検証待ち): サーバーは、SAS で承認された失効可能な独立したクライアントとして、スマートフォンとそれ自体をペアリングします。
npm run pairを実行します(拡張機能と同様に、LAN の自動検出、またはリレー経由でコードを入力します)。スマートフォンの複数クライアント対応(仕様 §8.4 v0.1.6)と、スマートフォンのエージェント/失効画面が必要です。ペアリング記録を手動でコピーする必要がなくなります。計画:../docs/roadmap/mcp-revocable-approval-plan.md。スマートフォンへの接続を必須とする解除方式は、設定フラグで有効化するエンタープライズ向けモードとして、引き続き保留中です。
会話のキャプチャはオプトインです。 MCP プロトコルからサーバーに会話が渡されることはないため、サーバーはチャットから何も学習しません(拘束条項 §5)。相談、エスカレーション、phaedo_record_outcome で記録するのは判断であり、会話のテキストではありません。キャプチャは、ユーザーが有効にした機能を通じてのみ行われます。Claude Code のフック(npm run setup:code-hook。以下のClaude Code/Cowork からのキャプチャを参照)と、Mac に別途インストールするアクセシビリティリーダー(capture-a11y.js に情報を送ります)の 2 つです。どちらもこのコンピューター上で読み取り、シグナル名と件数だけを保持し、テキストは破棄します。
ローカルの stdio のみ、標準モードのみです(拡張プライバシー/Stained-Glass およびリモート HTTP/SSE は今回のリリースには含まれません)。
インストールとテスト
npm からインストール(公開済み)。 サーバーはレジストリ上の phaedo-mcp として公開されています。クローンせずに実行できます。
npx phaedo-mcp # run the server directly over stdio
# or install the `phaedo-mcp` command globally:
npm install -g phaedo-mcp
ほとんどのユーザーはサーバーを手動で起動する必要はありません。以下のワンクリックインストールで MCP クライアントを設定すれば、phaedo-mcp が Claude Desktop/Cursor/Claude Code に追加されます。この README の残りにある cd mcp/npm run … コマンドは、開発やスモークテストのためにこのリポジトリをクローンして作業する場合のものです。
cd mcp
npm install
npm test # full suite (smoke + phone + cache + pairing + consult + …)
npm run smoke # 1a: unit + live stdio integration (23 checks)
npm run smoke:phone # 1b-i: mock-phone authorize→pull→decrypt→project (12 checks)
npm run smoke:cache # 1b-iii: encrypted at-rest cache + phone-absent fallback (11 checks)
npm run smoke:pair # P3: self-pairing crypto vs a mock phone (pair_key + SAS match)
スマートフォンとペアリングする
cd mcp
npm run pair
サーバーは独自の長期 ID(identity.json、0600、Git の追跡対象外)を生成し、別個のクライアント「Phaedo
MCP Server」としてスマートフォンのボルトとペアリングします。
- **同じ Wi-Fi ネットワークの場合:**スマートフォンを自動的に検出します。スマートフォンで「Phaedo MCP Server」を承認し、SAS がターミナルに表示されたものと一致することを確認してください。
- ネットワーク外の場合:
XXXX-XXXXコードが表示されます。スマートフォンで「コードでペアリング」をタップしてコードを入力し、SAS を確認してください。
成功すると pairing.json を書き込み、その後は自動的にフィンガープリントを取得します。スマートフォンの「エージェント」画面からいつでもペアリングを解除できます。
フィンガープリントのソース
loadFingerprint() が自動的に選択するため、server.js/projection.js を変更する必要はありません。
フェーズ 1b — スマートフォン(優先)。 ペアリングレコードが設定されている場合、サーバーは暗号化された境界を介して、ペアリング済みのスマートフォンから最新のフィンガープリントを取得します。レコードは PHAEDO_PAIRING(パス)または mcp/pairing.json から検出されます。作成するには npm run pair を実行してください(「スマートフォンとペアリングする」を参照)。サーバー自身が、取り消し可能な独自のクライアントとしてスマートフォンとペアリングします。pairing.json には pair_key(長期シークレット)が含まれ、Git の追跡対象外です。スマートフォンアプリは、設定された endpoint でフォアグラウンドにあり、接続可能である必要があります。(必要であれば、拡張機能の phaedo_local_pairing から pairing.sample.json → pairing.json を手動でコピーすることもできます。)
フェーズ 1a — ローカル JSON。 ペアリングレコードがない場合は、PHAEDO_FINGERPRINT(パス、または同梱の mcp/sample-fingerprint.json を指定する sample)からボルトのペイロードを読み込み、次に mcp/fingerprint.json を読み込みます。どちらもない場合は、スタータープロファイルを使用します。これは、このコンピューター上の Claude Code のキャプチャ状態を空のフィンガープリントに統合したもので(ID は starter-local)、何かを学習した場合に限り提供されます。キャプチャされた情報がない場合、プロファイルはありません。すべてのツールは、その旨を示す平易な言葉の decryption_failed エラーを返します。サンプルは名前で明示的に指定しない限り提供されません。0.3.1 までは暗黙のフォールバックだったため、新規に npx phaedo-mcp を実行すると、架空の人物のスタイルが何も通知されないまま注入されていました。ファイルの内容は次のようになります。
{
"phaedo_fingerprint": { "layers": { ... }, "fingerprint_id": "...", "persona_strength": 0.6 },
"phaedo_behavioral_signals": { ... },
"phaedo_linguistic_profile": { "messageCount": 64, ... },
"phaedo_session_metrics": { "sessionCount": 6, ... }
}
ワンクリックインストール(推奨)
インストーラーは、すでにインストールされている MCP クライアント(Claude Desktop、Cursor、Claude Code)を検出し、Phaedo をそれぞれに追加します。ほかのサーバーの設定は保持され、ファイルは事前にバックアップされます。その後、スマートフォンとの初回ペアリングを実行します。
- macOS:****
installers/macos/Install Phaedo MCP.commandをダブルクリックします。 - Windows:****
installers/windows/Install Phaedo MCP.batをダブルクリックします。 - Linux:
bash installers/linux/install-phaedo-mcp.shを実行します。
(ランチャーは初回に依存関係をインストールし、その後インストーラーを実行します。)
ターミナルから実行する場合は、このフォルダーで次のコマンドを実行します。
npm install
npm run setup # configure detected clients
npm run setup:pair # configure, then pair with the phone
npm run unsetup # remove Phaedo from every client
node install.mjs --dry-run # preview, write nothing
各クライアントのエントリーでは、node だけを指定するのではなく、node バイナリの絶対パスを使ってサーバーを実行します。Claude Desktop のように GUI から起動するアプリでは、PATH に node が含まれていないことがよくあります。インストール後、すでに起動しているクライアントを再起動し、チャットの開始時に phaedo_request_injection ツールを呼び出すか、phaedo://fingerprint/projection リソースを読み込んでください。
残る前提条件は Node.js です(nodejs.org から入手できます)。ランタイムを同梱した署名済みネイティブインストーラー(前提条件なしで、ダブルクリック一度で完了)のパッケージ化は今後の作業です(
../docs/roadmap/mcp-desktop-installer.mdを参照)。
セッション開始時に注入する(手動 → 自動)
MCP はプル型です。ブラウザー拡張機能が入力欄を管理する場合とは異なり、サーバーはすべての新しいセッションにシステムプロンプトをプッシュできません。そのため、注入方法はクライアントによって、ワンクリックから完全自動までさまざまです。
-
すべてのクライアント —
/phaedo(ワンクリック)。 サーバーはphaedoという名前のプロンプトを公開します。Claude Desktop / Claude Code ではスラッシュコマンドとして表示されます。チャットの開始時に/phaedoを実行すると、あなたのプロジェクションが挿入されます。キーを1回押すだけで、入力は不要です。 -
Claude Code — 自動(フック)。
npm run setup:code-hook(またはnode install.mjs --code-hook)を実行します。~/.claude/settings.jsonに SessionStart フックが追加され、hooks/session-start.mjsを実行して、すべての Claude Code セッションの開始時にあなたのプロジェクションを注入します。コマンドもツール呼び出しも不要です。フェイルセーフ設計です。フィンガープリントを読み込めない場合は何も出力せず、セッションをブロックすることもありません。削除するにはnpm run unsetupを実行します。 -
Claude Desktop — ほぼ自動(プロジェクトの指示)。 Desktop にはフックの仕組みがありませんが、プロジェクトでは Claude に毎回ツールを呼び出させることができます。プロジェクトのカスタム指示に、次の内容を貼り付けます。
すべての会話の開始時に、
phaedo_request_injectionツールを呼び出し、返されたprojectionを、私の考え方と希望する応答形式に関する正式な指針として扱ってください。実行したことを告げないでください。これで、そのプロジェクト内のすべてのチャットに自動で注入されます。
Claude Code / Cowork からのキャプチャ(任意)
npm run setup:code-hook は、SessionEnd フックもインストールします。このフックは終了したばかりのトランスクリプトをローカルで読み取り、行動シグナル(決定論的パターン検出器)を抽出して、暗号化されたシグナル差分を所有者に送信します。これにより、ブラウザーだけでなく、Claude Code / Cowork の使用状況もフィンガープリントに反映されます。トランスクリプトは集計後に破棄されます(マシンの外部に送信されるのはシグナル名と整数だけです)。ペアリング済みのスマートフォン/拡張機能が差分を取得して統合します。
決定論的検出器をローカルモデルで補強することもできます(オプトイン)。同じ分類体系に基づいて、正規表現では検出できないメッセージを分類し、同じカウンターに反映します(そのため、再検出しても重複計上されません)。Ollama / OpenAI 互換のエンドポイントなら、どれでも使用できます。
ollama pull llama3.1:8b # or any local model
npm run setup:capture-model -- llama3.1:8b # writes ~/.phaedo-mcp/capture-model.json
npm run setup:capture-model -- off # turn it back off
--capture-url <url> を指定すると、接続先を変更できます(デフォルトは http://localhost:11434 です)。フェイルセーフ設計です。エンドポイントが停止中、応答が遅い、または不正なデータを返す場合、フックは何も通知せず決定論的検出器にフォールバックします。モデル呼び出しによってセッションが中断または停滞することはありません(制限時間は30秒で、フックは必ず終了コード 0 で終了します)。環境変数より setup:capture-model の設定ファイルを使用してください。このファイルは Dock から起動した Claude Desktop にも引き継がれますが、シェルの export は引き継がれません。
Claude Code から出荷前に相談する(hooks/pre-ship.mjs)
npm run setup:code-hook は、Bash に出荷フック(PreToolUse、
PermissionRequest、PostToolUse、PostToolUseFailure)もインストールします。エージェントが PR をマージする
(gh pr merge)、デプロイする(fly deploy)、スマートフォンアプリをビルドまたは提出する(eas build /
eas submit)、あるいは main に直接プッシュする前に、フックが対象について
phaedo_consult を実行し(対象のコマンドは ship-actions.js に記載されており、それ以外のコマンドは約 50 ミリ秒で無視されます)、§10.6 のレシートに
agent_id: claude-code/ship-hook と記録します。
- 摩擦を加えることしかしません。
allowを返すことはありません。寛容な回答の場合、Claude Code 独自の権限フローには影響しません。escalate/clarify/declineが返された場合はaskを返すため、そのアクションは理由を示す簡潔な一文とともにあなたに提示されます。 - 結果はあなたが決めるものであり、推測されることはありません。 あなたに確認が求められた証拠がある場合に限り、フックは
approvedを記録します。つまり、Claude Code がそのコマンドに対して PermissionRequest を発火し、その後コマンドが実行された場合です。人が回答しない auto / dontAsk モードを除くすべてのモードで、この条件が成立します。拒否した場合、エージェントはrejectedを記録します(Claude Code は拒否時にフックを発火しません)。プロンプトが表示されなければ何も記録されず、そのことがエージェントに通知されます。あなたが反応を示した場合に限り、その反応が記録されます。 - マージによって変わること。
gh pr mergeの前に、フックは GitHub から PR を読み取り専用で取得します。チェックの失敗または未完了、大規模な差分(コード 1,000 行超または 20 ファイル超)、機密性の高いパス(CI/デプロイ設定、名前から判断される認証/暗号化/シークレット、またはベースブランチから読み込まれるリポジトリの.phaedo-sensitiveリスト)がある場合、重大度が高いと判断します。重大度を引き上げることはありますが、引き下げることはありません。 - プロファイルが古い場合。 保存済みのプロファイルキャッシュを読み取るため、スマートフォンにアクセスすることはありません。そのコピーが 14 日を超えて古い場合、エージェントは 1 日に 1 回、次の更新方法とともに通知します。
npm run pullを実行し、スマートフォンで承認してください。 - 実行内容を確認するには:
npm run ship-readout(範囲を広げるには-- --days 90を指定)。 - フェイルセーフ: エラー、タイムアウト(12 秒)、または利用できないプロファイルが発生した場合、出力は行われず、フックがない場合と同じようにコマンドが実行されます。
判断の時点で相談する(phaedo_consult、§10)
スタイルを反映するだけでなく、エージェントはフィンガープリントを取り込まずに、ユーザーのパターンが判断にどう関わるかを問い合わせることができます。phaedo_consult は
§10.2 のリクエストを受け取り、§10.3 のシグナルを返します。レイヤーの内容は返しません(§10.4 の境界)。
// request (tool arguments)
{ "consultation_type": "action_approval",
"action_descriptor": { "domain": "financial", "reversible": false, "magnitude": "high",
"summary": "Approve $12k vendor payment outside terms." },
"context": { "evidence_provided": ["invoice", "po_match"] } }
// response
{ "signal": "escalate", "confidence": 0.81,
"rationale_hint": "On irreversible, high-magnitude actions in the financial domain, the subject favors caution and human review.",
"deference_level": "high" }
consultation_type:action_approval·domain_risk_check·escalation_default·voice_draft。signal:proceed·proceed_with_note·clarify·escalate·decline·insufficient_signal(回答を保留します。フィンガープリントにこのアクションに関する情報がない場合、または関連する判断の軸が、本人がまだ調整中の §4.7 の未解決の対立に関わるため保留されている場合に該当します。自身の既定の判断に従うか、本人にエスカレーションしてください)。deference_level(high/medium/low)=どの程度重視するかを示します。データが少ない場合はlowになります。
迅速な事前確認(phaedo_check_authorization、§10.5)
完全な相談に進む前に、エージェントは、あなたの常設承認によってそのアクションがすでに決定されているかを確認できます。これは決定論的な確認のみを行い(推論もモデルも使いません)。
// request: { "action_descriptor": { "domain": "financial", "reversible": false, "amount": 12000 } }
// matched: { "authorization_matched": true, "signal": "escalate", "rule_id": "irreversible-spend-over-5k-escalate",
// "rationale_hint": "Per your standing rule: Any irreversible spend over $5,000 goes to me…" }
// no match: { "authorization_matched": false, "signal": null, "rule_id": null,
// "rationale_hint": "No standing authorization matches this action; run phaedo_consult…" }
一致した場合、それが事前の決定となります(信頼度 1.0、委任度 high)。一致しない場合は、phaedo_consult または自身の既定の判断に従ってください。§10.4 と同じ境界が適用され、ルールの判断のみが渡されます。
Receipts(§10.6)— デバイス上の監査証跡
解決された相談(保留したものや、事前確認で一致したものを含む)ごとに、エージェントが何を尋ね、オラクルがどう回答したかを記録する暗号化された追記専用のレシートが、~/.phaedo-mcp/receipts.enc に1件書き込まれます。レシートがデバイスの外に出ることはありません。ストアは独自の派生鍵(phaedo:receipts:enc:v0.1)で暗号化され、上限(デフォルトは5,000件。古いものから削除。変更するには PHAEDO_RECEIPTS_CAP)があります。書き込み後に変更できるフィールドは1つだけです。それは user_action(実際にあなたがしたこと。今後の合意追跡に利用されます)です。自分のマシンで簡単に確認するには:
cd mcp && npm run receipts # decrypts locally, lists the last 50 (with a short id per line)
node receipts.js mark <id|prefix|latest> approved # record what YOU did → approved | rejected | modified | unknown
npm run agreement # per-domain agreement rate (oracle vs your actual decisions)
user_action はユーザー自身が記入する項目です。エージェントが処理を続行したかどうかではなく、あなた自身が決めたことを設定してください。レシートに値が記録されるまでは、npm run agreement は — を表示します(データがないことは0%を意味しません)。値を記録するたびに、合意率が反映されるようになります。指標の定義については、../docs/architecture/agreement-metric.md を参照してください。
2つのリゾルバーがあり、どちらもローカルで動作します。 デフォルトは決定論的なルールエンジンです。手がかりを柔軟に抽出し(§4.2のシグナルを読み取った後、関連レイヤーのインタビューテキストをキーワード検索します)、相談の種類ごとに関連性を限定し、実際の手がかりの網羅度に基づいて確信度と委任度を決定します。デバイスの外に情報が出ることはなく、常に利用できます。
モデルジャッジ(最も豊富なコンテキストを利用 — デフォルトでは有効、ローカルで動作)。 ジャッジはローカルの Ollama/OpenAI互換エンドポイントを介して完全なプロジェクションを推論し、§10.3のシグナルを返します。失敗・タイムアウト・解析エラーが発生した場合はルールエンジンにフォールバックします。そのため、モデルは基盤となる機能を損なわず、改善することだけができます(モデルがなくても相談が妨げられることはありません)。解析時には§10.4の境界が適用されます。
ジャッジはデフォルトで無効で、回答にはルールエンジンが使われます。2026-10-18に1つのキャッシュ済みプロファイルで測定したところ、llama3.1:8b はある実行では12,000ドルの取り消せない支払いに対して clarify 0.9 と回答し、次の実行では proceed_with_note 0.9 と回答しました。一方、ルールでは毎回 clarify となります。モデルの実力が確認できたら、インストール時にオプトインしてください。
npm run setup # model judge OFF (rule engine) — the default
node install.mjs --model-judge # ON, auto-detect a local Ollama chat model
node install.mjs --consult-model qwen2.5:7b # ON, pinned
node install.mjs --consult-url http://localhost:11434 # custom endpoint
自動検出では、インストール済みの場合に llama3.1:8b が優先されます。また、抽出用ファインチューンや埋め込みモデルは選択されません(nomic-embed-text はチャットプロンプトに回答できません)。
汎用チャットモデルを使用してください(抽出用ファインチューンは使用しないでください)。実行するには、ollama pull llama3.1:8b を実行します。クライアントを手動で設定する場合の環境変数:
PHAEDO_CONSULT_MODEL、PHAEDO_CONSULT_MODEL_URL、PHAEDO_CONSULT_API_KEY(OpenAI互換エンドポイントのみ)。
voice_draft は常にインジェクション用プロジェクションにリダイレクトされます(生成は対象外です)。次のアップグレードでは、検索/スコープ設定用の再ランキングを予定しています(../docs/roadmap/mcp-server.md)。
委任ポリシー(安全な委任を実現するガードレール)
ユーザーは、ドメイン・金額・可逆性ごとに、推定されたシグナルを上書きする継続的なルールを作成できます(仕様 §10.5)。例:「取り消せない支出/法的事項は常にエスカレーションする」、「リスクの低い可逆的な文章作成は自動的に続行する」。
ブラウザーで作成してください: policy-editor.html を開き(ダブルクリックするだけで使用できます。単独で動作します)、フォームでルールを作成し、結果を mcp/consult-policies.json にダウンロード/コピーします。サーバーはこのファイルを自動的に読み込みます。環境変数は不要で、クライアントを再起動するだけです。(PHAEDO_CONSULT_POLICIES でパスを上書きできます。consult-policies.sample.json を参照してください。)ポータブルな代替方法として、ルールを Vault の phaedo_consult_policies に保存すると、どこへでも持ち運べます(アプリ内での作成機能は今後対応予定です)。
effect:escalate/require_human · decline · autoproceed(いずれも deference: high)· bias_cautious/bias_bold(1段階調整)。一致したルールの note は rationale_hint(「あなたの継続的なルールに従って:…」)になり、エージェントは理由を確認できます。ポリシーは voice_draft には適用されず、§10.4の境界が広がることもありません。
クライアントを手動で接続する(上級者向け)
インストーラーは以下をそのまま書き込みます。最小限のペアリング済みエントリーには env は不要です —
server.js の隣にある pairing.json がソースを自動的に指定します。
Claude Desktop — claude_desktop_config.json に追加します:
{
"mcpServers": {
"phaedo": {
"command": "/absolute/path/to/node",
"args": ["/absolute/path/to/phaedo/mcp/server.js"]
}
}
}
Phase-1a のデモ(電話なし)では、"env": { "PHAEDO_FINGERPRINT": "/absolute/path/to/your/fingerprint.json" } を追加します。
Claude Desktop を再起動し、チャットの開始時に phaedo_request_injection を呼び出して、返された projection を先頭に追加します。
Claude Code — プロジェクト内の .mcp.json、または:
claude mcp add phaedo -- /absolute/path/to/node /absolute/path/to/phaedo/mcp/server.js
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。