v0.5.0 · macOS

Run a fleet of coding agents.
Never lose track of one.

Clowder is a native macOS terminal that orchestrates Claude Code, Codex and plain shell agents — each isolated in its own git worktree — and tells you the moment one needs your attention.

Install with Homebrew
brew install --cask richardcase/clowder/clowder
Or download the .dmg

macOS 14+ · Apple silicon · Signed & notarized by Apple · ~20 MB

The Clowder app: a sidebar listing seven agents across the demo-api project, beside a terminal showing an agent's isolated git worktree path, its clowder/rate-limit-health branch, and a coloured diff of the change it made.
Seven agents in one window. The terminal shows one agent's isolated worktree — note the branch per agent in the git log.

Why Clowder

Built for the way you actually run agents

Running one coding agent is easy. Running six — without them colliding, and without losing track of which one is blocked on you — is the hard part. That is the whole job Clowder does.

  • One window, a whole fleet

    Spawn Claude Code, OpenAI Codex or a plain shell against any git or jj project and drive them all from a single native app. ⌘N picks the project, the task and the adapter.

  • Agents can't step on each other

    Every agent gets its own git worktree or jj workspace, auto-detected per project and created outside your repo — so your working tree stays exactly as you left it. Finish with Land to commit and keep the branch, or Discard to throw it away. Both from the UI, both with confirmation.

  • Know which agent needs you

    Native turn-complete hooks for Claude and Codex, plus a VT-signal fallback (BEL, OSC 9, OSC 777) for everything else, drive sidebar badges and a menu-bar count. Stop cycling through terminals to find out who is waiting on you.

  • Real terminals, natively rendered

    An embedded libghostty surface per agent — genuine keys, mouse, IME and resize, not a web view. Split panes with ⌘D, a rebindable command palette on ⌘K, and hotkeys to jump between agents.

  • Close the window, keep the work

    A headless daemon owns the agent PTYs, so they keep running while the window is shut. The app launches and supervises its own daemon and reconnects on its own — with bounded backoff — if the connection drops.

  • Local and remote, one app

    Switch backends from the sidebar chip, the menu bar or ⌘K. Moving away from Local detaches rather than kills, so agents on both sides keep running. Add, edit and TLS-pair remote hosts in Settings ▸ Hosts (⌘,).

There's a headless CLI too

The bundled clowder command talks to the running daemon, so you can drive the same fleet from a script or over SSH.

clowder spawn <project> <task> [adapter]
clowder attach <pane-id>
clowder remote add|list|show|set|rm
clowder connect <name-or-host:port>

A closer look

Everything stays one keystroke away

Split a companion shell

⌘D splits the focused pane and drops you into a shell already rooted in that agent's worktree — same branch, same files. Run the tests yourself while the agent keeps working beside you.

Clowder with a split pane: the agent's terminal showing a diff on the left, and a companion shell on the right, both in the same worktree.

Drive it all from ⌘K

The command palette covers the whole surface: create a worktree, register a project, restart an agent, split a pane — and Next Attention, which jumps straight to whichever agent is waiting on you. Every binding is remappable.

Clowder's command palette open over the app, listing New Worktree, Add Project, Restart Agent, Next Attention, Split Right, Split Down and Close Pane.

How it works

A tmux-style split, with a native front end

A headless daemon owns the agent PTYs, the per-agent worktrees, the attention state and the split-pane tree. The macOS app is a client: it embeds a libghostty surface per agent and talks to the daemon over a JSON control socket.

That separation is what lets you quit the window and keep every agent running — and what makes a remote daemon behave exactly like the local one.

Clowder.app SwiftUI + libghostty renders
clowder-daemon Rust · headless orchestrates
agent PTYworktree a41f agent PTYworktree 8c02 agent PTYworktree d5e1

Install

Get Clowder on macOS

Two ways in. Homebrew is the one to use — it keeps you on the latest signed build with a single brew upgrade.

1

Install with Homebrew

Recommended
brew install --cask richardcase/clowder/clowder

Installs Clowder.app into /Applications and puts the bundled clowder CLI on your PATH. The tap and the cask are public — you do not need any credentials.

Requires macOS 14 Sonoma or later
Architecture Apple silicon only
Gatekeeper Signed with a Developer ID and notarized by Apple — it just opens. No xattr workaround needed.

First run

  1. Open Clowder. It starts and supervises its own daemon — nothing else to set up.
  2. Press ⌘N and pick a project, a task, and an adapter.
  3. Split a companion shell with ⌘D; ⌘L Lands the agent when it's done.

Keeping it current

Upgrade
brew upgrade --cask clowder
Uninstall
brew uninstall --cask clowder

Questions

Before you install

Is Clowder open source?

No. Clowder is proprietary and the source repository is private. The app itself is free to install, and the Homebrew tap that serves it is public.

Does it work on Linux or Windows?

Not yet. The daemon is cross-platform Rust, but the client is a native SwiftUI app, so today Clowder is macOS only.

Which agents can it run?

Claude Code, OpenAI Codex, and a plain shell. You pick the adapter when you spawn an agent. Clowder drives whichever CLI you already have installed and authenticated.

Will it touch my working tree?

No. Each agent works in its own git worktree or jj workspace, created outside your repository under ~/.local/share/clowder/worktrees. Your checkout is never modified. You can point that somewhere else with [worktrees] base in ~/.config/clowder/config.toml.

What happens to my agents when I close the window?

They keep running. The daemon owns the PTYs and outlives the window, and the app reconnects when you come back. Agents do not yet survive a restart of the daemon itself — that is a known gap, along with scrollback reflow on resize.

How do I update?

Run brew upgrade --cask clowder. Each final release auto-bumps the cask, so upgrades arrive without you tracking versions.

Stop babysitting terminals.

One command, and your whole fleet lives in one window.

brew install --cask richardcase/clowder/clowder