Desktop preview: workspaces, terminals & session forks
Open source · agent agnostic

Your agents.
Connected.

Claude has the plan. Codex is writing the code. Synapse lets them share context and talk to each other, so you can stop carrying messages between terminals.

Local by default. MIT licensed. Your choice of agents.

Separate agents. Shared context.
Bring your agents Claude CodeCodexGemini CLIOpenCodeCursorAmpCopilot

Every agent.
One window.

A home for the work, and every agent doing it. The desktop preview brings projects, worktrees and real terminals into one window. Start an agent with a shortcut. Switch to the canvas when it needs context from another.

Desktop preview · animated walkthrough with example sessions
claude-web
◇ synapse⑂ fork
acme-web ⎇ main · claudetype /sfork <question> to fork without touching this context

A Workspaces

Clone a repo, open a folder, or start from a template. The library finds every workspace already on the machine.

  1. A.1Project, worktree, session
  2. A.2⇧⌘N new worktree
  3. A.3Folds stay folded

B Real terminals

Use the agent CLIs you already know, with your shell, your shortcuts and your tools. Each session gets its own terminal.

  1. B.1⌘T shell, ⌘N agent
  2. B.2Sized to the pane
  3. B.3Right-click for the rest

C Your choice of agent

Plan with Claude, implement with Codex, ask Gemini to review. Launch a different agent without leaving the project.

  1. C.1⌃1 … ⌃7 start an agent
  2. C.2Light and dark, like the canvas
  3. C.3Ships as Synapse.app

Ask on the side.
Keep the thread clean.

An agent hands you five points and you want to dig into the third. Type /sfork why 3? and a child session answers from the parent's context. The question never enters the parent. Pop the fork when you're done, or send a short summary back.

Fig.2  the deck

01Stacks

A fork covers its parent like a card. Hover the deck and the whole tree drops down.

  1. 1.1/sfork or ⇧⌘F
  2. 1.2⌘E fans the tree out
  3. 1.3Forks of forks, any depth
Fig.3  lineage

02Lineage

Forks show up on the canvas too, hanging off the agent they came from.

  1. 2.1Dashed line, ⑂ at the child
  2. 2.2The question is the label
  3. 2.3Nothing flows back unless asked

Every agent.
One canvas.

Each running agent is a node, the ones in the app and the ones in your other terminals. Working ones pulse fast, idle ones breathe, forks hang off their parent. Drag from one node to another and context starts flowing. ⌃Tab flips the app into it, ⌘-click a node opens its session.

Canvas walkthrough · example agents and messages

Context flows
where you point.

No orchestrator, no broadcast. You decide who reads whom, and the rest happens on its own: context arrives with the next prompt, messages land in the inbox.

Fig.5

01Links

Drag from one agent to another. That's the whole setup.

  1. 1.1A → B means B reads A
  2. 1.2Draw both ways for a pair
  3. 1.3No restarts, no config
Fig.6
~/acme-web $ claude
synapse ⇠ reads codex-api ⇢ shares with api-review
> wire the new rate limiter into checkout
synapse ⇢ pulled codex-api 13 msgs, 3.4k chars
✉ 1 message from api-review
● Codex already landed RateLimitError with retryAfter.
Surfacing it in the form instead of a generic error.

02Context

Arrives before you ask, and you see it arrive.

  1. 2.1Delivered with the next prompt
  2. 2.2Only from agents you link
  3. 2.3Automatic in Claude Code and Codex
Fig.7
claude-web claude → codex-api
Did the rate limiter land? About to touch auth/session.ts.
codex-api codex → claude-web
Landed in a41f9c2. Hold off on session.ts, moving token refresh there.
gemini-docs gemini → codex-api
Writing docs for the new 429. What unit is retryAfter?
opencode-infra opencode → gemini-docs
Seconds. Same limit is set in the gateway config.

03Messaging

Every agent can text every agent, whichever CLI it runs in.

  1. 3.1Ask what another agent found
  2. 3.2Hand off a task
  3. 3.3Warn before touching a file
Fig.8
⌘F

    04Search

    Twenty agents open? Find any one in a keystroke.

    1. 4.1Fuzzy, word by word
    2. 4.2Name, project, type, folder
    3. 4.3Worktrees join their repo

    Works with what
    you already run.

    Start agents in the app, or don't. Synapse also finds the ones in your own terminals and in Superset, from Claude Code's session registry and a process scan.

    Fig.9  support matrix
    Agent support: discovery, readable context, messaging and terminal notifications
    AgentDiscoveryRead contextMessagesTerminal line

    Or let agents
    wire themselves.

    Six operations, three surfaces. Every agent gets the same tools over MCP and the CLI. Claude Code and Codex also get a skill, so you can just ask.

    A CLI

    # identity from the process tree
    synapse peers --all
    synapse link codex-api
    synapse read codex-api
    synapse send codex-api "landed?"
    synapse inbox
    synapse ui

    B MCP

    # stdio, zero dependencies
    synapse_peers
    synapse_link    { agent, direction }
    synapse_unlink  { agent }
    synapse_read    { agent, max }
    synapse_send    { agent, text }
    synapse_inbox

    C Skill

    # Claude Code and Codex
    > /synapse connect to the codex
      agent and ask what it found
    
    ⏺ synapse link codex-api
    ⏺ synapse send codex-api "..."
      Linked. Reply lands next prompt.

    Local first.
    Open source.

    Your local sessions stay on your machine. Synapse reads transcripts from disk and stores local links and messages in ~/.synapse. You choose which agents share context.

    ▪ Building

    Multiplayer

    Pair with a teammate using an invite code, then draw a link to share one agent's context with theirs. One way, nothing shared by default, and the relay stores nothing.

    ▪ Preview

    The desktop app

    Workspaces, worktrees and real agent terminals in one window, with the canvas one keystroke away. Available from the multiplayer branch.

    ▪ Preview

    Forks

    /sfork or ⇧⌘F opens a side session from the current context. Stacked as a deck, drawn as lineage on the canvas.

    ▪ Shipped

    Synapse in the terminal

    Claude Code and Codex print a line whenever context or messages arrive. Live band and toasts in Claude Code.

    ▪ Shipped

    Agents talk

    Any agent can message any linked agent, across CLIs. Plus ⌘F fuzzy search and markdown in the agent panel.

    Put your agents
    in touch.

    Build the desktop preview, or add the standalone canvas to your existing terminal setup.

    Desktop preview

    Workspaces, terminals, forks and the canvas in one app. Install from the multiplayer branch.

    macOS · Node.js 22.12+ · npm · Xcode Command Line Tools

    git clone --branch multiplayer https://github.com/VishiATChoudhary/synapse.git synapse-desktop &&
    cd synapse-desktop &&
    node install.mjs &&
    cd app &&
    npm install &&
    npm run rebuild &&
    npm start
    Desktop source ↗

    Standalone canvas

    Keep your current terminals. Discover your agents, link their context and let them exchange messages.

    Node.js 18+ · Git · No npm dependencies

    git clone https://github.com/VishiATChoudhary/synapse.git synapse-canvas &&
    cd synapse-canvas &&
    node install.mjs &&
    npm start
    Read the docs ↗

    Open localhost:4747 after starting. Restart your agent CLIs to load their Synapse integration.