splay Install

Fan out your agents.

Splay is a workspace manager for running coding agents in parallel. One repository fans out into many git worktrees, each with its own persistent terminal sessions, driven from a native GTK app or the command line.

your repo · main
  • fix-loginclaude
  • session-tabsclaudebash
  • flaky-testcodex
  • docs-refreshopencode
  • bump-depsbashcargo test
The Splay app: a sidebar of repositories and workspaces on the left, and a Claude Code session running in a terminal tab on the right.

one workspace per feature, each its own git worktree

all your repos in one sidebar

sessions are just terminals: claude, codex, bash…

close the app, come back later. still running.

If it runs in a shell, it runs in Splay.

  • claude
  • codex
  • opencode
  • gemini
  • aider
  • bash
  • cargo watch
  • npm run dev
  • your own thing

Integrations

Plugs into what you already use.

GitHub

Splay clones your repositories from GitHub, shows each workspace’s pull request status in the sidebar, and opens pull requests for you.

Why Splay

Parallel agents, without the chaos.

Coding agents work best when you run many of them at once: one per feature, one per bug fix. In practice that turns into chaos fast. Each agent needs its own copy of the source so they don’t trample each other’s changes, and each one lives in its own terminal.

Before long you’re drowning in terminal tabs, losing track of which agent is working on what, and juggling git branches and directories by hand.

Splay gives you one place for all of it: your repositories, their workspaces, and the agent sessions running inside them. You can add another agent without adding more bookkeeping.

How it works

Repositories, workspaces, sessions.

Three ideas, each one fanning out into the next. That’s the whole model.

splay                         repository
├── ui-remember-session-tab   workspace
│   ├── claude                session
│   └── bash                  session
└── ui-missing-pr-link        workspace
    └── codex                 session
dwim                          repository
└── fix-flaky-test            workspace
    └── claude                session
Repository
The git repository that holds your project. Register as many as you like; Splay keeps a local clone of each.
Workspace
An isolated copy of the source, backed by a git worktree. Work happens here without touching any other workspace.
Session
A persistent terminal inside a workspace: a coding agent, a shell, or any long-running command.

A workspace per feature

  1. 1Create a workspace for the feature or bug fix.
  2. 2Let an agent work in a session.
  3. 3Open a pull request when it’s ready.
  4. 4Iterate on review in the same workspace.
  5. 5Merge, then remove the workspace.

Features

Minimal, opinionated, fast.

Works with any coding agent

Claude Code, Codex, OpenCode, or any other CLI. Sessions are just terminals, so there are no plugins to wait for.

A git worktree per workspace

Parallel agents never share a checkout or step on each other’s branches. Splay creates and cleans up the worktrees for you.

Fast workspace cloning

Branch off an existing workspace into a new worktree and branch with one command.

Many repositories, one place

Register any number of GitHub repositories and manage all their workspaces and sessions from one sidebar.

Terminals that survive

Sessions are backed by libghostty-vt and outlive disconnects. Detach and reattach from the app or the CLI without killing anything.

Native app and CLI

A GTK 4 desktop app for day-to-day work, and splayctl for everything you’d rather script.

Sandboxing

Bring your own sandbox.

Each workspace runs wherever you choose: on your machine, or in a VM of its own. Either way its sessions survive disconnects and reattach from the app or the CLI.

local

Your machine

A git worktree next to Splay’s clone of the repository. The default, and ready in a second.

exedev

An exe.dev VM

A VM per workspace. Splay creates it, clones the repository and runs sessions over SSH. Removing the workspace deletes the VM.

yours

Whatever you run

A sandbox only creates a workspace, destroys it, and says how to run a command in it. Want yours? Open an issue.

A setup script per repository

Turn a provider on for a repository and give it a setup script. It runs in each new remote workspace before the first shell starts, so the toolchain is there when the agent is.

$ splayctl repo enable splay exedev
Enabled exedev for splay

$ splayctl ws create splay fix-login --sandbox exedev
Created workspace fix-login for splay

Command line

Everything the app does, from a shell.

splayctl manages repositories, workspaces and sessions. Attach to a running agent from any terminal and press Ctrl ] to detach. The agent keeps going.

Read the manual →

$ splayctl repo add github.com/splay-sh/splay
Added repo splay

$ splayctl ws create splay fix-login
Created workspace fix-login for splay
Created session s6a0c7e2f1a3

$ splayctl ws clone splay:fix-login fix-login-alt
Cloned workspace splay:fix-login to fix-login-alt for splay
Created session s6a0c7e3b2c8

$ splayctl session create splay:fix-login -- claude
Created session s6a0c7e4d07f

$ splayctl session attach s6a0c7e4d07f
# Ctrl-] detaches. The agent keeps running.

Fan out on your machine.

One command to install. Then run splay.

Installs splay and splayctl in ~/.local/bin, plus a launcher entry. Prefer to build from source?