人工智能与自动化 2026年4月29日

OpenClaw 工作区、openclaw.json 与 ~/.openclaw 状态隔离(共享租用 Mac mini,2026)

VmMac Engineering Team 2026年4月29日 约 21 分钟阅读

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(按域调整)验证再宣称胜利。

气味测试:若 README 要求用户先 cd 某处再运行 OpenClaw,则 plist 不完整。

在香港、日本、韩国、新加坡、美国保持 plist 模板一致;把区域端点放进由绝对路径引用的小 env 文件,便于审计时 diff 可读。

事故手册:状态中毒 vs 真实模型退化

  1. launchctl print 输出捕获运行中网关的 pwd
  2. 对该 cwd 下的 openclaw.json 做哈希,与自认为已部署的 git 标签比对。
  3. 列出状态子目录的大小与 mtime;留意暴涨的 SQLite 或 JSONL。
  4. 禁用新流量,排空队列,快照日志。
  5. 把中毒状态挪到一旁——不要删除——以便复盘保留证据。
  6. 在干净的 VmMac 金丝雀主机上重放失败请求。
  7. 结案前记录修复属于配置磁盘还是模型

我们在 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」或「共享缓存」的事故数。若非零,物理规律同意你需要另一台主机。

克隆状态,而非谜团

为预发 OpenClaw 工作区再租一台 VmMac Mac mini,使生产环境 ~/.openclaw 永不接触实验缓存。