Documentation
Browser UI
The locally-served web interface — 15+ panels, SSE real-time updates, no npm, Python 3 stdlib only.
Starting and Stopping
ww browser # Start on port 7777, open browser
ww browser --port 9090 # Custom port
ww browser --no-open # Start without opening
ww browser stop # Stop server
ww browser status # Show running state
The server starts in under a second. No npm, no build step, no external dependencies — Python 3 stdlib only.
Panels
Data Panels
Tasks — Full task list with inline editing. Displays all UDAs defined in the active profile. Actions: start/stop/done buttons, add task form, annotation management.
Time — Today’s total, weekly breakdown, recent intervals, start/stop controls.
Journals — Entry list with expand/collapse. Multi-journal selector dropdown when the profile has multiple named journals. New entry form.
Ledgers — Account balances, recent transactions, income statement, balance sheet. New transaction form. Multi-ledger selector.
Command Panels
CMD — Unified command input accepting both direct ww commands and natural language. Route indicator: ⚡ AI or ⚙ heuristic.
CTRL — AI mode toggle (off / local-only / local+remote). Prompt settings. UI configuration.
Service Panels
Models — LLM provider and model registry. Add providers, set defaults.
Groups — Profile group management.
Sync — GitHub sync dashboard. Shows linked tasks, last sync times, conflict status.
Questions — Template browser. Run structured capture workflows.
Profile — Active profile info. Resource lists. Profile switching.
Weapons bar — Sidebar icons for Gun, Sword, Next, Schedule. Clicking opens the weapon’s panel.
CMD Input
The CMD panel accepts two kinds of input:
Direct commands — any ww subcommand:
profile list
journal add meeting-notes
ctrl ai-status
issues sync
Natural language — translated via heuristic engine (627 rules) or AI fallback:
add a task to review the budget due friday
start tracking time on code review
finish task 5 and stop tracking
show my profiles
Compound commands (joined by “and”, “then”, “also”, “plus”) are split and matched independently.
Real-Time Updates
The server uses Server-Sent Events (SSE) to push profile changes to the browser. Switch profiles via the CLI — the browser updates automatically. Data panels refresh when commands complete.
Multi-Resource Support
When a profile has multiple named journals, ledgers, or time tracking instances, the relevant panel shows a dropdown selector. Switching updates the panel immediately without page reload.
API Endpoints
The server exposes a REST API:
| Method | Path | Description |
|---|---|---|
| GET | /health | Liveness check |
| GET | /data/tasks | Active profile tasks |
| GET | /data/time | Time intervals and totals |
| GET | /data/journal | Recent journal entries |
| GET | /data/ledger | Account balances and transactions |
| GET | /data/ctrl | AI settings |
| POST | /cmd | Execute a ww subcommand |
| GET | /events | SSE stream |
Security
All POST /cmd requests are validated against an ALLOWED_SUBCOMMANDS frozenset. The first token must be a known ww subcommand. No sh -c, no eval. Unknown subcommands return HTTP 400.