Using Zed's ACP with Codex
Last week, I gave a talk about the agent client protocol and how to use it in the Zed editor. I showcased how it works with the Codex Agent, however when visiting the ACP documentation (as of today), there’s no Codex plugin available.
In this post I’d like to explain how you can make Codex work with any ACP client, such as Emacs, Neovim or Zed.
Howto
You will have to download the current in-development ACP Codex plugin from here
git clone git@github.com:cola-io/codex-acp.git
cd codex-acp
Then, you will have to build it localy. This requires a Rust installation. If you don’t have Rust installed, you just need to execute one command, see here.
make release
Once it has been build, you have to copy the binary into a path that is accessible from your editor. Typically that’s something like /usr/local/bin
. You can print the current path environment variable to see
what is in there.
echo "$PATH" | tr ':' '\n'
For example, here’s the output for me:
/Users/terhechte/Library/pnpm
/Users/terhechte/.bun/bin
/Users/terhechte/.local/share/nvim/lsp_servers/python
/opt/homebrew/opt/llvm/bin
/Users/terhechte/.cargo/bin
/Users/terhechte/.local/bin
/opt/homebrew/bin
/usr/local/bin
/usr/bin
/bin
/usr/sbin
/sbin
/Library/Apple/usr/bin
I could pick any of these paths, I went with /Users/terhechte/.local/bin
. You will have differrent paths.
Installing it
Now that you know where to place it, you can copy it there:
cp target/release/codex-acp [your-chosen-path]
# example: cp target/release/codex-acp /Users/terhechte/.local/bin
Configuring it
Here’s the configuration just for Zed. Go into Zed and open the settings:

In there, you have to insert a new entry for the Codex client:
{
"agent_servers": {
"Codex": {
"command": "codex-acp",
"args": [],
"env": {
"RUST_LOG": "info"
}
}
},
"edit_predictions": {
...
},
}
Once you did that, you should have the option to select Codex.
Testing it
In case you run into an issue where it doesn’t work, you can test the Codex acp installation in your terminal by pasting this code
in the codex-acp
folder (where you also ran the make release
):
printf '%s\n' \
'{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"v1","clientName":"cli","capabilities":{}}}' \
'{"jsonrpc":"2.0","id":2,"method":"session/new","params":{"cwd":"'"$PWD"'","mcpServers":[]}}' \
'{"jsonrpc":"2.0","id":3,"method":"session/prompt","params":{"sessionId":"1","prompt":[{"type":"text","text":"/status"}]}}' \
| RUST_LOG=info cargo run --quiet