Native macOS · Claude + Codex

Run a room full of coding agents. See who needs you at a glance.

Clustray tiles your Claude Code and Codex sessions into one window and puts an attention layer on top — so a pane waiting on your approval lights up instead of getting lost in a stack of terminals.

macOS 13+·Apple silicon & Intel·Windows coming soon·bring your own Claude Code / Codex CLI
Playground · 5 sessions
Clustray
▦ 3×2
checkout-api auth-service web-storefront dev-server payments-worker
Workspaces
Playground
5 panes
checkout-apisession 1 142.6k · $2.84
Adding idempotency keys so payment retries never double-charge.
- def charge(order):
+ def charge(order, idempotency_key):
Message Claude…
auth-servicesession 1 61.9k · $0.92
Thinking · 3s
Rotating refresh tokens on every use — closes the replay window.
✎ Edit tokens.ts
Message Claude…
web-storefrontsession 1 88.1k · $1.10
Wiring the cart drawer to /v2/cart.
⌘ Bash pnpm dev
Message Codex…
dev-serverterminal
web ~/apps/storefront ❯ pnpm dev
VITE v5.4.2 ready in 412 ms
➜ Local: http://localhost:5173/
watching for file changes…
✓ hmr update /src/cart/Drawer.tsx
web ~/apps/storefront
payments-workersession 1 204.7k · $3.51
Backfilling the webhooks that failed during last night's outage before the retry cron picks them up. I found 318 events stuck in pending and grouped them by merchant.
⌘ Bash cd services/payments-worker
The backfill script is idempotent — it skips anything already reconciled. I'd like to run it against the last 24 hours:
Codex wants to run
python backfill.py --since 24h --apply
DenyApprove
Message Codex…
+Ask before running ▣ GPT-5.5

// 5 panes, one running full-height — set columns × rows however you want

01

The grid is the container. The attention layer is the product.

Four agents working in parallel means four things that might need you — and no way to watch all of them. Clustray surfaces the one that's blocked, so you can stay heads-down on the rest.

  • A pane that's waiting glows

    Needs-approval turns the border amber, pulses the status dot, and — if it's not muted — plays a chime. You hear it before you look.

  • Approve or deny, right where it happens

    The exact command or diff shows inline. One click continues the turn — no jumping into a terminal to type y.

  • Colour tells you which project is which

    Every folder gets a stable dot colour. Same project, same colour — across panes, tabs and the sidebar.

whitelabel-backendsession 1
The Xendit filter only supports exact-match, so I'll accumulate across pages until each one is full. Applying it now:
Claude wants to edit
views.py · XenditTransactionsView._exclude()
DenyApprove

amber border · pulsing dot · sound — a pane that needs you, from across the room

02

Built like a tool, not a dashboard.

The parts that actually matter when you're driving several agents at once — nothing more.

/01
A grid that reflows to your window
Panes tile toward a comfortable shape as you resize — 3×2 when wide, 2×3 when tall. Or pin the layout yourself with a columns × rows picker; extras scroll.
/02
Workspaces per project set
Group the sessions for a piece of work, switch between workspaces in the rail, and reopen exactly as you left them.
/03
Drag to rearrange, with a live preview
Drop one pane onto another to swap; a ghost silhouette shows where it lands before you let go.
/04
Resume with full history
Close the app and every conversation comes back — scrolled to the latest message, streamed back in whole, not truncated.
/05
Usage you can actually see
Live rate-limit meters per account — 5-hour and weekly windows for both Claude and Codex, with reset times.
/06
Model & permission modes, inline
Switch model or approval mode per pane — ask before edits, auto in a sandbox, plan-only, or full access — without leaving the chat.
/07
Dark and light, done properly
A single tuned palette both ways — panes read as raised surfaces, never a wall of the same flat black.
03

Two agents. One attention layer.

Each pane is driven by the real CLI under the hood — same tools, same auth, same session files you already have. Clustray just gives them a window and a nervous system.

Claude

Anthropic · Claude Agent SDK
  • CLAUDE.md, tools and memory all apply
  • Inline approvals via the SDK's permission hooks
  • Opus / Sonnet / Haiku, switchable per pane

Codex

OpenAI · Codex CLI app-server
  • AGENTS.md, sandboxed command + patch approvals
  • Command & file-change requests surface as cards
  • GPT-5.5 / 5.4 / 5.4-mini
04

A small, honest design system.

The whole app runs on one set of states, one project palette and two typefaces. Here it is.

Pane states
Working running
Needs you awaiting
Idle idle
Error error
Project palette

Hashed from the folder path — stable across launches.

Type
Space Grotesk
IBM Plex Mono — labels, commands, ids
Inter — the body you're reading now.
05

Pay for the window, not the model.

You already pay Anthropic and OpenAI for the agents. Clustray is just the window that runs them side by side — one simple plan, monthly or yearly.

Free

Enough to feel the difference on real work.

$0forever
no account needed
Download
  • Up to 2 panes · 1 workspace
  • One provider (Claude or Codex)
  • The full attention layer
  • Dark & light
Pro Monthly

The whole app, month to month.

$10/ month
cancel anytime
Start monthly
  • Unlimited panes & workspaces
  • Claude and Codex, side by side
  • Usage meters · resume & full history
  • Layout picker · drag-swap · in-app login
Pro Yearly2 months free

Same app — ~$8.33 a month, billed once.

$100/ year
save $20 vs monthly
Go yearly — $100
  • Everything in Pro Monthly
  • Two months free every year
  • Early access to new builds
  • One subscription, all your Macs

// Bring your own Claude Code & Codex CLI. Clustray never touches your API keys or bills for tokens.

Free · single window · your own keys

Stop babysitting terminals. Start glancing.

Download for macOS Windows Soon

Latest: v1.0·macOS 13+·Apple Silicon & Intel·Node 18+ for the provider sidecars