NekoTrail cat

NekoTrail

Your coding agents, all at once.

Claude Code, Codex and 14 more on your logins, each in its own worktree.
Free, MIT, no account.

Latest release Downloads License: MIT Platform: macOS 13+ and Linux

Download for Mac  Download for Linux  Website

NekoTrail on Product Hunt

Sponsor on GitHub  Buy me a coffee


The board while three agents work: cards move to In review and then Done as their PRs open and merge, then the night sky, where the merged workspace's star starts to shine

Every task gets a workspace: a git worktree on its own branch, plus a chat, a diff, a live preview, a terminal and a PR bar with GitHub status.


## Why NekoTrail

Open source and local.
MIT. Workspaces, branches and chats stay on your disk.

Your agents, your logins.
Sixteen agents through the agents' own CLIs. No proxy, no markup.

Hand off without starting over.
Another agent picks up in the same branch, from a brief you read first.

Leave Conductor, keep everything.
One import moves your worktrees with git worktree move and checks each one. Nothing is copied or deleted.
## Tour Screenshots and clips use sample data. Light and dark follow your Mac.
New workspace panel: the repo picker with the repo's picture, the Claude agent button, the task box, and tabs for New branch, Several repos, Issue, Linear, PR, Existing branch and On a workspace
Start a workspace.
Type the task, press Enter. Start from a GitHub or Linear issue, a PR, a branch or another workspace.
Plan card with Approve and build, Split into 3 workspaces, a todo list and queued messages
Approve the plan, or split it.
Approve with ⌘⇧↵, or split it into parallel workspaces.
In the Changes tab, a comment is added on line 22, then Send review puts it in the chat and the agent starts on it
Review it like a PR.
Click a line number to comment. Send review hands every comment to the agent in one message.
Compare agents: Claude's and Codex's results side by side with files, turns, time and cost; Keep this one on the Codex workspace archives the other
Compare Claude and Codex.
Same task, two workspaces. Compare files, time and cost; keep the winner.
Claude is out of usage; Hand off to another agent opens the brief, and a new Codex chat carries on in the same branch
Hand off without starting over.
Out of usage? Codex picks up in the same branch, from a brief you read first.
The queue running three tasks at once: one finishes and the next starts, another stops to wait for your OK in gold, and Open goes to it
Queue the night's work.
Tasks run a few at a time and respect each plan's limits, picking up after they reset. One that needs you turns gold.
The Conductor import with Move into NekoTrail chosen: six worktrees move, and each one is checked after it moves
Bring your Conductor work over.
One import moves every worktree into NekoTrail's folder and checks each one.
Rewind sheet: 2 files go back to how they were before the message, 1 commit comes off the branch
Rewind to here.
Every message you send saves your files first. Rewind puts them back, and can be undone.
Preview tab in Annotate mode with a box and an arrow drawn on a sample app and a note for the agent
See your app and mark it up (⌘4).
Draw on the running page and send it to the agent as a screenshot.
Agent scorecard: Claude and Codex side by side, each with the share of turns that finished cleanly, turns, errors, average turn time, API-equivalent cost and workspaces merged
See which agent works for you.
Clean finishes, turn time, API-equivalent cost and merged workspaces, from your own history.
Search all chats for retry, with Everything, My messages and Commands, and All repos, Any agent and Any time filters: a message and a go test command match in an archived workspace
Search every chat.
Type in the sidebar's Search and press ↵. Archived workspaces too. Filter by repo, agent or time.
Environment sheet for one workspace: a filter box, counts for NekoTrail, Repo settings, .env files and Login shell, then the Repo settings variables and the .env files, where LOG_LEVEL and STRIPE_SECRET_KEY are marked overridden and secret values show as dots with an eye button
See what your agents get.
Every variable agents, terminals and scripts get, and where it comes from (⋯ menu). Secrets stay hidden.
Eleven more screens
Model picker open from the chat box: Claude models, an intelligence row from Auto to Max, and Set as default for new chats
Pick the model and how hard it thinks (⌘/).
Or set it as the default for new chats.
An OpenCode chat in Ask before changes mode, waiting on an edit with Deny, Allow for this chat and Allow
Or approve each change.
In Ask before changes, every edit and command waits for Allow (↵) or Deny (⌫).
A stacked workspace whose parent PR #482 has merged, with a Move onto main button in the banner
Stack work on work.
Build on an unmerged workspace. When the parent merges, one click moves it onto main.
Board with Backlog, In progress, In review and Done columns, each workspace a card with its branch and PR state
See everything on a board (⌘⇧K).
Drag to change status.
Storage sheet with per-workspace sizes and Clean buttons
Get disk space back.
See each workspace's size and clean ignored build folders in one click.
Command palette with a recent workspace and this workspace's actions, such as Show chat, Run checks and Environment
Do anything from the keyboard.
⌘K jumps to any workspace or action.
MCP servers and skills sheet with connection status and which agents have each one
Share MCP servers.
Type /mcp to see every agent's servers and copy one to another agent.
Welcome screen, step 1 of 3: git, the GitHub CLI, Claude Code and GitHub Copilot CLI found, and 14 more agents you can add
First launch checks your setup.
It shows the command for anything missing and offers the Conductor import.
Night sky: stars for workspaces joined into cat constellations
Light up the night sky.
Every workspace is a star in a cat constellation. Merged PRs make it shine.
The Your messages list, opened from the rail of ticks on the chat's right edge, with eight numbered messages
Jump to any message.
Hover the rail on the chat's right edge and click one.
Sidebar with the archive button showing on the hovered workspace, Rate limit the tickets API; the open chat's finished reply folded into Worked for 41s, 5 steps
Archive in one click.
Hover a workspace in the sidebar. The branch is kept.
## Sixteen agents, one window

Through the agents' own CLIs, on your own logins and subscriptions. No proxy, no markup.

Claude CodeCodexGemini CLIOpenCode
CursorGitHub CopilotGooseQwen Code
KimiAuggieGrokKiro
DroidMistral VibeClineKilo
## Install **macOS 13 or later**, Apple silicon or Intel. Paste this in Terminal: ```sh curl -fsSL https://harshil-jani.github.io/nekotrail/install.sh | sh ``` It downloads the latest release, puts NekoTrail in Applications and opens it ([read the script](site/public/install.sh)). On first launch it checks your setup and gives you the exact command for anything missing.
Prefer the .dmg? Download the `.dmg` from the [latest release](https://github.com/Harshil-Jani/nekotrail/releases/latest) and drag NekoTrail to Applications. The app isn't notarized by Apple yet, so run this once before you open it: ```sh xattr -dr com.apple.quarantine /Applications/nekotrail.app ```
**Requirements:** [`git`](https://git-scm.com), [`gh`](https://cli.github.com) signed in, and at least one agent CLI, such as [`claude`](https://docs.anthropic.com/claude-code), [`codex`](https://github.com/openai/codex), [`gemini`](https://github.com/google-gemini/gemini-cli) or [`opencode`](https://opencode.ai). Setup lists all sixteen with their install commands. **Gemini CLI accounts.** Gemini CLI signs in with a Gemini API key, Vertex AI or a Gemini Code Assist plan. Google says free-tier and Google One users moved from Gemini CLI to Antigravity CLI on 18 June 2026; check [Google's Gemini CLI terms](https://www.geminicli.com/docs/resources/tos-privacy) for which accounts it accepts. **Updates.** NekoTrail checks for a new release on launch and every 6 hours, and offers to update itself (⌘K → Check for updates, or Settings). It waits for your agents before restarting. If you're on 0.10.1 or earlier, install the latest release from the download link once by hand: those versions can't update themselves yet.
Linux (new, experimental)
Each release also carries an x86_64 `.deb`. This is new and has not been tested on real Linux machines yet, so expect rough edges and please [report them](https://github.com/Harshil-Jani/nekotrail/issues/new/choose). - **Debian, Ubuntu and similar:** download the `.deb` and run `sudo apt install ./nekotrail_*_amd64.deb`. It needs glibc 2.35 or newer (Ubuntu 22.04 era). - **Other distros:** build from source for now (see **Build it yourself** below). The `.AppImage` is paused: it would bundle LGPL libraries (WebKitGTK, GTK), and it comes back once their matching source ships with each release. If you installed an earlier AppImage, switch to the `.deb` or a source build; the AppImage no longer gets updates. - The `.deb` updates itself from inside the app. An update asks for your password, since it installs with `pkexec`. - Shortcuts use Ctrl where the Mac uses ⌘. Two moves: switching workspace is Alt+1 to Alt+9 (Ctrl+1 to Ctrl+4 switch tabs), and Open in editor is Ctrl+Shift+O (Ctrl+O shows tool output). In the terminal, Ctrl keys go to your shell; copy and paste are Ctrl+Shift+C and Ctrl+Shift+V. Settings, Shortcuts lists them all. - Not on Linux yet: the Conductor import (Conductor is Mac-only), vibrancy, and the Dock badge (most Linux desktops don't show one). Annotate in Preview uses WebKitGTK's own snapshot and is the least tested part. - Requirements as above, plus WebKitGTK 4.1 (`libwebkit2gtk-4.1-0`, pulled in by the `.deb`).
Build it yourself
```sh git clone https://github.com/Harshil-Jani/nekotrail cd nekotrail bun install bun run tauri build -c '{"bundle":{"createUpdaterArtifacts":false}}' # app bundle in src-tauri/target/release/bundle # (release builds also sign an update archive; that needs the maintainers' updater key) # or, while hacking on it: bun run tauri dev ```
## Moving from Conductor? > One import brings over your repos, active workspaces and chats, then moves your worktrees out of Conductor's folder with `git worktree move`. Same shortcuts, same agent sessions. **[What comes over →](docs/MOVING-FROM-CONDUCTOR.md)** ## Reference
Everything it does
| | | |---|---| | Start | Open a local repo, clone a GitHub repo, or import from Conductor. Start from a task, a GitHub or Linear issue, a PR or a branch. | | Workspaces | One worktree and branch per task. Archive removes the folder and keeps the branch. | | Chat | Any of the sixteen agents, several chats per workspace. Queue messages, `@` a file, paste a screenshot. Modes: Plan, Ask before changes, Auto-accept edits, Full auto. Finished replies fold their steps into one line, and the first message names the branch and chat. | | Search | Every chat in every workspace, archived ones too: your messages, replies and commands. | | Compare agents | Pick "Claude + Codex": same task, two workspaces. Compare files, turns, time and cost. | | Hand off | Another agent carries on in the same branch (+ menu, ⌘K or /handoff). You read and edit the brief first. The new chat keeps this chat's mode. | | Linear | Start from a Linear issue: its branch name, the issue in the first message, "Fixes ENG-123" in the PR. | | Second opinion | The other agent reviews the branch read-only. Its findings become review comments. | | Checkpoints | Every message saves your files first. Rewind to here puts them back, including untracked files. Undo works. Last 50 per workspace. | | Changes | Everything changed versus the target branch. Comment on lines and send them as one review. | | Preview | Your running app inside the workspace (⌘4), localhost only. Annotate draws on it for the agent. | | Stacks | Build on another workspace. When the parent merges, one click moves it onto main. | | Terminal | A real login shell in the workspace folder. | | PRs | One button for the next step: open the PR, fix failing checks, resolve conflicts, then squash and merge. | | Scripts | Setup, run and archive scripts per repo. Share them with a committed `nekotrail.json`. Each workspace gets its own 10 ports. | | Repo settings | Instructions for every chat, review and PR prompts, environment variables, `.env` files copied into new workspaces. | | Environment | Every variable a workspace's agents, terminals and scripts get, by source. Read only. | | Night sky | 50 stars in 8 cat constellations. Merged PRs make them shine. |
The cat
The cat shows the real state of your work: - **Tail wagging:** an agent is working. - **Asleep:** nothing happened for five minutes. - **Worried:** CI is failing or a turn errored. - **Happy:** a PR merged. - **Brings you something:** an agent finished while you were away. ⌘⌥L jumps there.
Keyboard shortcuts
Conductor's shortcuts still work, so muscle memory carries over. The full list is in Settings (⌘,), under Shortcuts, and [Moving from Conductor](docs/MOVING-FROM-CONDUCTOR.md) maps Conductor's concepts to NekoTrail's. | Keys | Action | |---|---| | ⌘K | Command palette: jump to any workspace, run any action | | ⌘N / ⌘⇧N | New workspace / from a pull request or branch | | ⌃1 to ⌃9, ⌘⌥↑ / ⌘⌥↓ | Switch workspace | | ⌘⌥L | Next workspace with news | | ⌘1 / ⌘2 / ⌘3 / ⌘4 | Chat / Changes / Terminal / Preview (⌘L, ⌘⇧D and ⌘J also work) | | ⌘⇧P / ⌘⇧Y / ⌘⇧M | Create PR / commit and push / merge | | ⌘⇧R / ⌘⇧X / ⌘⇧L | Agent review / fix failing checks / pull latest | | ⌘R / ⌘⇧B | Run or stop the app / open localhost | | ⌘P | Open any file (and edit it) | | ⌘F | Search the chat | | ⌘⇧↵ | Approve the agent's plan |
Sharing scripts with nekotrail.json
```json { "scripts": { "setup": "bun install", "run": "bun dev", "archive": "docker compose down" } } ``` Committed values win over the ones saved in the app. Because anyone who can push to the repo or open a PR can change this file, NekoTrail shows you its commands and runs them only after you approve them. It asks again whenever they change. An archive command you never approved is skipped. The same goes for agent config a repo commits that would run commands as soon as a chat starts: hooks, `apiKeyHelper` and `env` in `.claude/settings.json`, servers in `.mcp.json`, and `mcp_servers`, `shell_environment_policy.set` and `.codex/rules` for Codex, hooks, MCP servers and risky `.env` variables for Gemini, and MCP servers, plugins, custom tools, formatters and `allow` permissions for OpenCode. Claude and Codex skip their own trust prompt when run headless, so NekoTrail lists what would run before the first message. Until you trust it, Claude, Codex and OpenCode run with that repo config off (`claude --setting-sources user`, Codex with the folder marked untrusted), and Gemini asks before it runs, while your own settings and MCP servers stay on.
Ports for each workspace
Five workspaces running the same app no longer fight over port 3000. Each active workspace holds its own block of 10 ports (4100 to 4109 for the first, 4110 to 4119 for the next, and so on). The block stays the same across restarts, skips ports something already listens on, and is given back when you archive the workspace. Terminals, setup and run scripts and agent turns get `NEKOTRAIL_PORT` (the first port), `NEKOTRAIL_PORT_1` to `NEKOTRAIL_PORT_9`, and `PORT`. A `PORT` you export in your shell or set in Repo settings is never replaced. To give ports names, add them to `nekotrail.json` in the order you want them: ```json { "ports": { "web": "PORT", "api": "API_PORT" } } ``` Here web gets the first port as `PORT` and api the second as `API_PORT`. Only variables whose name contains `PORT` can be set this way, so a repo can't use it to change anything else. The Preview tab opens the workspace's port until the Run script prints another address. The Ports button in the toolbar lists every workspace's ports and what listens on them, opens one in your browser or the Preview tab, and frees a port by stopping its server, after you confirm, only if that workspace's own terminal, script or agent started it. If a dev server ignores `PORT` and lands on its default (or finds another workspace already there), the Preview tab and the popover say so and show the fix for that server.
Develop and release
- `src-tauri/src`: Rust backend (worktrees, agent runner, PTY terminals, SQLite store, Conductor importer). Run `cargo test` in `src-tauri`. - `src`: React UI. Open `http://localhost:1420/preview.html?ws=w1` (or `?view=sky`) during `bun run tauri dev` to see the UI with sample data in any browser. - `PRODUCT.md`: who it's for and the product principles. `DESIGN.md`: the visual system. - [docs/ROADMAP.md](docs/ROADMAP.md): what's next, and what we're not building. - [CONTRIBUTING.md](CONTRIBUTING.md): setup, the checks a PR needs, and how releases work. Every batch of work ships as a numbered version. See [CHANGELOG.md](CHANGELOG.md) for what changed in each one, and [Releases](https://github.com/Harshil-Jani/nekotrail/releases) for the app downloads. Maintainers release with `scripts/release.sh ` after adding the version's section to the changelog.
## Status Early (0.26.1). Built and used daily on macOS. Linux x86_64 builds are new and experimental. Feedback and PRs welcome: see [CONTRIBUTING.md](CONTRIBUTING.md).
### Sponsor NekoTrail is free, open source and local-first, with no account and no paid tier.
If it saves you time, you can support it here, in Settings or in ⌘K.

Sponsor on GitHub  Buy me a coffee


Contributing  ·  Security  ·  Privacy  ·  Changelog  ·  Website  ·  License No telemetry. PRIVACY.md lists every network connection NekoTrail makes. It never reads, stores or forwards your agent logins; each CLI signs in by itself.
The open-source components it ships with, and their licenses, are listed in THIRD_PARTY_NOTICES.md; their full texts ship inside the app (Settings, About).
NekoTrail is an independent project and is not affiliated with Conductor, Anthropic, OpenAI, Google or OpenCode.


The NekoTrail cat, asleep