···273273 # - name: "codex"
274274 # enable: true
275275 # type: "stdio"
276276+ # # Native wrapper kept in this repository:
277277+ # command: "node"
278278+ # args: ["./wrappers/acp/codex/src/index.mjs"]
279279+ # # Or use a third-party ACP adapter:
276280 # command: "codex-acp"
277281 # args: []
278282 # # Or install nothing and run through npx:
···287291 # # session_options:
288292 # # mode: "auto"
289293 # # reasoning_effort: "low"
294294+ # # Example for the native Codex wrapper:
295295+ # # session_options:
296296+ # # approval_policy: "never"
297297+ # # reasoning_effort: "low"
298298+ # - name: "claude"
299299+ # enable: true
300300+ # type: "stdio"
301301+ # command: "node"
302302+ # args: ["./wrappers/acp/claude/src/index.mjs"]
303303+ # env: {}
304304+ # cwd: "."
305305+ # read_roots: ["."]
306306+ # write_roots: ["."]
307307+ # session_options:
308308+ # permission_mode: "dontAsk"
309309+ # allowed_tools: ["Read", "Edit", "Write", "Bash", "Glob", "Grep"]
310310+ # max_turns: 8
311311+ # # Set bare: true only when you authenticate with API keys or explicit settings.
312312+ # # Claude Code bare mode skips OAuth and keychain reads.
290313291314# Markdown-based memory
292315memory:
+78-4
docs/acp.md
···139139140140So ACP support should be treated as controlled delegation, not a hard sandbox.
141141142142-## Codex Adapter Notes
142142+## Codex Paths
143143+144144+There are now two Codex paths.
145145+146146+### External Adapter
143147144144-Current Codex integration is based on an external ACP adapter such as `codex-acp`.
148148+You can still point ACP at an external adapter such as `codex-acp`.
145149146150Practical checks:
147151···1491532. `mistermorph tools` should show `acp_spawn`.
1501543. the ACP profile should point to `codex-acp`.
151155152152-The repository also includes an opt-in live integration test:
156156+### Native Wrapper in This Repository
157157+158158+The repository now also includes a Codex wrapper owned by Mistermorph:
159159+160160+```yaml
161161+acp:
162162+ agents:
163163+ - name: "codex"
164164+ enable: true
165165+ type: "stdio"
166166+ command: "node"
167167+ args: ["./wrappers/acp/codex/src/index.mjs"]
168168+ env: {}
169169+ cwd: "."
170170+ read_roots: ["."]
171171+ write_roots: ["."]
172172+ session_options:
173173+ approval_policy: "never"
174174+```
175175+176176+Current scope of the native wrapper:
177177+178178+- backend is `codex app-server`
179179+- no third-party ACP adapter is required
180180+- no interactive approval flow yet
181181+- default `approval_policy` is `never`
182182+183183+The existing opt-in live integration test can target this wrapper too:
153184154185```bash
155155-MISTERMORPH_ACP_CODEX_INTEGRATION=1 go test ./internal/acpclient -run TestRunPrompt_CodexACPIntegration -v
186186+MISTERMORPH_ACP_CODEX_INTEGRATION=1 \
187187+MISTERMORPH_ACP_CODEX_COMMAND=node \
188188+MISTERMORPH_ACP_CODEX_ARGS="./wrappers/acp/codex/src/index.mjs" \
189189+go test ./internal/acpclient -run TestRunPrompt_CodexACPIntegration -v
190190+```
191191+192192+## Claude Paths
193193+194194+Claude now also has a native wrapper in this repository.
195195+196196+```yaml
197197+acp:
198198+ agents:
199199+ - name: "claude"
200200+ enable: true
201201+ type: "stdio"
202202+ command: "node"
203203+ args: ["./wrappers/acp/claude/src/index.mjs"]
204204+ env: {}
205205+ cwd: "."
206206+ read_roots: ["."]
207207+ write_roots: ["."]
208208+ session_options:
209209+ permission_mode: "dontAsk"
210210+ allowed_tools: ["Read", "Edit", "Write", "Bash", "Glob", "Grep"]
211211+```
212212+213213+Current scope of the native Claude wrapper:
214214+215215+- backend is `claude -p --output-format stream-json`
216216+- no third-party ACP adapter is required
217217+- no interactive approval flow yet
218218+- Claude internal tools are not bridged back into ACP file or terminal callbacks
219219+220220+Two practical notes:
221221+222222+- `bare: true` is optional, not the default
223223+- if you rely on Claude.ai login, keep `bare: false` because bare mode skips OAuth and keychain reads
224224+225225+There is also an opt-in live integration test:
226226+227227+```bash
228228+MISTERMORPH_ACP_CLAUDE_INTEGRATION=1 \
229229+go test ./internal/acpclient -run TestRunPrompt_ClaudeNativeWrapperIntegration -v
156230```
157231158232## See Also
···124124125125Also, the wrapper itself is still a local child process. ACP callback limits do not automatically sandbox arbitrary direct behavior inside that wrapper.
126126127127-## Codex via Adapter
127127+## Codex Paths
128128+129129+There are now two Codex paths.
130130+131131+### External Adapter
128132129129-Current Codex support is meant to work through an ACP adapter such as `codex-acp`.
133133+You can still use an ACP adapter such as `codex-acp`.
130134131131-Practical checks:
135135+Checks:
1321361331371. `codex` itself should already work.
1341382. `mistermorph tools` should list `acp_spawn`.
1351393. the ACP profile should point to `codex-acp`.
140140+141141+### Native Wrapper in This Repository
142142+143143+The repository also includes a Codex wrapper owned by Mister Morph:
144144+145145+```yaml
146146+acp:
147147+ agents:
148148+ - name: "codex"
149149+ enable: true
150150+ type: "stdio"
151151+ command: "node"
152152+ args: ["./wrappers/acp/codex/src/index.mjs"]
153153+ env: {}
154154+ cwd: "."
155155+ read_roots: ["."]
156156+ write_roots: ["."]
157157+ session_options:
158158+ approval_policy: "never"
159159+```
160160+161161+Current scope of the native wrapper:
162162+163163+- backend is `codex app-server`
164164+- no third-party ACP adapter is required
165165+- no interactive approval flow yet
166166+- default `approval_policy` is `never`
167167+168168+The existing opt-in live integration test can target this wrapper too:
169169+170170+```bash
171171+MISTERMORPH_ACP_CODEX_INTEGRATION=1 \
172172+MISTERMORPH_ACP_CODEX_COMMAND=node \
173173+MISTERMORPH_ACP_CODEX_ARGS="./wrappers/acp/codex/src/index.mjs" \
174174+go test ./internal/acpclient -run TestRunPrompt_CodexACPIntegration -v
175175+```
176176+177177+## Claude Native Wrapper
178178+179179+The repository also includes a native Claude wrapper:
180180+181181+```yaml
182182+acp:
183183+ agents:
184184+ - name: "claude"
185185+ enable: true
186186+ type: "stdio"
187187+ command: "node"
188188+ args: ["./wrappers/acp/claude/src/index.mjs"]
189189+ env: {}
190190+ cwd: "."
191191+ read_roots: ["."]
192192+ write_roots: ["."]
193193+ session_options:
194194+ permission_mode: "dontAsk"
195195+ allowed_tools: ["Read", "Edit", "Write", "Bash", "Glob", "Grep"]
196196+```
197197+198198+Current scope:
199199+200200+- backend is `claude -p --output-format stream-json`
201201+- no third-party ACP adapter is required
202202+- no interactive approval flow yet
203203+- Claude internal tools are not bridged back into ACP file or terminal callbacks
204204+205205+Notes:
206206+207207+- `bare: true` is optional, not the default
208208+- if you rely on Claude.ai login, keep `bare: false` because bare mode skips OAuth and keychain reads
209209+210210+The repository also includes an opt-in live integration test:
211211+212212+```bash
213213+MISTERMORPH_ACP_CLAUDE_INTEGRATION=1 \
214214+go test ./internal/acpclient -run TestRunPrompt_ClaudeNativeWrapperIntegration -v
215215+```
136216137217See also:
138218