Claude / Codex 隔离原理
ProfileDock 不替代官方应用,也不修改它们。它只做两件事:
1. 用 --user-data-dir 启动
Claude Desktop 和 Codex 都基于 Electron。Electron 应用接受 --user-data-dir <path> 参数,强制使用指定目录作为用户数据目录(缓存、登录态、设置都落在这里)。
ProfileDock 为每个 profile 分配一个独立路径:
~/Library/Application Support/ProfileDock/Profiles/<app-kind>/<uuid>/ 启动时把这个路径传给官方应用,官方应用就把所有状态写到这里。
2. 为 Codex 额外设 CODEX_HOME
Codex 内部的 codex app-server 后台进程默认共享 ~/.codex。这会让多个 Codex profile 抢占同一个目录。
ProfileDock 启动 Codex 时同时设置环境变量:
CODEX_HOME=<profile-dir>/CodexHome 这样每个 Codex profile 都有独立的 app-server 状态,不会出现 ECONNRESET 错误。
包装 .app 是什么
每个 profile 生成一个独立的 .app bundle 放在 ~/Applications/ProfileDock/。这些 bundle 用不同的 CFBundleIdentifier,所以 macOS 把它们当成独立应用:
- Dock 显示独立图标和角标
- Cmd-Tab 能区分
- Spotlight 能搜到
- Mission Control 能分别管理窗口
这些 .app 内部只是一个 shell 脚本,调用真正的官方应用 + 传递 --user-data-dir。
不做的事
- 不读取 token、不读 cookie。所有登录态都在 Electron 内部,ProfileDock 看不到。
- 不代理流量。请求直接走官方应用,ProfileDock 在网络层完全透明。
- 不修改官方应用。原始
/Applications/Claude.app不会被改动。 - 不持久化任何凭证。所有 profile 数据落在 macOS Application Support,按系统权限保护。