Skip to content

The IDE for coding agents

Your editor, your terminals and your agents — in one window, talking to each other.

Two lenses

In Canvas or TerminalMap, your agents keep talking to each other. You change the view, and the work continues: no terminal restarts.

What makes it different

Viewing the Canvas lens

01

Agents that talk to each other

Wire two terminals together and the context flows with it.
Drag a wire from one terminal to another. By default it is a permission: the two agents can reach each other with catenary ask, and nothing travels until one of them asks. Make it automatic and every finished turn flows across on its own.
A Maestro squad on the Catenary canvas: the maestro and four agents wired to each other, working on the same branch
Screenshot, Canvas lens

02

One task, one branch, one agent

New Task spins up an isolated branch, worktree and agent. Your checkout stays untouched.
The branch exists on disk before anything appears. Then the canvas glides to a new island and the agent starts on your prompt. When it finishes, review every file it changed, open a pull request or discard the work.
claudefeat/oauth
● Wiring the refresh flow
testsfeat/oauth
● 142 passing
codexfix/n+1
● 84 queries → 3

The same switch as Settings → Worktrees

03

Maestro mode

One agent recruits a team and splits the work. You approve who joins.
Maestro mode stays off until you switch it on, one terminal at a time. Recruiting or dismissing an agent opens a card you can edit, approve or deny. Recruits land on the canvas wired to the maestro, which follows up with catenary ask.
Claude Code 1
❯ catenary maestro recruit 2 claude-code "Write the tests for fix/n+1, then review feat/oauth"
▋
Claude Code 1 wants to recruit terminals
Objective2 slots left
Write the tests for fix/n+1, then review feat/oauth

Each approved terminal begins working as soon as initialized.

04

Close today, pick up tomorrow

Reopen it and every panel, wire and terminal is where you left it.
Your canvas, panels, wires, folders and each terminal's history come back as they were. Every agent reopens in its own terminal and, when its CLI reported the session, picks up the same conversation.

05

A shared LSP for your agents

Your agent queries your editor's language server, unsaved edits included.

Definitions, references, types on hover, diagnostics and symbols come from the language server your editor is already running, so the agent reads the code as it is on screen, unsaved edits included. TypeScript, JavaScript and Python servers ship with the app.

06

Native tools for your agents

Claude Code, Codex and more get Catenary's tools with zero setup.

Catenary registers its MCP server in Claude Code, Codex, Antigravity, Cursor and OpenCode by itself. From there your agent can split a terminal, open a file in your editor, start a task on its own branch or screenshot the built-in browser.

  • Protected buffers

    If an agent rewrites a file you haven't saved, your edits stay and you choose: Reload, Keep mine or Keep both.

  • Built-in browser

    A browser panel beside your code, with tabs and bookmarks.

  • Rich previews

    Markdown with Mermaid and KaTeX, Jupyter notebooks, PDF and docx.

  • Review Diffs and pull requests

    Go through every file a task's branch changed, then open the pull request from there.

  • Attention bell

    A bell in the title bar gathers every agent waiting on you, in any project, and Jump to Unread takes you there.

  • Shared boards

    Markdown notes that your wired agents read and add to with catenary board.

  • Extensions Hub

    Extensions and MCP servers in one place, without exposing args, env or secrets.

  • Worktrees in one click

    Leave the prompt empty and Launch Task becomes Create Worktree: a clean branch with a plain terminal.

  • A terminal that won't freeze

    Heavy output is paced so the app keeps responding, and the terminal recovers on its own if the GPU drops out.

See everything in the changelog

Fonts, options and shortcuts from VS Code, Cursor or Ghostty. Review first, undo in one click.

Command PaletteImport Preferences from VS Code / Cursor / Ghostty

Privacy

Catenary never sends your code anywhere. Not a single byte.

Catenary is local-first, and what follows is the entire list of what it sends, not a summary of it.

Networkcatenary — outbound traffic
Everything it sends2 hosts
  • GETgithub.com/GioNicolas/catenary-releases → latest.ymlUpdate check: on launch, every 15 min and from the menuno body
    GET /GioNicolas/catenary-releases/releases/latest/download/latest.yml
    x-user-staging-id: 7c1e…b42f
     
    // A random UUID made on the first check (userData/.updaterId). Not from
    // your hardware or your data, and it goes only to GitHub, never to us.

    A public file on GitHub Releases, the same one you can open in your browser right now. The header comes from the update library; delete the file and it makes a new ID.

  • POSTthecatenary.app/api/license/activate · /api/license/deactivate · /api/trial/claimWhen you activate/remove a key or start the trial; pending activation retries on launch~400 B out
    POST /api/trial/claim
    { "machineId": "9f2b7c…4e1a" }
     
    // sha-256, 64 hex chars, irreversible. No name, no hostname,
    // no serial, no email, no account — because there is no account.

    You start activation, removal and trial redemption. An unconfirmed Pro seat retries automatically on launch while temporary Pro is active, within a 30-day grace period. Confirmed Pro is verified locally, with no periodic check-in or heartbeat. Free without a key or trial redemption makes none of these requests.

Everything it never sends0 bytes
  • Source code and file contents0 B
  • Terminal output and commands you run0 B
  • Project names, branches and file paths0 B
  • Prompts and agent conversations0 B
  • Your API keys0 B
  • Analytics, trackers, crash reportsnone

Prompts are not blocked from working — they are blocked from us. The agent CLI you chose talks straight to Anthropic, OpenAI or Google with the key you brought, or to nobody at all when you point it at Ollama or LM Studio on localhost.

Bytes of your code Catenary has sent: 0. There is no endpoint to send them to.

Open a row: what you get is the whole request, not an excerpt of it.

Every line above is the same promise as our Privacy Policy, which ships inside the app in these same words — because a claim that only lives on a landing page is a claim nobody can hold you to.

Pricing

Buy it once. It stays yours.

No subscription, no account, no monthly bill.

Free

US$ 0

  • Canvas, terminals, editor, browser, gitUnlimited
  • Connection wiresUnlimited
  • Projects open at the same time1
  • Parallel tasks2
  • Maestro helpers per agent2
  • Built-in squads4 of 5 (up to 3 agents)
  • Your own squads—
  • Activation—
  • No account, no card, no telemetry
  • Canvas, terminals, editor and git with no time limit
  • Your own API keys, never routed through us

Pro

One-time payment

US$ 19

Paid once, for the whole 1.x line.

  • Canvas, terminals, editor, browser, gitUnlimited
  • Connection wiresUnlimited
  • Projects open at the same timeUnlimited
  • Parallel tasksUnlimited
  • Maestro helpers per agent10, adjustable 2–50 or unlimited
  • Built-in squadsAll 5
  • Your own squadsUnlimited
  • ActivationUp to 2 personal computers
  • Up to 2 computers at a time — move between machines whenever you like
  • 1.x line updates included
  • Once the Pro seat is confirmed, the key is checked offline

(Or try Pro for 7 days, no card needed)

Get Pro

The 7-day Pro trial starts inside the app — no credit card, no account.

These limits mirror the plan limits document, which the EULA §4.1 incorporates by reference.