▶ 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.
Since 0.5.0 a tab can also run its agent on another machine over SSH — your folders stay where they are and the agent goes to them.
▶ Watch: remote agents · 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.
▶ Watch the explainer — 60 seconds: adding a machine, working on it, and moving an agent's folder structure across.
A tab can run its agent on another machine over SSH instead of locally: the
work happens where the data and the access are, and the tab still shows the
agent's own TUI. Hosts live in %APPDATA%\Taurus\hosts.json and appear in the
launch form under Runs on.
Add a machine once from the 🖥 button beside the Agents heading: one connection
test reports which OS it runs, whether an agent CLI is installed, whether the
box can reach api.anthropic.com at all, and whether a session there survives a
dropped connection. A host with herdr installed gets that
last one on Windows and macOS as well, not just where tmux exists. An agent then carries its machine like it carries its
folder, and its tab shows a badge for where it runs.
A session on a host outlives the tab, the connection and the workstation, so ⇱ beside + asks a machine what is running on it — session, agent, its state and its folder — and attaches to the one you pick.
Right-click a tab or an agent card to move an agent to another machine,
folder and all — with a survey of what is about to be copied, so a 512 MB
node_modules does not travel unless you say so.
Setup is two prompts — one for an agent on your workstation, one for an agent on
the target machine — in REMOTE-HOSTS.md, along with the
hosts.json format, what session persistence you get per host, and the security
notes worth reading before pointing an agent at a machine you do not own.
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.
