OPENCLAW MACOS
STALE_
LAUNCHAGENT_
TOKEN.

macOS 上 OpenClaw Gateway 令牌與 launchd 對齊

2026.4.x 週期內,常見情況是:你在控制面或 doctor 取得新 Gateway Token,但 Telegram、企業 IM、Web UI、CLI 整批回 401/unauthorized;本機偶爾仍見 `openclaw gateway status` 正常,因為探針路徑未必打到與頻道相同的授權邏輯。真正的斷點通常在 macOS LaunchAgent:先前 `openclaw gateway install` 已把 OPENCLAW_GATEWAY_TOKEN 寫入 plist,之後你只改了 shell 或某份 compose,而 launchctl 實際載入的仍是舊值。若未使用 --forcegateway install 可能顯示「已安裝」而不覆寫 plist。下文提供可寫進工單的七步 Runbook、遠端 Mac 檢查表與三條硬門禁;並請與《升級 breaking 與環境鑑權》《Docker/CLI 與 token compose》《換機遷移與 Gateway 重配》《launchd/systemd 常駐》交錯閱讀。

1. 為何「全端 401」仍可能看到局部綠燈?

第一,頻道外掛與瀏覽器 UI 對 401 極敏感;部分本機探針只看行程與埠,不驗證 Authorization。第二,交互式終端匯出的環境與 plist 內 EnvironmentVariables 可能完全分裂。第三,控制面若已廢止舊 token,而 launchd 仍注入舊字串,凡依 Gateway 轉送的路徑會同步失敗。第四,gateway install 的「成功」訊息不等於「已刷新 plist」——必須檢查檔案 mtime 或明確走強制安裝。

2. 症狀—證據矩陣

現象優先懷疑首選證據
所有通路同時 401Gateway 授權與當前 token 不一致對照失敗請求與 Gateway 日誌中的 auth 關鍵字
僅 launchd 拉起失敗,手動前景正常plist 內嵌舊 OPENCLAW_GATEWAY_TOKENplutil -p ~/Library/LaunchAgents/*.openclaw*.plist | grep -i token
install 顯示已安裝仍無解未觸發 plist 覆寫比對 install 前後 mtime;必要時 --force
僅遠端 headless Mac 發作SSH 使用者與 GUI 使用者的 launchd 網域不一致launchctl print gui/$uid 與實際登入帳號

3. 根因:LaunchAgent 如何把「忘了改 plist」放大成全站事故

plist 屬宣告式設定:寫入後需 bootout/改檔/bootstrap 才會換血,子行程不會跟著 zshrc「即時聯動」。生產上請把令牌輪換視為小型發布:更新金鑰→更新 plist/compose→顛簸重啟→用真實業務請求驗 200,且別只用「行程還在」自我安慰。

4. 七步 Runbook

Step 01:凍結並記錄版本

記錄 CLI/Gateway 版本、LaunchAgent Label、輪換時間,避免多人並行第二次 install。

Step 02:鎖定 plist 路徑

多在 ~/Library/LaunchAgents/;多使用者迷你主機要核對是哪個 $HOME

ls ~/Library/LaunchAgents/*openclaw* 2>/dev/null launchctl list | grep -i openclaw

Step 03:三份 token 視角比對

(A)plist、(B)交互 shell(若有)、(C)金鑰庫「當前有效」指紋;工單嚴禁貼完整 secret。

Step 04:優雅卸載後改寫

對應 Label bootout,替換 token 或改為讀取受限檔/鑰匙圈,再 bootstrap。

Step 05:需要刷新時使用 --force

以 CLI 覆寫時使用文件標明的 openclaw gateway install --force,並對 checksum/mtime 留痕。

Step 06:分層驗證

日誌健康→單頻道最小收發→再開 Web UI。若仍 401,排查第二份 plist、Docker 環境或《silent Gateway 診斷》所述被跳過的 doctor 步驟。

Step 07:安全收斂

長期避免明文長期躺在 world-readable 備份;輪換後將舊版備份加密或標記作廢。

5. 遠端 Mac:SSH 十項檢查

確認 Unix 使用者一致;echo $HOME 對齊 plist;launchctl print gui/$(id -u) 服務存在;ProgramArguments 指到正確二進位;遷移後 workspace 未指舊路徑;防火牆最小放行;辨識 Aqua 登入與純 SSH;日誌目錄權限;Docker 混部時對照 compose 與 launchd 優先序;工單附已遮罩日誌與截圖。

Hard gates

門禁 A:輪換後十分鐘內 plist mtime 需變化或有 force install 紀錄。門禁 B:至少一筆非探針業務 200。門禁 C:舊 token 於金鑰系統標記 revoked。

6. 誤區複盤

只改 .env 但 Gateway 由 launchd 管理→仍 401。install 印綠但未動 plist→仍 401。本機 curl 成功但公網客戶端走另一 TLS/路由→需分開驗證。

7. 與升級/遷移交界

breaking 升級常同時動到裝置身分與 Gateway 校驗;doctor 後若只改一半環境會出現「部分 RPC 過、部分頻道死」。請把《升級 breaking》的自檢與本稿 plist 段落同一工單串行。遷移完成後應維持單一真源下發 token,避免新舊機各持一半。

8. 事故時間線(輪換後 0–30 分鐘)

T+0~2 分鐘:凍結——禁止第二次 install 撞車;禁止未讀 plist 就全員重登;置頂 Gateway 版號、換發工單與懷疑中的 LaunchAgent Label。T+3~8 分鐘:取證——各撈一筆帶 request_id 的 401 與 Gateway auth 日誌;若客戶端有錯、網關無聲,多為打到另一反代或舊埠T+9~15 分鐘:真源對齊——三人並行:plist 指紋、Docker compose(若有)、vault 現版;任兩源不一致即判定組態漂移。T+16~25 分鐘:改寫與滾動——bootout→改 plist 或 force install→bootstrap;消費者/Gateway 啟停順序全事件只能選一種 SOP。T+26~30 分鐘:關閉門禁——未通過 Hard gates 前禁止 all-clear。遠端機房無法拍肩,文字化時間軸即是唯一穩定信道。

9. 雙實例、埠位與反代:以為連 A 其實打 B

常見:除錯時前景起了一份 Gateway 佔 loopback,launchd 仍在另一埠看家;換發只同步到其中鏈路。或 NGINX/Caddy TLS 已換新,proxy_pass 仍指去年備援機。解法:定義唯一 health/build 端點,輪換後強制 curl loopback 與公網主機名各一次,hash 需一致。Docker Desktop 與 Colima 並存會形成第三真源;要嘛只保留一種監督器(僅 launchd 或僅 compose),要嘛 RFC 強制 dual-write 檢查表。

10. plist ↔ launchctl ↔ 行程:三角證據鏈

層級健康訊號典型壞相
plist 檔mtime 落於變更窗;plutil 無語法錯手改 XML 未閉合;權限漂移導致 launchd 靜默拒載
launchctllaunchctl print gui/$uid/… 路徑與 which 一致指到已刪 nvm Node;ExitTimeout 異常升高
行程環境pid 環境中 token 指紋與 vault 相符鍵缺失卻仍能啟——表示讀了別份設定檔
日誌401 浪與 auth 拒絕同一分鐘收斂CPU 高但無日誌——先排除 jsonl/bootstrap 卡住再回到權杖主線

systemd 類比只成立一半:Linux unit 常 EnvironmentFile=-;macOS 偏好把字面量嵌進 plist。勿把 Ubuntu VPS 肌肉記憶硬搬,要以表格式強迫「每層一證據」。

11. FAQ:仍 401 的隱蔽分支

問:plist 已換仍 401?答:確認改的是 launchctl print 指到的那份,而非雲端同步備份。問:先 revoke 再起飛?答:風險高;宜先滾動行程或接受極短重疊窗。問:doctor 全綠仍死?答:doctor 路徑可能短於完整頻道交握,以真實訊息回環為準。問:多使用者 mini?答:各 Unix 帳號各自 LaunchAgents,勿共用同一 Gateway plist。

問:token 移轉鑰匙圈?答:長期值得,但先在測試機驗證 launchd 可讀性,勿周五晚高峰硬切。問:要順轉 SSH/API 金鑰嗎?答:僅在威脅模型要求時一併做,避免變更面爆炸。

12. 結語

macOS 上 OpenClaw 的「全員 401」多數是令牌真源分裂,LaunchAgent plist 是最隱蔽的一環。若你需要不吃灰的 Mac mini 雲端算力承載常駐 Gateway,可參考 MACGPU 定價Telegram(關鍵字 MACGPU)。本文由 MACGPU 團隊撰寫,實際旗標請以官方 CLI 說明為準。