A local visual cockpit for your Claude Code usage + skill dispatch. Three-tab layout (Overview / Audience / Research), live TokenBurn meter, parallel skill runs through a background queue, audience-metric cards, marquees that pull from your vault.
Runs entirely on your machine. Reads from ~/.claude/ and your vault. Nothing ships to the cloud.
Shared zone (above tabs):
- AGENTICOS header + quicknav pills (terminal / vault / daily note / runs folder / drafts / ↻ pull / status)
- TokenBurn 5h marquee — HUD-bracketed bar with live usage %, projection band, scan-line, comet trail. Sources from real
tokens_5hrows written by the/metrics-pullskill intosystem/metrics/metrics.csv. - MCP integrations strip — connected MCP server health dots.
Three tabs:
- Overview — Schedule (today's calendar) + Agent Runs · 30D chart side-by-side. Below: legacy skill picker + streaming hero + sidebar (background queue, recent runs, 7-day bars, forecast, vault pulse).
- Audience — Latest Upload card + 4 platform metric cards (YT subs / YT views 28d / Instagram / TikTok) + YtWeekReview marquee with Altair bar chart + verdict chips + top/under performer cards.
- Research — MorningBrief 2×2 grid (Headlines / YT Trending / X Conversation / Content Opps) with coverage chip strip pulled from the latest
/morningskill output.
Behavior:
- Click any skill chip → loads its template into the prompt box (autonomy preamble wrapped invisibly).
- Hit "run →" → spawns
claude.exe -pinline, streams phases + tokens live into the hero card. - Click chips DURING a foreground run → queues them via
system/queue/<uuid>.jsonso the agentic-os-runner daemon picks them up in parallel. Max 3 concurrent. Visible in the § BACKGROUND QUEUE sidebar card (polls every 3s; dots flip queued → running → done). - Click
↻ pullin quicknav → queues/metrics-pullskill → refreshes TokenBurn % + audience counts + latest video.
Dark Anthropic-warm palette. Subtle terracotta crosshatch atmosphere. Drop-from-100 boot animation on TokenBurn.
- Python 3.10+ — download here. On Windows, check "Add Python to PATH" during install.
- Git — download here.
- Claude Code CLI installed + signed in. Run it at least once so it generates session data.
- A terminal (PowerShell / Terminal.app / your shell of choice).
Verify:
python --version # 3.10+
git --version
claude --versionIf any fail, fix that first.
git clone https://github.com/cth9191/agentic-os-dashboard.git
cd agentic-os-dashboardpip install -r requirements.txtInstalls Streamlit, Altair, plotly, pandas. ~1 minute.
Permission errors on Mac/Linux? Try pip install --user -r requirements.txt.
# Windows
copy config.example.py config.py
# Mac / Linux
cp config.example.py config.pyOpen config.py in an editor. Edit the top section:
VAULT_PATH— folder Claude Code runs in. Usually your Obsidian vault or main project folder. Mac example:Path("/Users/yourname/Documents/my-vault").VAULT_NAME— display name shown in the header.CLAUDE_CLI— full path toclaudeexecutable. Find withwhere claude(Windows) orwhich claude(Mac/Linux).CLAUDE_PLAN—"pro","max","team", or"enterprise". Controls daily routine cap.
The SKILLS list at the bottom defines the chip buttons. The example ships with placeholder skills across memory/productivity/research/content/finance/custom categories — keep, swap, or delete to taste.
config.py is gitignored. Your edits stay local.
streamlit run app.pyOpens http://localhost:8501. If it doesn't auto-open, paste the URL.
First-run expectations:
- If you've been using Claude Code, TokenBurn populates once
/metrics-pullruns (click the ↻ pull pill in quicknav). - Empty vault? Set
DEMO_MODE = Trueinconfig.py— all cards render mocked data so you can verify the layout before wiring real feeds. - Audience cards expect
<vault>/system/metrics/metrics.csvwithclaude_code/tokens_5h+youtube/subscribers+instagram/followers+tiktok/followersrows. The/metrics-pullskill writes them.
Stop: Ctrl+C in the terminal.
The dashboard was built with Claude Code and is built to be modified with Claude Code.
In the repo folder run claude and try:
"Look at this dashboard. Swap the terracotta accent for a cool blue palette. Show me the changes before applying."
"Add a metric card row for my Stripe MRR — read the latest
stripe/mrrrow from<vault>/system/metrics/metrics.csv."
"Rename the skill chips and replace them with the slash commands I actually use. Here are mine: [list]."
"Hide the audience tab if I don't have audience metrics yet."
"Re-skin the TokenBurn marquee in a green palette for my framework demo recording."
See PROMPTS.md for tested starter prompts.
Three feeds populate the dashboard. All are optional — the layout renders coherently when any are missing.
Append-only CSV: timestamp,source,metric,value,status,error. Each row is one metric snapshot. The dashboard reads the latest row per (source, metric) pair.
Cards consume:
claude_code/tokens_5h→ TokenBurn %youtube/subscribers,youtube/views_28d→ audience cardsinstagram/followers,tiktok/followers→ audience cards
Populate via the /metrics-pull skill (separate repo). Click the ↻ pull pill in quicknav to queue a refresh.
JSON written by your YouTube pull script:
{"title": "…", "url": "https://youtu.be/…", "views": 1571, "likes": 51,
"comments": 1, "published_at": "…", "ts": "…", "status": "ok"}Feeds the Latest Upload card.
Markdown reports the dashboard parses to populate the YtWeekReview marquee + MorningBrief grid. Frontmatter + standard section headings (TL;DR / Uploads / Top performer / Underperformer for reviews; Headlines / YouTube Trending / Web / X / GitHub / Content Opportunities for briefs). See inbox/reports/_index.md in the [agentic-os-vault-template] repo for the expected shape.
Two execution paths:
Foreground — form submit. Spawns claude.exe -p in a daemon thread on the Streamlit server. Streams stream-json events back into the live hero card. Page refresh during a foreground run loses the live feed (subprocess keeps running, output saves to dashboard-runs/<date>/).
Background queue — chip click during a foreground run, or the ↻ pull pill. Writes intent JSON to system/queue/<uuid>.json. The agentic-os-runner daemon (separate repo) picks up + executes via its own pool (MAX_CONCURRENT=3 by default). Queue panel polls every 3s and shows live status (queued → running → ok/err) with deep-link to the deliverable on completion.
Queueable skills are limited to runner-known names (see RUNNER_SKILLS set in app.py near line ~4790). Skills outside that allowlist toast a warning instead of queueing. The runner repo can be extended to add more — see [agentic-os-runner].
Windows start-dashboard.bat:
@echo off
cd /d C:\path\to\agentic-os-dashboard
start "" http://localhost:8501
streamlit run app.pyMac start-dashboard.command:
#!/bin/bash
cd /path/to/agentic-os-dashboard
open http://localhost:8501
streamlit run app.pychmod +x and double-click.
Ask Claude Code:
"Set up this Streamlit app to auto-launch on Windows login via Task Scheduler. Run in background, no visible terminal. Open at localhost:8501."
Or for Mac:
"Set up this Streamlit app to auto-launch on macOS login via launchd."
"Wrap this Streamlit app in a Python system-tray app via
pystray. Icon starts/stops the server and opens browser."
"Wrap this Streamlit app in a Tauri shell. On launch, start the Streamlit server in the background and open a native window pointing at localhost:8501."
"streamlit: command not found" — Python installed but scripts folder not on PATH. Windows: reinstall Python with "Add to PATH" checked. Mac: export PATH="$HOME/.local/bin:$PATH" in ~/.zshrc.
TokenBurn stuck at 0% — no claude_code/tokens_5h row in <vault>/system/metrics/metrics.csv yet. Click the ↻ pull pill in quicknav to queue /metrics-pull. If the skill isn't installed, install it from the agentic-os-vault-template repo or set DEMO_MODE = True temporarily.
"Permission denied" when a skill runs — PERMISSION_MODE in config.py is bypassPermissions by default. Change to "default" if you want Claude to prompt per-tool.
Port 8501 already in use — streamlit run app.py --server.port 8502.
Queue chips do nothing — skills outside the runner allowlist can't queue. Either run them foreground (load template into prompt + hit "run →"), or extend the runner's dispatch table.
Page refresh during a run loses the streaming view — by design. Subprocess keeps running, output saves to dashboard-runs/. Use the queue path (chip click during a foreground run) for long jobs you want to walk away from.
app.py— the whole dashboard (one big Streamlit file)config.example.py— template config. Copy toconfig.pyand edit.config.py— gitignored. Your personal paths, plan, and skills.requirements.txt— Python deps.streamlit/config.toml— Streamlit theme + server settingsassets/— images, mascot spritesPROMPTS.md— starter prompts for customizing with Claude CodeDESIGN.md— visual + architecture notesHANDOFF.md— original v1 build log
- agentic-os-runner — background daemon that picks up
system/queue/*.jsonintents and executes viaclaude.exe -p. Required for parallel queue runs to actually fire. - agentic-os-vault-template — opinionated vault skeleton with
system/metrics/,system/queue/,system/runs/,inbox/reports/, daily-note schema. Drop-in companion to the dashboard.
MIT. Build whatever you want with it.