Why Gemini CLI waits for input without telling you, and the fix
By Jake Marsh, who builds Taskhold. Updated 2026-10-31. Facts about other tools checked 2026-10-31. 5 min read.
Short answer: Gemini CLI's notifications are experimental and off by default. Turn on Enable Notifications in /settings, or set general.enableNotifications. They show in iTerm2, WezTerm, Ghostty and Kitty, with a bell elsewhere. A Notification hook runs your own command on tool approval prompts. In Antigravity CLI, set notifications to true. For questions about the work, use a shared board such as Taskhold's live board.
You leave Gemini CLI on a long task and come back to find it stopped on a tool approval ten minutes in. By default it tells nobody. This guide covers the setting that fixes it, a hook for anything the setting misses, the equivalent in Antigravity CLI (agy), and how to get the agent's questions onto your phone.
Since June 18, 2026, Gemini CLI no longer serves Google AI Pro and Ultra plans or free Gemini Code Assist for individuals. It still works with paid Gemini API and Gemini Enterprise Agent Platform keys and with Gemini Code Assist Standard or Enterprise licenses, and Google points everyone else to Antigravity CLI. On agy, skip to the Antigravity CLI section below, and see the Antigravity CLI setup page. The same problem in other agents: Claude Code, Codex CLI and Cursor. To try answering a blocked agent, open the live board demo.
Why there was no alert
- Notifications are an experimental feature and are off by default.
- Gemini CLI sends them with the OSC 9 escape sequence, which iTerm2, WezTerm, Ghostty and Kitty show as system notifications. In other terminals it falls back to a terminal bell, which most show as a taskbar flash or an alert sound, and some keep silent.
- There are two kinds: Action required, when the model waits for your input or a tool approval, and Session complete, when a session finishes.
Fix 1: turn on notifications
Type /settings, open the General category and turn on Enable Notifications. Or add this to ~/.gemini/settings.json:
{
"general": {
"enableNotifications": true
}
}Fix 2: a Notification hook
Gemini CLI's Notification hook event fires when the CLI raises a system alert, such as a tool permission request, and passes notification_type (ToolPermission), message and details on stdin. It can't approve anything; it runs your command alongside the prompt, in any terminal. Save this as ~/.gemini/hooks/notify.sh and make it executable:
#!/bin/bash
msg=$(jq -r '.message // "Gemini CLI needs you"')
osascript -e 'on run argv' -e 'display notification (item 1 of argv) with title "Gemini CLI"' -e 'end run' "$msg" >/dev/null 2>&1
# For your phone instead: curl -s -d "$msg" https://ntfy.sh/<your-topic> >/dev/null
echo '{}'Register it in ~/.gemini/settings.json (or .gemini/settings.json in a project). The timeout is in milliseconds:
{
"hooks": {
"Notification": [
{
"matcher": "*",
"hooks": [
{ "name": "notify", "type": "command", "command": "~/.gemini/hooks/notify.sh", "timeout": 5000 }
]
}
]
}
}For a finished turn, the AfterAgent event fires once per turn after the final reply. Gemini CLI hooks with Taskhold uses it to put each reply on the shared task.
Antigravity CLI (agy)
Antigravity CLI has a built-in Notifications setting. When on, it rings the terminal bell and shows a desktop notification when the agent needs your approval or an answer, or finishes its turn. Off by default. Turn it on in /config, or in ~/.gemini/antigravity-cli/settings.json:
{
"notifications": true
}Gemini CLI hooks don't carry over. agy loads hooks from ~/.gemini/config/hooks.json or .agents/hooks.json in a workspace, not from a settings.json file, and its events are different: SessionStart, PreToolUse, PostToolUse, PreInvocation, PostInvocation and Stop, with no Notification event. A Stop hook gets terminationReason and fullyIdle (true once background tasks are done too) and must print a decision; anything other than continue lets the agent stop:
{
"notify-done": {
"Stop": [
{ "type": "command", "command": "/Users/you/.gemini/config/notify-done.sh" }
]
}
}#!/bin/bash
in=$(cat)
if [ "$(echo "$in" | jq -r '.fullyIdle')" = "true" ]; then
reason=$(echo "$in" | jq -r '.terminationReason')
osascript -e 'on run argv' -e 'display notification ("agy stopped: " & item 1 of argv) with title "Antigravity CLI"' -e 'end run' "$reason" >/dev/null 2>&1
fi
echo '{"decision": "stop"}'Where Taskhold fits
Taskhold handles the other kind of stop: a question about the work, from Gemini CLI, agy or any other agent. With the workflow snippet in GEMINI.md or AGENTS.md, the agent calls taskhold_block with one specific question instead of waiting in the terminal. When the answer is a choice, it passes two to four options, marks the one it recommends and says what it will do if nobody answers.
- The question appears as a card under Needs you on the live board and on the Needs you page (/dashboard/needs-you), laid out for a phone. Tap an option or type a reply.
- Phone alerts can send the question to you by web push, ntfy or email. They're opening to accounts in stages.
- The agent reads your answer with taskhold_updates, and can take the next task while it waits.
If you need a decision from me, call taskhold_block on the task with one
specific question. When it's a choice, pass 2 to 4 options, the one you
recommend, and what you'll do if I don't answer. Then take the next todo
and check taskhold_updates between steps for my reply.- Tool approvals still need an answer in the terminal. Taskhold carries questions about the work.
- Taskhold doesn't wake an agent that has stopped. The agent reads your reply the next time it calls taskhold_updates.
- Setup: Gemini CLI or Antigravity CLI. If the taskhold tools never load, see Gemini CLI MCP server not loading or Antigravity CLI MCP server not connecting.
See how far along your coding agents are.
$12/month or $120/year after the trial. Card up front. Cancel before day 7 and you pay nothing. Every agent you run is included.
Questions
- Does Gemini CLI notify me when it's done?
- Only with notifications turned on, which is off by default. With Enable Notifications on, Gemini CLI sends a Session complete notification when a session finishes and an Action required one when it waits for input or a tool approval.
- Why do I hear a bell but get no banner?
- Your terminal doesn't show OSC 9 notifications, so Gemini CLI falls back to the bell. iTerm2, WezTerm, Ghostty and Kitty show banners. In other terminals, use a Notification hook that runs osascript or notify-send.
- Does Gemini CLI still work after June 18, 2026?
- With a paid Gemini API key, a Gemini Enterprise Agent Platform key or a Gemini Code Assist Standard or Enterprise license, yes. Google AI Pro, Ultra and free Gemini Code Assist users were moved to Antigravity CLI.
Sources
- Gemini CLI docs: notifications (experimental), checked 2026-10-31
- Gemini CLI docs: hooks, checked 2026-10-31
- Gemini CLI docs: hooks reference (Notification, AfterAgent), checked 2026-10-31
- Antigravity docs: settings (notifications), checked 2026-10-31
- Antigravity docs: hooks (CLI locations, Stop), checked 2026-10-31
- Antigravity docs: migrating from Gemini CLI, checked 2026-10-31
- Google for Developers Blog: transitioning Gemini CLI to Antigravity CLI (May 19, 2026), checked 2026-10-31
Related
Updated 2026-10-31. Something wrong or out of date? Email hello@greatwork.company.