ACP
Mister Morph は、隔離した 1 つの子タスクを外部 ACP agent に委譲できます。
現在の実装は絞っています。
- Mister Morph は ACP client であり、ACP server ではありません。
- transport は
stdioだけです。 acp_spawn1 回につき、同期 session を 1 つ作り、prompt turn も 1 回です。- 外部 agent プロセスは
acp.agentsから起動します。
ACP を使う場面
子タスクを「別のローカル Mister Morph loop」ではなく、「外部 agent の実行スタック」で走らせたいときに使います。
典型例:
- ACP adapter 経由で Codex を使う
- 別の ACP 対応 coding agent を使う
- 親 loop は調停だけ行い、ファイル操作やコマンド実行は外部 agent に任せる
別のローカル Mister Morph loop で十分なら、Subagents の spawn を使ってください。
現在サポートしているもの
authenticatesession/newsession/newが宣言した option id に対するsession/set_config_optionsession/promptsession/request_permission(Cursor 側のallow-onceのようなハイフン区切りも含む)fs/read_text_filefs/write_text_file- 最小の
terminal/* - Cursor ACP のブロッキング拡張:
cursor/ask_questionはスキップ、cursor/create_planは対話なしで承認(無審査)
まだ未対応:
- MCP passthrough
- session 再利用
- HTTP / SSE transport
設定
必要なのは 2 点です。
- 明示的なツール入口を有効にする
- 1 つ以上の ACP profile を定義する
tools:
acp_spawn:
enabled: true
acp:
agents:
- name: "codex"
command: "npx"
args: ["-y", "@archkk/acp-codex"]
env: {}
cwd: "."
read_roots: ["."]
write_roots: ["."]
session_options:
mode: "auto"
reasoning_effort: "low"補足:
tools.acp_spawn.enabledが制御するのはacp_spawn入口だけです。- ACP profile は常にローカル
stdio子プロセスとして起動します。 session_optionsはまずsession/new._metaに渡します。- ACP agent が config option id を宣言した場合、同名キーは
session/set_config_optionでも送ります。
Prompt パターン
親 agent には acp_spawn を明示的に使わせます。
例:
Only call acp_spawn. Use the codex agent. Read ./README.md and summarize it in exactly 5 Chinese sentences. Do not call spawn. Do not read the file yourself.acp_spawn の主な引数:
agenttaskcwdoutput_schemaobserve_profile
返り値は既存の SubtaskResult envelope と同じ形です。
実行時の流れ
1 回の acp_spawn は次の順です。
- wrapper プロセスを起動
initialize- 必要なら
authenticate session/new- 宣言済み option に
session/set_config_option session/prompt- turn 中の file / permission / terminal callback を処理
- 最終テキストを回収
セキュリティ上の注意
ACP の permission request だけが境界ではありません。
実際の制限は、実装済み client メソッド側で行われます。
- 許可したファイル root
- 許可した terminal の作業ディレクトリ
- ローカルの書き込み・プロセス実行ルール
もう 1 点重要なのは、wrapper 自体もローカル子プロセスだということです。ACP callback の制限は、wrapper 自身の任意の直接動作まで自動的にサンドボックス化しません。
Codex
Codex は外部 ACP adapter として設定してください。
代表例:
npx -y @archkk/acp-codexnpm i -g @archkk/acp-codexの後にmistermorph-acp-codexcodex-acpnpx -y @zed-industries/codex-acp
確認ポイント:
- まず
codex単体で動くこと mistermorph toolsにacp_spawnが出ること- ACP profile の
commandが Codex 用 adapter を指していること
任意の live 検証:
MISTERMORPH_ACP_CODEX_INTEGRATION=1 \
go test ./internal/acpclient -run TestRunPrompt_CodexACPIntegration -vこのテストは既定で codex-acp を探します。公開済み npm パッケージを検証する場合は MISTERMORPH_ACP_CODEX_COMMAND=npx と MISTERMORPH_ACP_CODEX_ARGS="-y @archkk/acp-codex" を設定してください。
Claude
Mistermorph の主リポジトリには、もう Claude wrapper は同梱しません。
代わりに外部の Claude ACP adapter を使ってください。例:
acp:
agents:
- name: "claude"
command: "npx"
args: ["-y", "@archkk/acp-claude"]
env: {}
cwd: "."
read_roots: ["."]
write_roots: ["."]
session_options:
permission_mode: "dontAsk"
allowed_tools: ["Read", "Edit", "Write", "Bash", "Glob", "Grep"]公開済みの選択肢:
npx -y @archkk/acp-claudenpm i -g @archkk/acp-claudeの後にmistermorph-acp-claude
任意の live 検証:
MISTERMORPH_ACP_CLAUDE_INTEGRATION=1 \
MISTERMORPH_ACP_CLAUDE_COMMAND=npx \
MISTERMORPH_ACP_CLAUDE_ARGS="-y @archkk/acp-claude" \
go test ./internal/acpclient -run TestRunPrompt_ClaudeACPIntegration -vCursor CLI(agent acp)
Cursor CLI の agent acp はそれ自体が ACP server(stdio)なので、この主リポジトリではもう透明 proxy を持ちません。
Cursor CLI を入れ、agent が PATH にあり、認証済みであること(agent login や API key など、Cursor ACP ドキュメント 参照)。
設定例:
acp:
agents:
- name: "cursor"
command: "agent"
args: ["acp"]
env: {}
cwd: "."
read_roots: ["."]
write_roots: ["."]API key などの引数が必要なら、最後の acp の前に置いてください。例: args: ["--api-key", "${CURSOR_API_KEY}", "acp"]。
任意の live 検証(Cursor CLI が入っていて認証済みの場合):
MISTERMORPH_ACP_CURSOR_INTEGRATION=1 \
go test ./internal/acpclient -run TestRunPrompt_CursorACPIntegration -v関連ページ: