Install
rt ships inside mattstack.app, the mattstack menu bar app. Installing the app installs rt, the daemon, and everything else in the suite.
Requirements
- An Apple silicon Mac. rt ships an arm64 build only.
- macOS 14 or newer.
- Xcode Command Line Tools. The setup checklist offers to install them.
Install the app
- Download
mattstack-<version>.dmgfrom GitHub Releases. - Drag mattstack.app to
/Applicationsand open it. - The setup window opens and walks you through five steps.
Welcome
A summary of what setup does. Everything it installs is reversible from Settings → Uninstall.
Your team
Pick one:
- Create a team: name it, then paste the URL of an empty repo for it, or let mattstack create a private GitHub repo when the
ghCLI is signed in. - Join a team: paste the invite code a teammate sent you.
- Just me: no team repo, no forge account. See Just me.
- Restore: bring back your own setup on a new Mac from your home repo and its age key.
See Teams and invites for how teams, invites, and team packs work.
Before we begin
The checklist of everything setup needs, grouped into Your Mac, Accounts, Access, and Tools. A row that needs you carries its own button: grant a permission, choose a folder, connect an account, or show the steps to take. Re-check refreshes every row. Install unlocks once every required row is ready, and Continue in limited mode goes ahead while optional rows are still outstanding.
Your Mac covers macOS, the Command Line Tools, PATH precedence, and three permissions: Full Disk Access, Login Items, and Notifications. Each permission row asks for it or opens the matching pane in System Settings.
Accounts has one row for each integration your team or its packs use: the team's GitHub or GitLab, plus Linear, Slack, StrongDM, and others when the team declares them. Connect opens a sheet with a Create a token on GitLab… (or GitHub) link to the forge's new-token page, with the scopes your role needs already checked and the token named mattstack:
| Forge | Joining a team | Owning a team |
|---|---|---|
| GitLab | api | api |
| GitHub (classic token) | repo, read:org | repo, read:org |
Paste the token and Connect. A pasted token missing a scope is refused, naming the scope it lacks; a token already stored that falls short shows as needing you, with the same Connect sheet. A GitLab member needs api because the board posts review comments and replies on merge requests as you. The GitHub row is ready without a token when the gh CLI is already signed in. The GitLab link targets GitLab 16 or newer.
Repo folder asks where rt clones your team's repos; Choose folder… opens a folder picker.
Installing
Install runs each step and streams its progress:
- links
rt,fast-browser,gitq, anddeckinto~/.local/bin, puts that folder first on your PATH, and adds thertcdalias to your shell - registers the rt daemon and deck (which serves the bundled apps) as background services and starts them
- installs the mattstack Claude Code plugins and seeds Claude Code's permissions (see Claude Code setup)
- installs the
rt-contexteditor extension into every editor it finds
Installed
The last screen confirms the checklist again and shows where things live: the m icon in the menu bar, rt in a new terminal window, and the board at board.mattstack.
Before you finish holds the two rows that gate Finish:
- Writing style: the voice agents use for the reviews, replies, and PR descriptions they post under your name. Choose style… offers the mattstack presets or any skill of your own.
- Fast Browser extension: Fast Browser drives your real Chrome session through a Chrome extension that you load yourself. Show steps… walks through it: open
chrome://extensions, turn on Developer mode, Load unpacked from~/.fast-browser/extension/current/unpacked, then pair it and confirm withfast-browser doctor. Skip for now skips it on this Mac; Settings → Fast Browser shows Un-skip to bring it back. Without Chrome installed, this row is skipped.
Still to do lists any optional rows left open. Owners also get Invite teammates….
After setup
Setup status…, just under Settings… in the menu bar menu, reopens the checklist at any time. Until setup is finished, Resume setup… right below it reopens the wizard where you left off. Use it to connect an account, rotate a token, or fix a row that slipped. It also warns when a token is close to expiring.
Settings… covers the rest: your writing style, startup and updates, team invites, permissions, Fast Browser, and Uninstall. See The menu bar app.
Home repo backup: your home repo (~/.mattstack/user) keeps your settings versioned on this Mac. Its checklist row offers Add remote…: paste the URL of an empty private repo you own, or pick Create a private repo for me.
From a terminal
To set up without the setup window (a VM, CI, or a scripted install), run the same steps from the CLI. mattstack.app still registers the background services and the proxy, so keep it running:
# run from /Applications, not the DMG
/Applications/mattstack.app/Contents/MacOS/rt --post-install
rt setup status # the checklist, as text
rt verify # read-only health report
Each checklist button has a CLI equivalent:
rt setup gitlab connect # or github, linear, slack, sdm
rt setup repo-root set ~/code
rt home remote set <url> # or --create
rt skills writing-style use <id> # omit the id to pick
rt setup waive tool.fast-browser-extension
Until setup has run, other rt commands print a one-line hint pointing at mattstack.app or rt setup install.
Claude Code setup
Install seeds a baseline permissions.allow list into every Claude Code config dir so agents don't stall on per-tool prompts for calls rt already trusts: the mattstack MCP server and the Fast Browser plugin, EnterWorktree, claude plugin update, and the few rt commands skills still run in a shell (rt gate and rt events wait). Everything else a skill runs routinely is a tool on the MCP server. Existing entries stay; only missing ones are added. A config dir with no permissions.defaultMode gets auto, and a mode you already chose stays.
It installs the mattstack, fast-browser, and chat plugins from the mattstack marketplace, and superpowers from claude-plugins-official, which the mattstack skills and every team pack call. An existing superpowers-marketplace install counts.
What gets installed
| Component | Description |
|---|---|
mattstack.app | Menu bar app: setup, daemon health, notifications, updates. See The menu bar app |
rt | Ships inside the app (Contents/MacOS/rt), linked at ~/.local/bin/rt |
| Background daemon | Caches branch and MR data, scans ports, guards git hooks, snapshots the home repo. See The daemon |
| Bundled apps | board, console, chat, and boxscore, served locally through deck |
rt-context extension | VS Code / Cursor: worktree, branch, and linked ticket in the status bar. See Editor extension |
| Shell integration | ~/.local/bin first on PATH, plus the rtcd alias, for zsh, bash, and fish |
| Bundled helpers | jq, gh, glab, bun, node, sops, age, zstd, git-lfs, cloudflared, fast-browser, gitq, and deck, among others, pinned and shipped inside the app |
Helpers resolve by absolute path inside the app bundle. The ones meant to be typed (rt, fast-browser, gitq, deck) are linked into ~/.local/bin.
The checklist's PATH precedence row confirms ~/.local/bin comes first on your PATH through rt's own line in ~/.zshenv, so your shell finds rt's shims and team intercepts before any conflicting binary. When something else claims first place, the row says so and offers to add rt's line.
Updates
mattstack.app updates itself through Sparkle. Check for Updates… in the menu bar menu checks on demand. After an update, the app brings your setup forward on its own with rt setup update; see Updates in the menu bar app guide.