Live fleet status
Every session with its state and the evidence it came from: active, needs approval, idle, lingering, failed, stopped. When it cannot tell, it says so rather than guessing.
Local control plane for AI coding agents
Stith reads the lifecycle hooks every Claude Code session already emits, plus transcripts and processes on disk, and tells you what each agent is doing, which account it is spending and which repository it holds. Then it acts on that: switch accounts before a quota runs out, queue two agents off the same repo, and reach any session from a browser, a terminal or a Stream Deck key.
Why it exists
Spread across config roots, accounts and sometimes more than one environment, the failures are quiet. Stith is the layer above the agents that catches them.
A session sits on a question nobody sees.
Needs you tells a permission prompt from a question from an idle nudge, lists them on Waiting, and can alert you. An opt-in watcher can even accept plain “Yes” prompts that pass a denylist.
An account burns its weekly quota on a background job.
Usage polls every login’s five-hour and weekly windows, warns at your thresholds, and can switch a config dir to an account with headroom before the limit lands.
Two agents rewrite the same file.
Writers gives each repository one hold. Others queue behind it in order or fork to a worktree, and a hook can refuse a write that would collide.
What it does
Stith never launches the agent and never becomes the terminal it lives in. It sees every session the hooks report, including the ones it did not start.
Every session with its state and the evidence it came from: active, needs approval, idle, lingering, failed, stopped. When it cannot tell, it says so rather than guessing.
Usage per login, burn rate, overage and spend elsewhere. Thresholds, token auto-refresh, and auto-switch so a slot that runs dry moves to one with room.
A FIFO queue per repository with stall clocks, a worktree fallback and deadlock detection. A stalled holder is a refusal with a way out, never a loop.
Full-text search across every session in every config root, with a local trigram index for substrings and spelling correction. Ask which sessions an id, branch or ticket belongs to.
Save a session as a docket that names it, says what it did and tracks what it left open. A rename engine titles untitled sessions, and resume reopens one in the right config dir.
With herdr, Stith draws every space, tab and pane where it actually is, joins each pane to its session, and lets you focus, move or zoom them. Live, over herdr’s own event stream.
Two surfaces, one daemon
The web app and the Rust terminal app aim at parity, page for page, and a catalog records where each surface stands. The terminal is fully keyboard and mouse driven.
127.0.0.1:24200. No reverse proxy or certificate needed.stith page <name> opens straight onto one page; Ctrl O opens it in the browser.stith usage answers “am I near a limit?” as an exit code a shell can gate on.stith watch arms a watch from the session that is waiting on the change.stith mcp lets an agent query its own ledger, read-only.Excerpt of real stith --help output.
How it works
Stith runs as an always-on local backend. Agents report to it, it reads the rest off disk, and every surface talks to it over the same HTTP API.
Agents
Your machine
127.0.0.1:24200
/proc and config dirsSurfaces
stithThe backend binds to your machine and keeps its data there. Keyword search is a local database; meaning-based ranking is optional and uses a local model when one is available.
First launch shows the Claude Code directories it found and installs hooks only in the ones you check. Install and removal are idempotent, and your other hooks are left alone.
A quota it has not measured is unknown, never exhausted. A pane it cannot join says why. A state is claimed only once it is confirmed.
Companions
Install
No repository checkout, Rust toolchain, npm or global Node needed: the installer brings a private runtime, verifies checksums and adds Stith to your app launcher.
Releases are private during the preview, so the installer downloads through GitHub CLI. Sign in with an account that has access.
gh auth login
gh api repos/aylith-labs/stith/contents/install.sh \ -H 'Accept: application/vnd.github.raw' > /tmp/stith-install.sh && bash /tmp/stith-install.sh
Installs ~/.local/bin/stith, an app-launcher entry on Linux (Omarchy included) and ~/Applications/Stith.app on macOS.
gh api repos/aylith-labs/stith/contents/install.ps1 `
-H 'Accept: application/vnd.github.raw' > "$env:TEMP\stith-install.ps1"
if ($LASTEXITCODE -eq 0) {
powershell -NoProfile -ExecutionPolicy Bypass -File "$env:TEMP\stith-install.ps1"
}Adds Stith to the Start menu. The execution-policy flag applies to this installer only.
Pick Stith from your launcher or run stith. A welcome page finds your Claude Code directories: Y connects the checked ones and opens the app, N opens without hooks, S leaves setup for later. The web app is at http://127.0.0.1:24200.