Sandbox
@antasphere/clave

MacOS app for multiple Claude Code sessions

Clave is a local macOS app for managing several coding-agent sessions side by side. It can launch Claude Code, Codex CLI, Antigravity CLI, Pi, and plain terminals, then arrange them in split or grid layouts and let you move between them quickly.

47 stars9 forksTypeScriptUpdated 9d ago
Who it's for

Builders who run Claude Code, Codex, or other coding CLIs and want a single place to manage many sessions.

What it delivers

You can keep parallel agent sessions organized, resume work faster, and use built-in git and remote-host tools without leaving the app.

What it does

Parallel agent sessions

Open unlimited Claude Code, Codex, Antigravity, and Pi sessions in separate PTYs, plus plain terminals.

Split and grid layouts

Arrange sessions in split or grid views and switch between them instantly.

Git panel and MagicSync

View diffs and commit history, then pull, stage, write a commit message, commit, and push in one flow.

Linked documents

Attach Markdown, HTML, or email drafts to a session and edit them in a focused two-pane view.

Local and remote files

Browse and edit files with syntax highlighting on your machine or over SSH/SFTP.

Remote sessions

Connect to a host over SSH and run the same agent UI and shortcuts there.

Companion plugin

Generate `.clave` workspace files and recover lost Claude Code sessions with the bundled plugin skills.

How to get it

  1. 1Install (any Open-Plugin-compatible host — auto-detects Claude Code, Cursor, …)
    npx plugins add codika-io/clave
  2. 2Claude Code native alternative
    /plugin marketplace add codika-io/clave
    /plugin install clave@clave
  3. 3Updating
    npx plugins add codika-io/clave   # re-run to pull latest
  4. 4A "Dangerous Mode" session (Cmd+D) launches Claude Code with…
    git clone https://github.com/codika-io/clave.git
    cd clave
    npm install
    npm run dev          # development with hot reload
    npm run build:mac    # build macOS .dmg (requires signing credentials)
  5. 5scripts/release.sh imports the signing certificate into a keychain of its own and hands…
    security: SecKeychainUnlock: The user name or passphrase you entered is not correct.
  6. 6electron-builder's importCerts() runs two commands per certificate
    security import <cert.p12> -k <keychain> -P <certificate password>       # -P: correct
    security set-key-partition-list ... -k <certificate password> <keychain> # -k: see below

README

Clave

License Downloads GitHub Stars

Clave is a macOS desktop app for managing multiple coding-agent sessions in parallel.

Provider-agnostic: run Claude Code, Antigravity CLI, Codex CLI, and Pi sessions side by side. Open as many as you need, arrange them in split or grid layouts, and switch between them instantly.

Features · Download · Build from Source · Contributing

Clave demo


Download

Download the latest version (macOS Universal — Apple Silicon & Intel) · All releases

Download the .dmg, drag to Applications, done.

Auto-updates are built in — once installed, new versions download silently in the background.

Uninstall

Quit Clave and drag it from /Applications to the Trash. To also remove local settings and cached session data, delete ~/Library/Application Support/clave.

Agent plugin

Clave ships a companion agent plugin, in plugin/ in this repo, that lets any Claude Code, Cursor, or other Open-Plugin-compatible coding agent generate .clave workspace files for you. It lives here rather than in a repo of its own so the skill and the .clave format it describes always ship together.

Install (any Open-Plugin-compatible host — auto-detects Claude Code, Cursor, …):

npx plugins add codika-io/clave

Claude Code native alternative:

/plugin marketplace add codika-io/clave
/plugin install clave@clave

Both paths install the same two skills: /clave:create-workspace and /clave:recover-sessions.

Usage: ask your agent something like "create a clave workspace for this repo with 3 sessions". It writes a valid .clave file to your chosen path; open it in Clave. Or, after a crash, "recover the sessions I lost" — it rebuilds your groups from the transcripts Claude Code already stores on disk.

Updating:

npx plugins add codika-io/clave   # re-run to pull latest

(Or /plugin update clave@clave in Claude Code native.)

Uninstalling: /plugin uninstall clave@clave in Claude Code, or the equivalent in your host.

Previously distributed as codika-io/clave-plugin and installed as clave@clave-plugin. That repo is archived; if you installed from it, uninstall and re-run the command above.

Features

  • Run a fleet of agents — Open unlimited Claude Code, Antigravity, Codex, and Pi sessions, each in its own PTY, plus plain terminals. Named launch profiles can wrap a CLI with tools such as TokenOps while Clave keeps session and resume flags under its control.
  • Git, built in — A full git panel with diff viewer and commit history, plus MagicSync: pull, stage, write an AI commit message, commit, and push in one click.
  • Edit beside your agent — Link Markdown, HTML, or a structured email to its originating session. Edit in a focused two-pane view, with autosave, managed attachments and signatures, and agent-driven Gmail sending. Workflow and dev testing.
  • Local & remote files — Browse and edit files with syntax-highlighted previews, on your machine or on remote hosts over SSH/SFTP.
  • Remote sessions — Connect to any host over SSH and run your agents there with the same UI and shortcuts.
  • Fully local — A desktop app with no cloud backend and no account; your code, sessions, and keys stay on your machine.

Requirements

Privacy & network

Clave is local-first. It has no account or sign-in. Your sessions, history, and settings stay on your machine. The only thing it sends home is one anonymous ping a day, so we can count how many people actually use Clave:

POST https://ping.clave.work/api/ping
{ "id": "<random uuid>", "appVersion": "1.52.0", "platform": "darwin-arm64" }

That is the entire payload — three fields, nothing else, ever. The id is a random UUID generated on your machine; it carries no email, no username, and no hardware fingerprint, and the server stores only a keyed hash of it, never the raw ID. You can turn the ping off in Settings → General → Privacy (the first launch shows a notice with a one-click "Turn off"). The whole client is ~100 lines you can read at src/main/telemetry.ts — it fails silently, never retries within a check, and can never affect app behavior.

The only other network requests Clave makes are:

  • Claude Code reaches the Anthropic API through your own local Claude Code install — Clave never proxies or sees that traffic.
  • Auto-updateselectron-updater checks GitHub Releases for new versions and installs the signed, notarized build on quit. Auto-download is off by default.
  • Usage ping — the once-a-day anonymous POST to ping.clave.work described above (optional, toggle in Settings).
  • Git operations — standard fetch/pull/push to whatever remotes your own repositories use.
  • SSH / SFTP — only to remote hosts you explicitly add.
  • OpenClaw agent chat — an optional WebSocket connection, established only when you connect an SSH location that has OpenClaw running.

A "Dangerous Mode" session (Cmd+D) launches Claude Code with --dangerously-skip-permissions. It is never the default and is clearly labelled in the UI.

Build from source

git clone https://github.com/codika-io/clave.git
cd clave
npm install
npm run dev          # development with hot reload
npm run build:mac    # build macOS .dmg (requires signing credentials)

macOS signing: why we build the keychain ourselves

scripts/release.sh imports the signing certificate into a keychain of its own and hands it to electron-builder through CSC_KEYCHAIN, instead of letting electron-builder create one from CSC_LINK. If you are wiring up your own pipeline and wondering why, or you hit this error:

security: SecKeychainUnlock: The user name or passphrase you entered is not correct.

That message points at the wrong thing. It is not your CSC_KEY_PASSWORD secret, and rotating credentials will not help.

electron-builder's importCerts() runs two commands per certificate:

security import <cert.p12> -k <keychain> -P <certificate password>       # -P: correct
security set-key-partition-list ... -k <certificate password> <keychain> # -k: see below

On the second command, -k is the password that unlocks the keychain — but the certificate's password is passed. Since electron-builder generates a random keychain password, the two never match. We could not reproduce a green run of that command locally with mismatched passwords, yet it clearly worked in our CI for a long time before it stopped, and we have not established what changed. Our last successful and first failing builds differ only in the GitHub runner image (macos-26-arm64 20260728.027320260831.0337) — same code, same electron-builder 26.7.0, same credentials — so something in the environment is the trigger, but we cannot say what, and the original build logs have since expired.

What we did verify, and what the workaround rests on:

  • security set-key-partition-list -k validates its argument against the keychain, and rejects the certificate password unless it happens to be the keychain's password.
  • The call is awaited unguarded, so a failure fails the build.
  • The same line is present in electron-builder 26.7.0 through 26.16.0 (latest at the time of writing), so upgrading is not a fix.

macPackager uses CSC_KEYCHAIN as given when CSC_LINK is unset, which is the seam release.sh uses: it creates the keychain, imports the certificate, unlocks it, sets the partition list with the keychain's own password, and runs the build with CSC_LINK/CSC_KEY_PASSWORD unset so the upstream path is never entered. Notarization is unaffected — it reads APPLE_ID, APPLE_APP_SPECIFIC_PASSWORD and APPLE_TEAM_ID only. An EXIT trap restores the keychain search list and deletes the keychain.

Tech stack

Electron · React 19 · TypeScript · xterm.js · node-pty · Zustand · Tailwind CSS v4 · Framer Motion · shiki · simple-git · ssh2

Contributing

See CONTRIBUTING.md for guidelines on reporting bugs, suggesting features, and submitting pull requests.

License

MIT

Files in the repo

Repository payload33 top-level entries
  • .claude-plugin
  • .github
  • assets
  • build
  • docs
  • native
  • packages
  • plugin
  • resources
  • scripts
  • src
  • tests
  • .editorconfig
  • .gitignore
  • .prettierignore
  • .prettierrc.yaml
  • BRAND.md
  • CHANGELOG.md
  • CLAUDE.md
  • components.json
  • CONTRIBUTING.md
  • electron-builder.yml
  • electron.vite.config.ts
  • eslint.config.mjs
  • LICENSE
  • package-lock.json
  • package.json
  • README.md
  • ROADMAP.md
  • tsconfig.json
  • tsconfig.node.json
  • tsconfig.web.json
  • vitest.config.ts

Discussion (0)

Ask about usage, or say what you built with it

Sign in to join the discussion.

No comments yet. Be the first to say what this is good for.

More tools

JuliusBrussee/
caveman

🪨 why use many token when few token do trick — Claude Code skill that cuts 65% of tokens by talking like caveman

105k
1 add
MemPalace/
mempalace

The best-benchmarked open-source AI memory system. And it's free.

59k
stablyai/
orca

Orca is the ADE for working with a fleet of parallel agents. Run any coding agent with your own subscription. Available on desktop, mobile and remote runtime.

66k

A cross-platform desktop All-in-One assistant for Claude Code, Codex, OpenCode, OpenClaw, Grok Build & Hermes Agent. Only official website: ccswitch.io

132k

Never stop coding. Free MIT AI gateway: one endpoint, 352 providers (150+ free), 1200+ models Kimi, Claude, GPT, Gemini, GLM, DeepSeek, MiniMax. Works with Claude Code, Codex, Cursor, OpenCode, Cline & Copilot. Quota-aware auto-fallback, RTK+Caveman compression saves 15-95% tokens, MCP/A2A, Desktop/PWA. Built by 550+ contributors

64k
headroomlabs-ai/
headroom

Compress tool outputs, logs, files, and RAG chunks before they reach the LLM. 20% fewer tokens for coding agents, 60-95% fewer tokens for JSON, same answers. Library, proxy, MCP server.

71k