Why I built it
Claude Code lives in a terminal. Long tasks keep running after I leave my desk, and when one needs approval for a command it sits idle until I’m back at a keyboard.
I wanted to start work from a laptop and keep it moving from my phone, on a server I control, without handing my code to another hosted service.
What it does
- Start, resume, rename, pin and archive sessions, grouped by project and searchable
- Each session is a lead ant; every subagent is a worker ant showing whether it’s thinking, running a tool, waiting for approval, done or failed
- Approve or deny tool calls with the exact command, file content or diff in front of you
- Context-window, cost and plan-usage meters per session
- Installable on a phone as a PWA, with push notifications when an approval is waiting
- Passkey sign-in, or password plus authenticator code, with lockout after failed attempts
- Text labels for every state, a 375 px layout, reduced-motion support and automated accessibility tests
How it’s built
A Fastify backend drives sessions through the Claude Agent SDK and streams their state to a Svelte 5 frontend. Caddy terminates TLS and systemd keeps the service running.
The hard part
The security model. The agent runs as the service’s own Unix user, so the app has to be treated like SSH access to the box: one owner, strong sign-in, lockout, and nothing exposed that doesn’t need to be.
Stack
TypeScriptNode.js 22FastifySvelte 5Claude Agent SDKWebAuthnCaddysystemdPlaywright
