Skip to content

feat(acp): /steer and /queue over ACP — direct in-flight agent from IDE (Hermes v0.13 parity) #314

@subinium

Description

@subinium

Background

Hermes v0.13 (#18114, #20279, #20296, #20433, @HenkDz) — the Agent Communication Protocol surface added /steer (mid-run
course correction — already in CrowClaw v0.5.0 #54 over WS) and /queue (queue follow-up turns while the agent is mid-run, dispatched after
the current iteration). Plus atomic session persistence and reasoning-metadata preservation across restarts.

Current state in CrowClaw

  • v0.5.0 feat(core): /steer mid-run course correction injection #54 ships /steer over the REST + WS surface — handled by AgentLoop.steer(sessionId, guidance).
  • ACP surface (packages/acp/) does not expose /steer or /queue to IDE integrations (Zed, VS Code, JetBrains).
  • No queue primitive — additional user inputs during a long run are appended to the next-turn user message but not held as a structured queue.

Scope

  • Modified: packages/acp/src/ — add acp.steer and acp.queue method handlers
  • New: packages/core/src/queue.ts — per-session pendingQueue: UserMessage[] drained between iterations
  • Modified: AgentLoop to consume queue before sending next-turn user message
  • Tests: tests/acp-steer-queue.test.ts

Implementation sketch

  1. acp.steer({ sessionId, guidance }) mirrors the REST handler; same [OPERATOR STEER] injection
  2. acp.queue({ sessionId, message }) appends to session.pendingQueue; emits session:queue_appended event
  3. AgentLoop at iteration-end checks pendingQueue; if non-empty, drains into the next user-turn message (concatenated with operator separator)
  4. Atomic session persistence: queue writes use the same atomic-rename pattern as checkpoints
  5. Reasoning metadata preservation across restarts: session.reasoningHistory persisted (companion to v0.6.0 reasoning-content scrub)

Acceptance criteria

  • IDE plugin (mock ACP client) can call acp.steer and the agent picks up guidance at next iteration
  • acp.queue multiple messages while agent is mid-run; all drained at next user turn in order
  • Session restart preserves queue and reasoning metadata
  • Tests cover ordering, concurrent steer + queue, and persistence

Effort

M — primitives exist on the WS side; ACP wiring + queue primitive + persistence.

Effect

Closes the IDE-plugin gap. Without /queue, every IDE plugin reimplements its own "stash my next idea" buffer. ACP is the IDE-facing contract
— this is how CrowClaw stays usable from Zed / VS Code.

Source

Hermes #18114, #20279, #20296, #20433 · CrowClaw current: packages/acp/src/, packages/core/src/index.ts:645

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or requestpriority/warningReal cost / risk; fix when scheduledsource/hermesPattern from NousResearch/hermes-agent

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions