![shannoncoat — which coat will Claude wear today?](docs/hero.png) Run multiple isolated [**\***](#isolation) Claude profiles on macOS from a menu-bar item — each its own Claude Desktop **and** paired Claude Code setup, its windows tagged to tell them apart. Your normal install is untouched. --- > [!NOTE] > shannoncoat started as the shell script in the first commit, written by hand. Claude built the GUI app out of it — most of the Swift, the icon, and this README — working from human direction, review, and dogfooding. ## Install macOS 13+, Claude Desktop. 1. Download `shannoncoat.app.zip` from the [latest release](https://github.com/bdeshi/shannoncoat/releases/latest), unzip, and move to `/Applications` or `~/Applications`. 2. First launch is blocked (not notarized): **System Settings → Privacy & Security → Open Anyway**. 3. Grant **Accessibility** when prompted; the tags need it. ## Everyday use With nothing running, shannoncoat offers a checklist and starts whichever profiles you tick. The menu bar shows a dot per running profile in its colour, plus the name when only one is up; hover for the rest. - **Click a profile** — switch to it; the others are quit, even if it's already running. - **Shift-click** — open it *alongside* them, or focus it if already up. **Settings → Click a profile to** swaps the two. `⇆` marks the last one you switched to. **Close Profile** quits one, **Quit Claude** all (shannoncoat stays), **Manage Profiles…** opens the main window. Each managed window carries a tag in its profile's colour — drag it anywhere, and each profile remembers its spot. ## Profiles **default** is your real Claude install: start/stop only, never managed, so it gets no tag and can't be deleted. **Manage Profiles… → +** adds one. Directories are optional — blank gives `~/.shannoncoat/data//{app,code}`. Two profiles may not share a directory; that would silently merge their sessions, so shannoncoat refuses to start and names the collision. Profiles are JSON files in `~/.shannoncoat/`. Deleting one quits it and removes just that file — **the Claude data stays on disk**, so recreating it resumes where you left off. ## Settings - **Launch at Login** - **Click a profile to** — switch or open alongside; Shift-click does the other. - **Window tag** — name chip or coloured dot. - **Automatically check for updates** — once a day at most, against the latest GitHub release, or **Check for Updates…** on demand. It never self-updates; download and swap the app in yourself. ## Troubleshooting **Tags don't appear.** Almost always Accessibility. If shannoncoat is listed *and ticked* under **Privacy & Security → Accessibility**, remove it with **−** and re-add — a differently-signed build leaves the old entry visible but inert, and toggling won't help. **A profile restarts into the default one.** Claude's auto-updater relaunches the app with no profile flags. Turn auto-updates off with the `disableAutoUpdates` policy, then update by hand and restart from shannoncoat: | OS | Where | | --- | --- | | macOS | `/Library/Managed Preferences/com.anthropic.claudefordesktop.plist` — `disableAutoUpdates` | | Windows | `HKLM\SOFTWARE\Policies\Claude` — `disableAutoUpdates` (DWORD `1`) | | Linux | `/etc/claude-desktop/managed-settings.json` — `{"disableAutoUpdates": true}` | **A profile won't quit.** Claude declined — usually its "unsaved work" or "still generating" dialog. shannoncoat waits rather than killing it. ## Build from source Needs the Xcode Command Line Tools (`xcode-select --install`). ```bash ./build.sh ``` Lands in `.build/shannoncoat.app`. Unsigned builds get a new code identity each time, silently voiding Accessibility on every rebuild; `.env.example` covers a one-off self-signed certificate that avoids it. ## Isolation > [!IMPORTANT] > Isolation isn't perfect. Claude and Claude Code can have effectively full disk > access from any profile, default config folders included, and some integrations > — skills, plugins — hardcode `~/.claude` and write there.