# Run a Separate Claude Desktop App for Each Claude Account **A setup guide you hand to Claude Code.** It sets up one Claude desktop app instance per Claude account (for example, personal and work), running side by side, each permanently signed in. No more logging out and back in to switch accounts. --- ## For the human (read this part, skip the rest) **What you need:** a Mac with the Claude desktop app installed, at least two Claude accounts, and Claude Code (the terminal version, or the desktop app's Claude Code / a Cowork session with full disk access). Windows users: see the appendix at the end; the idea is identical and simpler. **How to use this guide:** open Claude Code and say something like: > Read the file MULTI-ACCOUNT-CLAUDE-SETUP-GUIDE.md and set this up for me. My primary account (currently signed in) is A@example.com, and my second account is B@company.com. Call them "Personal" and "Work". Claude does everything except type your passwords. At the end you'll sign in once with the second account, and that's it. **Is it safe?** Yes, and fully reversible. The setup only ADDS two small launcher apps and one new data folder. Your existing app, sign-in, conversations, and settings are never touched. Undo = delete the launchers and the new folder. **Where this comes from:** the core trick is from [a Reddit thread](https://redd.it/1rkdigx) (r/ClaudeAI, March 2026), hardened with fixes for several problems found while setting it up for real (details woven in below). Longer write-up: [chadtimbl.in/writings/claude-workflow-tips.html#multiple-accounts](https://chadtimbl.in/writings/claude-workflow-tips.html#multiple-accounts). --- ## For Claude Code: instructions You are setting up multiple isolated instances of the Claude desktop app, one per account. Read this whole guide before acting. Facts below were verified 2026-07-11 on macOS with Claude desktop v1.20186.1; re-verify anything version-sensitive on the target machine rather than assuming. ### Ground rules (non-negotiable) 1. **Never modify, move, rename, or duplicate `/Applications/Claude.app`.** Duplicated copies fall out of sync when the app auto-updates. Every launcher points at the one real app. 2. **Never write into the user's existing default profile** (`~/Library/Application Support/Claude`). It stays the primary account's home, untouched. 3. **Never launch the same profile twice.** The app has NO single-instance lock: two processes started with the same `--user-data-dir` will happily share one data folder, which risks corrupting it. The launchers you build below guard against this; also don't do it yourself during testing. 4. **Sign-ins are the user's job.** Never handle their passwords. Sign-ins must happen with only ONE instance running: the `claude://` OAuth callback is delivered to whichever instance is open, so with two open it can land in the wrong one. 5. **Mind your own runtime.** If you are running inside the Claude desktop app (Cowork or embedded Claude Code), quitting that app kills your session, so hand any step requiring a quit to the user as written instructions. Sandboxed Cowork sessions often cannot read or write `~/Library`; if you hit that, tell the user to run this guide from Claude Code in a terminal instead. 6. **Nothing here is destructive.** The only thing you may delete is a scratch/test profile you created yourself in this session. ### Step 1: Gather inputs Ask the user (if they didn't already say): the two account emails, and a short label for each (defaults: "Personal" and "Work"). Conventions used below: - The **primary** account is whichever is signed into the app right now. It keeps the default profile and gets launcher "Claude \". - The **second** account gets a new profile folder `~/Library/Application Support/Claude-` and launcher "Claude \". - More than two accounts work the same way: one profile folder and one launcher per extra account. Make sure no profile folder name is a prefix of another (e.g. avoid `Claude-Work` plus `Claude-Work2`), because the launcher guards match on that name. ### Step 2: Preflight checks - Confirm the app exists and note its version: `defaults read "/Applications/Claude.app/Contents/Info.plist" CFBundleShortVersionString` - List existing profiles: `ls ~/Library/Application\ Support/ | grep -i claude` (expect `Claude`; leave anything else alone) - See what's running: `ps axo pid,command | grep -e '/Applications/Claude\.app/Contents/MacOS/[C]laude' | grep -v -e '--type='` (main processes only; the `[C]` trick stops grep matching itself) - Confirm `/Applications` is writable; fall back to `~/Applications` for the launchers if not. ### Step 3: Verify the mechanism with a throwaway profile Before building anything, prove this app version honors the flag. Warn the user a test window will briefly appear, then: ```sh open -n -a "/Applications/Claude.app" --args --user-data-dir="/tmp/claude-profile-test" ``` Within a few seconds you should see (a) a new main process whose command line carries that flag, and (b) `/tmp/claude-profile-test` populated with Cookies, Local Storage, Preferences, etc. That confirms isolation works. Then clean up: kill only PIDs whose command line contains the scratch path, and `rm -rf` the scratch folder. If no isolated profile appears, STOP: this app version no longer honors `--user-data-dir`, and the approach needs rethinking. Tell the user. ### Step 4: Build the guarded launchers Each launcher is a small AppleScript app. Logic: find this account's running instance via `ps`; if found, focus it by process id (never relaunch, per ground rule 3); if not found, launch a new instance with the right profile. Compile each with `osacompile -o "/Applications/Claude