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>
102 lines
4.0 KiB
Markdown
102 lines
4.0 KiB
Markdown

|
||
|
||
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/<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.
|
||
|
||
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` — `<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 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.
|