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
Follow-up (#2229): ACP-runtime agent entry for OpenClaw→OpenCode dispatch (opencode-acp) #2256
Follow-up to #2229 (method 1 of 3). Method 3 — the opencode-route provider front — shipped as the priority build (PR #2250, live-proven). This method was descoped by Drew on 2026-10-29 to a follow-up: sometime soon / when an OpenClaw-origin workload needs ACP dispatch into OpenCode.
What it adds
An ACP-runtime agent entry in home/openclaw/default.nix (agents.entries): opencode-acp with runtime.type="acp", runtime.acp.agent="opencode", backend="acpx", mode="oneshot", heartbeat disabled. Per the shipped OpenClaw runbook, an entry configured with runtime.type="acp" makes it a valid sessions_spawn({runtime:"acp"}) target and binding-default holder, with runtime.acp.agent naming the underlying harness (opencode). That gives OpenClaw a standing capability to dispatch a job into OpenCode over ACP, instead of only reaching OpenCode models through the provider front.
Starting point (already done pre-descope)
PR feat(openclaw): opencode-acp ACP-runtime agent (#2229 mechanism 1) #2237 (branch feat/openclaw-acp-agent-2229) already contains the entry. The shape was verified against the pinned OpenClaw 2026.10.7 zod schema — mode must be persistent|oneshot (an earlier run draft was rejected by openclaw config get and corrected).
Established semantics: a direct openclaw agent --agent opencode-acp turn still runs embedded on the default model — the entry's value is as a spawn target, so its live proof depends on the sessions_spawn follow-up (headless/CLI sessions currently never receive that tool). Once that lands, prove this with a spawn to agentId="opencode-acp" and check the acp_sessions table plus a new row in OpenCode's session_v2.
Closed by Drew's decision (2026-10-29, main chat): the embedded runtime is what he wants for OpenClaw's agents. The standing ACP-runtime agent (opencode-acp) is therefore not wanted, not merely blocked — this restore is cancelled, not deferred. OpenClaw spawning OpenCode over ACP on demand from sessions (#1728) remains enabled and is unaffected. The nix-openclaw schema bug that made the entry unevaluable is still tracked at #2509 / upstream openclaw/nix-openclaw#176 for what it's worth to the generator, but nothing here waits on it anymore.
Reopened on Drew's directive (2026-10-29 21:44 CDT, main chat): "I want the other options built and functional." This supersedes the close from ~25 minutes earlier — embedded stays the default runtime for OpenClaw's agents, AND the ACP-runtime agent option is to be built and proven functional as a standing capability. Build note: the nix-openclaw schema cannot express the entry (#2509, upstream openclaw/nix-openclaw#176); the working route is to carry a patch against the nix-openclaw module in this repo (single-submodule runtime type) or an equivalent local encoding, proven by a full toplevel evaluation WITH the entry present. Acceptance: entry evaluates, a switch activates it, and 'openclaw agent --agent opencode-acp' completes a trivial dispatched turn. Scope clarification (Drew, 21:45 CDT): ACP dispatch is task handoff — OpenCode doing the work there is the point of the option. The routing-only principle in the new follow-up issue applies to the opencode-route MODEL door, not to dispatch.
Claimed by the OpenChamber scheduled queue lane (task 7860, triage, 20 min box). Revalidating against current main: entry still absent, blocker #2509 / upstream openclaw/nix-openclaw#176 still open at the pinned rev. Scope + ordering follow in this same run.
The only viable route is a local workaround, because the pinned input cannot express runtime.type=acp:
Preferred: vendor/patch the generated schema module locally — single submodule type = enum [ "embedded" "acp" ] plus optional acp attrset, keeping the rendered JSON shape identical. This repo already accepts exactly this pattern for a nix-openclaw piece: home/openclaw/plugins/summarize/flake.nix is vendored for the same class of upstream-pin defect.
Not preferred: a third fork flake input. Repo policy keeps fork inputs to opencode and openchamber; do not add nix-openclaw as a fork.
Proof-semantics risk (must be handled, not assumed): your own note in the issue body says a direct openclaw agent --agent opencode-acp turn still runs embedded on the default model — the entry's value is as a sessions_spawn target. So the acceptance in your 21:44 CDT comment ("openclaw agent --agent opencode-acp completes a trivial dispatched turn") may not be satisfiable by the entry alone. The implementing worker must record which path actually proved dispatch (acp_sessions row + new session_v2 row), and if it is only reachable via sessions_spawn, note what remains for the headless-sessions follow-up rather than claiming a false proof.
Enqueued implementation task 8040 (repo-health:v1:fix:developing-today/code:issue:2256), not_before 2026-11-03T20:00Z, with the #2509 ordering gate written into its acceptance criteria. No new labels needed on the issue beyond the queue lifecycle ones already applied.
Drew's adjudication (2026-11-05 01:44 CST, main chat): embedded is what I want — the Oct 30 ruling stands; the ACP-runtime agent entry is NOT restored as a standing agent. Two refinements recorded: (1) the architecture focus is OpenClaw calls OpenCode, and OpenClaw handles the loop — Shed drives, OpenCode is the called backend. (2) Drew wants to know ACP could work: a bounded capability proof (OpenClaw driving its own loop, dispatching real work to OpenCode over ACP, end-to-end) is spun out as its own issue — a proof, not a restore, and it changes no standing config. Closing this issue as not planned per the ruling; the reopen on 2026-10-30T02:45Z has no recorded basis and is superseded by this comment.
Activity
developing-today commentedon Oct 29, 2026
CODE-1119
fix(openclaw): remove opencode-acp entry that cannot evaluate
dezren39 commentedon Oct 30, 2026
Closed by Drew's decision (2026-10-29, main chat): the embedded runtime is what he wants for OpenClaw's agents. The standing ACP-runtime agent (opencode-acp) is therefore not wanted, not merely blocked — this restore is cancelled, not deferred. OpenClaw spawning OpenCode over ACP on demand from sessions (#1728) remains enabled and is unaffected. The nix-openclaw schema bug that made the entry unevaluable is still tracked at #2509 / upstream openclaw/nix-openclaw#176 for what it's worth to the generator, but nothing here waits on it anymore.
dezren39 commentedon Oct 30, 2026
Reopened on Drew's directive (2026-10-29 21:44 CDT, main chat): "I want the other options built and functional." This supersedes the close from ~25 minutes earlier — embedded stays the default runtime for OpenClaw's agents, AND the ACP-runtime agent option is to be built and proven functional as a standing capability. Build note: the nix-openclaw schema cannot express the entry (#2509, upstream openclaw/nix-openclaw#176); the working route is to carry a patch against the nix-openclaw module in this repo (single-submodule runtime type) or an equivalent local encoding, proven by a full toplevel evaluation WITH the entry present. Acceptance: entry evaluates, a switch activates it, and 'openclaw agent --agent opencode-acp' completes a trivial dispatched turn. Scope clarification (Drew, 21:45 CDT): ACP dispatch is task handoff — OpenCode doing the work there is the point of the option. The routing-only principle in the new follow-up issue applies to the opencode-route MODEL door, not to dispatch.
dezren39 commentedon Nov 3, 2026
Claimed by the OpenChamber scheduled queue lane (task 7860, triage, 20 min box). Revalidating against current
main: entry still absent, blocker #2509 / upstream openclaw/nix-openclaw#176 still open at the pinned rev. Scope + ordering follow in this same run.dezren39 commentedon Nov 3, 2026
Triage at current
main(f04a439, 2026-11-03)Verdict: live, unbuilt, and correctly ordered behind #2509. Not closed.
Verified state
home/openclaw/default.nix(~line 377) has only the removal comment: theopencode-acpentry is absent, pointing at OpenClaw ACP-runtime agent entry cannot evaluate: nix-openclaw generated schema makes the acp runtime branch unreachable #2509 and this issue.2256/opencode-acp).priority/high) and carries a queued queue task. Upstream openclaw/nix-openclaw#176 is still open and its review was run against rev4b261b08c173— exactly ourflake.lockpin — so there is no upstream fix to bump to.Scoped fix path
The only viable route is a local workaround, because the pinned input cannot express
runtime.type=acp:type = enum [ "embedded" "acp" ]plus optionalacpattrset, keeping the rendered JSON shape identical. This repo already accepts exactly this pattern for a nix-openclaw piece:home/openclaw/plugins/summarize/flake.nixis vendored for the same class of upstream-pin defect.opencodeandopenchamber; do not addnix-openclawas a fork.Ordering / blockers recorded
opencode-acpdispatch actually works, plus the README fix.openclaw agent --agent opencode-acpturn still runs embedded on the default model — the entry's value is as asessions_spawntarget. So the acceptance in your 21:44 CDT comment ("openclaw agent --agent opencode-acpcompletes a trivial dispatched turn") may not be satisfiable by the entry alone. The implementing worker must record which path actually proved dispatch (acp_sessionsrow + newsession_v2row), and if it is only reachable viasessions_spawn, note what remains for the headless-sessions follow-up rather than claiming a false proof.home/openclaw/README.mdstill says OpenCode is the only allowed ACP agent whiledefault.nixallowsopencode/claude/codex/agy(openclaw: enable claude, codex, agy as ACP agents alongside opencode #1728), and still says entries-based ACP agents are not used.Follow-up
Enqueued implementation task 8040 (
repo-health:v1:fix:developing-today/code:issue:2256),not_before2026-11-03T20:00Z, with the #2509 ordering gate written into its acceptance criteria. No new labels needed on the issue beyond the queue lifecycle ones already applied.116 remaining items
dezren39 commentedon Nov 5, 2026
🤖 Agent note · picked up
dezren39 commentedon Nov 5, 2026
🤖 Agent note · parked
dezren39 commentedon Nov 5, 2026
Drew's adjudication (2026-11-05 01:44 CST, main chat): embedded is what I want — the Oct 30 ruling stands; the ACP-runtime agent entry is NOT restored as a standing agent. Two refinements recorded: (1) the architecture focus is OpenClaw calls OpenCode, and OpenClaw handles the loop — Shed drives, OpenCode is the called backend. (2) Drew wants to know ACP could work: a bounded capability proof (OpenClaw driving its own loop, dispatching real work to OpenCode over ACP, end-to-end) is spun out as its own issue — a proof, not a restore, and it changes no standing config. Closing this issue as not planned per the ruling; the reopen on 2026-10-30T02:45Z has no recorded basis and is superseded by this comment.
dezren39 commentedon Nov 5, 2026
agent-note:v1
state: done (task 8040)