Parallel agents, one repo.
Run Claude Code, Codex and anything else that lives in a shell, side by side on your Mac. Each agent gets its own worktree and a real terminal, keeps going when the app doesn't, and tells you when it needs you.
Early access · macOS 15 or later · Apple silicon · Free
A day with more than one agent
What it looks like when you stop babysitting tabs.
Fan out before lunch
Three bugs, three agents. From the New Workspace sheet or one shell loop, each gets its own worktree and branch, runs your project's setup script, and starts on its prompt. Nobody steps on anybody's changes.
zsh · ~/src/api $ for t in fix-login flaky-ci csv-export; do aster ws new $t --fetch --run \ --agent claude --prompt-file tasks/$t.md done ~/.aster/worktrees/api/fix-login session s-7f3a ~/.aster/worktrees/api/flaky-ci session s-2b91 ~/.aster/worktrees/api/csv-export session s-91c2New Workspace · apiNameFix login redirectBranchaster/fix-loginfromorigin/mainFetch firstOnAgentClaude CodePromptFix the login redirect: keep the original path and drop open-redirect targets.~/.aster/worktrees/api/fix-loginCreateWalk away. Get called back.
Agents report through hooks. When one stops to ask permission, its row turns amber and macOS tells you. Answer it and the mark clears by itself. Already looking at that session? No banner.
zsh · any terminal $ aster ls SESSION WORKSPACE AGENT STATUS s-7f3a fix-login claude needs you s-2b91 flaky-ci codex working $ aster attach s-7f3a # answer it; the mark clearsAsterismnowfix-login · claudeClaude needs your permission to use BashQuit it, crash it, update it
Each terminal is its own process, owned by a small Go daemon rather than by the window. Close Asterism mid-task, open it again later, and every agent is on the exact screen you left. Or skip the app and attach from any terminal.
zsh · any terminal # Asterism has been closed since lunch. $ aster ls SESSION WORKSPACE AGENT STATUS s-7f3a fix-login claude needs you s-2b91 flaky-ci codex working s-91c2 csv-export claude working $ aster attach s-7f3a # Ctrl+Space detachesReopened after lunch. Nothing restarted.
Let one agent run the others
Everything the app does is an aster command, and every command speaks --json. Hand the CLI to your lead agent and it can split the work into workspaces, start helpers and check which of them is stuck.
claude · lead session # The lead agent hands off a task. $ aster ws new api-schema --run \ --agent codex --prompt "Draft v2 schema" ~/.aster/worktrees/api/api-schema session s-c41e $ aster ls --json~/.aster/worktrees/api/api-schema
❯ codex "Draft v2 schema"
Working… (esc to interrupt)Hand a pull request to an agent
A review request lands. Pick it from the project's pull request list and choose Review with Agent: it opens on the PR's branch in its own worktree, with an agent already reading the change. Once the PR merges or closes, Clean Up removes the review workspace.
zsh · ~/src/api $ aster pr ls # TITLE AUTHOR BRANCH CI REVIEW WORKSPACE 142 Rate-limit login maya rate-limit passing requested $ aster ws new review-142 --pr 142 --run \ --agent claude --prompt "Review this PR" ~/.aster/worktrees/api/review-142 session s-5d10To reviewMineAll openReview with Agent…Rate-limit login#142 · mayaBump Go to 1.25#139 · dmitriReview the stack, not a pile of branches
Each workspace shows its pull request, review state and CI. Working with gh stack? You see the layers in order, and which one needs a restack. When work merges, Asterism lists the workspaces you can clean up.
Know what the work cost
Tokens per session, workspace and agent, priced at API list rates, next to the pull requests that actually merged. Read from the agents' own logs on your Mac, keeping only the numbers, never your prompts.
Workspace Agent Tokens API-equiv. PR fix-login claude 1.9M $4.10 #128 merged flaky-ci codex 0.8M $1.35 #129 merged csv-export claude 3.2M $7.80 open Illustrative numbers. Costs are API list price, not what you paid.
- Native
- A Mac app with libghostty terminals, not a web view. Your Ghostty config, fonts and keybinds come along.
- Local
- State lives in a database on your Mac. Asterism only reads from GitHub, and it never stores your prompts or replies.
- Any agent
- Claude Code and Codex report status out of the box, on the subscription you already have. No API key needed. Anything else that runs in a terminal runs here too.
Everything the app does, from a prompt.
Projects, workspaces, sessions and layouts are all commands. Add --json to any of them.
- aster project add [path]
- Register a directory as a project.
- aster ws new <slug> --run
- Create a worktree workspace, run its setup, start an agent.
- aster run --agent <name>
- Start a session in this workspace; --split right opens a pane.
- aster ls
- Sessions with their status and attention mark.
- aster attach <session>
- Attach this terminal; Ctrl+Space detaches.
- aster layout set <ws>
- Set panes and tabs the way the app shows them.
- aster hooks install
- Install the Claude Code hooks that report status.
- aster doctor
- Check the daemon, git, shell, agents, hooks and worktrees.
Bring your agents together.
Free. Early access builds update themselves and ask before they install.
macOS 15 or later · Apple silicon