One terminal UI for every coding agent. 一个终端界面,接入所有 coding agent。
acpc runs any Agent Client Protocol agent (Claude, Gemini, OpenCode, Goose, or your own) inside the OpenAI Codex terminal UI. Halfway through a task, hand the conversation to another agent and keep going. acpc 把任何支持 Agent Client Protocol 的 agent(Claude、Gemini、OpenCode、Goose,或者你自己写的)放进 OpenAI Codex 的终端界面里。任务做到一半,可以把整段对话交给另一个 agent 接着做。
One conversation, two agents 同一段对话,两个 agent
>_ acpc /tmp/acpc-demo/acpc-demo permissions: YOLO mode › What does slugify in src/slug.ts do? Two sentences. • Called src/slug.ts · 46ms … 3 earlier lines hidden └ .replace(/[^a-z0-9]+/g, "-") .replace(/^-|-$/g, ""); } + Show details • It converts a title to a URL-friendly slug: lowercasing it, replacing any run of non-alphanumeric characters with a hyphen, then trimming leading/trailing hyphens. E.g. "Hello World!" becomes "hello-world". Worked for 4s • 3:16 PM › Ask the agent anything opencode-go/glm-5.3 low · /tmp/acpc-demo/acpc-demo ← for agents · ? for shortcuts
>_ acpc /tmp/acpc-demo/acpc-demo permissions: YOLO mode › What does slugify in src/slug.ts do? Two sentences. • Called src/slug.ts · 46ms … 3 earlier lines hidden └ .replace(/[^a-z0-9]+/g, "-") .replace(/^-|-$/g, ""); } + Show details • It converts a title to a URL-friendly slug: lowercasing it, replacing any run of non-alphanumeric characters with a hyphen, then trimming leading/trailing hyphens. E.g. "Hello World!" becomes "hello-world". Worked for 4s • 3:16 PM Switch to Claude Bring the current conversation along? › 1. Bring this conversation Fork it to Claude, which gets it with your next message 2. Start fresh This conversation stays available in /resume enter select · esc back
› What does slugify in src/slug.ts do? Two sentences. Worked for 4s • 3:16 PM • Fork created. You can continue here. › Keep accented letters instead of dropping them, so Café becomes cafe. Make the edit, then reply in one short sentence. • Ran Terminal └ .replace(/^-|-$/g, ""); } ``` + 5 lines (^t to expand) • Edited 0 files (+0 -0) + Show details • Ran Terminal └ ```console cafe creme-brulee ``` • I updated slugify in src/slug.ts to strip accent marks before slugging, and a quick test turned "Café" into cafe and "Crème Brûlée!" into creme-brulee. Worked for 8s • 3:16 PM › Ask the agent anything default high · /tmp/acpc-demo/acpc-demo · Slugify accent handling in src/slug.ts ← for agents · ? for shortcuts
opencode acp, Claude through claude-agent-acp. The OpenCode session is still there in /resume.
acpc 在 100 × 34 终端里的原始截图,未经修饰。OpenCode 通过 opencode acp 接入,Claude 通过 claude-agent-acp 接入。原来的 OpenCode 会话仍然可以在 /resume 里找到。
Used to Codex? Keep your habits and change the agent. 用惯了 Codex?习惯不用改,换个 agent 就行。
acpc is built from openai/codex at a pinned commit plus a patch series of about 130 KB. The screen, the composer, diffs, approvals and history are Codex's own code, so the keys you know still work. Try Claude, Gemini or OpenCode one session at a time, without learning a new tool first. acpc 基于 openai/codex 的一个固定 commit 构建,上面只叠了大约 130 KB 的补丁。界面、输入框、diff、审批和历史记录都是 Codex 原本的代码,你熟悉的按键照样能用。你可以一次一个会话地试 Claude、Gemini 或 OpenCode,不用先学一个新工具。
Stays exactly like Codex和 Codex 完全一样
- Streaming answers and reasoning流式输出回答和推理过程
- Tool calls with diffs带 diff 的工具调用
- Approval prompts and plans审批提示和计划
- Session history and
/resume会话历史和/resume - The composer and
/popup输入框和/弹出菜单
Comes from your agent由你选的 agent 提供
- Models and reasoning levels in
/model/model里的模型和推理强度 - Modes on Shift+TabShift+Tab 切换的模式
- Other settings in
/options/options里的其他设置 - Its own slash commands它自己的斜杠命令
- The exact permission options it sends它发来的权限选项,原样呈现
Features that only make sense with Codex are hidden: cloud tasks, sandboxing, review and worktrees. 只对 Codex 自己有意义的功能被隐藏了:云端任务、沙箱、review 和 worktree。
Switching agents doesn't mean starting over. 换 agent,不用从头再来。
One agent is better at reading a codebase, another at the edit, a third is cheaper for the follow-up. /agent forks the conversation onto the agent you pick: it stays on screen, the new agent receives it as context with your next message, and the original session is untouched.
有的 agent 擅长读代码,有的擅长改代码,还有的做收尾更便宜。/agent 会把当前对话 fork 到你选的 agent 上:对话留在屏幕上,新 agent 在你发下一条消息时拿到全部上下文,原来的会话不受影响。
-
opencode
Explains
slugify解释slugify - claude Forked with the full conversation, makes the edit带着完整对话 fork 过来,负责改代码
- gemini Fork again for review, or start fresh再 fork 一次做 review,或者重新开始
A complete ACP v1 client, and nothing more. 完整的 ACP v1 客户端,仅此而已。
Zed brings ACP agents into an editor and Toad builds a new terminal UI for them. acpc takes the Codex terminal UI as it is and gives it an ACP backend. It ships no agent and favours none: anything that speaks ACP over stdio works after one acpc add. If you build an agent, acpc is a strict client to test it against.
Zed 把 ACP agent 放进编辑器,Toad 为它们做了一个新的终端界面。acpc 直接用 Codex 的终端界面,给它接上 ACP 后端。acpc 不自带 agent,也不偏向任何一家:只要 agent 通过 stdio 说 ACP,一条 acpc add 就能用。如果你在写 agent,acpc 是一个严格的客户端,可以拿来测试。
| Area范围 | What acpc doesacpc 的做法 |
|---|---|
| Sessions会话 | new, load, resume, list, close, delete |
| Permissions权限 | Approval prompts that offer exactly the options the agent sent审批提示只给出 agent 发来的那些选项 |
| ElicitationElicitation | Forms, including number and multi-select fields, or links表单(含数字和多选字段)或链接 |
| Config and modes配置与模式 | Models in /model, modes on Shift+Tab, the rest in /options模型在 /model,模式用 Shift+Tab,其余在 /options |
| Commands命令 | The agent's available commands in the / popupagent 提供的命令出现在 / 弹出菜单里 |
| Sign-in登录 | agent methods through authenticate, terminal methods by handing over the terminalagent 方法走 authenticate,terminal 方法把终端交给 agent 自己的登录程序 |
| Cancellation取消 | Turns and pending requests回合以及挂起中的请求 |
| Not advertised不声明 | fs/* and terminal/*: agents use their own file system and shellfs/* 和 terminal/*:agent 用自己的文件系统和 shell |
How it works 工作原理
The Codex TUI already talks to its backend through the app-server protocol. acpc gives it a backend that translates that protocol into ACP: a thread is an agent session, a turn is a prompt, and session updates become messages, plans, tool calls and diffs. Codex TUI 本来就通过 app-server 协议和后端通信。acpc 给它换了一个后端,把这套协议翻译成 ACP:thread 对应 agent 会话,turn 对应一次 prompt,会话更新变成消息、计划、工具调用和 diff。
acpc app-server exposes the same bridge on stdio, so tools built to drive Codex can drive any ACP agent.
acpc app-server 把同一个 bridge 暴露在 stdio 上,原本驱动 Codex 的工具也能驱动任何 ACP agent。
- Codex TUI
- Codex app-server protocol
- acp-bridge
- ACP v1, JSON-RPC over stdio
- acp-client
- Your agent你的 agent
- No telemetry没有遥测
- Nothing is sent anywhere but your agent.除了你的 agent,什么都不发出去。
- No local transcripts不存本地记录
- History comes from the agent's own
session/load.历史来自 agent 自己的session/load。 - No sandbox or shell没有沙箱和 shell
- Agents use their own tools.agent 用它自己的工具。
- No credentials不碰凭证
- Sign-in stays between you and the agent.登录只发生在你和 agent 之间。
Start in three commands 三条命令开始用
acpc builds from source. You need Rust, git, a C compiler, OpenSSL headers and just. The first build compiles the Codex workspace and takes a while.
acpc 目前从源码构建,需要 Rust、git、C 编译器、OpenSSL 头文件和 just。第一次构建会编译整个 Codex workspace,需要一些时间。
# build
git clone https://github.com/AkaraChen/acpc && cd acpc
scripts/sync-upstream
just build
# add agents, then start
acpc add "opencode acp"
acpc add --name Claude npx -y @agentclientprotocol/claude-agent-acp@latest
acpc