Skip to content

Track soft/native active-turn steer support #42

@lsaether

Description

@lsaether

Summary

Track native/soft active-turn steering as a separate follow-up from mux-owned hard steer.

Context

amux/steer_active_turn is being implemented in the busy-control PR as a mux-owned hard steer: the mux records the control, cancels/supersedes the active turn, and starts a replacement prompt. That gives deterministic peer visibility, replay, and lifecycle ownership.

Some agents can support a softer primitive: inject guidance into the active turn without cancelling it or opening a replacement turn. Hermes has a native non-interrupting steer path in its TUI/gateway runtime, but the ACP surface available to acp-mux does not currently expose a structured native steer capability that can be routed without prompt injection.

Desired behavior

Add explicit soft/native steer support when an agent advertises a compatible capability, for example:

  • preserve the current amuxTurnId and active turn lifecycle;
  • do not send session/cancel;
  • do not submit a replacement session/prompt;
  • broadcast/replay an inert mux-owned control event so peers know steering was accepted;
  • route the guidance through an agent-native control path instead of plain prompt injection;
  • fall back clearly to mux-owned hard steer when soft steer is unsupported.

Non-goals

  • Do not make ordinary concurrent session/prompt bypass the busy gate.
  • Do not silently conflate soft steer with hard cancel+replace semantics.
  • Do not rely on Hermes-only slash prompt behavior as the durable protocol contract.

Acceptance criteria

  • Soft steer is capability/policy gated.
  • Tests prove soft steer preserves the existing active turn and does not allocate a new amuxTurnId.
  • Tests prove peers and late joiners see a replayable inert control notification.
  • Docs distinguish soft/native steer from mux-owned hard steer and queue.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions