ACP
Mister Morph 现在可以把一个隔离子任务委托给外部 ACP agent。
当前实现刻意收得很窄:
- Mister Morph 只做 ACP client,不做 ACP server。
- 只支持
stdio。 - 每次
acp_spawn都是一个同步 session,只跑一轮 prompt turn。 - 外部 agent 进程来自
acp.agents配置。
什么时候用 ACP
当子任务应该跑在“外部 agent 执行栈”里,而不是另一个本地 Mister Morph loop 里时,用 ACP。
典型场景:
- 通过 ACP 适配层调用 Codex
- 接别的 ACP 兼容 coding agent
- 父 loop 只负责调度,把文件读写和命令执行交给外部专业 agent
如果你只是想再起一个本地 Mister Morph 子 agent,用 Subagents 里的 spawn。
当前支持
现在已经支持:
authenticatesession/new- 对
session/new已声明 option id 的session/set_config_option session/promptsession/request_permission(含 Cursor 文档中的allow-once等连字符形式)fs/read_text_filefs/write_text_file- 最小
terminal/* - Cursor ACP 的阻塞扩展方法:
cursor/ask_question跳过;cursor/create_plan自动接受(无交互审阅),避免子进程无限等待
暂时还不支持:
- MCP 透传
- session 复用
- HTTP / SSE transport
配置
要配两件事:
- 打开显式工具入口
- 定义至少一个 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 在
session/new里声明了 config option id,同名字段还会再通过session/set_config_option发一遍。
Prompt 写法
要在父 agent 的任务里明确要求它调用 acp_spawn。
例如:
只允许调用 acp_spawn。agent 用 codex。读取 ./README.md,并用中文写 5 句话总结。禁止调用 spawn,禁止自己读文件。acp_spawn 支持这些参数:
agenttaskcwdoutput_schemaobserve_profile
返回值沿用现有的 SubtaskResult envelope。
运行时行为
一次 acp_spawn 调用会做这些事:
- 启动配置里的 wrapper 进程
initialize- 需要时
authenticate session/new- 对已声明选项发
session/set_config_option session/prompt- 在 turn 中处理文件、权限和终端回调
- 收集最终文本输出
安全说明
ACP 的 permission 请求不是唯一边界。
真正的限制发生在已经实现的 client 方法里:
- 允许读取和写入的路径根
- 允许的终端工作目录
- 本地写入和进程执行规则
还有一点要看清:ACP command 本身仍是本地子进程。ACP 回调层的约束,不会自动把这个进程自己的直接行为也沙箱化。
Codex
Codex 现在应该按外部 ACP adapter 来接。
常见选择:
npx -y @archkk/acp-codex- 先执行
npm i -g @archkk/acp-codex,再用mistermorph-acp-codex codex-acpnpx -y @zed-industries/codex-acp
联调前先检查:
codex自己先能正常工作mistermorph tools里能看到acp_spawn- ACP profile 的
command指向你的 Codex ACP 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-claude- 先执行
npm 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 自己就直接讲 ACP(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"]。
可选联调(需本机已安装并登录 Cursor CLI):
MISTERMORPH_ACP_CURSOR_INTEGRATION=1 \
go test ./internal/acpclient -run TestRunPrompt_CursorACPIntegration -v另见: