You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Establish OpenCode ACP's capability envelope on all target platforms #176
What documented, source-backed, and real-runtime capabilities does current OpenCode expose through ACP on Windows, macOS, and Linux for launch, initialization, sessions and recovery, replay, model and mode selection, streaming messages, tool activity, permissions and questions, cancellation and interruption, errors, shutdown, authentication boundaries, protocol versioning, and deterministic testing; and what constraints must a truthful Secant Harness Adapter preserve?
Keeps standards-shaped ACP with its official SDK behind strict Secant transport and lifecycle ownership
Canonical decision
Reading rule
Start from the Harness Seam, then examine OpenCode stable v1.18.31 documentation and source. Classify every claim as documented, source-observed, locally observed, inferred, or unknown. Verify real subprocess behavior on Windows, macOS, and Linux where evidence is required; generic platform availability is not ACP parity. Cover the complete question, identify protocol or lifecycle gaps, and state the exact Adapter constraints and deterministic qualification plan. This ticket establishes capability only: do not choose the third Harness, change production code, or treat OpenCode TUI reuse as Harness evidence.
deterministic in-process and real-subprocess upstream fixtures suitable for a Secant qualification harness.
The truthful boundary is narrower than Secant's Harness Interface. OpenCode has no native same-Turn Steer and no structured clarification/elicitation. session/cancel is accepted when written but interruption is confirmed only by the correlated prompt response with stopReason: cancelled; EOF or process loss before that is lost. session/close detaches ACP state and preserves the stored conversation rather than deleting it. Process shutdown remains client-owned stdin EOF plus bounded process-tree cleanup.
The pinned official SDK may log payload-bearing malformed lines and request objects, and its reader is more permissive than Secant's transport contract. An Adapter must therefore use official ACP vocabulary/correlation behind a Secant-owned strict Stream, deadlines, raw recording, redaction, typed failure translation, and terminal ordering. It must durably admit the returned Session ID before prompt bytes, distinguish resume from load-with-replay behind an explicit replay barrier, report Steer and structured clarification unavailable, treat tools as activity rather than Step authority, preserve native permission choices, prefer stable config options, and keep authentication entirely OpenCode-owned.
Platform evidence is deliberately qualified:
macOS arm64: the SHA-verified official v1.18.31 release binary was locally observed through launch, ACP v1 initialize/auth/list/new, a streamed free-model prompt with usage and authoritative end_turn, close, ordered load replay, no-replay resume, and clean EOF.
Windows and Linux: release/build evidence and source-test coverage exist, but installed release-binary ACP behavior remains unknown. Secant must not advertise either profile until the report's ten-part real-binary gate passes on that OS.
The report records 18 exact Adapter constraints and sharpens eight follow-up decisions for the downstream Harness-choice ticket: recovery preference, OpenCode state scope, private-loopback acceptability, permission ownership, fork scope, official-SDK dependency shape, deterministic qualification ownership, and Windows/Linux promotion evidence.
This answers capability and constraints only. It does not choose whether OpenCode earns the third v1 Harness slot.
Verification: report formatting, whitespace, and the 9-case guidance-structure suite passed. The full canonical gate passed migrations, typecheck, formatting, and lint, then encountered unrelated existing TUI/Claude replayer failures and repeated runtime-suite timeouts; no production code or tests changed.
Activity
Sandstorm831 commentedon Sep 20, 2026
Starting context
Secant files are pinned at
741c5d90be852369b53be45b52d184e3109d31fd; upstream examination starts from OpenCode stablev1.18.31.Reading rule
Start from the Harness Seam, then examine OpenCode stable
v1.18.31documentation and source. Classify every claim as documented, source-observed, locally observed, inferred, or unknown. Verify real subprocess behavior on Windows, macOS, and Linux where evidence is required; generic platform availability is not ACP parity. Cover the complete question, identify protocol or lifecycle gaps, and state the exact Adapter constraints and deterministic qualification plan. This ticket establishes capability only: do not choose the third Harness, change production code, or treat OpenCode TUI reuse as Harness evidence.Sandstorm831 commentedon Sep 20, 2026
Resolution
The pinned capability report establishes that OpenCode
v1.18.31exposes a coherent, deep ACP v1 Harness surface:The truthful boundary is narrower than Secant's Harness Interface. OpenCode has no native same-Turn Steer and no structured clarification/elicitation.
session/cancelis accepted when written but interruption is confirmed only by the correlated prompt response withstopReason: cancelled; EOF or process loss before that islost.session/closedetaches ACP state and preserves the stored conversation rather than deleting it. Process shutdown remains client-owned stdin EOF plus bounded process-tree cleanup.The pinned official SDK may log payload-bearing malformed lines and request objects, and its reader is more permissive than Secant's transport contract. An Adapter must therefore use official ACP vocabulary/correlation behind a Secant-owned strict Stream, deadlines, raw recording, redaction, typed failure translation, and terminal ordering. It must durably admit the returned Session ID before prompt bytes, distinguish resume from load-with-replay behind an explicit replay barrier, report Steer and structured clarification unavailable, treat tools as activity rather than Step authority, preserve native permission choices, prefer stable config options, and keep authentication entirely OpenCode-owned.
Platform evidence is deliberately qualified:
v1.18.31release binary was locally observed through launch, ACP v1 initialize/auth/list/new, a streamed free-model prompt with usage and authoritativeend_turn, close, ordered load replay, no-replay resume, and clean EOF.The report records 18 exact Adapter constraints and sharpens eight follow-up decisions for the downstream Harness-choice ticket: recovery preference, OpenCode state scope, private-loopback acceptability, permission ownership, fork scope, official-SDK dependency shape, deterministic qualification ownership, and Windows/Linux promotion evidence.
This answers capability and constraints only. It does not choose whether OpenCode earns the third v1 Harness slot.
Verification: report formatting, whitespace, and the 9-case guidance-structure suite passed. The full canonical gate passed migrations, typecheck, formatting, and lint, then encountered unrelated existing TUI/Claude replayer failures and repeated runtime-suite timeouts; no production code or tests changed.