Repository navigation
[Bug]: Gemini always show "Monitoring" after finishing a task and it seems to never end #12325
Description
Activity
- addedbugSomething is broken or behaving incorrectly.Something is broken or behaving incorrectly.needs-triageIssue needs maintainer review and initial categorization.Issue needs maintainer review and initial categorization.
on Sep 17, 2026 Triage
Verdict: likely confirmed (provider lifecycle / liveness, not a desktop-only UI glitch). Confidence medium-high on the mechanism; medium on “always,” because the report has no logs or screenshot.
Area (filed):
apps/desktop
Area (actual):apps/serverAntigravity adapter + shared web/desktop Monitoring pill (apps/web)
Already fixed onmain? No.
Duplicate of: none. Same class as Grok leftover monitors, not the same bug.Suggested title (optional):
[Bug]: Antigravity/Gemini leaves "Monitoring" after the turn endsWhat happened
Reporter (
@aledeul, macOS, T3 0.0.42): after a Gemini task finishes, the thread stays on Monitoring and never leaves that state. Expected: Monitoring should stop. Impact: minor. No logs, screenshot, or step-by-step repro.In T3, “Gemini” is the Antigravity provider (Google ACP; models such as
gemini-3.1-pro). Desktop hosts the same web chat/sidebar, so the pill is not Electron-specific.Diagnosis
Monitoring is not a generic “busy” label. The sidebar / composer banner show it only when in-memory
backgroundLiveness === "monitoring": live watch-loop tasks (monitor,monitor_mcp,local_bash,shell) and no live agents.// The turn can settle while native background work runs on. Subagent and // workflow fleets read as plain Working; Monitoring is reserved for watch // loops (a parent agent babysitting a PR, tailing checks) with no other // live work. if (thread.backgroundLiveness === "working") { ... } if (thread.backgroundLiveness === "monitoring") { return { label: "Monitoring", ... }; }
For Antigravity, any
executetool stillinProgresswhen the prompt returnsend_turnis promoted to a backgroundlocal_bashtask.local_bashis a monitor type, so the pill flips to Monitoring after the turn settles:/** Only commands still running after end_turn become background tasks. */ export function isAntigravityOpenCommand(toolCall: AcpToolCallState): boolean { return toolCall.kind === "execute" && toolCall.status === "inProgress"; }
const promoteBackgroundCommands = (context: SessionContext) => // ... yield* emit({ type: "task.started", payload: { taskId, taskType: "local_bash", toolUseId: id, ... }, }); // finishTurn → promoteBackgroundCommands(context) then turn.completed
Those tasks clear only if:
- Antigravity later sends
completed/failedfor that tool, or - the session is torn down (
finishBackgroundCommands/session.exited), or - the server restarts (liveness is in-memory only).
If Gemini ends the turn while an execute tool is still
inProgressand never sends a later terminal tool update, Monitoring stays up. That matches “after finishing a task” and “never ends,” especially if it happens on every turn (staleinProgressexecute, or a harness-owned watcher that never completes).Two extra reasons it feels stuck:
- Idle reaper and auto-settle skip these threads (
ProviderSessionReaper,ThreadSettlementPolicy), so a leftover monitor also keeps the session alive. - Banner Stop is a turn interrupt, not session teardown. Antigravity
interruptTurnonlyruntime.cancels the current prompt. Afterend_turnthere is no prompt, and it does not emittask.completedfor promoted commands. fix(web): stop background work through session teardown #11159 (fix(web): stop background work through session teardown) is still open and is aimed at this Stop path. The composer comment that Stop “kills every live background task” is not true for Antigravity today.
This is not the Grok bug. #9139 / #11680 are Grok
task_completednotices. Same user-visible pill, different adapter.Why this is likely a bug
Promotion of real leftover shells (watch / tail) is intentional (
AntigravityAdapter.test.ts“tracks native commands that survive a turn”). Showing Monitoring forever after an ordinary finished Gemini turn is not.Most likely: Gemini/Antigravity ACP reports
end_turnwhile one or moreexecutetools are stillinProgress, and T3 promotes them with no later completion. Less likely, but possible: the user started an actual watcher and expected it to auto-stop.A no-tool “hello” turn should not show Monitoring. If it does, promotion or classification is wrong. If it only happens after a command/tool turn, we still need a completion or timeout so a finished task cannot pin the pill.
Workaround
- Restart the T3 server (clears in-memory liveness).
- Stop the provider session (full teardown), not only banner Stop, until fix(web): stop background work through session teardown #11159 or an adapter fix lands.
- If a real watcher is running, that pill is expected until the command exits.
Questions for the reporter
- Provider: Antigravity (Google Gemini models) or Gemini through OpenCode?
- Does a no-tool “hello” turn also stick on Monitoring, or only turns that ran a command?
- Screenshot of the pill and composer banner after the turn ends?
- Does banner Stop clear it, or only a full restart / new session?
- Provider event log around
task.started/task.completed/turn.completedfor one stuck thread (redact secrets)?
Recommended next step
Keep as an open Antigravity lifecycle bug. Fix in the adapter, not desktop chrome:
- Do not leave promoted
local_bashtasks live afterend_turnunless they are clearly still running (or honor an Antigravity completion notice, same idea as fix(grok): close background tasks when grok reports task completion #11680 for Grok). - Make post-turn Monitoring Stop tear down the session / finish promoted commands (fix(web): stop background work through session teardown #11159 or Antigravity
finishBackgroundCommandson interrupt-when-idle). - Add a focused test: execute
inProgressatend_turnwith no later tool update must not pin Monitoring forever (or must clear on idle Stop).
Related (same surface, not duplicates): #11680 (Grok leftover monitors), #11159 (banner Stop), #9139 (Grok monitor lifecycle), #7655 (completion vs live watch loop), #11428 (Stopping background work stuck Monitoring), #10164 (Monitoring notification hides Compact).
- Antigravity later sends
- addedacceptedfeature request acceptedfeature request acceptedvia-triageFiled through npx t3 triageFiled through npx t3 triageand removedneeds-triageIssue needs maintainer review and initial categorization.Issue needs maintainer review and initial categorization.
on Sep 17, 2026
Before submitting
Area
apps/desktop
Steps to reproduce
Gemini always show "Monitoring" after finishing a task and it seems to never end
Expected behavior
Monitoring should stop at some point
Actual behavior
Monitoring never stops (or seems to never stop)
Impact
Minor bug or occasional failure
Version or commit
0.0.42
Environment
macOS
Logs or stack traces
Screenshots, recordings, or supporting files
No response
Workaround
No response