A macOS app for running several AI coding agents side by side, one per git worktree. Each workstream is a branch, a worktree, and a terminal running the Coding Agent, plus tabs for its diff, its dev server, and an editor. Terminals are GPU-rendered through libghostty.
A personal fork of Factory Floor and Vibefloor.
Download the DMG from Releases.
Builds are ad-hoc signed and not notarized — this project has no Apple Developer account. macOS quarantines the downloaded DMG, so open the app once via right-click → Open, or clear the attribute:
xattr -d com.apple.quarantine /Applications/Atelier.appA locally built app is unaffected. See docs/distribution.md.
Requirements and commands are in CONTRIBUTING.md. The short version:
git submodule update --init
xcodegen generate
./scripts/dev.sh brAtelier creates worktrees beside the repository when the project uses a bare-repo
container — a .bare directory with a .git file next to it — so a worktree for
/repos/app lands at /repos/app/<name>. Any other layout falls back to
~/.atelier/worktrees/<project>/<name>.
To set a repository up that way:
git clone --bare git@github.com:org/project.git .bare
echo "gitdir: ./.bare" > .git
git config remote.origin.fetch "+refs/heads/*:refs/remotes/origin/*"
git fetch --all --pruneThen park HEAD on a scratch branch so the default branch is free to be checked
out as its own worktree:
# fish
set def (git symbolic-ref --short HEAD)
git config wt.default $def
git branch root $def
git symbolic-ref HEAD refs/heads/root
git worktree add $def# bash
def=$(git symbolic-ref --short HEAD)
git config wt.default "$def"
git branch root "$def"
git symbolic-ref HEAD refs/heads/root
git worktree add "$def"| Shortcut | Action |
|---|---|
| ⌘I | Info tab |
| ⌘↩ | Focus Coding Agent |
| ⌘1–9 | Switch to tab by position |
| ⌘⇧[ / ⌘⇧] | Cycle tabs |
| ⌘W | Close tab |
| ⌘[ / ⌘] | Cycle workstreams |
| ⌘↑ / ⌘↓ | Cycle projects |
| ⌘0 | Back to project |
| ⌘⇧R | Rename workstream |
| ⌘⇧W | Archive workstream |
| ⌘⇧↩ | Start / Rerun |
| ⌘⇧C | Toggle sidebar |
| ⌘⇧P | Command palette |
| ⌘P | Find file (editor) |
| ⌘S / ⌘⇧S | Save / Save As (editor) |
| ⌘L | Address bar (browser) |
| ⌘⌥B | Open in external browser |
| ⌘⌥T | Open in external terminal |
| ⌘/ | Help |
Per-project commands live in .atelier.json at the repository root:
{ "setup": "cmd", "run": "cmd", "teardown": "cmd", "seed": "config/secrets" }These come from the repository, so Atelier asks for approval before running any
of them, and asks again whenever they change. seed names a directory whose
contents are copied into each new worktree — that is how uncommitted .env files
reach a workstream. It defaults to .atelier-seed.
MIT. See LICENSE.