Works with

opencode, from opencode.ai

opencode in your MacBook notch

CrewTower shows opencode sessions in the notch, answers what they stop for over a local socket, and jumps you to the exact terminal tab. It is local-first by construction: no accounts, no cloud, and nothing it reads ever leaves the Mac.

macOS 15 or later · $9.99 once, one Mac · no subscription

If you chose an open agent, you probably care where the data goes

People who run a community-built, open-source agent tend to have opinions about what runs on their machine and what phones home. It seems fair to answer that first, before any feature.

CrewTower is not a cloud service. There is no account, nothing to log into, and no session is visible from another machine. It reads what opencode already writes locally, and every decision travels over a Unix socket on your own Mac. The app contains no analytics at all; the marketing website counts visitors, the app does not. Transcripts, prompts and diffs go nowhere.

To be straight about it: CrewTower is not itself open source. It is a paid app, $9.99 once for one Mac. What it commits to is the local-first behaviour above, not source availability.

What it shows

Every running session gets a card in the notch: what it is doing, how long it has been going, and whether it is waiting on a human. The waiting ones sort to the front, so a glance replaces the habit of cycling through terminal windows.

Tool inputs are parsed once as they arrive and rendered as a typed card rather than raw JSON. A tool with no bespoke card falls back to a generic one carrying the flattened parameter list, so an unfamiliar call still shows what it will do.

Answering over the socket

The agent's hook blocks on a local Unix socket while it waits for a decision, and CrewTower answers over that same socket. The prompt resolves in place: no terminal is focused, nothing is typed. There is deliberately no synthetic-keystroke path anywhere in the app.

What CrewTower can do for a given session depends on what that agent exposes. opencode is spoken to natively, with full status and decision support where the agent offers the channel for it - but a visible session does not by itself mean every prompt can be answered from the notch. Where no decision channel exists, the fallback is Jump.

Destructive shell commands are flagged on the card before you press anything, and there are two ways to say yes: once, or every permission request for the rest of the session, a grant CrewTower keeps itself rather than a rule written into opencode's config.

Jump, and the terminal you actually use

Jump focuses the place a session belongs to: the exact tab in Terminal, iTerm2 (down to the split) and Ghostty; the pane in WezTerm, tmux and herdr, and in kitty with its remote control on; Warp's tab through the focus link Warp provides; and the window in Alacritty, which has no tabs. If yours is not on that list, one line containing placeholders teaches it, and a custom rule always beats the built-in one. How Jump finds the exact tab is written up terminal by terminal.

macOS Accessibility permission is used for Jump in the terminals that need it, such as Ghostty and Alacritty, and to tell whether you are already looking at a session. Answering from the notch does not need it.

Setup, and undoing it

Hooks are configured the first time CrewTower runs; there is no config file to write by hand. Delete the app and the configuration is cleaned up again, which is the part worth knowing if you are careful about what other software leaves in your dotfiles.

# nothing to run. Open CrewTower once, then start opencode # the way you always do: opencode

What it does not do

CrewTower is a status and decision surface. Its usage meter shows how much of your Claude Code or Codex subscription window is left, and how much context each session has left, but it keeps no token or cost history by day, session or model, and shows no cost for opencode sessions - ccusage is the tool for that. It is not a terminal emulator, not an IDE, and not a way to run agents. It watches and answers the ones you started yourself.

Questions

Does CrewTower work with opencode?

Yes. opencode is one of the agents CrewTower speaks to natively, with full status and decision support wherever the agent exposes a decision channel.

Is there a subscription?

No. $9.99 once for one Mac, updates included with no upgrade fee.

Is there a trial?

Try the interactive demo on our homepage. The Mac app requires a license and has no free trial.

Is CrewTower itself open source?

No. CrewTower is a paid native macOS app, $9.99 once for one Mac with no subscription. What it does guarantee is that it is local-first: it has no accounts, no cloud service and no analytics in the app, and nothing it reads leaves your machine.

Do I have to change my opencode configuration?

No. On first launch CrewTower adds a small plugin to opencode's own plugin folder, which is how opencode reports its sessions to the app. There is no opencode config file for you to edit.

Does it need network access to work?

The session watching and the decision path are entirely local. Nothing about your sessions is sent anywhere.

What if my terminal is not on the supported list?

A terminal with no built-in support can be taught with a single line containing placeholders, and a custom rule always beats the built-in one. The Jump page shows how.

Which other agents are spoken natively?

Claude Code, Codex, Cursor, Gemini CLI and Qwen Code. The twenty other agents CrewTower recognises get a card you can jump from, and the agents page lists all twenty-six with what it does for each.

Local-first, in the notch

One price, one Mac, no subscription. Explore the interactive demo on our homepage, then get a license for your Mac.

Get CrewTower for Mac

$9.99 once · macOS 15 or later