You've built a job scheduler with an agent-first CLI. Every command returns JSON. jobs watch streams state changes as NDJSON. This is an API — now pick your frontend.
What the Dashboard Shows
Regardless of which surface you choose, a dashboard answers three questions:
- What's running? — job names, schedules, loaded/idle/error state
- What happened? — recent logs, last exit codes
- Is everything healthy? — doctor-style health checks
The CLI already answers all three:
bun run src/cli.ts status # what's running
bun run src/cli.ts logs X # what happened
bun run src/cli.ts doctor # is it healthy
bun run src/cli.ts watch # stream it all
Your dashboard is a rendering layer on top of this API.
Choose Your Surface
Pick based on what you use and what excites you:
- Web — a localhost HTML page. Simplest. No dependencies. Good first dashboard.
- Raycast — a Raycast extension. Slick if you already use Raycast. ⌘+Space to check your jobs.
- SwiftUI — a native macOS menubar app. The most ambitious. A real Mac app.
- Electron — a desktop app. Cross-platform. Full window.
- TUI — a terminal dashboard. Consumes
jobs watchNDJSON. No GUI.
Or don't build a dashboard at all. jobs status | jq is a valid answer. The CLI is already agent-readable — if you have a coding agent, it can check your jobs for you.
The Universal Backend
Whichever surface you pick, the backend is the same:
# Point-in-time state
bun run src/cli.ts status
# Streaming state (for live dashboards)
bun run src/cli.ts watch --interval 5
watch outputs one JSON line per poll. Your frontend reads lines from stdout (TUI, Electron) or you wrap it in a tiny HTTP server (web, Raycast).
After You Build It
You now have a local AI job scheduler with:
- Jobs as directories
- Three schedule types (periodic, calendar, filesystem watch)
- An AI-powered run script using your chosen LLM
- Reactive file processing with WatchPaths
- A debugging toolkit (doctor, logs)
- Idempotent declarative sync
- An agent-first CLI
- A dashboard showing it all
What started as "schedule a script" became personal AI infrastructure. The same pattern — durable jobs, declarative state, observable output — scales from a hello-world timer to a system that processes your files, summarizes your notes, and monitors itself while you sleep.