0.9.0
over the last few months we’ve been hard at work on atlas workspaces too — this release pulls together everything from eight betas into one big update: a brand-new command-line interface, split panes, faster terminals, and a redesigned changes panel built on pierre’s file trees and diffs.
new: the atlas command-line interface
0.9.0 introduces a brand-new atlas cli — a fully scriptable interface to everything atlas workspaces does. it can drive a running app live over ipc, and falls back to talking directly to the sqlite database when the app isn’t open, so the same scripts work whether or not the gui is running. under the hood we split the rust code into a cargo workspace: a shared atlas-core library and the new cli binary that sits on top of it.
install it from atlas workspaces → install atlas cli in the menu bar, then atlas --help.
two global flags shape every command:
--json— emit machine-readable json instead of human tables, so you can pipe output intojqand friends--remote auto|always|never—autotries the live app and falls back to direct sqlite,alwaysrequires the running app,neverforces direct db access
atlas repos — manage repositories
list(ls) — list known repositoriesadd <path|url>— register a local repo or clone one from a urlshow <spec>— show details for a repositoryremove <spec>(rm) — remove a repository
atlas workspaces (atlas ws) — the full workspace lifecycle
list(ls) — list workspaces, filter by--repo, include--archivednew <name>— create a workspace;--repo,--from <branch>,--branch,--existing-branch,--parent <ws>to stack on top of another, and--mode standard|browsefor a full worktree or a lightweight detached checkoutshow <spec>— show details for a workspaceopen <spec>— open / focus the workspace in the running apprename <spec> <new-name>— rename a workspace (leaves the git branch alone)set-base <spec> <branch>— change the base branch (validates it on the remote and unstacks)stack <spec>— show the full stack (tree) a workspace belongs torestack <spec> --parent <ws>/--unstack— move a workspace under a new parent, or detach itscripts <spec>— show the preflight / setup / run / archive scripts configured for a workspacepreflight <spec>— run the preflight script synchronously and exit non-zero on failure, so you can gate automation on itsetup <spec>— run the setup script in a terminal in the running appserver <spec>— run the run/server script in a terminal, kept alive like the gui’s “launch server”archive <spec>— archive a workspace (re-parents its children, removes the worktree)
atlas term — terminal control (requires the running app)
list <spec>(ls) — list terminals in a workspacenew <spec>— open a terminal;--cwd,--cols,--rows, and--role setup|serverto mark it as a system terminalsend <id> <data>— write keystrokes; understands\n,\r,\t,\e,\xHH,\\, and\C-xfor ctrl-x, or pass-to stream raw bytes from stdinexec <spec|id> <command>— run one command and capture its output, either in an ephemeral login shell (pass a workspace) or injected into a live pty (pass a terminal id);--timeouttail <id>— stream a terminal’s live output to stdoutresize <id> <cols> <rows>— resize a terminalclose <id>— close a terminal
atlas claude — claude session control (requires the running app)
list <spec>(ls) — list claude sessions in a workspacenew <spec>— spawn a claude session;--promptto send an initial message once the pty is ready,--binto override the claude binarysend <id> <message>— message a claude session and wait for the reply;--asyncto fire and forget,--idle-msto tune turn-complete detection,--timeoutfor a hard ceiling
atlas layout — pane layout control (requires the running app)
get <spec>— print the current pane layout json for a workspaceset <spec> <json>— replace the layout (pass-to read json from stdin)
every cli- or ipc-created terminal and claude session now registers a real gui tab in the workspace, so anything your scripts spin up is something you can click into and take over by hand — and a running gui reflects cli changes live via workspace:updated / layout:updated events.
split panes
you can now split a workspace into multiple panes — drag a tab to an edge to split, or use keyboard shortcuts. it’s opt-in: turn on split panes under settings → general. once enabled you get:
- split right (
cmd+\) and split down (cmd+shift+\), close pane (cmd+shift+w) - focus navigation between panes (
cmd+shift+←/→/↑/↓) - mac-style drag previews and drop zones for moving tabs across panes
all of the pane shortcuts are rebindable under settings → keybindings.
redesigned changes panel
the changes panel now uses two pierre file trees for staged and unstaged changes, grouping your edits by directory instead of a flat list. per-row actions (stage, unstage, discard, view diff, copy path) moved into a right-click context menu. the branch-files view uses a tree too.
faster, more reliable terminals
- terminals spawn noticeably faster — we skip the login-shell flags and inject a cached login env instead, saving anywhere from ~100ms to a full second per terminal depending on your shell config. the env cache warms at startup so your first terminal opens instantly.
- workspaces now load their
.envrcvia direnv automatically (a no-op if direnv isn’t installed or the file isn’t allowed) - fixed jumbled and missing output when restoring terminals: we no longer drop bytes that arrive mid-restore, and we strip alt-screen redraws (vim, less, htop, claude) from scrollback so they don’t render as garbage at the new window size
pierre file trees and diffs throughout
we swapped the old file tree for @pierre/trees across the sidebar and the pr review view, with case-sensitive and “changes only” filter toggles. diffs moved to pierre’s new codeview api for virtualized rendering, scroll anchoring, and in-place updates — switching back to a workspace renders its tree instantly thanks to per-workspace caching, and big-repo walks no longer stall the app.
smaller fixes
- the pr files-changed sidebar is now resizable, and the width persists across sessions
- git changes sections no longer collapse on every 5-second refresh, so a manual expand sticks
- file tree and pr sidebar resize handles got a wider invisible hit area so they’re easier to grab
- the “run server” button is now correctly titled “run”
- the file tree uses ibm plex mono to match the rest of the ui