# Kabul

> Free, open-source app for macOS. Run Claude Code, Codex, Gemini, Qwen and local models in parallel, each on its own git worktree, and switch models without losing the conversation.

Page: https://kabul.dev/ · Português: https://kabul.dev/pt-BR/index.md · Docs: https://valteracetto.github.io/kabul/ · Source: https://github.com/valteracetto/kabul

## Every coding agent at its best, side by side.

Run Claude, GPT, Gemini, Qwen and local models in parallel, each in the harness made for it, each on its own git worktree. Switch models without losing the conversation. Bring a friend into the session. Keep going from your phone.

- Download for macOS: https://github.com/valteracetto/kabul/releases/latest
- Windows (beta): https://github.com/valteracetto/kabul/releases/latest
- GitHub: https://github.com/valteracetto/kabul
- Free and open source, MIT license. macOS 14 or later, Apple Silicon and Intel.
- Drives the real agent CLIs: Claude Code, Codex, Antigravity, Gemini CLI, Qwen Code, OpenCode, Goose.

## Three things Kabul does differently

### The right harness for every LLM

A model is only as good as the agent loop around it. Kabul runs each model in the harness built for it: Claude in **Claude Code**, GPT in **Codex**, Gemini in **Antigravity** or **Gemini CLI**, Qwen in **Qwen Code**, and anything else through **OpenCode** or **Goose**, over the Agent Client Protocol.

Local models are routed by family: a Qwen on LM Studio goes to Qwen Code, a gpt-oss goes to Codex. You pick the model; Kabul picks the harness, and tells you when it had to fall back.

### Switch LLM or account in the same conversation, on the same branch

Hit a rate limit, want a second opinion, or want a cheaper model for the boring part? Pick another model in the same chat, even one from a different provider or a different account.

Kabul keeps one canonical transcript and hands off to the new agent: the latest messages and who wrote them, the tools used, the diff of the branch and your `.context/` notes. Same worktree, same branch, checkpoints keep going.

### Work with a friend at the same time, and from your phone

Invite someone into a workspace as **editor** or **observer**. You both see the agent stream live, send messages into one shared queue, approve tools (the first decision wins) and type in the same terminal, with presence and authorship on every message.

The same server puts every session of your computer on your phone, and pings you when an agent needs a decision.

## The workbench around your agents

Coding agents are good enough to work on several things at once. The tools around them are not: each agent lives in its own CLI, one task per terminal, tied to the desk, and locked into one vendor's models.

In Kabul each task gets its own **workspace**: a git worktree on its own branch, with its own ports, terminal and chats, so ten agents can work on ten things without stepping on each other. You review the diff, leave comments for the agent, watch the checks and ship the pull request in the same window.

## Everything a task needs, in one window

- **Agents**: Every chat in every workspace, with its subagents, tokens and cost.
- **Usage**: Cost per day, limits per account, and a nudge before you hit one.
- **MCP**: One registry for every AI, and the tokens you save per turn.
- **Menu bar**: Limits and running agents at a glance.

- **Parallel workspaces on git worktrees**: One task, one worktree, one branch. Ten reserved ports per workspace, setup, run and archive scripts, `.env*` files copied in, statuses, pins and a board view.
- **Chat with approvals and plan mode**: Every tool call is a card: approve once, always or deny. Plan mode in every harness, native where the CLI has it and emulated where it doesn't.
- **Diff, pull requests and checks**: Unified or split diff with line comments you send to the agent. Commit, push, open the PR, fix failing checks with their logs, merge and archive.
- **Checkpoints**: A checkpoint before every message you send, in private git refs that never touch your branch. Restore the files to any point, or reset the chat to it.
- **A real terminal**: One per workspace, plus full-tab terminals that start Claude Code, Codex, Gemini or OpenCode for you. Sessions survive the app on macOS.
- **MCP, shared and per session**: Kabul reads the MCP servers you already configured in each CLI and offers them to every agent, without editing your configs. Turn them on or off per session.
- **Linear and GitHub**: Start workspaces from Linear issues and close them from the PR. GitHub through the `gh` CLI, with multiple accounts. Routines run a prompt on a schedule or a PR event.
- **Usage, costs and limits**: Tokens and cost per workspace, model, account and provider; 5-hour, weekly and monthly windows; alerts and a one-click switch to an account with room left.
- **Local models**: Finds LM Studio, Ollama, llama.cpp, vLLM and MLX servers, shows what fits in memory and routes each family to the harness that runs it best.

## Supported agents

Kabul drives the real CLIs, so you keep their behavior, their updates and your existing logins, settings and MCP servers.

| Agent | Talks over | Chat and tools | Approvals | Plan mode | Stop | Resume | Several accounts | Local models | Phone |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| Claude Code | stream-json | yes | yes | yes (native) | yes | yes | yes | yes (Anthropic API) | yes (native remote control) |
| Codex | app-server | yes | yes | yes (native) | yes | yes | yes | yes (Responses API) | partial |
| Antigravity | stream-json | yes | yes (project rules) | partial (restarts to exit) | partial | yes | yes | no | yes (native remote control) |
| Gemini CLI | ACP | yes | yes | yes (native) | yes | yes | yes ¹ | partial (Gemini-API gateways) | partial |
| Qwen Code | ACP | yes | yes | yes (native) | yes | yes | yes | yes (OpenAI API) | partial |
| OpenCode | ACP | yes | yes | partial (emulated) | yes | yes | not confirmed yet | yes (OpenAI / Anthropic) | partial |
| Goose | ACP | yes | yes | partial (emulated) | yes | yes | yes | yes (OpenAI API) | partial |
| Cursor | ACP | not confirmed yet | not confirmed yet | not confirmed yet | not confirmed yet | not confirmed yet | not confirmed yet | no | not confirmed yet |

Confirmed means the installed CLI was run through Kabul. ¹ Isolated profiles work; signing in with a Google account through Kabul is not tested end to end yet. Any agent, and any shell, can also be followed and typed into from the phone through the live terminal mirror.

Agents and harnesses: https://valteracetto.github.io/kabul/guide/agents

## Your sessions, in your pocket

An installable app for iOS and Android, served by your own computer over Tailscale. See what is running and what is waiting for you, approve tools, read the diff and the files, follow the live terminal, start a workspace or switch the model.

Push notifications tell you when an agent waits for a decision. iOS look on iPhone, Material 3 on Android, one codebase.

The phone app is a PWA you install from the browser. Store builds are on the roadmap.

## Up and running in a few minutes

1. Download the `.dmg` and drag Kabul to Applications. You need `git`, `tmux` and the GitHub CLI: `brew install git tmux gh`.
2. Install at least one agent, such as Claude Code or Codex. Kabul can also install a missing CLI for you.
3. Sign in to your agents and GitHub in **Settings › Accounts**. Kabul runs each CLI's own login and never reads your tokens.
4. Describe a task and press `↵`. Kabul creates the worktree and branch and sends the message to the agent.

Read the quick start: https://valteracetto.github.io/kabul/guide/quick-start

## Built for 100 workspaces and 30 agents at once

Only the visible workspace is mounted, events are batched per frame, long lists are windowed, and a concurrency limit queues agents with the focused workspace first. Measured budgets run in CI, so a regression fails the build.

| Metric | Before | Now |
| --- | ---: | ---: |
| Switching workspace (p95) | 1,098 ms | 48 ms |
| CPU with 30 agents emitting | 100% | 8% |
| Frames per second with 30 agents | 9.7 | 60 |
| Key press to frame (p95) | 178 ms | 19 ms |
| Opening a 2,000-message conversation | 1,530 ms | 68 ms |
| JS heap | 174 MB | 20 MB |

Interface, production build, 100 workspaces and 30 synthetic agents. Synthetic loads on one Mac; real agents emit far fewer events.

Server load test (100 workspaces, 30 fake agents, 3 clients): 6.5% CPU on average, about 24 MB of memory, 0.17 ms from event to client at p95.

Methodology and full reports: https://valteracetto.github.io/kabul/guide/performance

## Local-first and open source

- Your code stays on your machine. Agents talk to the providers you already pay for, with the logins you already have. Kabul never reads your tokens.
- No server of its own and no telemetry.
- The phone server listens only on localhost and your tailnet, never on the open internet. Devices pair with single-use QR codes and per-device keys stored in the system keychain.
- Guests are scoped to one workspace, previews run in a sandbox and secrets never go on a command line.
- MIT licensed. Read the code, build it yourself, fork it.

Threat model: https://valteracetto.github.io/kabul/guide/security · Report a vulnerability: https://github.com/valteracetto/kabul/blob/main/SECURITY.md

## Kabul Cloud (coming soon)

Workspaces that run in the cloud, so your agents keep working with your Mac closed. Invite your team and reach every session from anywhere, without setting up Tailscale.

- Agents keep going when your computer sleeps
- Invite people without Tailscale
- Built for teams

Join the waitlist: https://kabul.dev/#cloud

## Contribute

Kabul is built in the open. Issues and pull requests are welcome.

- **Pick a first issue**: Small, well-scoped tasks to learn the codebase. https://github.com/valteracetto/kabul/labels/good%20first%20issue
- **Read the contributing guide**: Layout, commands, commits, versions and how CI works. https://github.com/valteracetto/kabul/blob/main/CONTRIBUTING.md
- **Translate**: The app is in English and Portuguese. Every string lives in one JSON file per area, so a new language is a pull request. https://github.com/valteracetto/kabul/tree/main/apps/web/src/i18n/locales
- **Report a bug**: Tell us what happened, the version and how to reproduce it. https://github.com/valteracetto/kabul/issues/new
- **Report a vulnerability**: Please report security problems privately, never in a public issue. https://github.com/valteracetto/kabul/blob/main/SECURITY.md

### Support Kabul

Kabul is free and open source. Sponsorships pay for the time that goes into it.

- GitHub Sponsors: https://github.com/sponsors/valteracetto

## Questions

### Is Kabul free?

Yes, MIT licensed. You bring your own agent subscriptions or API keys (Claude, ChatGPT, Google, local models). Kabul doesn't resell or proxy model access.

### Does my code leave my computer?

Only what the agents send to their providers and what `gh` sends to GitHub, exactly as if you ran those CLIs yourself. Kabul has no server of its own and no telemetry.

### Does Kabul replace the agent CLIs?

No. It drives the real CLIs (Claude Code, Codex, Antigravity and others), so you keep their behavior, their updates and your existing logins, settings and MCP servers.

### Which platforms?

macOS 14 or later (Apple Silicon and Intel) is the main platform. Windows 10 1809+ and 11 are in beta: terminal sessions don't survive closing the app yet. Linux is not packaged. The phone app runs on iOS and Android.

### Do I need Tailscale?

Only for the phone, other machines and collaboration. The phone server listens on localhost and your tailnet, never on the open internet.

### Can a friend see my other repositories?

No. An invite is scoped to one workspace. But an editor can run commands as your user (terminal and approvals), so only invite as editor someone you would let use your computer.

### Is there a phone app in the stores?

Not yet. The phone app is a PWA you install from the browser; store builds are on the roadmap.

### Is the interface in English?

Yes. The desktop app, the phone app, the menus and the notifications are in English and Portuguese (Brazil). Kabul follows the system language, and you can pick one in Settings › General › Language.

More answers in the FAQ: https://valteracetto.github.io/kabul/guide/faq

## Credits

Created by Valter Acetto · Built with Claude: https://github.com/valteracetto/kabul/blob/main/ACKNOWLEDGMENTS.md

Version 0.9.0 · MIT · https://github.com/valteracetto/kabul/blob/main/LICENSE
