Mission control for your AI coding agents.
Run Claude Code, Codex, OpenCode, or any CLI you bring, side by side in real terminals. Anacrux tells you, deterministically, which agent is working, which is waiting on you, and which just finished.
Orchestrates the agents & tools you already use
Running six agents is easy.
Knowing which one is stuck waiting for you. That's the hard part.
Terminal tabs and tmux panes show you scrollback, not state. An agent that hit a permission prompt forty minutes ago looks exactly like one that's deep in a refactor. Anacrux was built around that one problem: visibility when you have 4–6 agents running at once.
The grid
Every agent. One glance.
Real embedded terminals, not previews, tiled in a mission-control grid or one big focus view. Switching never kills a session or loses scrollback.
- ⌘1–9 jumps straight to a session. ⌘⇧J jumps to whoever needs you next.
- Inline approvals: answer permission prompts with ⏎ without attaching to the terminal.
- Git context everywhere: branch and dirty-file count on every row and header.
The status engine
No guesswork. Hooks.
Most tools scrape terminal output and guess. Anacrux launches Claude Code with a --settings overlay that injects lifecycle hooks. Every event lands in a per-session NDJSON stream that Anacrux tails live. Status isn't inferred. It's reported.
claude --settings overlay
Hooks injected at launch, merged with your settings. Nothing on disk is modified.
Lifecycle events
UserPromptSubmit · PreToolUse · Notification · Stop, appended to a per-session NDJSON file.
Live tailer
Anacrux tails the stream and maps every event to an exact state transition, in real time.
Deterministic status
Working · Waiting for you · Idle · Exited, plus the attention queue, dock badge and notifications.
Hooks · authoritative
Claude Code sessions report their own lifecycle. Stop means idle. AskUserQuestion means waiting. Exact, every time.
Screen-state · per-agent regex
Codex, OpenCode and Cursor status is read from spinner and prompt patterns in the rendered viewport, with idle debounce.
Activity · last resort
Plain shells and unknown CLIs fall back to output-activity heuristics: recent output means working; sustained work going quiet flags attention.
MCP observability
See every MCP call your agents make.
Hook events on mcp__* tools feed a live per-session inspector: server chips with call and error counts, and a feed of every tool call with arguments, responses and latency. When an MCP server misbehaves, you see it, highlighted in red, with the payload that caused it.
- Per-server call & error counters
- Arguments and responses, pretty-printed
- Latency on every call
- Error highlighting the moment it happens
Everything else
Built for the way you actually run agents.
Needs-attention queue
Agents that go quiet or hit a prompt while you're elsewhere get pinned to the sidebar, counted on the dock badge and the menu-bar extra. ⌘⇧J jumps to the next one.
Two-tier notifications
"Needs your input" notifies immediately. "Turn finished" only when it ran ≥30s and you're unfocused. Click to jump to the session.
Resume sessions
Discovers recent Claude Code sessions per directory from ~/.claude/projects and relaunches them with --resume.
Claude usage meter
Opt-in 5-hour and weekly rate-limit bars, straight from the same endpoint Claude Code's statusline uses.
Auto-continue runs
Per-session unattended loop: keep prompting "continue" until the agent reports DONE or the iteration budget runs out.
Bootstrap commands
Per-project setup (npm install, Docker, env vars) runs before the agent launches. Failures drop you into a shell.
Voice announcements
Optional spoken turn completions, "Hey, Fix auth bug just finished", powered by ElevenLabs with a system-voice fallback.
Persistent terminals, real PTYs
Each session is the actual CLI in a SwiftTerm PTY through your login shell. Terminals are persistent native views; switching focus/grid never kills a process or loses scrollback. Quit and relaunch: sessions restore and Claude conversations resume.
Bring your own CLI
If it runs in a terminal, Anacrux can run it.
Agents launch through zsh -l, so whatever's on your PATH just works. Save profiles for the variants you use, like claude --model opus, codex --full-auto, or your own Python harness, and launch them as one-click chips. Every session gets its own port, session ID and events stream via environment variables.
ANACRUX_SESSION_IDANACRUX_EVENTSANACRUX_PORTTERM_PROGRAM=Anacrux
New session
Jump to session
Next needing attention
Focus view
Grid view
Stop babysitting terminals.
Download Anacrux, open it next to your repos, and give every agent a name, a color and a status you can trust.