Repository navigation
Description
Defect
The agy bridge drops tool schemas: bin/agy-proxy.mjs formats only body.messages, never forwards the caller's offered tool schemas, and emits only content with finish_reason: 'stop' — so OpenCode can never receive structured tool calls through this leg, and because the responses look successful, no failover triggers. Tool-dependent workhorse jobs routed here silently cannot complete. Codex flagged this as a P1 on PR #2200 (the Gemini-burn PR, which added agy to the workhorse primary pool, sending roughly half of primary selections through this bridge). PR #2200 has since merged (2026-10-29), so this defect is on main today.
The Codex finding (verbatim, PR #2200)
Require tool-call support before adding agy to the primary pool
For workhorse tasks that need the caller's tools, this new leg routes roughly half of primary selections through a text-only bridge.
bin/agy-proxy.mjsformats onlybody.messages(lines 865–867), never forwards the offered tool schemas, and emits only content withfinish_reason: 'stop'(lines 1022–1028 and 1054–1060), so OpenCode cannot receive structured tool calls. These responses appear successful rather than triggering failover, leaving tool-dependent jobs unable to complete their work. Add tool-call translation to the bridge or keep this provider out of the primary pool until it supports it.
Finding: #2200 (comment) (filed against .opencode/opencode.jsonc line 6626, PR #2200)
Fix direction (as Codex prescribed)
Either add tool-call translation to bin/agy-proxy.mjs (forward tool schemas; translate model tool calls into OpenAI tool_calls with a truthful finish_reason), or keep this provider out of the workhorse primary pool until it supports it. Note #865 (closed) fixed the same defect class for the sibling antigravity-ls-proxy; this issue is the agy-proxy bridge specifically.
Source
Codex review-value audit 2026-10-29 (research_notes/codex-review-value-20261029/findings.md §2, best catch #5): classified REAL-CATCH; PR #2200 merged 2026-10-29 with the finding unacted, so the defect is on main. Verification: defect confirmed present on main 2026-10-29.
Acceptance criteria
- The agy bridge forwards the caller's offered tool schemas and emits structured tool calls OpenCode can execute — or agy is removed from the workhorse primary pool until it does
- A tool-dependent workhorse job routed through the agy leg completes with real tool calls (evidence linked), and a text-only response can no longer masquerade as success for a tool-requiring request
- The masking is gone: when the bridge cannot honour tools, the response fails over instead of returning finish_reason 'stop' content
Activity
developing-today commentedon Oct 29, 2026
CODE-1133
dezren39 commentedon Oct 30, 2026
Intake review
Related: PR #2200 (merged — added agy to the workhorse primary pool; Codex P1 finding r4410496158 quoted in the body)
Notes: Filed from the Codex P1 on PR #2200, which merged 2026-10-29, so the defect is on main:
bin/agy-proxy.mjsformats onlybody.messages(lines 865–867), never forwards tool schemas, and emits only content with finish_reason 'stop' (lines 1022–1028, 1054–1060) — roughly half of workhorse-primary selections route through a leg that cannot execute tools and looks successful doing it. Already labelled kind/bug, priority/high, effort/m by the filer; this pass appends acceptance criteria and marks enriched.Risks: Silent incapacity is worse than failure: jobs burn their full budget producing plausible text instead of failing over to a capable leg.
Suggested approach: Either implement tool-call translation in the bridge (schema forwarding + structured emission), or pull agy from the primary pool until that lands — the pool change is the xs stopgap, the translation is the fix.
🤖 Agent note · filed
meta/enrichedapplied; acceptance criteria appended to the body only where no acceptance section existed (original body preserved verbatim above it). Still-live check this pass: no merged PR or fix commit explicitly resolving this issue was found in this pass's search.dezren39 commentedon Nov 2, 2026
Verdict (2026-11-02, task 3425): resolved via the removal branch — no code change needed
Codex's prescription was translation OR removal from the primary pool. Removal happened (Drew's pool edits + the 2026-10-30 Antigravity retirement). Verified at HEAD + deployed state on amd:
workhorse-primarytargets are now exactlyopenai-plan/gpt-6-luna#xhigh+muse-direct/muse-spark-1.3-contributor#xhigh(.opencode/opencode.jsonc:4106+). Theantigravity-agy/gemini-4-argonleg added by TEMPORARY: workhorse primary adds Antigravity Gemini 4 Argon to the burn round-robin (#2173) #2200 is gone (traced through the 10-29→11-02 seat comments; no Antigravity leg remains in primary).antigravity-agysits indisabled_providers(opencode.jsonc:158-159; "a provider is ON unless listed"); no enabled seat references it.bin/agy-proxy.mjsremains in-repo as history, uninvoked — no unit (removed with the retirement), and :18743 has no localhost listener, so no traffic can reach the bridge. A tool-requiring request can no longer be answered with fake-success content from this leg.antigravity-ls-proxylikewise removed; single Antigravity door isantigravity-directon :18751 (active, serving).Cosmetic leftovers (NOT this defect — no traffic impact, noted for whoever touches those files):
home/openclaw/default.nix:101still listsagy-proxy.serviceinopenclaw-gateway'sAfter=(ordering-only, benign), and the stale proxy-supervisor comment above it;home/common/default.nix:1645+still shipsagy-proxy/antigravity-ls-proxyCLI shims around the retired bridges.Closing as already-done via removal. Reopen if agy is ever re-seated in a primary pool without tool-call translation.
🤖 Agent note · done