Repository navigation
Steer: OpenCode agents take agent steers at a tool boundary instead of an abort - #70
Open
erikcostlow wants to merge 4 commits into
Open
erikcostlow wants to merge 4 commits into
erikcostlow wants to merge 4 commits into
Conversation
…h the session inbox, no abort (steer-delivery-design.md §3.5)
…-in at the boundary, the cancelled miss, abort with a parked steer (steer-delivery-design.md §3.5)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ream tests, and which our live tests guard Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
nmamano
pushed a commit
that referenced
this pull request
Nov 12, 2026
… (task e71a4589, PR #70, closes #69) On the pinned @opencode/cli 2.2.5, a steer goes in through OpenCode's session inbox with delivery "steer", resume false, so the running turn folds it in at the next tool boundary instead of being aborted. Steers that miss the turn are cancelled at the terminal frame (and at the interrupted frame after an abort), on the failed turn's stop chain, on close(), and before the next prompt; the turn-end flush delivers them. Steers are refused once the turn's end begins. abort() does not cancel, since 2.2.5's interrupt is fire and forget. The test fake now scopes replies per turn. Docs: steer-delivery-design.md, message-steering-design.md and the messaging agent reference. Contributed by Erik Costlow in PR #70; review fixes and tests by the Isomux loop. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #69
OpenCode receivers now take agent steers at a tool boundary instead of being aborted, using OpenCode 2.2.5's own steering. Isomux sends the steer with
delivery: "steer"andresume: false. If the steer misses the turn, it stays in OpenCode's queue without starting a run; Isomux cancels it at turn end (or on abort) and sends it once as the next turn. This is the same push path Codex uses (steer-delivery-design.md §3.4); the new §3.5 has the details and the 48-trial probe.Changes:
server/backends/opencode/transport.ts,adapter.ts:steer(), delivery tracking, and cancelling steers that were never picked up; the OpenCode backend declarestoolBoundaryDelivery.fake-opencode-v2.ts: inbox and steer routes.agent-manager.opencode.live.test.tsagainst the pinned 2.2.5 binary with the mock provider: a steer during a shell call, a steer that misses the turn, and an abort with a steer waiting.Verified:
ISOMUX_TEST_OPENCODE=1 bun test server/test-support/agent-manager.opencode.live.test.ts: 5 pass, run 5 times in a row.bun run test:opencode:ci: 38 pass.Upstream: OpenCode's own suite already checks that
resume: falsenever wakes the session ("only records the prompt when resume is false" inpackages/core/test/session-prompt.test.ts). I proposed a test for the other half, that the steer stays pending and can be cancelled, in anomalyco/opencode#63356, and the maintainers closed it as not planned because they prefer to keep the existing test. So for that half, the live tests in this PR are the guard. §3.5 now says to runbun run test:opencodeon every OpenCode version bump.Not covered: a steer surviving an OpenCode server restart (listed in §6), and
bun run test:conformancewas not run.Note:
transport.tswas already over the 3000-line lint limit, and this adds about 140 lines.Checked on: OpenCode 2.2.5. The Claude and Codex paths are unchanged.
🤖 Generated with Claude Code