Agents Stack
See which AI coding agents are running on your machine, what each of them is doing right now, and which ones are waiting for you.
Works with Claude Code, Google Antigravity, Codex and Gemini CLI, whether they run as VS Code extensions or in a terminal.
Features
Agents view in the Activity Bar. Sessions are grouped by agent or by project; toggle the grouping with the button in the view title. Each session shows its state, current tool and target (for example Edit · src/app.ts), and how long it has been in that state.
Tokens. Each session shows the tokens it has used. The numbers are read from the agent's own transcript, so they cost nothing extra. Cheap cached re-reads are shown separately in the tooltip.
Go to agent (↗ next to a session). Opens the exact Claude Code conversation, the terminal where a CLI agent runs (Linux), or the agent's panel.
Subagents. Agents started with the Agent/Task tool appear under their session, each with its own status. A session stays "working" while its background subagents run.
Last reply. Hover a session to see the agent's last answer, its last prompt and, for resumed Claude Code sessions, the context size and whether the prompt cache has expired.
Notifications:
- when an agent waits for your permission or input;
- when a long task finishes (by default only while you are away from VS Code, then a desktop notification is shown too);
- when an agent looks stuck: the same tool call repeated 4 times in a row, or a tool with no activity for 10 minutes.
With several VS Code windows open, each notification still appears only once.
Status bar counter, for example 🤖 ⟳ 2 ⑂ 3 🔔 1, which turns yellow when an agent needs you.
Today's summary. One table per project with sessions, prompts, how long agents worked, how long they waited for you, tool calls, subagents and tokens.
Readable transcripts. Click a Claude Code or Antigravity session or subagent to read the conversation as Markdown. The raw file is available from the context menu.
Antigravity subagents (invoke_subagent) run as separate conversations; they are shown under their parent session with their role, for example "Code Quality Reviewer". Sessions without a workspace are named after their first request.
| State |
Meaning |
| 🔔 waiting for you |
Asked for permission or input |
| ⟳ working / thinking |
Running tools or generating a reply |
| ⚠ working |
Possibly stuck: a repeated call or a long silence |
| ✓ done |
Finished its turn |
| ⊘ idle |
No events for agentsStack.staleMinutes |
How it works
On first start the extension asks for your permission. After you agree, it:
Copies a small hook script to ~/.agents-stack/log-event.js.
Adds hooks to every agent it finds on this machine:
| Agent |
Config file |
| Claude Code |
~/.claude/settings.json |
| Antigravity |
~/.gemini/config/hooks.json, as a hook set named agents-stack |
| Codex |
~/.codex/hooks.json. Codex asks you to trust new hooks once: run /hooks in Codex |
| Gemini CLI |
~/.gemini/settings.json |
Each agent event appends one line to ~/.agents-stack/events.jsonl, and the extension reads that file.
Your existing hooks are kept
Agents Stack only adds its own entries next to yours and recognizes them by the script path. A config file is written only when something actually changes; the previous version is saved next to it as *.agents-stack.bak. If a file is not valid JSON, it is left untouched.
Cost and privacy
- Hooks run locally and print nothing, so they use no model tokens. Gemini CLI is the exception: it gets an empty
{}, which is the answer it expects.
- One hook call takes about 30 ms.
- The extension makes no network requests.
- Only short metadata is logged: event, tool, file path or the first 160 characters of a command, project folder, and the first 200–300 characters of prompts and replies. The log rotates at 5 MB.
Commands
| Command |
What it does |
Agents Stack: Today's Summary |
Today's activity per project |
Agents Stack: Toggle Grouping (Agent / Project) |
Switch the tree grouping |
Agents Stack: Install / Repair Hooks |
Installs or updates the hooks |
Agents Stack: Remove Hooks |
Removes all Agents Stack hooks and leaves yours in place |
Agents Stack: Clear Finished Sessions |
Hides done and idle sessions |
Agents Stack: Open Events Log |
Opens events.jsonl |
Uninstalling the extension also removes its hooks. VS Code runs that cleanup after the next restart.
Settings
| Setting |
Default |
|
agentsStack.groupBy |
agent |
agent or project |
agentsStack.notifyOnWaiting |
true |
Notify when an agent waits for you |
agentsStack.notifyOnDone |
whenAway |
off, whenAway or always |
agentsStack.notifyOnDoneAfterSeconds |
60 |
Only for tasks at least this long |
agentsStack.stuckMinutes |
10 |
Warn about stuck agents; 0 turns it off |
agentsStack.staleMinutes |
15 |
Minutes of silence before a session counts as idle |
agentsStack.hooks.claude / .antigravity / .codex / .gemini |
true |
Which agents to track |
agentsStack.nodePath |
"" |
Node binary for hooks. Leave empty to detect it automatically (nvm supported) |
Known limitations
- Running agent sessions pick up new hooks only after a restart.
- Antigravity has no "waiting for permission" hook, so its sessions never show 🔔.
- Codex re-asks for trust whenever a hook command changes, for example after you switch Node versions.
- Finding a CLI agent's terminal works on Linux only; elsewhere "Go to agent" opens the agent's panel.
- Desktop notifications use
notify-send on Linux and osascript on macOS.
Development
npm install
npm test # installer, hook script, sessions, Antigravity, tokens, summary
REAL_LOG=~/.agents-stack/events.jsonl npm test # also replays your real log
# F5 in VS Code → "Run Extension"
npx @vscode/vsce package # builds agents-stack-x.y.z.vsix
Releases are published automatically by GitHub Actions when a v* tag is pushed (npm version patch && git push --follow-tags). An odd minor version (0.3.x) is published as a pre-release.
License
MIT © Mykola Dzoban
| |