When I first started running Claude Code as a persistent agent, I thought the hard part was going to be the AI. It wasn't. The hard part was knowing what the AI was doing.
I'd queue up a dozen tasks before bed — fix this bug, draft that document, analyze this dataset — and by morning Claude had touched maybe four of them. The rest were silently waiting, or had been blocked on a clarification it couldn't get, or had finished but I had no idea how it finished. There was no dashboard. No task list. No way to see the queue.
So I built one.
What is claude-ns-hub?
It's a FastAPI server that runs locally on your machine (or home server) and provides a single-page dashboard for managing milestones across multiple projects. I call each task a "stone" — a unit of work with a simple lifecycle:
queued → (agent works on it) → pending_confirmation → done
When a stone is queued, you can click Execute on the dashboard. This spawns a tmux session running claude, injects a prompt listing all queued stones, and the agent starts working. When it finishes a stone, it PATCHes the status to pending_confirmation and posts a 1-3 line completion comment. You review it, confirm, and it's done.
The parts that actually matter
The stop-hook. After every Claude Code session ends, a Python hook re-checks for remaining queued stones. If any exist, it re-injects the dispatch prompt and Claude keeps going — up to 5 continuation loops per session. This means I can queue 20 stones, start the agent, and come back later.
BM25 context injection. When spawning an agent, the server queries a local BM25 index of past milestone decisions. This gives Claude relevant history without me having to hand-craft a context document every time.
SQLite as the primary store. Everything is written to ns-events.db. A per-row UPSERT takes ~1ms vs ~350ms for a full YAML rewrite. YAML files are written asynchronously as a backup.
Push notifications via ntfy.sh. When the agent goes idle, the server POSTs to ntfy.sh and I get a notification on my phone. No custom notification server needed.
How to try it
pip install claude-ns-hub
hub
The dashboard opens at http://localhost:9001. Add a project, create some stones, point it at your Claude Code project directory, and click Execute.
Why I'm sharing this
I've been building this in the open since early 2026 and I've hit a point where I'm using it daily but it's still rough around some edges. The core architecture is solid. What it needs now is people who run into different problems than I do.
If you use Claude Code and wish you had better task visibility, I'd love for you to try it.
GitHub: https://github.com/jaytoone/claude-ns-hub
Contributions welcome — bug reports, fixes, or a "have you considered X?" issue. The contribution guide is in CONTRIBUTING.md.
Top comments (0)