Skip to content

feat(harness): opencode CLI harness + config_files launcher (RFC-006 Phase 5)#54

Merged
explosivebit merged 2 commits into
mainfrom
feat/harness-opencode
Jun 3, 2026
Merged

feat(harness): opencode CLI harness + config_files launcher (RFC-006 Phase 5)#54
explosivebit merged 2 commits into
mainfrom
feat/harness-opencode

Conversation

@explosivebit

Copy link
Copy Markdown
Contributor

What

Third agentic harness — opencode (sst), model-agnostic. Also adds the
config_files launcher (shared infra for opencode / codex / Crush).

Result (live on the board)

board.json now 23/29 scored. opencode column on be_01_jwt_auth:

model opencode
qwen-3-14b 6.92
qwen3-coder-30b FAILED
codestral FAILED
devstral FAILED

Harness × model finding (honest, not a bug)

opencode's tool-calling is format-sensitive: among our open coders only
qwen-3-14b emits OpenAI-native tool_calls that opencode parses. qwen3-coder-30b
/ codestral / devstral emit XML-ish tool calls (<function=read>…) that
opencode's openai provider drops → no file edit → NO_PATCH (not a timeout —
the run finishes in ~5s). goose/aider tolerate these models; opencode is pickier.
Real harness×model data, shown honestly (FAILED cells render "—").

How

  • Image: node base + opencode-ai@1.15.13; uses opencode's built-in
    openai provider
    with a baseURL override → our proxy (bundled in the binary,
    so the no-egress sandbox needs no run-time npm). Isolation-smoked end-to-end.
  • config_files launcher (DockerHarnessLauncher._write_config_files): writes
    a harness's config (opencode.json now, codex config.toml next) into the
    workspace before the git base commit — the harness finds it AND it stays
    out of the captured patch.
  • _opencode_invocation recipe + stacks/opencode/stack.yaml (opencode run).

Verify

  • 729 eval-core tests green; ruff + mypy --strict clean; 12/12 stack specs valid.
  • Playwright: opencode column renders, no hydration error.

Refs: rfc-006-stack-executor

🤖 Generated with Claude Code

explosivebit and others added 2 commits June 3, 2026 18:36
…auncher

Third agentic harness (model-agnostic, sst/opencode). Uses opencode's BUILT-IN
openai provider with a baseURL override → our proxy (the provider is bundled in
the binary, so the no-egress sandbox needs no run-time npm). Built + isolation-
smoked end-to-end (opencode run → proxy → wrote a file in the sandbox).

Adds the config_files launcher write (DockerHarnessLauncher._write_config_files):
a harness's config (opencode.json now; codex config.toml next) is written into
the workspace BEFORE the git base commit, so the harness finds it AND it stays
out of the captured patch. Shared infra for opencode / codex / Crush.

- infra/docker/harness-opencode: node base + npm opencode-ai@1.15.13 (uid-1000
  `node` user matches the host bind owner).
- _opencode_invocation recipe (opencode.json via config_files; -m openai/<alias>).
  Promoted opencode proven → out of _PENDING_RECIPES.
- stacks/opencode/stack.yaml: command `opencode run`, L1+L2+L3+L4.
- tests: opencode recipe-proven + config_files-written-then-excluded-from-patch;
  supported_harnesses = {aider, goose, opencode}.

729 tests green; ruff + mypy --strict clean; 12/12 stack specs valid.

Refs: rfc-006-stack-executor

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
… finding)

Runs the opencode grid (--add-stack opencode, same 4 coder models, 2 seeds) and
merges the column into board.json (now 23/29 scored). opencode × qwen-3-14b =
6.92; the other 3 coders FAILED — a real harness×model-compat finding:
qwen3-coder-30b / codestral / devstral emit tool calls in an XML-ish format
(`<function=read>...`) that opencode's openai-provider doesn't parse → no file
edit → NO_PATCH. Not a timeout (the run finishes in ~5s). opencode's tool-calling
is more format-sensitive than goose/aider, which tolerate these models. Shown
honestly (FAILED cells render "—"), never hidden.

Refs: rfc-006-stack-executor

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@explosivebit explosivebit merged commit 75b437a into main Jun 3, 2026
6 checks passed
@explosivebit explosivebit deleted the feat/harness-opencode branch June 3, 2026 15:38
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant