▶ Click the image to watch the features tour on YouTube.
A small Tauri desktop app that runs and manages multiple Claude Code agents as terminal tabs in one window — with voice, a file DROPZONE and an inline HTML/Markdown viewer built in.
▶ Watch: features tour · original explainer · 15-second teaser.
Pick or create an agent on the left, see the folder + a (C:) / (X:) drive tag, give the session a title, choose a mode, and hit Start — the agent opens as an embedded terminal tab. Open several, drag them into the order you want, and let a tab flash in its own colour (or speak up) when an agent is done and waiting for you.
Windows-only for now (uses ConPTY + Windows Terminal-style embedding).
Giving Claude the right context at the right moment is still one of the hardest parts of working with coding agents day to day.
Elaborate memory systems help a single power user, but they don't scale to an enterprise: they're hard to curate, easy to pollute, and brittle as the number of people and projects grows. Honestly, the wheel hasn't been invented yet — nobody has a clean, proven answer for how context should work at team scale.
Taurus is built around the Interpreted Context Methodology (ICM) — "folder structure as agent architecture." Instead of orchestration code or sprawling memory, context lives in the folders themselves: a CLAUDE.md, conventions, and reference material that load in layers the moment an agent starts there. Approaches built around one person's bespoke setup are expensive to onboard a whole team onto; a folder anyone can open is not.
Taurus' contribution is the entry point: let everyone start the agent in the process folder they actually need. From there ICM does the rest, so:
- the user immediately knows where they should be for a given task, and
- Claude starts with exactly the scoped context that folder carries — giving repeatable results across people and runs.
It isn't the final answer to context-at-scale, but it removes the biggest piece of day-to-day friction: people land in the right place, and the agent behaves consistently. That's what Taurus is for.
- Embedded terminals with tabs — each agent runs inside the window (xterm.js +
ConPTY via
portable-pty); click tabs to switch, drag to reorder them. - The AGENTS sidebar — one-line cards with a tinted (C:) / (X:) / (UNC) drive tag so local vs network is obvious at a glance. Drag cards to reorder; hover for edit/delete; + Add agent on the launch form saves a one-off straight into the menu.
- Attention flash + voice — a tab flashes in its own colour only when its agent has really finished (busy detection with a confirmation window against false "ready" alerts), and can announce it out loud ("Porter is ready").
- Live status — optionally shows Claude's current activity verb on the tab (✶ Orbiting…).
- Per-project agent, model & mode — launch
claude(Claude Code) oragy(a Gemini-backed agent CLI), optionally pinned to a model, indefault,planorauto(--permission-mode); all set per project, overridable per session. - Restart / resume — right-click a tab to restart and resume the same
conversation; optionally remember sessions and resume them on startup.
(
agyhas no session ids, so a restart resumes the folder's most recent conversation.) - Works with a native
claude.exeor an npm install —.cmd/.batshims (npm i -g @anthropic-ai/claude-code) are resolved and launched correctly.
- Talk to your agent (push-to-talk STT) — hold F9 or click the round record button above the DROPZONE; a live level ring shows Listening…, release (or click again) and the transcript lands at the active prompt (optionally sent immediately). Speech-to-text runs fully offline via a local sherpa-onnx sidecar (NVIDIA Parakeet TDT v3 by default, downloaded on demand from Settings → Voice, hash-pinned). The model list can follow a registry URL so new models appear without an app update.
- Your agent talks back (TTS) — Windows voices, including the natural (neural) ones when installed, grouped and labelled with their language (e.g. Microsoft Frank — Dutch). Optional "agent is ready" announcement for background tabs, speak-the-selection from a tab's context menu, and a slow-to-fast rate slider.
- Hand files to your agent, locally. Drag a file or folder onto the sidebar
DROPZONE and pick Move, Copy (into the agent's
input/folder) or Path only; the full path is inserted at the active prompt so you can immediately ask the agent to work on it. Paste works too (clipboard text, an image, or a file copied in Explorer), and + opens a file picker. Nothing is ever uploaded anywhere — local files, local agent, local tools.
- HTML preview — click an
.htmlpath in the terminal (or right-click a tab → HTML preview); it renders in a sandboxed pane beside (or instead of) the terminal. External links open in your default browser;mailto:opens your mail client. - Markdown preview —
.mdfiles render inline too: GFM tables (with alignment), task lists, strikethrough, code blocks, working in-document anchors — with a</>raw/rendered toggle. Rendering is escape-first (raw HTML in a document can never execute) andjavascript:/data:links are stripped to plain text.
- Settings in tabs (General / Theme / HTML preview / Terminal / Voice) with per-setting hover help.
- Search the scrollback (Ctrl+Shift+F), copy-on-select, right-click paste, Ctrl+Shift+C/V, clickable links, font zoom (Ctrl+= / − / 0), tab shortcuts (Ctrl+Tab, Ctrl+1..9, Ctrl+T/W), agent-mouse toggle — all toggleable.
- EN / NL — the default follows your OS language; your choice wins.
- White-label & skins — rebrand from a local
branding.jsonand pick from ten visual skins. See Branding.
Grab the latest release from the
releases page:
*-setup.exe (installer), .msi, or the portable exe (no install).
Requirements:
- WebView2 runtime (preinstalled on Windows 11)
- The Claude Code CLI on your
PATH— native installer ornpm install -g @anthropic-ai/claude-code(both work) - For dictation: a microphone + the STT model (one-time download from Settings → Voice, ~490 MB, stays on your machine)
Node.js and Rust (MSVC toolchain):
npm install
npm run tauri devnpm run tauri buildOutput:
- standalone:
src-tauri/target/release/taurus.exe - installers:
src-tauri/target/release/bundle/(NSIS*-setup.exe, MSI)
Projects live in %APPDATA%\Taurus\projects.json (per user, created on first run).
Edit them with the in-app Agents editor, or by hand. Format:
[
{
"id": "my-id",
"label": "Button name",
"path": "C:\\path\\to\\folder",
"title": "Default session title",
"task": "",
"accent": "#7c9cff",
"mode": "default",
"agent": "claude",
"model": "",
"command": ""
}
]agent(optional) — which agent CLI to launch:claude(default, Claude Code) oragy(a Gemini-backed agent CLI). Selectable per project in the editor and overridable per session on the launch form. Resume limitation:agyhas no session ids, so restarts resume the folder's most recent conversation.model(optional) — model the agent starts with (free text, e.g.opus,sonnet,gemini-2.5-pro). Empty means the agent's own default. Passed as--model.command(optional) — run a different program instead of the agent for this project (no agent flags). Takes precedence overagent/model. Use double quotes around a program path or argument that contains spaces.- A fresh install starts with an empty list (no baked-in paths). UI settings (language, font, toggles) are kept in the WebView2 local storage.
You can rebrand the launcher — app name, subtitle, logo, colours, skin, window
title — without forking or editing code. Copy
branding.example.json to %APPDATA%\Taurus\branding.json
(next to projects.json) and edit it. Without the file the build is plain
Taurus; remove it to get Taurus back. Every field is optional:
{
"appName": "Acme Agent Launcher",
"subtitle": "Acme Corp",
"logo": "C:\\ProgramData\\Acme\\logo.png",
"windowTitle": "Acme Agent Launcher",
"skin": "default",
"skinName": "Acme",
"theme": { "--accent": "#3b82f6", "--bg": "#0b1220", "--bg-panel": "#11182a" }
}themeoverrides the CSS variables insrc/styles.css:root— the themeable ones are--bg,--bg-panel,--bg-card,--bg-card-hover,--border,--text,--text-dim,--accent(and--term-bg/--term-fg/--term-selfor the terminal).skinsets the default theme (see Skins below).skinNamelabels the branding-derived theme in the ⚙ Settings → Theme dropdown (e.g."NEXUS"); falls back toappNameif omitted. Use it when yoursubtitleis a tagline that would read oddly as a theme name.fontsets the UI font family (e.g."'IBM Plex Mono', monospace"). IBM Plex Mono ships bundled (offline); any installed/CSS font name also works.garble(true/false) toggles the hover letter-scramble effect on the sidebar buttons, agent cards and tab titles. It's on by default for a branded theme; setfalseto disable.logois an absolute path; it's read at startup and inlined as a data URI.- The in-app branding above is runtime/config-driven. To also change the
installer product name / identifier (baked into the bundle), build with a
Tauri config overlay:
npm run tauri build -- --config <overlay>.json.
Built-in visual themes that restyle the sidebar, top bar, buttons and terminal.
Pick one live under ⚙ Settings → Theme, or set a default via "skin": "…"
in branding.json (an explicit Settings choice wins). Available skins:
| value | look |
|---|---|
default |
the standard dark theme |
retro-mac |
classic Mac System 7 / Platinum (grey, beveled, pinstripe) |
aqua |
early Mac OS X (pinstripes, glossy lozenge buttons) |
retro-win |
Windows 95/98 (teal desktop, raised 3D grey controls) |
winxp |
Windows XP Luna (blue bars, glossy buttons, green primary) |
terminal |
green-on-black CRT (monochrome, scanlines) |
nord |
modern — Nord arctic blue-grey (dark) |
dracula |
modern — Dracula (dark, vibrant) |
solarized |
modern — Solarized Light (warm, light) |
catppuccin |
modern — Catppuccin Mocha (soft pastel, dark) |
Skins are pure CSS (src/skins.css, scoped by html[data-skin="…"]) — adding
more is just another block. The retro skins adapt techniques from the MIT
projects 98.css / XP.css / system.css; the
modern skins are palette-only.
Keep brand assets out of this repo:
branding.jsonandsrc/*-logo.pngare git-ignored. A real brand lives only in the local config, never committed.
branding.json is read from %APPDATA%\Taurus\ or, as a fallback, from the
folder next to taurus.exe. A relative logo path resolves against the folder
the branding.json was found in. So a self-contained, pre-branded build is just
a folder you can zip and hand out:
MyBrand Agent Launcher/
taurus.exe (rename freely, e.g. "MyBrand Agent Launcher.exe")
branding.json ("logo": "logo.png", relative)
logo.png
Unzip and run — no setup. A branding.json in %APPDATA%\Taurus\ takes
precedence over the one next to the exe. To also rebrand the installer's product
name, build with a Tauri config overlay (--config).
Want to show Taurus (or record a video) without exposing real projects?
demo\demo-on.ps1 backs up your config and swaps in two demo agents backed by a
fake Claude (mock-claude.mjs) — no real data or MCP is ever touched.
demo\demo-off.ps1 restores your own configuration.
- Frontend:
src/— vanilla HTML/CSS/JS (xterm.js vendored insrc/vendor/). - Backend:
src-tauri/src/lib.rs— Rust commands for project config, the native folder picker, the ConPTY sessions (create/restart/write/resize/close), voice (Windows TTS + the sherpa-onnx STT sidecar) and the DROPZONE file operations. - Previews render in a sandboxed iframe (no same-origin, scripts contained); Markdown is rendered escape-first by a small built-in renderer, so documents can't inject HTML/JS into the app.
