Real-time Kanban dashboard for monitoring Claude Code agent tasks, sessions, and subagents through a browser-based board.
- π Real-time Kanban board β tasks flow through Pending β In Progress β Completed as Claude works
- π Timeline view β horizontal bar chart showing task durations, colored by status, with hover tooltips
- π Desktop notifications β browser notifications + sound chime when tasks complete
- π¦ Auto-archive β stale sessions (>7 days, no active tasks) collapse into an "Archived" section
- π€ Agent team support β color-coded team members, owner filtering, member badges
- π§© Subagent visibility β see active subagents spawned via the Task tool, parsed from JSONL transcripts
- π Task dependencies β visual blockedBy/blocks relationships with smart badge clearing
- π‘ Server-Sent Events β instant updates via file watching, no polling
- β¨οΈ Keyboard navigation β vim-style (hjkl) + arrow keys, sidebar/board focus toggling
- π Dark/light themes β system preference detection
- π Fuzzy search β across sessions, tasks, descriptions, and project paths
- π Plan viewer β view and open Claude Code plans directly from the dashboard
- π Auto-port discovery β automatically finds an available port when the default is taken
- π Auto-update β checks NuGet for new versions on startup and updates automatically
- .NET 10 SDK (or later, via RollForward)
dotnet tool install -g atc-claude-kanban# Start the dashboard (default: http://localhost:3456)
atc-claude-kanban
# Start and open browser automatically
atc-claude-kanban --open
# Custom port (fails fast if port is unavailable)
atc-claude-kanban --port 8080
# Custom Claude directory
atc-claude-kanban --dir ~/.claude-work
# Skip the NuGet update check on startup
atc-claude-kanban --no-update-checkThen open your browser to http://localhost:3456 and watch your Claude Code tasks in real time.
Auto-port: When using the default port and it's already in use, the tool automatically tries up to 10 consecutive ports (3456, 3457, ...). When
--portis specified explicitly, the tool fails fast.
Three-column board showing task status with live updates:
| Column | Description |
|---|---|
| Pending | Tasks waiting to start |
| In Progress | Tasks Claude is actively working on (pulsing indicator) |
| Completed | Finished tasks |
Toggle between Kanban and Timeline views using the view toggle buttons in the header:
- Horizontal bars show each task's duration from creation to last update
- Color-coded by status: gray (pending), orange with glow (in-progress), green (completed)
- Hover tooltips show task name, status, duration, and start time
- Click any bar to open the task detail panel
- Time axis adapts to data range (seconds/minutes/hours/days)
- View preference persists across page reloads
Click the bell icon in the header to enable browser notifications:
- Fires when a task transitions from in_progress to completed
- Includes a two-tone audio chime (synthesized via Web Audio API β no audio files)
- Click the notification to focus the window and open the completed task
- Preference saved in localStorage
Sessions older than 7 days with no in-progress tasks are automatically archived:
- Archived sessions appear in a collapsible "Archived (N)" section at the bottom of the sidebar
- Dimmed to 50% opacity for visual distinction
- Expand/collapse state persists across page reloads
- Hidden during search or when filtering to active sessions
When Claude Code spawns agent teams, the dashboard shows:
- Color-coded owner badges per team member
- Owner filtering dropdown
- Team info modal with member details
- Task counts per agent
When Claude Code spawns subagents via the Task tool, the dashboard shows:
- Active subagent count badge in the sidebar (only when subagents are running)
- Collapsible subagent panel below Kanban columns with status dots, model info, and descriptions
- "Show all" toggle to view historical subagents (default: active only)
- Parsed from JSONL transcript files at
~/.claude/projects/{hash}/{sessionId}/subagents/
| Key | Action |
|---|---|
? |
Show help |
j/k |
Navigate up/down |
h/l |
Navigate columns |
Enter |
Toggle task detail |
Tab |
Switch sidebar/board focus |
[ |
Toggle sidebar |
I |
Session info |
P |
Open session plan |
C |
Copy project path |
F |
Open project folder |
D |
Delete task |
Claude Code writes task JSON files
β
FileSystemWatcher detects changes
β
Debounce + parse + cache (IMemoryCache)
β
Broadcast via Server-Sent Events
β
Browser updates Kanban board in real-time
The tool watches these paths under ~/.claude/:
| Path | Content |
|---|---|
tasks/{sessionId}/*.json |
Individual task files |
teams/{teamName}/config.json |
Team configurations |
projects/{hash}/sessions-index.json |
Session metadata |
projects/{hash}/{sessionId}/subagents/agent-*.jsonl |
Subagent transcripts |
plans/{slug}.md |
Plan markdown files |
The dashboard reads from ~/.claude/, where Claude Code stores all session data:
~/.claude/
βββ tasks/ β PRIMARY: task files (what the Kanban reads)
β βββ {sessionId}/*.json β Session-scoped tasks (UUID)
β βββ {teamName}/*.json β Team-scoped tasks (named)
β
βββ teams/ β Team configurations (agent swarms)
β βββ {teamName}/config.json β Members, roles, lead agent
β
βββ projects/ β Session metadata (enrichment)
β βββ {path-hash}/
β βββ sessions-index.json β Session list with project path, git branch
β βββ {sessionId}.jsonl β Session transcript (one JSON object per line)
β βββ {sessionId}/subagents/ β Subagent transcripts
β
βββ plans/ β Plan markdown files
βββ {slug}.md
JSON vs JSONL: Task files, team configs, and session indexes are standard .json (single object). Session transcripts are .jsonl (JSON Lines β one JSON object per line, append-only). The dashboard only reads .json files; .jsonl transcripts are used for metadata discovery (project path, git branch).
Session discovery: Sessions appear on the board if they have task .json files under tasks/, or if they have active subagents under projects/. The projects/ and teams/ directories enrich sessions with metadata (project name, git branch, team members).
| Variable | Description |
|---|---|
ATC_NO_UPDATE_CHECK=1 |
Disable the NuGet update check on startup |
The update check is also automatically suppressed in CI environments (CI, TF_BUILD, or GITHUB_ACTIONS env vars detected).
- ASP.NET Core Minimal APIs with
Atc.Rest.MinimalApiendpoint definitions - FileSystemWatcher +
System.Threading.Channelsfor event-driven file monitoring - Server-Sent Events via
Results.Streamwith raw UTF-8 byte writes andTask.Delayheartbeats - Async service layer β all file I/O uses
ReadAllTextAsync/WriteAllTextAsync - IMemoryCache with TTL expiration (10s sessions, 5s teams)
- Embedded static files β single HTML dashboard served via
ManifestEmbeddedFileProvider