Tighten the README and document the profile-reset-after-update fix

Adds a troubleshooting entry: Claude's auto-updater relaunches the app with
no profile flags, landing in the default profile. Turning off auto-updates
via the disableAutoUpdates policy (macOS, Windows, Linux locations) avoids it.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
bdeshiandClaude Sonnet 5.5 committed 2026-11-13 14:13:32 +06:00
1 parent a740b53627
commit 993f82a714
1 file changed
+56 -111
+56 -111
View File
@@ -1,13 +1,8 @@
![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.
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]
@@ -15,142 +10,92 @@ A menu-bar item allows quick switching and profile management.
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
macOS 13+, Claude Desktop.
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.
[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
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).
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.
Open the menu and:
- **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.
- **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.
**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.
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.
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, untouched Claude install. shannoncoat can start and
stop it but never manages it, so it gets no tag and can't be deleted.
**default** is your real Claude install: start/stop only, never managed, 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/<name>/app` and `~/.shannoncoat/data/<name>/code`. Point
them anywhere you like if you'd rather keep a profile's data with a project.
**Manage Profiles… → +** adds one. Directories are optional — blank gives
`~/.shannoncoat/data/<name>/{app,code}`. Two profiles may not share a directory;
that would silently merge their sessions, so shannoncoat refuses to start and
names the collision.
Selecting a profile shows both paths, ready to copy.
Each profile is a small JSON file at `~/.shannoncoat/<name>.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.
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** — start shannoncoat automatically.
- **Click a profile to** — whether plain click switches and Shift-click opens
alongside, or the reverse.
- **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.
## 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.
- **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
**The window tags don't appear.** Almost always Accessibility. Check
**System Settings → Privacy & Security → Accessibility**.
**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.
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.
**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:
**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.
| OS | Where |
| --- | --- |
| macOS | `/Library/Managed Preferences/com.anthropic.claudefordesktop.plist` — `<key>disableAutoUpdates</key><true/>` |
| Windows | `HKLM\SOFTWARE\Policies\Claude` — `disableAutoUpdates` (DWORD `1`) |
| Linux | `/etc/claude-desktop/managed-settings.json` — `{"disableAutoUpdates": true}` |
**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.
**A profile won't quit.** Claude declined — usually its "unsaved work" or "still
generating" dialog. shannoncoat waits rather than killing it.
## Build from source
Local builds require the Xcode Command Line Tools.
```
xcode-select --install
```
Needs 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.
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]
> 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.
> 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.