Argus
Mission control for Claude Code in VS Code. See every Claude Code session at a
glance, and know which ones are waiting on you.
- Sessions board: every session sorted into Needs you, Working, Idle, PR open and
Archived, updating live as Claude works.
- Notifications: when a session needs permission, asks a question or finishes, with a button straight to it.
- PRs and worktrees: each card shows the PRs and git worktrees the session made, and archives itself once its
PRs are merged.
- Diff review: review a worktree's or PR's changes, comment on lines, and send the comments back to the
session.
- Plan usage: your Claude plan usage in the status bar.
- Plugins: add your own Control Center tabs, card chips and archive steps through a plugin API.

Getting started
- Install Argus, and make sure you have the requirements, in particular Node.js 24 or newer.
- Run Argus: Set Up Session Tracking from the command palette (or click the link in the empty Sessions
view). This installs the Claude Code hooks Argus needs; no sessions appear without it.
- Start or resume a Claude Code session. It appears in the Argus sidebar after its first prompt. Sessions that
were already open show up once they next fire a hook.
Features
Sessions board
A sidebar view (the Argus icon in the activity bar) groups your Claude Code sessions into Needs you,
Working, Idle, PR open and Archived. Cards move on their own as session state changes.
- A session stopped mid-turn (Esc, a crash or a closed tab) shows as interrupted in Needs you, so you know
to resume it.
- The activity bar badge counts sessions that need you. A status bar item shows how many there are and the longest
wait; click it to jump to one.
- Open a session's tab from its card. Argus asks the Claude Code extension to reveal the existing tab or resume the
session.
- Each VS Code window shows only its own sessions: those started in the window's workspace folders, or in any
checkout or worktree of the same git repo. Set
argus.sessions.scope to all to see every session in every
window. A window with no folder open shows everything.
- A card's title is the session's first prompt. Double-click the title (or use Rename Chat) to rename it in
Argus. Claude Code's
/rename also works, and changes the name in /resume and for other sessions too.
- Cards show open PRs. A
+ 2 merged · 1 closed chip shows the merged and closed ones too; click it again to
hide them.
- Keyboard:
/ to search, j/k to move, Enter to open, e to archive, n for a new chat.
Archiving. A session archives itself when every PR it created is merged or closed, or when it closes without
making a PR. You can also archive by hand. When the session has worktrees, archiving offers to remove them, shows
how many uncommitted files each one has, and offers a force removal that deletes those files. Installed plugins
can add their own cleanup steps; you are asked first. Sending a new prompt to an archived session brings it back.
Notifications. A warning when a session needs permission or asks a question, and an info message when it
finishes. The Open Session button jumps straight to the session. Set argus.notifications to input
(permission and questions only) or off.
Control Center
Run Argus: Open Control Center for the full-size view. It holds the Sessions tab, plus a tab for each
installed plugin. On top of the sidebar, the Sessions tab has:
- Columns side by side. Press
g (or click by repo) to split them into one row per repo, with repos that
need you first.
- Token use on each card:
ctx is the size of the latest prompt (how full the context is), used is new input,
cache writes and output summed over the session and its sub-agents, plus how many times it was compacted.
- Search through every prompt and reply in each session's transcript, archived sessions included, with the
matching text shown on the card. It starts at three characters.
- The sub-agents running in each session, by type.
Diff review
Review a worktree's changes against its base branch and send line comments back to the session.
- A card with a worktree gets a
± <worktree> chip; a card with an open PR gets ± #<number>. Click either to
open the diff in an editor tab. Argus: Review Worktree Diff picks any linked worktree or workspace folder.
- Scopes: All (merge base to working tree, plus untracked files), Committed, Staged and Unstaged.
The PR # or URL field opens any PR through
gh pr diff, without checking it out.
- Click a line number to comment, and shift-click to extend the range. Send to agent copies the review as
markdown and opens the session for you to paste it in.
Claude plan usage
A status bar item showing your Claude plan usage as a percentage (amber at 75%, red at 90%). It is on by default;
turn it off with argus.usage.enabled.
It reads the sign-in that Claude Code stores locally (~/.claude/.credentials.json, or the macOS keychain) and
sends it only to Anthropic's undocumented usage endpoint (https://api.anthropic.com/api/oauth/usage). The token
is not stored, cached or logged. Usage refreshes every argus.usage.refreshMinutes minutes (default 5). Check
Anthropic's terms on using your Claude subscription sign-in with third-party tools.
Plugins
A plugin adds a tab to the Control Center, chips to session cards, or extra steps when a session is archived.
Plugins are folders in ~/.claude/argus/plugins that Argus loads on startup; nothing is installed into VS Code.
Installing one
Put the plugin's folder in the plugins folder and build it. For a plugin in a git repo:
macOS and Linux:
mkdir -p ~/.claude/argus/plugins && cd ~/.claude/argus/plugins
git clone <plugin repo url> my-plugin
cd my-plugin && npm install && npm run build
Windows (PowerShell):
New-Item -ItemType Directory -Force "$HOME\.claude\argus\plugins" | Out-Null
Set-Location "$HOME\.claude\argus\plugins"
git clone <plugin repo url> my-plugin
Set-Location my-plugin; npm install; npm run build
Then run Argus: Reload Plugins. Argus asks once per folder before loading a plugin for the first time,
because a plugin runs with the same access to your machine that Argus has.
To update a plugin, run git pull, npm install and npm run build in its folder, then Argus: Reload
Plugins.
Configuring one
Plugin settings live under one key, keyed by plugin id, and work at user or workspace level:
"argus.plugins.config": {
"my-plugin": { "someSetting": "value" }
}
A plugin's manifest sets its defaults and its README should list its keys. argus.plugins.paths loads extra plugin folders from anywhere on disk,
which is how you run one straight from a checkout.
Writing one
See DEVELOPING.md for the API, the manifest and a worked example.
Requirements
- VS Code 1.90 or newer.
- The Claude Code extension, which
Argus uses to open sessions. Argus relies on its
claude-vscode.editor.open command and the session registry
it keeps at ~/.claude/sessions/<pid>.json. Neither is a documented public API, and both may change.
- Node.js 24 or newer. The session tracker hook is a TypeScript file that Node runs
natively.
- Optional:
git, for worktrees and diff review.
- Optional: the GitHub CLI (
gh), signed in, for PR status and PR diffs.
Settings
| Setting |
Default |
Description |
argus.sessions.scope |
window |
window shows this window's sessions only; all shows every session on this machine. |
argus.sessions.prRefreshMinutes |
1 |
How often PR states refresh in the background, for session cards. |
argus.sessions.retentionDays |
30 |
Session record files are deleted this many days after the session is no longer open. |
argus.notifications |
all |
Show notifications when a session needs attention: all (permission, question or finished), input (permission and questions only), or off. |
argus.prs.cacheSeconds |
300 |
How long a fetched PR state is reused before gh is called again. |
argus.diffReview.baseRef |
"" |
Base to diff against. Empty uses origin/HEAD, then origin/main, origin/master, main, master. |
argus.diffReview.contextLines |
3 |
Unchanged lines shown around each change. |
argus.usage.enabled |
true |
Show Claude plan usage in the status bar. Turn off to stop reading the Claude Code sign-in. |
argus.usage.refreshMinutes |
5 |
How often Claude plan usage refreshes in the background. |
argus.plugins.config |
{} |
Settings for locally installed plugins, keyed by plugin id. See Plugins. |
argus.plugins.paths |
[] |
Extra plugin folders to load, on top of everything in ~/.claude/argus/plugins. |
Commands
- Argus: Open Control Center (
argus.openControlCenter)
- Argus: Sessions Needing You (
argus.sessions.showAttention)
- Argus: Set Up Session Tracking (
argus.sessions.installHooks)
- Argus: Remove Session Tracking (
argus.sessions.removeHooks)
- Argus: Review Worktree Diff (
argus.diffReview.pick)
- Argus: Show Claude Plan Usage (
argus.usage.show)
- Argus: Refresh Claude Plan Usage (
argus.usage.refresh)
- Argus: Reload Plugins (
argus.plugins.reload)
- Argus: Run Plugin Command (
argus.plugins.runCommand)
- Argus: Open Plugins Folder (
argus.plugins.openFolder)
- Argus: Reset Plugin Trust (
argus.plugins.resetTrust)
The Sessions view also has toolbar and per-card commands (new chat, refresh, open, rename, mark read,
archive/unarchive, open worktree in a new window) on its icons and context menu.
What Argus reads and writes
Argus is local-only. It has no telemetry.
| Path |
Purpose |
~/.claude/settings.json |
"Set Up Session Tracking" adds hook entries; "Remove Session Tracking" removes them. A .bak copy is written first. |
~/.claude/argus/session-tracker.ts |
The hook script, copied out of the extension so updates never break the path in settings. |
~/.claude/argus/plugins/ |
Plugin folders, loaded on startup. Argus also writes argus.d.ts and argus-webview.d.ts here for plugin authors. |
~/.claude/argus/sessions/<id>.json |
One record per session, written by the hook on SessionStart, UserPromptSubmit, PreToolUse, PostToolUse, PermissionRequest, Notification, Stop, SubagentStart, SubagentStop and SessionEnd. It holds prompt snippets, the last assistant message and any pending tool command in plain text. Deleted argus.sessions.retentionDays days after the session closes. |
~/.claude/sessions/<pid>.json |
Claude Code's own registry of open sessions (read only). |
~/.claude/projects/**/*.jsonl |
Claude Code's session and sub-agent transcripts (read only), for token use and search. Only new lines are read, kept in memory and never written anywhere. |
~/.claude/.credentials.json |
Claude Code sign-in (read only, while argus.usage.enabled is on, which is the default). Sent only to the Anthropic usage endpoint. |
Network use: gh calls to GitHub for PR state and PR diffs, using your existing gh login, and the Claude plan
usage call above. A plugin may make its own network calls; see its README.
Troubleshooting
- No sessions appear: run Argus: Set Up Session Tracking, check that
node --version is 24 or newer in a
terminal, then start a new Claude Code session.
- Interrupted sessions, sub-agents or a fix to the hook don't show up after updating Argus: run Argus: Set
Up Session Tracking again to install the latest hook.
- Sessions stop updating after a Claude Code or VS Code update: Argus depends on
claude-vscode.editor.open
and Claude Code's session registry file, neither of which is a stable public API. If either changes shape,
opening sessions and session detection can break until Argus is updated.
- PR status fails: run
gh auth status. If gh is installed but not found, make sure it is on the PATH VS
Code was launched with.
Uninstalling
Uninstalling the extension removes the hook entries from ~/.claude/settings.json automatically, the same as
running Argus: Remove Session Tracking first. Your session records under ~/.claude/argus/sessions are kept.
License
MIT.