OpenClaw 工作区、openclaw.json 与 ~/.openclaw 状态隔离(共享租用 Mac mini,2026)
把 OpenClaw 跑在 VmMac 租用的单台 Apple Silicon Mac mini上的平台工程师很快会发现:「在我 shell 里能用」不等于「两个 squad 在 launchd 下也能用」。脆弱的接缝几乎从不是模型卡——而是工作区根目录、纳入版本库的 openclaw.json 合约,以及历史上落在 ~/.openclaw 下的每用户状态树。当预发实验把缓存写在生产令牌旁边,或部署后 WorkingDirectory 漂移,网关会读错文件,事故看起来像「LLM 退化」。本 2026 矩阵划清边界,并与 预发与生产 launchd 隔离、密钥与 plist 卫生、多账号隔离 配套,使香港、日本、韩国、新加坡、美国的 VmMac 主机保持乏味的一致。
从 安装与部署 起步,用 帮助 理解访问语义;当管理层认同最便宜的办法是第二台 mini而不是再花一周挖共享状态时,打开 定价。
工作区边界:仓库根与运行时检出目录
把 OpenClaw workspace 视为自动化检出的目录:应包含 openclaw.json、skills 清单以及你期望代码评审覆盖的仓库内封装。运行时生成的大型缓存、权重镜像下载、草稿都应不进 git,除非有明确的制品策略。
在 VmMac 上常常根本不需要符号链接——清晰胜过小聪明。若工程师克隆到 ~/src/openclaw-tenant-a,而 launchd 仍指向上个月的 ~/build/openclaw,你会无休止排查。在与 SSH 堡垒同一页记录每个租户的规范绝对路径。
- Git 存意图——默认值、特性开关、经审计的工具列表。
- 磁盘存熵——缓存、日后需脱敏的会话记录、临时导出。
- Plist 存胶水——环境、cwd、用户会话、日志路径。
openclaw.json 作为合约:版本、评审与密钥形态
openclaw.json 应像 API schema:稳定键、显式默认值、仅在 JSON 方言允许处注释。评审时拒绝夹带长期 API 密钥的 diff——它们属于 密钥卫生 描述的保管平面,而不是实习生都能 cherry-pick 的文件。
打标签发版,才能回答「东京 03:14 跑的是哪份配置?」而无需 SSH。若必须热修某区域,请分支、部署、合并——共享主机上的临时雪花几乎总比主人活得久。
tools 允许列表,他们需要不同文件或不同用户——绝不每天手工在同一路径上切换两次。
~/.openclaw 及其伙伴:绝不能碰撞的内容
用矩阵决定主目录状态前缀与工作区各自存放什么。
| 制品 | 工作区 | 主目录状态 |
|---|---|---|
| 网关路由表 / 钉死的工具清单 | 是——已评审 JSON | 否——避免脑裂 |
| 会话 cookie、设备配对 blob | 否——绝不提交 | 是——chmod 收紧 |
| 结构化日志 | 可选模板 | 是——体量大、轮转 |
| 按开发者覆盖 | 共享 CI 主机上绝不 | 仅限个人笔记本 |
有人问「能不能删 ~/.openclaw 重置?」答案应引用手册章节而非即兴——删除能修好中毒缓存,但若跳过导出步骤也会破坏合法配对。
单台 Mac mini 上的多租户矩阵
VmMac 擅长独占金属,但财务有时强迫共享。诚实排序:
| 模式 | 隔离强度 | 运维负担 |
|---|---|---|
| 每租户独立物理机 | 最高 | 最低戏剧性 |
| 同一主机不同 macOS 用户 | 高 | 中——磁盘配额与 VNC 纪律 |
| 同一用户不同目录 | 低——人为失误磁铁 | 高——不停审计 |
若被迫采用第三行,至少强制执行不相交的 LaunchAgent 标签、不相交的 localhost 端口,以及夜间对活动 plist 与 git 做 diff 的自动化。更好:遵循 预发隔离,直到财务批准另一台 mini。
launchd WorkingDirectory、EnvironmentVariables 与路径优先级
WorkingDirectory 不是装饰——它决定 openclaw.json 内相对路径如何解析以及加载哪棵 node_modules。对笔记本上会在 ~/.zshrc export 的变量,用显式 EnvironmentVariables 配对。修改后务必用 launchctl print gui/$UID/com.example.openclaw(按域调整)验证再宣称胜利。
cd 某处再运行 OpenClaw,则 plist 不完整。
在香港、日本、韩国、新加坡、美国保持 plist 模板一致;把区域端点放进由绝对路径引用的小 env 文件,便于审计时 diff 可读。
事故手册:状态中毒 vs 真实模型退化
- 从
launchctl print输出捕获运行中网关的pwd。 - 对该 cwd 下的
openclaw.json做哈希,与自认为已部署的 git 标签比对。 - 列出状态子目录的大小与 mtime;留意暴涨的 SQLite 或 JSONL。
- 禁用新流量,排空队列,快照日志。
- 把中毒状态挪到一旁——不要删除——以便复盘保留证据。
- 在干净的 VmMac 金丝雀主机上重放失败请求。
- 结案前记录修复属于配置、磁盘还是模型。
我们在 2026 年见到的大多数伪「模型质量」下滑,其实是陈旧的工具允许列表或过期的 OAuth 刷新令牌堆在同一棵状态树里——LLM 没问题,文件系统有问题。
常见问题:租用 Mac mini 上的 OpenClaw 工作区与状态
openclaw.json 是否应放在共享租用 Mac mini 的 git 里? 可以——用于 schema 与非密钥默认值,但绝不能作为密钥的唯一归宿——仓库文件要与单一文档化的密钥平面及每租户状态前缀配对,使预发无法从磁盘读取生产令牌。
什么该放在 ~/.openclaw,什么留在工作区检出? 持久的机器本地缓存、设备配对与敏感运行时材料放在主目录状态树;团队已评审的配置留在工作区,并确保 launchd 显式设置 WorkingDirectory。
如何在同一 VmMac 主机上隔离两队而不混淆 OpenClaw 状态? 优先分离 macOS 用户或分离主机;若必须共享,使用不相交的 OPENCLAW_HOME 风格前缀、不相交的 LaunchAgent 标签与不同的 localhost 端口,遵循我们的预发隔离手册。
launchd WorkingDirectory 会改变读取哪个 openclaw.json 吗? 相对路径从 WorkingDirectory 与用户环境解析;模糊的 cwd 是预发读到生产工作区副本的首要原因——验证后将 plist 钉为绝对路径。
香港、日本、韩国、新加坡、美国的主机如何保持一致? 存储同一 git 修订的 openclaw.json,仅允许有意为之的区域环境覆盖;每月 diff plist,拒绝无工单的临时主机改动。
为何第二台 VmMac Mac mini 比分摊状态手术更便宜
把租户拆到另一台 mini,模糊的 chmod 谜题会变成可向安全团队解释的网络可达边界。边际租金清晰落在 COGS;边际工程师周的法医合并往往不落账。
若领导犹豫,展示上季度根因是「错误 cwd」或「共享缓存」的事故数。若非零,物理规律同意你需要另一台主机。