Dashboard & Observability
Here is a question that separates serious distributed systems from toy demos: can you tell what’s happening right now? Not after digging through logs. Not after SSHing into a box and running ps aux. Right now, at a glance, from wherever you happen to be standing.
Constitution Principle 2 is blunt about this: “If it isn’t observable, it doesn’t exist.” Every significant event must be logged, every metric queryable. Complete visibility is not optional — it’s an architectural requirement. Most systems treat observability as a nice-to-have, a dashboard you build after the third outage. Obsidian treats it as load-bearing infrastructure. The dashboard isn’t a feature. It’s the nervous system.
The design philosophy is visibility without disruption. You choose how much you want to see. A single glanceable line in your terminal prompt. A rich CLI status display. A full real-time web dashboard. Push notifications to your phone. Four levels of engagement, same underlying truth.
┌─────────────────────────────────────────────────────────────────┐
│ VISIBILITY LEVELS │
├─────────────────────────────────────────────────────────────────┤
│ │
│ Level 0: Terminal Status Line │
│ ──────────────────────────────────────────── │
│ Always visible, single line, minimal distraction │
│ "◆ 3 agents | 5 tasks | ✓ healthy" │
│ │
│ Level 1: CLI Status Display │
│ ──────────────────────────────────────────── │
│ Rich terminal output with colors and icons │
│ Detailed but ephemeral │
│ │
│ Level 2: Web Dashboard │
│ ──────────────────────────────────────────── │
│ Full visibility, real-time updates, interactive │
│ For deep monitoring and analysis │
│ │
│ Level 3: Mobile/Chat Integration │
│ ──────────────────────────────────────────── │
│ Notifications and quick status via Slack/Discord │
│ Stay informed without context switching │
│ │
└─────────────────────────────────────────────────────────────────┘ Level 0: Terminal Status Line
The ambient awareness layer. The terminal status line provides constant visibility without disruption. It lives in your shell prompt — always there, never in the way. Think of it as a vital signs monitor: you don’t stare at it, but you’d notice immediately if something flatlined.
┌─────────────────────────────────────────────────────────────────┐
│ TERMINAL STATUS LINE │
├─────────────────────────────────────────────────────────────────┤
│ │
│ Default Format: │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ ◆ OBSIDIAN │ 4 agents │ 12 tasks │ ✓ healthy │ $2.34 │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │
│ With Activity: │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ ◆ OBSIDIAN │ 4 agents │ 12 tasks │ ⟳ deploying │ $2.34 │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │
│ With Warning: │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ ◆ OBSIDIAN │ 4 agents │ 12 tasks │ ⚠ 2 errors │ $2.34 │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │
│ With Error: │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ ◆ OBSIDIAN │ 3 agents │ 12 tasks │ ✗ unhealthy │ $2.34 │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │
│ Minimal Mode: │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ ◆ 4a 12t ✓ │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────┘ Shell Integration
The status line plugs into every major shell. One line in your config, permanent situational awareness. This is Principle 9 in action — “Only the LLM should be slow.” The status line caches aggressively (2-second TTL) so your prompt never lags.
Bash:
export PS1='$(obs status --line) \w $ '
Zsh:
RPROMPT='$(obs status --line)'
Fish:
function fish_right_prompt
obs status --line
end
Starship:
[custom.obsidian]
command = "obs status --line"
when = "obs status --check"
format = "[$output]($style) "
style = "cyan"
tmux:
set -g status-right '#(obs status --line --compact)'
set -g status-interval 5
Configuration
# obsidian.yaml
ui:
status_line:
enabled: true
format: default # default | minimal | custom
custom_format: "◆ {agents}a {tasks}t {health}"
cache_ttl: 2s
colors:
healthy: green
warning: yellow
error: red
activity: blue
Level 1: CLI Status Display
The full diagnostic view. Run obs status and get everything — system info, Agent states, task progress, health checks, and cost tracking — in one richly formatted terminal output. This is what you reach for when the status line shows a warning and you want to know why.
┌─────────────────────────────────────────────────────────────────────────────┐
│ OBSIDIAN STATUS │
├─────────────────────────────────────────────────────────────────────────────┤
│ │
│ ┌────────────────────────────────────────────────────────────────────┐ │
│ │ SYSTEM │ │
│ │ Environment: production Version: v2.4.0 │ │
│ │ Uptime: 3d 14h 22m Last Deploy: 2h ago │ │
│ │ Config: ✓ valid Daemon: ✓ running │ │
│ └────────────────────────────────────────────────────────────────────┘ │
│ │
│ ┌────────────────────────────────────────────────────────────────────┐ │
│ │ AGENTS 4 active │ │
│ │ │ │
│ │ coordinator ████████████████████ active 1 task 3d 14h │ │
│ │ researcher ████████████████████ active 3 tasks 3d 14h │ │
│ │ coder ████████░░░░░░░░░░░░ idle 0 tasks 3d 14h │ │
│ │ reviewer ████████████████████ active 2 tasks 3d 14h │ │
│ └────────────────────────────────────────────────────────────────────┘ │
│ │
│ ┌────────────────────────────────────────────────────────────────────┐ │
│ │ TASKS │ │
│ │ ┌─────────────────────────────────────────────────────────────┐ │ │
│ │ │ ████████████████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ │ │ │
│ │ │ Pending: 5 In Progress: 6 Completed: 142 (today) │ │ │
│ │ └─────────────────────────────────────────────────────────────┘ │ │
│ └────────────────────────────────────────────────────────────────────┘ │
│ │
│ ┌────────────────────────────────────────────────────────────────────┐ │
│ │ HEALTH │ │
│ │ ✓ LLM Provider anthropic 98.5% uptime 1.2s latency │ │
│ │ ✓ Database sqlite connected 2ms latency │ │
│ │ ✓ Vault 1.2M entries indexed 15ms search │ │
│ │ ✓ Queue 5 pending healthy 3ms latency │ │
│ │ ⚠ Cache 89% full consider cleanup │ │
│ └────────────────────────────────────────────────────────────────────┘ │
│ │
│ ┌────────────────────────────────────────────────────────────────────┐ │
│ │ COST (Today) │ │
│ │ Total: $18.45 Tokens: 1.2M │ │
│ │ ├─ anthropic: $15.20 (82%) ├─ input: 1.1M │ │
│ │ └─ openai: $3.25 (18%) └─ output: 0.1M │ │
│ │ Projected Monthly: $545.50 │ │
│ └────────────────────────────────────────────────────────────────────┘ │
│ │
│ Last updated: 2024-01-15 10:35:22 UTC │
│ Run 'obs status -w' for live updates │
└─────────────────────────────────────────────────────────────────────────────┘ Visual Language
The iconography is consistent across every visibility level. Once you learn what ✓ and ✗ mean, you can read any Obsidian interface instantly. This is Principle 5 — self-similarity at every scale.
┌─────────────────────────────────────────────────────────────────┐
│ COLORS AND ICONS │
├─────────────────────────────────────────────────────────────────┤
│ │
│ STATUS ICONS │
│ ✓ Success / Healthy / Completed │
│ ✗ Error / Failed / Unhealthy │
│ ⚠ Warning / Degraded │
│ ◆ OBSIDIAN logo / Active │
│ ⟳ In Progress / Syncing / Deploying │
│ ● Active / Running │
│ ○ Idle / Waiting │
│ ◐ Partial / In Progress │
│ │
│ AGENT STATUS COLORS │
│ ████████████ Green Active, healthy │
│ ████████░░░░ Yellow Idle, waiting │
│ ████████████ Blue Processing, busy │
│ ████████████ Red Error, unhealthy │
│ ░░░░░░░░░░░░ Gray Offline, stopped │
│ │
│ DEPLOYMENT STATUS │
│ ⟳ Blue Deploying │
│ ✓ Green Deployed successfully │
│ ✗ Red Deployment failed │
│ ⟲ Yellow Rolling back │
│ │
└─────────────────────────────────────────────────────────────────┘ Level 2: Web Dashboard
The command center. When you need the full picture — real-time Agent activity, deployment pipelines, cost curves, task queues — you open the web dashboard. It’s the same data as obs status, but persistent, interactive, and rich enough for deep analysis.
Here is the thing about dashboards: most of them are vanity metrics. Graphs that go up and to the right, numbers nobody acts on. The Obsidian dashboard is designed around actionable visibility. Every panel answers a question you’d actually ask during an incident. Every metric has a threshold that triggers a response.
┌─────────────────────────────────────────────────────────────────────────────────────────┐
│ ◆ OBSIDIAN Dashboard production │ v2.4.0 │ ✓ Connected │
├─────────────────────────────────────────────────────────────────────────────────────────┤
│ │
│ ┌────────────────────────────────────────────────┐ ┌────────────────────────────────┐│
│ │ SYSTEM HEALTH │ │ ACTIVE AGENTS ││
│ │ │ │ ││
│ │ ┌─────────────────────┐ │ │ coordinator ● 1 task ││
│ │ │ ✓ HEALTHY │ │ │ researcher ● 3 tasks ││
│ │ │ 98.5% uptime │ │ │ coder ○ idle ││
│ │ └─────────────────────┘ │ │ reviewer ● 2 tasks ││
│ │ │ │ ││
│ │ ✓ LLM ✓ Database ✓ Queue │ │ CPU: ████████░░ 65% ││
│ │ ✓ Vault ✓ Cache ⚠ Logs │ │ MEM: ██████░░░░ 52% ││
│ └────────────────────────────────────────────────┘ └────────────────────────────────┘│
│ │
│ ┌────────────────────────────────────────────────┐ ┌────────────────────────────────┐│
│ │ TASK PROGRESS │ │ DEPLOYMENT PIPELINE ││
│ │ ┌─────────────────────────────────────────┐ │ │ ││
│ │ │████████████████████░░░░░░░░░░░░░░░░░░░░│ │ │ DEV ──► STAGING ──► PROD ││
│ │ └─────────────────────────────────────────┘ │ │ ✓ ✓ ⟳ ││
│ │ Completed: 142 In Progress: 6 Pending: 5 │ │ ││
│ │ │ │ v2.4.0 deploying (25%) ││
│ │ ● task_12350 research ⟳ AI safety paper │ │ ████████░░░░░░░░░░░░░░░░░░░ ││
│ │ ● task_12351 code ⟳ Auth module fix │ │ ││
│ │ ○ task_12352 review ○ PR #234 review │ │ [Pause] [Rollback] [Promote] ││
│ └────────────────────────────────────────────────┘ └────────────────────────────────┘│
│ │
│ ┌──────────────────────────────────────────────────────────────────────────────────┐ │
│ │ ACTIVITY FEED │ │
│ │ 10:35:22 ● researcher claimed task_12350 "Research AI safety papers" │ │
│ │ 10:34:18 ✓ coder completed task_12348 "Implement rate limiting" │ │
│ │ 10:33:45 ⟳ deployment promoted to 25% canary │ │
│ │ 10:32:01 ● coordinator spawned researcher-02 instance │ │
│ │ 10:30:55 ⚠ cache usage at 89%, cleanup recommended │ │
│ └──────────────────────────────────────────────────────────────────────────────────┘ │
│ │
│ ┌────────────────────────────────────────────────┐ ┌────────────────────────────────┐│
│ │ METRICS │ │ LLM COST (Today) ││
│ │ Tasks/Hour LLM Latency (P99) │ │ Total: $18.45 ││
│ │ 50│ ╭─╮ 2s│ ╭──╮ │ │ anthropic █████████░ $15.20 ││
│ │ 40│ ╭──╯ ╰─╮ │╭───╯ │ │ │ openai ██░░░░░░░░ $3.25 ││
│ │ 30│╭─╯ ╰╮ 1s│╯ ╰─╮ │ │ Tokens: 1.2M ││
│ │ 20│╯ ╰──╮ │ ╰ │ │ Projected: $545/month ││
│ │ 0└───────────────── 0s└──────────── │ │ ││
│ └────────────────────────────────────────────────┘ └────────────────────────────────┘│
└─────────────────────────────────────────────────────────────────────────────────────────┘ System Health Panel
The health panel is the first thing you see because it’s the first thing that matters. It answers the only question that matters at 3 AM: is everything okay, and if not, what specifically is broken?
Every component — LLM provider, database, Vault , queue, cache — reports its status independently. This isn’t a single green/red light. It’s a component-by-component breakdown, because Principle 1 says failures are inevitable and what matters is knowing exactly where the degradation is happening.
Agent Activity Panel
Each Agent gets its own card showing status, resource consumption, current tasks, and uptime. The Warden enforces the resource limits displayed here — CPU, memory, LLM spend — and the dashboard makes those boundaries visible. You can see at a glance which Agent is working, which is idle, and which is approaching its limits.
This is Fractal Delegation made visible. The coordinator delegates to researchers, coders, and reviewers. The dashboard shows the entire delegation tree in real time: who owns what work, how far along they are, and whether the system needs to spawn more instances or scale down.
Deployment Pipeline
The deployment panel visualizes the full progression: build → staging → production, with canary traffic percentages and one-click controls for pause, rollback, and promote. Principle 3 demands that deployments should be boring. The dashboard makes them boring by making them visible — you can watch traffic shift from 5% canary to 25% to 50% to 100%, and hit rollback the instant error rates twitch.
Cost Tracking
LLM costs are not an afterthought. They’re on the main dashboard because they’re a real-time operational concern. The cost panel shows per-provider breakdown, token consumption, and monthly projections. When you’re running multiple Agent instances 24/7, the difference between a well-tuned and a poorly-tuned system is hundreds of dollars a month — and you can’t optimize what you can’t see.
Level 3: Mobile & Chat Integration
The notification layer. Not everyone wants to stare at a dashboard. Sometimes you just need a Slack message when a deployment finishes or a Discord ping when an Agent hits an error. Level 3 pushes the information to you — critical alerts on your phone, status summaries in your team channels.
The design principle is the same: visibility without disruption. You choose your notification thresholds. You choose your channels. The system respects your attention budget the same way it respects compute budgets — as a finite resource that shouldn’t be wasted.
The Nervous System
Here is the deeper point. The dashboard isn’t a separate system bolted onto Obsidian . It’s the expression of a constitutional requirement. Principle 2 doesn’t say “build a dashboard.” It says “if it isn’t observable, it doesn’t exist.” That means every component, every Agent , every task, every deployment emits structured events that flow into a unified observability layer.
The four visibility levels are just different lenses on the same underlying stream. The terminal status line, the CLI display, the web dashboard, and the mobile notifications all consume the same events. Add a new component to the system and it automatically appears in every view. This is Principle 5 again — self-similarity at every scale — applied to observability itself.
The system watches itself so you don’t have to. And when something does go wrong, you’ll know about it before your users do — because the same Systemic Integrity checks that keep Agent instances healthy also feed the dashboard that tells you exactly what’s happening, right now, at a glance.