Picobot has two dashboards: a terminal-based TUI and a web-based interface. Both are read-only observers of the same data files the agent writes — they add zero coupling to the agent loop.
TUI Dashboard¶
A live-updating terminal interface built with Textual.
picobot dashboard
Panels¶
| Panel | Content | Refresh |
|---|---|---|
| Status Header | Daemon status (running/stopped, PID) | 5s |
| Sub-agents | Registry table with status, depth, timestamps | 5s |
| Cron Jobs | Job list with schedule, next run, status | 10s |
| Activity Log | Recent tool calls from JSONL logs | 2s |
| KB Tree | Topic directories with entry counts | 10s |
| TODO | Current TODO.md content | 5s |
Keyboard Shortcuts¶
| Key | Action |
|---|---|
q |
Quit |
r |
Force refresh all panels |
? |
Toggle help |
Tab |
Cycle between panels |
When to Use¶
The TUI is useful for: - Monitoring agent activity during long-running tasks - Watching sub-agent progress - Checking cron job status - Browsing the KB without leaving the terminal
It works over SSH, in tmux, and anywhere you have a terminal.
Web Dashboard¶
A browser-based interface built with FastAPI and HTMX.
picobot serve
Opens at http://localhost:8000 by default.
Features¶
The web dashboard has the same 6 panels as the TUI, rendered as HTML:
- HTMX partials at
/partials/*— each panel updates independently via HTMX polling - JSON API at
/api/*— programmatic access to all data - SSE at
/events— Server-Sent Events for real-time updates (every 2 seconds)
API Endpoints¶
| Endpoint | Method | Returns |
|---|---|---|
/ |
GET | Full dashboard HTML |
/api/subagents |
GET | Sub-agent registry as JSON |
/api/cron |
GET | Cron jobs as JSON |
/api/logs?n=50 |
GET | Recent tool call logs |
/api/kb |
GET | KB tree structure |
/api/status |
GET | Daemon status |
/api/todo |
GET | TODO.md content |
/partials/subagents |
GET | Sub-agents HTML partial |
/partials/cron |
GET | Cron jobs HTML partial |
/partials/logs |
GET | Activity log HTML partial |
/partials/kb |
GET | KB tree HTML partial |
/partials/status |
GET | Status HTML partial |
/partials/todo |
GET | TODO HTML partial |
/events |
GET | SSE stream |
When to Use¶
The web dashboard is useful for: - Monitoring from another device on the same network - Getting a richer visual layout than the terminal allows - Building integrations against the JSON API - Embedding agent status in other tools
Why HTMX?¶
HTMX (10KB) eliminates the JavaScript build toolchain. The entire web dashboard is Python backend + Jinja2 templates + 268 lines of CSS. No React, no Webpack, no node_modules. Each panel is a server-rendered HTML partial that HTMX swaps in on a polling interval.
Data Sources¶
Both dashboards read the same files:
| Data | Source File |
|---|---|
| Sub-agents | ~/.picobot/data/subagents/registry.json |
| Cron jobs | ~/.picobot/data/cron/jobs.json |
| Tool call logs | ~/.picobot/data/logs/*.jsonl |
| KB tree | ~/.picobot/workspace/knowledge/ (directory listing) |
| Daemon status | ~/.picobot/data/daemon.pid (PID liveness check) |
| TODO | ~/.picobot/workspace/TODO.md |
The data readers handle missing files gracefully — if the agent hasn't created any data yet, panels show empty states.