Skip to content

About

A minimal terminal cockpit for Claude Code on native Windows: one window, one taskbar icon, every Claude Code session and every plain shell you run alongside them.

Resources

Stars

3 stars

Watchers

0 watching

Forks

Repository files navigation

agent race control

A minimal terminal cockpit for Claude Code on native Windows, macOS in progress: one window, one taskbar icon, every coding-agent session and every plain shell you run alongside them — in a single timing tower you can glance at and a terminal you can drive.

Inspired by the F1 timing tower: a column of colored entries, each with a name and a live status, telling you the state of the whole race at a glance — then you click one to go on board.

Agent Race Control

The user guide walks every feature with screenshots (which, like the ones here, follow your light/dark theme).

Built on a hard rule: the unmodified CLI in a real pseudo-terminal (node-pty — ConPTY on Windows, a real pty on a Mac). No SDK, no wrapper, no reimplementation — so everything the terminal has works by construction: rewind, /btw, agent view, remote control, resume, plan mode, MCP, hooks. If it works in your terminal — Windows Terminal, or Terminal.app on a Mac — it works here. Codex runs on the same rule and an even shorter spawn line.

Features

  • Timing tower — every session with an editable name, live conversation title, and status
  • Three session types — Claude (bash --login -i -c 'exec claude'), Codex, and first-class shells for dev servers, builds, git (Git Bash on Windows, your login shell on a Mac)
  • Live status from the agent itself — traffic lights from your point of view: 🔴 running (agent busy) · 🟠 waiting for you (pulses) · 🟠 delegating, subagents still working (steady) · 🟢 idle at the prompt, your turn · ⚪ live shell · exited fades out. Claude rows run on its own hook events with an agent-poll green floor; Codex rows read the screen, whose title reports all three states.
  • Four pane tabs on an agent row — Terminal, a conversation Preview, a Session instrument panel (the numbers behind the dot, copyable into a bug report), and a plain-text Notes scratchpad that lives and dies with the row
  • The archive — file a session out of the way instead of closing it: still running, still reporting, dot drawn as a ring; drag rows across the divider either way
  • Relaunch — same conversation, fresh process, row keeps its place; for when the CLI updated under you or the TUI wedged
  • Resume across restarts — sessions reopen with their conversations (--resume on a pinned id; codex resume on the one Codex minted)
  • Directory groups — sessions group by their working directory (the group is the dir), each with an F1-style team-stripe color; drag & drop reorders groups, and sessions within their group
  • Repo cards & worktrees — a git repo's worktrees gather under one card, one branch row each; the card spawns a Claude straight into a fresh worktree (claude --worktree) for parallel features — Claude Code creates it, installs nothing, and cleans it up on exit; the app never touches git
  • Filter bar — text search over name/title/path, plus Claude/shell type chips
  • Directory colors pushed into Claude Code on demand: "Apply folder color" types /color <name> for you, so agent view matches the tower
  • GitHub Light/Dark/System theming (exact Primer palettes), themes that set the Preview's look and the terminal and interface fonts, and the status-dot toggles, together in one Settings modal — the app's chrome only; the CLI renders untouched
  • Windows Terminal conventions — Ctrl+Shift+C/V copy/paste, right-click copy/paste, file drop pastes the quoted path, Ctrl+=/−/0 window zoom plus Ctrl+wheel to zoom one pane. Zero new muscle memory, nothing shadowed.
  • Right-click context menu — Show in Explorer, copy path, duplicate session, rename, apply folder color, relaunch, archive, close

Preview

Every agent row carries a read-only conversation preview, rendered as markdown — headers, bullets, tables, code — straight from the transcript the CLI itself writes. Pure observation: nothing is injected and the terminal byte stream is untouched. It follows the conversation live, drops tool noise but keeps the code the agent writes, and flips back and forth from the terminal instantly. A file that was written or edited arrives as a folded tab carrying its name — click to unfold the listing or the tinted +/- diff.

Conversation preview

Appearance

Mode, theme and the status controls live in one Settings panel, grouped into Appearance, Status, Power and Theme: GitHub Light/Dark/System, whether the status dot is drawn at all and which technique colours it on Claude rows, and the theme — the Preview's typography, prompt style and code colours, plus the terminal and interface fonts — with a full-window editor for making your own.

Settings

Install

Grab the latest release:

  • Setup (Agent-Race-Control-Setup-<version>.exe) — NSIS one-click, per-user installer: no admin prompt, Start Menu entry, real uninstaller, and auto-update (from 0.1.8): new versions download in the background and install when you quit, or when you restart from the tower's update button — the app never restarts on its own. Recommended.
  • Portable (Agent Race Control Portable <version>.exe) — a no-install download: self-extracts and runs, leaving no installed footprint. It doesn't update itself.

Both are unsigned — expect a SmartScreen warning on first run (More info → Run anyway).

There is no macOS download. It runs on a Mac from source — see Requirements for what is and is not finished there.

Requirements

Windows is the primary platform and the only one with a download:

macOS runs, and is not finished. Both session types come up in a real PTY (measured on macOS 26 arm64), your login shell $SHELL is used as-is instead of Git Bash, the tower and repo cards work, and CI typechecks and tests on both hosts. What is missing is Mac chrome: there is no application menu, so no Cmd+Q; copy, paste and zoom are still the Windows Ctrl chords; and there is no packaged .app, so build from source. Codex rows on a Mac are untested.

Build from source

Node.js 22+ required.

npm install
npm run dev        # development (HMR)

npm run build
npm run preview    # production build

npm run dist       # Windows installer + portable exe (NSIS, per-user) into dist/
                   # Windows only — there is no macOS packaging target yet

Worktree workflow

One card per repo, one worktree per feature, as many sessions per feature as the job needs. The repo card's ➕ button names a feature and spawns claude --worktree <name> — Claude Code creates .claude/worktrees/<name>/ on a branch worktree-<name> and, when you /exit with nothing pending, removes the worktree again (the branch survives; delete it after merging).

Repo card with worktree branch rows and dirty/ahead-behind markers    Naming a new worktree from the repo card

Worth setting up per repo:

  • add .claude/worktrees/ to .gitignore
  • list env files (.env…) in a .worktreeinclude so new worktrees get copies
  • a worktree is a bare checkout — make npm install your first prompt, or automate it with a personal WorktreeCreate hook
  • run plain claude once in a new repo first (worktrees need the trust dialog accepted)

State

Everything lives in one human-readable JSON: %APPDATA%\Agent Race Control\state.json, or ~/Library/Application Support/Agent Race Control/state.json on a Mac (sessions, directory groups, appearance, zoom, tower width). No database. Delete it to start fresh.

Design notes

The full design record — every decision, constraint, and verified gotcha — is in docs/agent-race-control-kickoff.md. The short version: minimalism is a hard requirement, and Claude Code purity is the reason this exists.

License

MIT

About

A minimal terminal cockpit for Claude Code on native Windows: one window, one taskbar icon, every Claude Code session and every plain shell you run alongside them.

Resources

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages