![shannoncoat — which coat will Claude wear today?](docs/hero.png) Run multiple isolated [**\***](#isolation) Claude profiles on macOS — each one its own Claude Desktop **and** its own paired Claude Code setup — and tell their windows apart at a glance. Your normal Claude install is left alone. It stays as it is and keeps working normally; shannoncoat only adds profiles alongside it. A menu-bar item allows quick switching and profile management. --- > [!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. ## Requirements - macOS 13 or later - Claude Desktop ## Install 1. Download `shannoncoat.app.zip` from the [latest release](https://github.com/bdeshi/shannoncoat/releases/latest). 2. Unzip it and move **shannoncoat.app** to `/Applications` or `~/Applications`. 3. Open it. macOS will block the first launch, because the app isn't notarized. Go to **System Settings → Privacy & Security**, find the blocked item, and click **Open Anyway**. 4. When prompted, grant **Accessibility**. The window tags are drawn from Accessibility data and won't appear without it. ## First run With nothing running, shannoncoat offers a list of your profiles and starts whichever you tick. You can start several at once. ## Everyday use The menu bar shows a coloured dot per running profile — dot and name when only one is up, dots alone when there are more (hover for the names). Open the menu and: - **Click a profile** to switch to it. Every other running profile is quit first, so you end up with just that one — including when the profile you clicked is already up, in which case it's the neighbours that go. - **Shift-click a profile** to open it *alongside* whatever is already running, or to bring its window forward if it's already up, leaving everything else where it is. If you open alongside more often than you switch, **Settings → Click a profile to** swaps the two around. A `⇆` marks the profile you last switched to. **Close Profile** quits one profile; **Quit Claude** quits all of them and leaves shannoncoat running. **Manage Profiles…** opens the main window. Quitting Claude by hand, from the Dock, or via Force Quit is picked up within about a second — the menu bar always reflects what is actually running. ## Window tags Each managed Claude window carries a small tag in that profile's colour, so two otherwise identical windows are easy to tell apart. Drag a tag anywhere on its window; each profile remembers where you put its own. If you'd rather have something smaller, **Settings → Window tag → Colored dot** replaces the name chip with a plain dot. ## Profiles **default** is your real, untouched Claude install. shannoncoat can start and stop it but never manages it, so it gets no tag and can't be deleted. To add a custom isolated profile, open **Manage Profiles… → +** and enter a name. The directories are optional — leave them blank and the profile gets `~/.shannoncoat/data//app` and `~/.shannoncoat/data//code`. Point them anywhere you like if you'd rather keep a profile's data with a project. Selecting a profile shows both paths, ready to copy. Each profile is a small JSON file at `~/.shannoncoat/.json`, named after the profile. Two profiles may not share a directory — that would silently merge their Claude sessions, so shannoncoat refuses to start and tells you which files collide. Deleting a profile removes only that pointer file. **Its Claude data stays on disk**, so you can recreate the profile later and pick up where you left off. If it's running, it's quit first. ## Settings - **Launch at Login** — start shannoncoat automatically. - **Click a profile to** — whether plain click switches and Shift-click opens alongside, or the reverse. - **Window tag** — name chip or coloured dot. - **Automatically check for updates** — once a day at most. ## Updates shannoncoat compares its version against the one published on GitHub. The automatic check posts a quiet notification; **Check for Updates…** in Settings reports either way. It never replaces itself. When a new version exists, download it from the releases page and swap the app in yourself. ## Troubleshooting **The window tags don't appear.** Almost always Accessibility. Check **System Settings → Privacy & Security → Accessibility**. If shannoncoat is listed *and already ticked* but the tags still don't show, select it, remove it with **−**, then add it back. This happens after replacing the app with a build that has a different code signature; the old entry stays visible but no longer applies, and toggling it off and on won't fix it. **Claude Desktop can't be found.** shannoncoat looks in `/Applications` and `~/Applications`. If yours is somewhere else, you'll be asked to locate it the first time you start a profile. **A profile won't quit.** Claude was asked to quit and declined — usually its own "unsaved work" or "still generating" dialog. shannoncoat deliberately waits rather than killing Claude underneath it. Answer the dialog. ## Build from source Local builds require the Xcode Command Line Tools. ``` xcode-select --install ``` Then run the build script ```bash ./build.sh ``` The app is written to `.build/shannoncoat.app`; copy it to `/Applications` or `~/Applications`. One thing worth setting up: an unsigned local build gets a new code identity every time, which silently invalidates its Accessibility grant on each rebuild. `.env.example` walks through creating a self-signed certificate once so the permission survives. ## Isolation > [!IMPORTANT] > Perfect isolation is not guaranteed. Claude and Claude Code can have functionally > full disk access regardless of which profile it's running from, including access > to default configuration folders. > > Some Claude integrations — skills, plugins, etc — may also hardcode the > `~/.claude` path which may modify content in there.