Skip to content

Establish OpenCode ACP's capability envelope on all target platforms #176

Closed

Description

@Sandstorm831

Question

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?

Activity

  1. Sandstorm831 commented on Sep 20, 2026

    @Sandstorm831
    CollaboratorAuthor

    Starting context

    Secant files are pinned at 741c5d90be852369b53be45b52d184e3109d31fd; upstream examination starts from OpenCode stable v1.18.31.

    Input Why it matters Authority
    Choose whether OpenCode earns the third v1 Harness slot The blocked decision this research must inform; market priority is already scoped there Canonical question
    Harness Seam ADR Defines the evidence-bearing profile, Turn, recovery, controls, failures, cleanup, and conformance threshold Canonical architecture
    Harness Module guidance and testing guidance Current Adapter invariants, fixture rules, and real-Harness evidence boundary Canonical policy
    Claude Code transport research, Gemini ACP research, and Codex app-server research Precedent for scope, evidence labels, platform qualification, and downstream constraints Canonical research
    Gemini ACP capability report Closest existing report structure for an ACP Harness Canonical research
    OpenCode ACP documentation and OpenCode v1.18.31 Documented ACP v1 surface and pinned stable source/runtime baseline Primary upstream evidence
    JSON-RPC correlation decision 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.

  2. self-assigned this
    on Sep 20, 2026
  3. Sandstorm831 commented on Sep 20, 2026

    @Sandstorm831
    CollaboratorAuthor

    Resolution

    The pinned capability report establishes that OpenCode v1.18.31 exposes a coherent, deep ACP v1 Harness surface:

    • structured NDJSON JSON-RPC over stdio with a stable prompt-response Turn boundary;
    • a native Session ID before content admission, plus list, replaying load, no-replay resume, replaying fork, and close;
    • stable config options for model, effort, and visible mode;
    • keyed assistant/thought streaming, typed tool lifecycle, usage/cost, exact permission requests, typed errors, and prompt cancellation;
    • 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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

wayfinder:context-readyWayfinding ticket has curated starting context and may be claimedwayfinder:researchAFK research decision ticket

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions