~/work ❯ ws

Run every agent.
Know which one needs you

wrkstrms is a terminal environment for running many AI coding agents at once. It holds them in real terminals that keep running when you close the window, shows you which one is waiting on you, and gives every agent the same memory, so work carries from one session, and one agent, to the next.

$ ws is in private previewsoon
read the docs →

macOS · Linux · built on Ghostty’s terminal core

Four agents in two workspaces. One is blocked on a permission, two are working, and one finished in a tab you haven’t looked at yet.

shared memory

One memory.
Every agent.

Facts about the repo, decisions and why they were made, your preferences, where the work stands. ws keeps them in one place that every agent and model shares, so switching from Claude to Codex, or starting fresh tomorrow, doesn’t mean starting over.

  • at start

    Every agent starts briefed

    When an agent starts, ws hands it a context pack: pinned items, your preferences, decisions, current tasks, the latest handoffs and recent sessions in this repo. Claude Code gets it again after /clear and compaction.

  • ws mcp

    Agents read and write it themselves

    Over MCP, agents search memory and save what the next one should know. Anything shared waits as proposed until you approve it, so nothing reaches every agent without you seeing it.

  • ⌃␣ A

    Hand work to another agent

    Move a pane from Claude to Codex. The new agent starts with a “continuing from” section: the last prompts, commits, the uncommitted change and the handoff. Go back, and the first agent resumes its own session with what changed since.

  • local

    Yours, on your machine

    One SQLite file, readable only by you, never sent anywhere. Tokens, keys and secrets are redacted before anything is stored, and every item records who wrote it.

what an agent sees when it starts
# Context from ws
Shared memory for storefront · checkout-flow

## Preferences
- Small PRs, one feature each [m:4f2a]

## Decisions
- Checkout form state lives in useCheckoutForm,
  not the page component [m:91c0]

## Facts
- Run bin/setup_db before the specs [m:0b7e]

## Latest handoffs
- codex · limiter done, metrics next;
  open: what burst size? [m:c3d1]

## Recent sessions here
- today · claude · keep the checkout form’s
  values when a submit fails (2 commits)
claude⌃␣ Acodexcontinues with the prompts, commits, diff and handoff

what else it does

Built for a dozen agents at once.

  • ⌃␣ a

    Jump to the agent that needs you

    Claude Code and Codex report through hooks: blocked, working, done or idle. The color runs through the pane frame, its tab and its sidebar row, and one key takes you to the next agent waiting on you.

  • ⌃␣ d

    Close the terminal. Keep the agents.

    Panes live in a background server. Detach, or just close the window, and every agent keeps running; ws puts you back on the same screen. After a crash or reboot it offers to restore the session.

  • ws new

    A workstream per task

    A git worktree and branch, the panes and layout from your template, and its setup, in one command. Start one from a pull request with --pr.

  • ws review

    Reviews with an agent on hand

    Each PR gets its own worktree, a file with its description, comments and reviews, and your review agent starting at once. ⌃␣ g lists what’s waiting for you across your GitHub logins.

  • ws project

    Projects that outlast a session

    A brief, a plan, decisions and a handoff log that carry work across agents and days. ws project continue picks up where the last session stopped.

  • nvim

    Real terminals, not a dashboard

    Every pane is a real terminal, rendered by Ghostty’s libghostty-vt: true color, the kitty keyboard protocol, mouse. Run Neovim, lazygit and shells beside your agents.

works with

Bring your agents.

Claude Code and Codex report their full status through hooks. Other agent CLIs are recognized by their process name, even under node, bun or Python.

  • Claude Code(status through hooks)
  • Codex(status through hooks)
  • OpenCode(recognized by process name)
  • aider(recognized by process name)
  • Gemini CLI(recognized by process name)
  • goose(recognized by process name)
  • Amp(recognized by process name)
  • Cursor agent(recognized by process name)
  • Qwen Code(recognized by process name)
  • Crush(recognized by process name)
  • Ollama(recognized by process name)

five minutes

Start a session.

Connect your agents once, start ws, and open a workstream. The getting started guide walks through the rest.

# once per agent CLI: status hooks and memory
$ ws integrate claude --mcp
$ ws integrate codex --mcp

# start, or reattach to what's running
$ ws

# a worktree, a branch and your panes
$ ws new web checkout-v2