Yes. If Traces became an ACP agent, the cleanest mental model is not “Traces is now another Codex clone.” It’s “Traces exposes a session runtime that other ACP clients can talk to.”
ACP’s agent role is pretty concrete: the client launches the agent subprocess over stdio, calls initialize, then session/new or session/load, then session/prompt, and the agent streams session/update notifications for text, plans, tool calls, command availability, and permission requests. Sources: Initialization, Session Setup, Prompt Turn, Tool Calls, Slash Commands, Transports.
The important distinction is this:
MCP server means “agents can use Traces as a tool/data source.”
ACP client means “Traces can drive other agents.”
ACP agent means “other clients can drive Traces.”
Those are separate roles. Traces can do all three.
What “Traces as an ACP agent” could mean
There are three viable versions:
Trace analyst agent
This is the smallest, cleanest version. A client connects to Traces and asks:
- “What prior traces touched this file?”
- “Summarize the reasoning behind this commit.”
- “Find similar sessions for this bug.”
- “Generate a handoff from the last 3 traces in this repo.”
That is a real ACP agent, but specialized. It does not need to be a full coding harness.
ACP proxy/router
This is the most strategic version. Traces is both:
- an ACP agent to the outside world
- an ACP client to Codex/Claude/OpenCode/etc upstream
So the flow becomes:
Editor/OpenClaw/Zed -> Traces ACP agent -> upstream ACP agent
In that model, Traces can:
- choose which real harness to run
- inject Traces MCP tools/context into the session
- record exact ACP events instead of scraping files later
- enforce permission/policy/logging centrally
- map every ACP session directly to a Traces trace/share URL
This is the OpenClaw-style pattern, just with Traces as the coordinator instead of OpenClaw. Source: OpenClaw ACP Agents
Full native coding agent
Traces owns the model/tool loop itself and speaks ACP directly to clients. This is the biggest scope by far. It means you are building agent runtime behavior, not just trace infrastructure.
What I would recommend
If you want Traces to “become an agent,” I would not start with the full native agent. I’d start with the proxy/router shape.
That gives you the strongest upside:
- one stable ACP surface for clients
- compatibility with existing ACP agents you already support
- exact trace capture from live session updates
- easier context injection than today’s adapter/skill/env-hint approach
- a path to make Traces the control plane for multi-agent sessions
Concretely, that would look like
- Add
traces acp serve as a stdio ACP agent entrypoint.
- Implement
initialize, session/new, session/prompt, and session/update streaming first.
- Persist raw ACP envelopes, not just the current flattened event model in types.ts. Plans, permissions, command lists, and richer tool lifecycle will otherwise be lost.
- For each Traces session, optionally spawn an upstream ACP agent and bridge updates through.
- Always inject a Traces MCP server so the upstream agent can query prior traces, related code history, and share/publish tools. That aligns with the MCP direction already noted in docs/git-integration.md.
- Keep file/db adapters as fallback for runtimes Traces did not launch.
The key product question
Do you want Traces to be:
- a memory/tool for other agents, or
- the runtime boundary that users actually talk to?
If it’s the first, MCP server + ACP client is enough.
If it’s the second, ACP agent makes sense, and the proxy/router version is the highest-leverage first move.
Net: yes, Traces could absolutely become an ACP agent. The most sensible first version is not “build our own coding model runtime,” but “become a trace-aware ACP session broker that fronts existing agents and makes Traces first-class inside every session.”