I use Claude for personal projects and client work on the same Mac. Signing out whenever I change context interrupts the day, and it is too easy to start a conversation in the wrong account. My setup gives each context a launcher: Claude Personal and Claude Work. From Terminal, I type ccp or ccw. Both launchers use the same Claude.app installation.
This guide explains the macOS setup behind those shortcuts, including a small AppleScript launcher you can inspect before using. The useful part is not having more windows: it is making the account and its desktop profile an intentional choice before you start working.
This is a community workaround for Claude Desktop on macOS, not an official Anthropic account-switching feature. App updates can change its behaviour. The launchers below reproduce the default-personal / separate-work arrangement; check each account in the app after setup.
The short version: one app, two desktop profiles
- Install Claude Desktop at
/Applications/Claude.app. You need access to the personal and work accounts you intend to use. - Personal uses the existing default profile at
~/Library/Application Support/Claude. Work uses~/Library/Application Support/Claude-Work. open -nasks macOS to start a new instance.--argsforwards the remaining arguments to the application, and--user-data-dirselects the other desktop profile.- The everyday launchers first look for the matching main process. If it exists, they ask System Events to bring it forward; otherwise, they launch it.
1. Understand the two launch commands
For the default personal profile, the underlying command is:
open -n -a "/Applications/Claude.app"
For the work profile, it is:
open -n -a "/Applications/Claude.app" --args --user-data-dir="$HOME/Library/Application Support/Claude-Work"
These commands are useful for understanding the setup, but run them only when the corresponding instance is fully quit. Repeating open -n is not a switch-account command: it requests another process. The launcher in the next section adds a check before that happens. Keep the quotes around paths with spaces, and use $HOME here; a tilde inside double quotes does not expand to your home directory.
A separate user-data directory lets the desktop application maintain a different local session and profile-specific settings. Sign in to the work account in the work window and confirm the account shown there. Conversations available from your account remain governed by that account; creating a new folder does not copy or migrate cloud chats.
2. Create Claude Work and Claude Personal launchers
Open Script Editor on your Mac and paste the following AppleScript. Leave profileName as "Work" for the work launcher. Choose File → Export, select Application as the file format, and save it as Claude Work.app in /Applications. If that name already exists, inspect the existing launcher before replacing it. Leave “Stay open after run handler” disabled.
property profileName : "Work"
on run
set appPath to "/Applications/Claude.app"
set profileDir to (POSIX path of (path to home folder)) & "Library/Application Support/Claude-Work"
set executablePath to appPath & "/Contents/MacOS/Claude"
set selector to "personal"
if profileName is "Work" then set selector to "work"
set matcher to "$2 == exe && $0 !~ /--type=/ { if (mode == \"personal\" && index($0, \"--user-data-dir\") == 0) { print $1; exit } if (mode == \"work\") { marker = \"--user-data-dir=\" profile; pos = index($0, marker); tail = substr($0, pos + length(marker)); if (pos > 0 && (tail == \"\" || tail ~ /^[[:space:]]/)) { print $1; exit } } }"
set lookup to "/bin/ps -axww -o pid=,command= | /usr/bin/awk -v exe=" & quoted form of executablePath & " -v mode=" & quoted form of selector & " -v profile=" & quoted form of profileDir & " " & quoted form of matcher
set foundPid to do shell script lookup
if foundPid is not "" then
set targetPid to foundPid as integer
tell application "System Events"
set frontmost of (first application process whose unix id is targetPid) to true
end tell
return
end if
set launchCommand to "/usr/bin/open -n -a " & quoted form of appPath
if selector is "work" then
set launchCommand to launchCommand & " --args " & quoted form of ("--user-data-dir=" & profileDir)
end if
do shell script launchCommand
end run
Create the second launcher from the same script, changing only property profileName : "Work" to property profileName : "Personal". Export it as Claude Personal.app in /Applications. These are small launcher applets, not renamed copies of the Claude application. You can drag both into the Dock and optionally give their icons different colours so the shortcuts are easier to distinguish.
On the first focus attempt, macOS may ask the launcher for permission to control System Events. Allow that automation if you want focus-on-click to work. If macOS reports an accessibility restriction, check the launcher’s access in System Settings → Privacy & Security → Accessibility. The script stops if focusing fails; it does not silently create another instance as a fallback.
This launcher matches the main Claude executable and excludes helper processes carrying --type=. Personal matches a main process without a user-data override; Work matches the work directory. This is a practical check for normal sequential clicks, not an atomic lock: avoid repeatedly clicking while Claude is still starting. If a process remains running after you close its last window, bringing it forward may not restore a window. Finish any background work, quit that instance normally, then relaunch it. The script deliberately does not kill background work or start a second process against the same profile.
3. Add the ccp and ccw Terminal aliases
These are the two shortcuts I use. Add them to ~/.zshrc if you use zsh, the default shell on modern macOS:
alias ccp='open -a "Claude Personal"'
alias ccw='open -a "Claude Work"'
Open a new Terminal tab, or reload your shell configuration:
source ~/.zshrc
Now ccp opens or focuses the personal instance, and ccw opens or focuses work. The aliases call the wrappers without -n; the wrapper decides whether the underlying Claude process needs starting. These names are my own shortcuts, not commands supplied by Anthropic. They require the two launcher apps created above.
4. Check the setup before relying on it
- Sign in one account at a time. Start Personal, check the account, and quit it before signing in to Work for the first time. Browser login callbacks can otherwise reach an unexpected instance. Once both sessions are established, open both launchers.
- Check the process arguments. Use the command below to look for the main processes. Work should show the Claude-Work path. Personal should not have a user-data override. Process IDs are temporary; never hard-code one into a launcher.
- Check focus behaviour. With both windows open, run ccp and ccw again, one at a time. Each should bring its existing window forward. If you get another process or a logged-out duplicate, stop and review the profile matching.
- Check integrations independently. Confirm the intended account, MCP servers and permissions in each profile. Give each server or development service a separate port where necessary. Repeat these checks after a Claude update.
ps -axww -o pid=,command= | grep '[C]laude.app/Contents/MacOS/Claude' | grep -v -- '--type='
To inspect an AppleScript applet later, decompile its script:
osadecompile '/Applications/Claude Work.app/Contents/Resources/Scripts/main.scpt'
That command applies to applets exported from Script Editor. A shell-based wrapper may store its launcher elsewhere. Avoid sharing unfiltered process listings or profile contents: they may expose local paths or integration details that do not belong in a public support thread.
What this separates — and what it does not
The purpose is to keep the desktop contexts distinct: a personal login and its profile settings alongside a work login and its settings. Both still run as the same macOS user. They can access files allowed to that user and any tools you authorise. Shared repositories, environment variables, external MCP credentials and network services do not become isolated just because the desktop profile has another name.
In particular, this guide does not configure the standalone Claude Code CLI. Its configuration uses a different mechanism, including CLAUDE_CONFIG_DIR, described in the official Claude Code settings documentation. Do not assume these desktop aliases separate every CLI credential, permission or project setting. If two agents will edit the same project, give them separate Git worktrees or checkouts and a clear division of work.
Keeping Personal on the default desktop profile is convenient for an existing login, but it also means opening the stock Claude icon can target that profile. Use the named launchers consistently. For a new installation, another option is to give Personal its own explicit directory too; that requires changing both its launch command and the process matcher together. Do not move or copy a live profile while Claude is using it.
Common questions
Do I need to install Claude twice?
Not for this arrangement. Both applets launch /Applications/Claude.app. The app installation is shared; the desktop data directories differ. Updating the main application updates the binary both launchers use, although the workaround still needs a quick behaviour check afterwards.
Does this increase my usage allowance?
No. A launcher does not change a subscription, add credits or reset a limit. Each account keeps its own applicable access and usage limits. The benefit is being able to keep personal and work contexts available without repeatedly signing out.
Why did a click open a logged-out window?
One thing to check is whether more than one process is using the same profile. Save your work, quit the affected instances normally, and reopen the intended launcher once. Also check automation permissions and the exact directory in the launch command. Reinstalling or deleting profile folders should not be the first response.
Sources and credit
The profile-flag approach is described by Philipp Stracker. aoxborrow’s launcher gist explores named launchers and focus behaviour; its current version uses a different directory layout from mine. The AppleScript above is a compact implementation for the specific paths in this article. Melkon’s guide covers a different approach involving copied app bundles. You do not need its bundle-modification steps for this setup.
Using AI to ship faster? Make sure the code holds up.
A better AI workflow helps you move between projects. It does not tell you whether the resulting application has sound architecture, handles data properly or is ready for release. If you have inherited a codebase, built an MVP with AI, or reached the point where every change feels fragile, that is a good moment for an independent review.
My mobile and web code-audit service reviews architecture, state management, performance, the security surface and release readiness. You receive a written, severity-ranked report with recommended fixes and a live walkthrough, so you can decide what deserves attention first. We agree the scope before the review; implementation of the fixes can be a separate engagement.
I also help teams with AI adoption and rollout and AI product development. Tell me about your app and request a code audit. Bring the stack, the stage of the product and the part you trust least; we will work out a useful scope together.