Skip to content

feat: start coordinator conversations with an ACP system prompt - #2645

Draft
Leeeon233 wants to merge 7 commits into
mainfrom
feat/coordinator-conversation
Draft

Leeeon233 wants to merge 7 commits into
mainfrom
feat/coordinator-conversation

Conversation

@Leeeon233

@Leeeon233 Leeeon233 commented Nov 12, 2026 •

Copy link
Copy Markdown
Contributor

Summary

First version of the project coordinator conversation, as scoped in the note .agents/notes/proposed/feature/2026-11-11-project-coordinator-mode.md ("Settled (round 4)"). This branch also carries the two note commits from project-coordinator-mode-design, which were not on main yet.

  • Marker: SessionMeta.coordinator: { version: 1 }, written once with the first turn's metadata (same path as project, so ordinary, E2EE and Roost workspaces behave alike). Forks of a coordinator copy it.
  • Delivery: the daemon sends apps/cli/src/session/coordinator-system-prompt.md (text taken verbatim from the note) as ACP systemPrompt in append mode on session/new, load, resume and fork, including edit-and-resend replacements. Ordinary conversations send no systemPrompt; their requests are unchanged (existing exact-request tests still pass).
  • Support: an agent supports it when initialize advertises sessionCapabilities.systemPrompt. If it does not, startup fails with ACP_SYSTEM_PROMPT_UNSUPPORTED. The prompt is never moved into the user message. Probes and session starts record systemPrompt on the capability entry.
  • Gate: the new coordinatorSessions machine protocol capability, plus systemPrompt: true on the agent config's capability entry. Older daemons and clients never get a marker they cannot honor. A marker version this daemon does not know fails the start instead of running without the prompt.
  • Entry: in Developer mode, a local project row's menu has "Start coordinator conversation". It opens /chat?…&coordinator=true, which lists only eligible agents and writes the marker on first send.

Project page prototype (second commit)

At the owner's request, Developer mode also shows the project layout from the owner's sketch. The sidebar gets a Projects / Conversations switch and a project list. Opening a project opens its coordinator (or the coordinator start page). Next to it is a board of the coordinator's conversations plus the project's other conversations (marked "Created manually"), grouped as Needs you / In progress / Unread / Done. A row opens that conversation's page; there are no right-hand tabs yet. Grouping lives in components/project-mode/project-board-model.ts (tested); Storybook "Project mode/Coordinator page" renders the page from real components.

Provider support (from adapter source at the pinned submodule commits)

Advertised: Claude (append and override), Codex (append only), DeepSeek Harness, Pi, and Kimi when its session runtime is bound. Grok and Devin forward their upstream CLI's capabilities, and the Lody Agent (Sorbet) ships outside this repo, so for those three only the runtime probe decides. No adapter or Core change was needed.

For the owner to check

  • Forks (Side Chat and new-worktree) keep the coordinator marker.
  • The entry point exists only for local projects. GitHub repositories and multi-repository projects have none yet.
  • A Role picked on the coordinator page still prefixes its promptPrefix to the first message, as it does everywhere else.
  • ACP_CAPABILITY_CACHE_VERSION was not bumped, to avoid re-probing every provider. Existing entries qualify after one conversation start or a refresh in Settings; until then the page explains this.

Verification

  • Tests: agent-client-session-start.test.ts covers the prompt on new, resume and fork and refusal without the capability; machine-document-capabilities.test.ts covers capability recording and the gate; use-session-actions.test.ts covers the marker on the real start path. Targeted CLI suites (602 tests), the shared suite, and the touched components suites pass after rebasing on main.
  • Typecheck passes for shared, components and CLI. The only CLI error is the existing unbuilt acp-extension-claude import.
  • Lint, i18n, docs check, public-boundary and platform-boundary checks pass.
  • Not run: the full pnpm check/test matrix, and no real provider was driven end to end with the prompt. The UI was not exercised in a running app.

🤖 Generated with Claude Code

Leeeon233 and others added 3 commits November 12, 2026 05:00
Record the gap analysis, staged plan and settled prototype scope for
listing projects in the sidebar and coordinating child conversations
through one restricted coordinator conversation.

Model: claude-fable-5-2

Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
Model: claude-fable-5-2

Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
A coordinator conversation carries SessionMeta.coordinator v1. Its daemon
sends the coordinator system prompt as ACP systemPrompt (append) on every
session/new, load, resume and fork, and refuses to start an agent that does
not advertise sessionCapabilities.systemPrompt; the prompt never becomes
user text. Probes and session starts record systemPrompt support on the
capability entry, and the coordinatorSessions machine protocol capability
gates the marker. Developer mode adds "Start coordinator conversation" to
local project rows, which opens the new-chat page listing only eligible
agents.

Model: claude-opus-5-5

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Leeeon233 and others added 4 commits November 12, 2026 08:29
…ions

Behind Developer mode, the sidebar gets a Projects / Conversations switch and a
project list. Opening a project opens its coordinator conversation (or the
coordinator start page), with a board beside it of every conversation the
coordinator opened plus the project's other conversations, grouped as needs
you, in progress, unread and done.

Model: claude-opus-5-5

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ersation

# Conflicts:
#	apps/cli/src/agent/acp-capabilities.ts
#	locales/en.json
#	locales/zh_CN.json
#	packages/components/src/components/loro-sidebar.tsx
The project board and the sidebar project list now count only conversations
assigned to the current account, the same rule as the sidebar's My scope.

Model: claude-opus-5-5

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant