Summary
Active Antigravity (agy) runs can be killed after 120 seconds with:
[jaw:watchdog] killing main — no first progress after 120s
This can happen even while the Antigravity transcript is growing with planner/thinking activity. Telegram then receives 응답 없음, and the stored assistant result may contain Error: timed out waiting for response.
Environment
- cli-jaw:
2.1.5
- agy:
1.0.10
- backend: Gemini 3.5 Flash, reproduced with Low and Medium reasoning
- Linux
Reproduction Pattern
- Use the
agy backend.
- Start a task that spends more than two minutes planning before its first parsed tool event or final stdout response. A multi-step maintenance task reproduces this reliably; long media-generation workflows are also susceptible.
- Observe that the Antigravity transcript file is found and tailed.
- At approximately 120 seconds, cli-jaw kills the process as having no first progress.
Example log sequence:
[jaw:main] Spawning: agy -p ...
[jaw:agy:transcript] tailing .../transcript.jsonl
... transcript/planner activity continues ...
[jaw:watchdog] killing main — no first progress after 120s
[jaw:main] exited code=124, text=0 chars
[tg:out] ...: 응답 없음
Root Cause
agy-transcript-watcher.js correctly notices any transcript growth:
if (delta.offset > previousOffset) {
options.ctx.agyTranscriptActive = true;
options.onActivity?.();
}
However, spawn.js currently handles onActivity only by scheduling quiet completion:
onActivity: () => {
scheduleAgyQuietCompletion();
},
The watchdog is reset only when applyTranscriptTool() parses a tool row:
ctx.stallWatchdog?.markProgress();
Planner/thinking rows grow the transcript but may not parse as tool rows. A run can therefore be visibly active while firstProgressMs remains unsatisfied.
This occurs before Antigravity's own print timeout. cli-jaw passes --print-timeout using the configured absoluteHardCapMs (240 minutes with the current default hard cap), while the watchdog's default firstProgressMs is 120 seconds.
Expected Behavior
Any current-turn Antigravity transcript growth should count as process progress and prevent the no-first-progress watchdog from killing an active run.
Suggested Fix
Mark watchdog progress in the transcript watcher's onActivity callback:
onActivity: () => {
ctx.stallWatchdog?.markProgress();
scheduleAgyQuietCompletion();
},
It would also be useful to add a regression test covering:
- planner-only transcript growth for longer than
firstProgressMs
- a later parsed tool event
- genuinely silent runs that should still be terminated
- long-running tool calls with sparse output
Notes
Increasing agentTimeout.agy.firstProgressMs is a workable local mitigation, but it only delays the false positive. Treating verified transcript growth as progress addresses the integration mismatch directly while retaining the watchdog for genuinely stalled processes.
Summary
Active Antigravity (
agy) runs can be killed after 120 seconds with:This can happen even while the Antigravity transcript is growing with planner/thinking activity. Telegram then receives
응답 없음, and the stored assistant result may containError: timed out waiting for response.Environment
2.1.51.0.10Reproduction Pattern
agybackend.Example log sequence:
Root Cause
agy-transcript-watcher.jscorrectly notices any transcript growth:However,
spawn.jscurrently handlesonActivityonly by scheduling quiet completion:The watchdog is reset only when
applyTranscriptTool()parses a tool row:Planner/thinking rows grow the transcript but may not parse as tool rows. A run can therefore be visibly active while
firstProgressMsremains unsatisfied.This occurs before Antigravity's own print timeout. cli-jaw passes
--print-timeoutusing the configuredabsoluteHardCapMs(240 minutes with the current default hard cap), while the watchdog's defaultfirstProgressMsis 120 seconds.Expected Behavior
Any current-turn Antigravity transcript growth should count as process progress and prevent the no-first-progress watchdog from killing an active run.
Suggested Fix
Mark watchdog progress in the transcript watcher's
onActivitycallback:It would also be useful to add a regression test covering:
firstProgressMsNotes
Increasing
agentTimeout.agy.firstProgressMsis a workable local mitigation, but it only delays the false positive. Treating verified transcript growth as progress addresses the integration mismatch directly while retaining the watchdog for genuinely stalled processes.