Community编程与开发github.com

soerenmartius/claude-desktop-profiles

当用户希望在 Mac 上同时登录多个 Claude 桌面应用账户、每个账户一个应用实例并可从 Dock 切换,或者询问单独的 Claude 桌面配置文件、多账户 Claude 设置或 Claude 应用的 Dock 启动器时使用。

claude-desktop-profiles 是什么?

这是一个针对 macOS 的 Claude 桌面应用多账户管理技能,让用户能够在不修改原始应用或默认配置文件的前提下,通过同一应用同时运行多个独立账户实例。其核心机制是利用单个 `/Applications/Claude.app` 结合 `--user-data-dir` 参数为每个账户创建独立的配置文件目录,并通过 AppleScript 生成带标签的 Dock 启动器(如 `Claude (工作).app`)来管理实例。技能严格遵循一系列规则:绝不克隆或重签名应用、绝不写入默认配置文件、绝不启动已运行的配置文件(以避免进程冲突),并强制用户一次只登录一个账户以确保身份验证流程正确。它涵盖了从预检查、构建启动器、配置迁移(如 MCP 服务器和定时任务)、生成 README 到最终恢复的所有步骤,并对常见问题(如 Dock 图标合并、登录重定向失败)提供了处理方案。此技能仅适用于 macOS,Windows 环境未经验证。

兼容平台✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/soerenmartius/skills/tree/HEAD/skills/claude-desktop-profiles

Installed? Explore more 编程与开发 skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

在你喜欢的 AI 中提问

打开一个已预加载此 Agent Skill 的新对话。

文档

Claude 桌面配置文件

一个真实的 /Applications/Claude.app,通过 --user-data-dir 为每个账户创建一个配置文件目录,每个账户有一个独立的 Dock 启动器。现有应用、其登录状态和默认配置文件均不会被改动。撤销操作就是删除这些启动器和额外的配置文件夹。

此方法源自 Chad Timblin 的指南 Run a Separate Claude Desktop App for Each Claude Account。仅限 macOS。Windows 未经验证;该指南的附录有相关的已知说明。

基本规则

  1. 绝不修改、移动、重命名、复制或重新签名 /Applications/Claude.app。 即使作为后备方案也不允许。如果步骤 2 失败,请停止并报告,不要尝试克隆。
  2. 绝不写入默认配置文件 ~/Library/Application Support/Claude。
  3. 绝不启动已在运行的配置文件。 该应用在 macOS 上没有单实例锁:对同一文件夹启动两次会产生两个共享同一文件夹的活动进程(已于 2026-11-04 在 v4.16336.0 上验证,以及于 2026-07-11 在 v1.20186.1 上验证)。启动器的聚焦路径绝不能回退到重新启动。
  4. 登录是用户的任务,且必须恰好有一个实例在运行。 Google 和 SSO 登录通过浏览器往返,并通过 claude:// 链接返回,macOS 会将其交给已运行的实例。如果两个实例同时打开,已登录的实例会收到链接并记录“Google sign-in code does not answer a sign-in this app started; ignoring”,而另一个实例仍停留在登录界面。绝不处理密码。
  5. 注意你的运行环境。 如果此会话在 Claude 桌面应用内部运行,退出该应用会终止会话:请将退出步骤以文本形式交给用户。如果无法读取 ~/Library,请告知用户从终端运行此脚本。
  6. 只删除你在此会话中创建的测试工件。 脚本的冒烟测试将拒绝触碰在此会话运行之前就已存在的文件夹。

范围

整个工作大约由十个命令加上一个 README 组成。关于已安装版本的信息来自步骤 2 中的一次性测试,绝不通过读取 app.asar、授权、fuses 或 Electron 内部机制获取。自定义启动器图标仅在用户要求时提供。

步骤

S 是此技能目录中的 scripts/claude-profiles.sh;运行 bash $S 可查看用法。AppleScript 源代码存放至 CLAUDE_LAUNCHER_SOURCES(默认 ~/Documents/claude-multi-account/launcher-sources);如果用户选择了其他文件夹,请将其指向步骤 5 中的 README 文件夹。如果 /Applications 不可写,请设置 CLAUDE_LAUNCHER_DIR=$HOME/Applications。verify-mechanism 会写入并删除 /tmp/claude-profile-test-<pid>。

  1. 输入。 主账户是当前已登录的账户。它保留默认配置文件,并得到 Claude (<Label>).app。其他每个账户都会获得文件夹 Claude-<Label> 及其自己的 Claude (<Label>).app。如果未提供标签和电子邮件,请询问用户。要判断哪个账户已登录,请将默认配置文件的 config.json 中的 lastKnownAccountUuid 与 ~/.claude.json 中的 oauthAccount 进行比较;如果它们不同,请询问用户应用显示的邮箱是哪个。没有配置文件文件夹名称可以是另一个的前缀;build 会拒绝与现有文件夹以及由其他启动器源命名的文件夹冲突。位于 Application Support 下以 Claude 开头但不包含 Cookies 文件的文件夹(例如 Claude-3p)不是配置文件;请忽略它们。
  2. 预检查与机制验证。 运行 bash $S preflight。警告用户将会出现一个窗口,然后运行 bash $S verify-mechanism。失败意味着停止并告知用户。
  3. 构建与冒烟测试。 主账户:bash $S build <Label> default。其他每个账户:bash $S build <Label> Claude-<Label>,然后 bash $S smoke <Label> Claude-<Label>。绝不对主账户启动器进行冒烟测试:其聚焦路径会在用户不期望的时刻触发自动化提示。如果存在之前运行创建的启动器或 README,请备份 README 文件夹,原地重建(build 会覆盖),并且绝不删除你在此会话中未创建的启动器。
  4. 迁移检查。 claude.ai 端的内容(对话、项目、连接器)随登录转移。桌面端的内容则不会。MCP 服务器位于 <profile>/claude_desktop_config.json:有选择地复制条目,因为全部复制会使每个本地服务器进程数量翻倍。定时任务位于 <profile>/local-agent-mode-sessions/<uuid>/<uuid>/scheduled-tasks.json 和 <profile>/claude-code-sessions/...,仅在其账户在运行实例中登录时执行,并且在目标实例退出时迁移:精确复制字段,丢弃 notifySessionId,保留 lastRunAt,在旧副本上设置 enabled: false 并保留它。同一文件中的 preferences 块(Cowork 设置、绕过权限门控、允许的来源、文件夹授权、Chrome 扩展配对)保留在默认配置文件中;在 README 中列出用户可能需要重新设置的内容,并注明只有一个实例应与 Chrome 扩展配对。~/.claude 由所有实例共享,因此全局的 CLAUDE.md 适用于所有实例。
  5. README。 将 references/readme-template.md 填充到用户命名的文件夹中(默认为 ~/Documents/claude-multi-account)。
  6. 交接 使用下面的文本,然后停止。在用户报告每次登录之前,运行 bash $S ps 并确认它没有输出任何内容;如果有输出,请自行退出这些实例(使用 kill 加上它们的 PID,SIGTERM 对于此应用是干净的退出方式),然后才告诉用户点击那个启动器。每个运行中的窗口看起来都一样,因此“退出已登录的那个”是用户容易出错的步骤。
  7. 当用户报告时: bash $S ps 必须显示每个实例运行在独立的配置文件上,且带有独立的 account= UUID。

交接文本

每次只打开一个实例时:

  1. 将启动器从“应用程序”文件夹拖入 Dock,并移除普通的 Claude 磁贴:一旦多个实例运行,该磁贴会为所有实例亮起,并聚焦于 macOS 选中的那个。
  2. 退出所有 Claude 窗口:在每个窗口中按 Cmd+Q,直到没有剩下任何窗口。所有窗口看起来都一样,所以不要试图保留一个。只有当恰好一个实例运行时,登录才能完成。
  3. 点击 Claude (<Label2>),使用该账户登录,然后以相同方式退出。对每个后续账户重复此操作,始终确保没有其他东西在运行。
  4. 点击 Claude (<Label1>)。主账户仍保持登录状态。
  5. 从现在开始,可以打开任意组合。要仅退出一个实例,先点击其窗口,然后按 Cmd+Q。

当启动器首次聚焦一个正在运行的实例时,macOS 会请求允许它控制系统事件。点击“允许”;拒绝只会禁用自动聚焦。正在运行的磁贴共享同一个图标,并可能在 Dock 重启后合并。两者均无害。

常见问题

症状处理方法
两个实例显示相同的 Dock 图标,或合并为一个磁贴外观问题。启动器通过进程而非磁贴查找实例。
快速输入快捷键仅在一个实例中生效两者都注册了它。在其中一个实例的设置中更改或禁用它。
某个实例显示“重新启动以更新”退出所有实例,然后通过启动器重新启动。一个应用包,一条更新路径。
在第二个配置文件中使用 Cowork它会下载自己的 VM 包,每个配置文件约 10 GB。
kill $pids 失败并显示“illegal pid: 1\n2”zsh 不进行单词拆分。通过管道传递给 xargs kill。脚本已正确处理。
测试文件夹在其实例仍在运行时被删除先终止实例,确认已关闭,然后删除。脚本已正确处理。
Google 或 SSO 登录打开浏览器,结束于“在 Claude 应用中完成登录”,并且“打开 Claude”无反应;新实例停留在登录界面另一个实例正在运行并接管了回调。退出所有实例(使用 ps 验证),仅打开该启动器,重新登录。所有实例共享 ~/Library/Logs/Claude/main.log;在该文件中搜索 [Auth] 和 sign-in code 以查看哪个实例收到了回调。多次尝试之间 PID 不变意味着用户从未退出过。
设置期间出现自动化提示有人打开了一个其实例已在运行的启动器。点击“允许”;没有坏处。

红色标志

  • “该应用有单实例锁,因此聚焦失败时重新启动是安全的。”事实并非如此。步骤 2 是此版本的唯一真实信息来源。
  • “登录是在应用内进行的,因此两个实例都可以保持打开。”登录期间必须只有一个实例运行,始终如此。
  • “方案 B:克隆并重新签名应用。”禁止。请停止并报告。
  • “让我先检查 app.asar / entitlements / fuses。”超出范围。
  • “我会顺便给图标添加徽章。”仅在用户要求时。
  • “我也会测试主账户启动器。”其聚焦路径会提示用户。仅限管道检查。

恢复

重置一个非主要实例:退出它,删除其配置文件目录,点击其启动器,重新登录。撤销所有操作:删除启动器和额外的配置文件目录。真实的应用和默认配置文件从未被涉及。使用 osacompile -o "/Applications/Claude (<Label>).app" <source>.applescript 从其源代码重建启动器。

相关技能