anomalyco / anomalyco/opencode
ACP clients don't show the session plan — `plan` sessionUpdate is never emitted
@rekram1-node is already working on this.
Since Aug 5, 2026.
- Dominant language
- TypeScript
- Stars
- 209k
- Forks
- 27.5k
- PR merge metrics
- PR metrics pending
Description
Problem
When OpenCode runs as an ACP agent (Zed, JetBrains, Neovim via ACP), the session todo list that the TUI renders is never shown in the client. ACP defines a first-class plan sessionUpdate for this, but OpenCode's ACP adapter never emits it.
The state is already published as a todo.updated event (packages/schema/src/session-todo.ts, packages/core/src/session/todo.ts) on the same event stream the adapter consumes (sdk.global.event() in packages/opencode/src/acp/event.ts). The handle() switch has no case "todo.updated", so the data is dropped before reaching the client.
The todowrite tool result is visible in ACP clients as a raw tool-call payload, but there is no plan panel — that only comes from sessionUpdate: "plan".
Proposal
Map todo.updated → session/update with sessionUpdate: "plan" in event.ts. Todo.Info (content/priority/status) maps 1:1 onto ACP PlanEntry.
Verification
-
event.tsemitsagent_message_chunk,agent_thought_chunk,tool_call(_update),usage_update,available_commands_update— noplan. -
SessionTodo.Event.Updated(type: "todo.updated",properties: { sessionID, todos }) is published onEventV2and surfaces in the global event stream. -
A standalone ACP agent emitting the equivalent
planupdates renders a live plan panel in Zed — the client side is ready. -
I have verified this behavior is missing
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Assessment
This issue has not been assessed yet.