Repository navigation
Open
Labels
area/nixNix expressions, flakes, and packagingNix expressions, flakes, and packagingeffort/sSmall: expected under 2 hours of workSmall: expected under 2 hours of workkind/infrastructureInfrastructure / host-portability workInfrastructure / host-portability workmeta/enrichedIntake review done: acceptance criteria, links, and normalized labels addedIntake review done: acceptance criteria, links, and normalized labels addedpriority/normalOrdinary priority (the default)Ordinary priority (the default)queue/blockedQueue or user escalation stateQueue or user escalation statesource/creatorFiled by the new-issue-creator jobFiled by the new-issue-creator jobstatus/blockedQueue or user escalation stateQueue or user escalation statetask/triageQueue packet kind: verify, reproduce, and route this itemQueue packet kind: verify, reproduce, and route this itemuser/escalatedQueue or user escalation stateQueue or user escalation statework/assignedQueue worker lifecycle stateQueue worker lifecycle state
Description
Problem
OpenClaw's Claude and Codex ACP bridges currently execute out of a plugin-admission staging dir in tmp:
~/.openclaw/acpx/claude-agent-acp-wrapper.mjsandcodex-acp-wrapper.mjshardcodeinstalledBinPathinto~/.openclaw/tmp/plugin-captures/83a9d889-def6-4444-ae9f-201611c1afd1/captures/openclaw-plugin-build-*/package-*/node_modules/@agentclientprotocol/{claude-agent-acp,codex-acp}/dist/index.js- That capture is 1.6 GB and load-bearing: deleting it breaks OpenClaw's Claude/Codex ACP coding path. Two sibling captures (1.3 GB, unreferenced) were already deleted 2026-10-28.
- tmp/ is excluded from the openclaw-backup job (by design — it is scratch), so the bridges have no backup coverage and no reproducible install path. Drew's ruling 2026-10-28: package them with Nix like everything else, expose stable symlinks, point the config at those.
Current state (verified 2026-10-28)
- OpenClaw itself + all runtime plugins already load from /nix/store (nix-openclaw overlay);
claude,codex,opencodeCLIs are already system-installed (/run/current-system/sw/bin). - The OpenCode ACP agent already uses the system binary: acpx config
agents.opencode = { command: /etc/profiles/per-user/user/bin/opencode, args: [acp] }. The gateway's allowedAgents is [opencode]; the Claude/Codex wrappers are wired but dormant. - Only the two adapter packages (@agentclientprotocol/claude-agent-acp, @agentclientprotocol/codex-acp — small Node programs that spawn the agent CLIs) are missing from the store.
Plan
- First check whether the adapters already ship inside the nix-openclaw acpx runtime plugin's store path — if yes this is a repoint, not a packaging job.
- Otherwise add flake packages for both adapters (buildNpmPackage pattern, following the pkgs/ conventions in this repo).
- Wire stable entrypoints via the OpenClaw home module (symlinks under ~/.openclaw/acpx/bin/ or ~/bin), and repoint the wrappers / acpx agent config at them. Follow the provider-switchboard rule: keep the old capture path recoverable until verification passes.
- Verify an ACP handshake/session for both adapters directly (stdio/acpx smoke), and that the gateway stays healthy.
- Only after verification: delete the 83a9d889 capture and the wrappers' tmp dependency.
Out of scope
- Changing the gateway allowedAgents policy (whether Claude/Codex ACP agents get enabled is Drew's call, separate from this packaging fix).
- The OpenCode agent path (already system/Nix).
- home/openclaw's extraction to the private openclaw-personal repo (separate tracked work).
Acceptance
- Both adapters resolve from Nix store paths via stable symlinks; no path under ~/.openclaw/tmp is referenced by the wrappers or acpx config.
- ACP smoke test passes for claude-agent-acp and codex-acp against the system CLIs.
- The 1.6 GB capture is deleted; ~/.openclaw/tmp holds only genuine scratch.
- Gateway + the existing OpenCode ACP path verified healthy after the change.
Acceptance criteria
- Both ACP adapters (@agentclientprotocol/claude-agent-acp and @agentclientprotocol/codex-acp) resolve from Nix store paths via stable symlinks (home-manager wiring); no path under ~/.openclaw/tmp is referenced by the wrappers or the acpx config.
- ACP initialize/session smoke tests pass for both adapters against the system CLIs.
- The 1.6 GB plugin-captures tree is deleted after verification; ~/.openclaw/tmp holds only genuine scratch.
- The OpenClaw gateway and the existing OpenCode ACP path are verified healthy after the change, and the change lands as a worktree branch + PR.
Metadata
Metadata
Assignees
Labels
area/nixNix expressions, flakes, and packagingNix expressions, flakes, and packagingeffort/sSmall: expected under 2 hours of workSmall: expected under 2 hours of workkind/infrastructureInfrastructure / host-portability workInfrastructure / host-portability workmeta/enrichedIntake review done: acceptance criteria, links, and normalized labels addedIntake review done: acceptance criteria, links, and normalized labels addedpriority/normalOrdinary priority (the default)Ordinary priority (the default)queue/blockedQueue or user escalation stateQueue or user escalation statesource/creatorFiled by the new-issue-creator jobFiled by the new-issue-creator jobstatus/blockedQueue or user escalation stateQueue or user escalation statetask/triageQueue packet kind: verify, reproduce, and route this itemQueue packet kind: verify, reproduce, and route this itemuser/escalatedQueue or user escalation stateQueue or user escalation statework/assignedQueue worker lifecycle stateQueue worker lifecycle state
Activity
developing-today commentedon Oct 28, 2026
CODE-688
dezren39 commentedon Oct 28, 2026
🤖 Agent note · state: handed off
queue/*labels and was assigned to Drew (dezren39) at 15:49Z, after the task was enqueued at 15:37Z — the issue reads as taken over outside the queue flow, so the queued task was closed out to keep the pool truthful and prevent double-booking.queue/queuedshould be applied to the issue in the same action.dezren39 commentedon Oct 28, 2026
🤖 Orchestrator note · state: re-queued
queuedin repo-health-code-pilot),queue/queuedlabel applied, and the assignee removed so the takeover signal does not re-fire.dezren39 commentedon Oct 28, 2026
Intake review
museACP agent) is today's sibling OpenClaw ACP item. Queue state: see the monitor's agent note above — queue task 1930 was cancelled during reconciliation because this issue carries noqueue/*labels and was assigned to Drew at 15:49Z; re-enqueueing the same packet revives it if queue handling is wanted.dezren39 commentedon Oct 31, 2026
Status — owner order 2026-10-28, stalled, re-queued/repaired 2026-10-31.
This issue was labelled
queue/queuedand its fix task (task 1930, repo-health-code-pilot) was enqueued 2026-10-28 — but it was never claimed in 3 days, and its attempt cap sat at 2 while the fleet standard moved to 4.Verified + repaired 2026-10-31 (Oct-28 left-on-the-ground remediation), by direct queue read:
queued, attempts 0,not_beforenull, no lease — live and claimable.max_attemptsraised 2 → 4, matching the fleet-wide preventive cap standard set 2026-10-28.The 1.6 GB capture
83a9d889still cannot be deleted until this lands (it is load-bearing for the acpx wrappers) — this task is the gate.250 remaining items
dezren39 commentedon Nov 4, 2026
agent-note:v1
event: picked_up
task: 1930 (small_fix, repo-health-code-pilot; worker repo-worker-code; OpenChamber scheduled lane 335a5d1f-bfc1-4831-99ea-850c8939a727)
by: openchamber-scheduled-lane
at: 2026-11-04T19:45:00Z
Fresh metadata confirms issue #1711 is OPEN and assigned to dezren39; task-bound PR #3275 is OPEN draft, authored and assigned to dezren39. This is the existing Drew-owned hard stop. I have not inspected PR contents, branch/worktree, credentials, capture, or live OpenClaw state, and have made no code changes. Next: park for 30 minutes; resume only after explicit ownership handoff/release and dedicated live-ops authorization.
dezren39 commentedon Nov 4, 2026
agent-note:v1
event: parked
task: 1930 (small_fix, repo-health-code-pilot; worker repo-worker-code; OpenChamber scheduled lane 335a5d1f-bfc1-4831-99ea-850c8939a727)
by: openchamber-scheduled-lane
at: 2026-11-04T19:46:00Z
Parked for 30 minutes. Fresh metadata: issue #1711 is OPEN and assigned to dezren39; task-bound PR #3275 is OPEN draft, authored and assigned to dezren39. No ownership release/handoff is present. This lane did not inspect PR contents/diff, branch/worktree, credentials, capture, or live OpenClaw state and made no code changes.
labels: queue/parked and status/parked set; queue/claimed and status/in-progress removed; work/assigned retained.
resume: re-fetch issue #1711 and PR #3275 metadata; proceed only after explicit ownership handoff/release and dedicated live-ops authorization.
dezren39 commentedon Nov 4, 2026
🤖 Agent note · escalated