Repository navigation
Feature request: mid-turn steering over ACP #1565
Description
Description
I use OpenAB with Discord and RunWield. When an Agent is working, OpenAB continues editing its existing Discord reply. If I send a correction, it sits below that reply without a clear indication of whether it was queued or delivered.
I want to correct an Agent’s direction during the current turn, not wait until it finishes.
Protocol status
Standard ACP v1 does not require steering.
However, there is an existing _session/steering extension implemented by other ACP agents and supported by another client.
Evidence beyond RunWield
1. Claude’s ACP adapter implements and advertises it.
The implementation documents:
- Method:
_session/steering - Capability:
InitializeResponse._meta.steering.supported - Parameters:
{ sessionId, prompt } - Successful active-turn result:
{ outcome: "injected" } - Output continues through
session/update.
Pinned source:
Extension definition · Capability advertisement · Implementation
2. Agent Shell has shipped client support.
Agent Shell issue #773 reports testing the extension against:
@agentclientprotocol/claude-agent-acp0.66.0@agentclientprotocol/codex-acp1.2.0
The maintainer confirms that support was merged in PR #777, exposed as an explicit steering command separate from queueing.
These are upstream implementation references and reported interoperability results, I didnt test agent-shell. I could.
RunWield’s responsibility
RunWield does not currently implement this extension. We would add matching support on our side. The OpenAB request is for generic capability-based support that also works with established ACP adapters, not a RunWield-specific integration.
Use Case
To be able to steer agents from chat surfaces over ACP
Proposed Solution
Proposed OpenAB behavior
- Read the agent’s top-level
_meta.steering.supportedduring initialization. - Offer an explicit Steer now action while a turn is active. Keep Queue for next turn as a separate option.
- Send
_session/steeringimmediately, without waiting behind the active prompt’s completion or connection lock:
{
"jsonrpc": "2.0",
"id": "steer-2",
"method": "_session/steering",
"params": {
"sessionId": "SESSION_ID",
"prompt": [
{
"type": "text",
"text": "Please stop changing the API and fix only the failing test."
}
]
}
}- Handle results without duplicating messages:
injected: mark delivered; do not also queue it.startedNewTurn: the agent has started work; do not resubmit.promptRequired: submit through normalsession/prompt.- Unsupported agent: retain normal queueing and show Queued.
- Timeout/disconnect: show Delivery unconfirmed; do not blindly retry because the agent may already have accepted it.
Do not automatically cancel the current turn as a substitute for steering.
Discord presentation
After successful steering, subsequent output should start in a fresh bot message below the correction, rather than continue editing the older reply above it.
Show separate states for queued, delivered, and delivery unconfirmed. An injected response confirms admission, not that the model has already read the correction.
Maintainer acceptance criteria: Discord validation before opening a PR
Before opening a PR, test extensively on Discord in the contributor's fork and include evidence in the PR description. Keep Steer now separate from Queue for next turn and cover the shared streaming edit path.
- A steer during an active turn on a supporting agent (for example
claude-agent-acporcodex-acp) shows Delivered, and the agent picks up the correction. - An agent without top-level
_meta.steering.supportedfalls back to normal queueing with a clear Queued state. - After successful steering, subsequent output starts in a fresh bot message below the correction.
- Normal streaming replies continue to work.
- Message queueing and batching during a turn continue to work.
-
/cancel,/cancel-all, and/resetcontinue to work. - Long replies continue to overflow into multiple messages.
- A steer sent just as a turn finishes is handled without losing or duplicating the correction.
- Timeout/disconnect shows Delivery unconfirmed, without an automatic retry or duplicate message.
Record the tested agent/version, fork revision, Discord scenario, observed result, and supporting logs or message evidence. Automated coverage complements the requested live Discord evidence; it does not replace it.
Activity
chaodu-agent commentedon Oct 28, 2026
Thanks for the proposal. Mid-turn steering via the non-standard
_session/steeringextension is accepted for discussion, with these constraints:_meta.steering.supported.Removing
needs-triage.thepagent commentedon Oct 30, 2026
close for staleness. Let's discuss on Discord if still relevant.