Summary
agx (Antigravity wrapper) returns 0 bytes with exit 0 on charges that ask it to produce HTML/files. The caller only discovers the failure by checking output size.
Environment
- LazyCodex: 4.15.1 (this harness)
- agx wrapper:
~/AI/Tools/agx (current)
- Reproduction: 2026-08-04 FleetOpus Sea of Demand visualization charge (5.4KB prompt → self-contained HTML dashboard)
- Prior occurrences: sprite-factory (2026-07-25), portfolio roadmap (2026-07-28)
Repository Decision
- Target: code-yeongyu/lazycodex
- Why: The agx wrapper lives in the operator's
~/AI/Tools/ fleet dispatch layer, which is a LazyCodex-orchestrated harness integration. The defect (silent empty output) was in the wrapper, not upstream Codex or Antigravity core.
Reproduction
- Dispatch via agx (or a stale path to agx) with a prompt that says "output HTML" or "write a file"
- agy runs in headless mode (no
--sandbox or denied writes)
- Model attempts write → denied silently → returns nothing
- Wrapper previously exited 0 with empty stdout
Expected Behavior
Wrapper detects empty output or no written artifact and exits 1 with a clear diagnostic.
Actual Behavior (historical)
Wrapper exited 0, 0 bytes stdout, 0 bytes stderr. Caller treated it as success.
Evidence
- agx source at
~/AI/Tools/agx (137 lines) already contains the guard:
- Lines 96-104:
if [ "$STATUS" -eq 0 ] && [ -z "$RESULT" ] → echo "agx: agy exited 0 but produced NO output — refusing to report success" >&2; exit 1
- Lines 108-116: AGX_OUT snapshot-diff guard → exit 1 if no new artifacts written
- Comments in the wrapper cite the exact prior failures (2026-07-25, 2026-07-29) and the design rationale for the artifact guard.
- The guard was added after the 2026-07-25/07-28 incidents; the 2026-08-04 reproduction suggests the caller used a stale agx path or invoked
agy directly.
Root Cause
The wrapper lacked an empty-output + AGX_OUT guard. When agy (headless) silently denied a write, the wrapper reported success on nothing. The guard now exists.
Proposed Fix
Already implemented. The current agx wrapper (Option 1 + Option 3 from the report) does exactly what the recommendation asked for:
- Detects empty stdout + exit 0 → exit 1 with message
- In AGX_OUT mode, diffs the output directory and refuses on empty diff
- Documents the "print to stdout, not write a file" discipline in the artifact-mode contract (lines 81-87)
Action for caller: ensure ~/AI/Tools/agx (or the current agx in PATH) is the one being dispatched. If a different code path calls agy directly, route it through agx or replicate the guard.
Verification Plan
- Re-run the Sea of Demand charge using the current agx wrapper with AGX_OUT set → should now exit 1 with the diagnostic instead of 0 + empty file.
- Confirm that any future charge that forgets the "print to stdout" discipline is caught by the wrapper guard.
This issue or PR was generated by LazyCodex.
Tag: lazycodex-generated
Summary
agx (Antigravity wrapper) returns 0 bytes with exit 0 on charges that ask it to produce HTML/files. The caller only discovers the failure by checking output size.
Environment
~/AI/Tools/agx(current)Repository Decision
~/AI/Tools/fleet dispatch layer, which is a LazyCodex-orchestrated harness integration. The defect (silent empty output) was in the wrapper, not upstream Codex or Antigravity core.Reproduction
--sandboxor denied writes)Expected Behavior
Wrapper detects empty output or no written artifact and exits 1 with a clear diagnostic.
Actual Behavior (historical)
Wrapper exited 0, 0 bytes stdout, 0 bytes stderr. Caller treated it as success.
Evidence
~/AI/Tools/agx(137 lines) already contains the guard:if [ "$STATUS" -eq 0 ] && [ -z "$RESULT" ]→echo "agx: agy exited 0 but produced NO output — refusing to report success" >&2; exit 1agydirectly.Root Cause
The wrapper lacked an empty-output + AGX_OUT guard. When agy (headless) silently denied a write, the wrapper reported success on nothing. The guard now exists.
Proposed Fix
Already implemented. The current agx wrapper (Option 1 + Option 3 from the report) does exactly what the recommendation asked for:
Action for caller: ensure
~/AI/Tools/agx(or the current agx in PATH) is the one being dispatched. If a different code path callsagydirectly, route it through agx or replicate the guard.Verification Plan
This issue or PR was generated by LazyCodex.
Tag: lazycodex-generated