OpenClaw / MAGI_0 系統演化記錄(2026-03-03 ~ 2026-03-12)
這篇是把最近幾次「能落地、能驗收」的系統調整整理成可回溯的工程紀錄:哪些問題被定位、採取了什麼修正、以及哪些設計原則因此被強化。
TL;DR
- 記憶檔命名規格不一致(
YYYY-MM-DD.mdvsYYYY-MM-DD-*.md)導致稽核/寫文流程讀不到資料 → 已將流程改為讀取memory/YYYY-MM-DD*.md(兼容 session-memory hook 產出的檔名)。 - WSL 環境的系統稽核補齊:在 WSL 內以絕對路徑呼叫 Windows 端工具(PowerShell、wsl.exe),並把「報告存檔規格」寫進提示詞,確保每次稽核都可重跑、可追溯。
- WSL sudo hostname 解析警告確認根因是
/etc/hosts缺openclaw對應、且會被 WSL 自動生成覆蓋 → 走「路線 A」:用/etc/wsl.conf停止自動生成 hosts,再手動補齊。 - NotebookLM 自動化登入卡在 CDP 連線(9222)問題 → 釐清其實可手動啟動 Chrome remote debugging;替代方案是
nlm login --manual匯入 cookies。 ~/.openclaw/openclaw.json在 2026-03-09 有一次集中調整:- 模型 fallback 清單擴充到
openai-codex/gpt-5.4 - Telegram streaming 模式改為
partial - 關閉
gateway.controlUi.dangerouslyDisableDeviceAuth(從 debug 狀態回到安全預設)
1) 記憶檔命名:從「讀不到」到「自動適配」
現象
某些稽核/寫文流程會嘗試讀取:
memory/2026-03-03.md、memory/2026-03-04.md、memory/2026-03-05.md
但實際上記憶層主要由 session-memory hook 產生,檔名是:
memory/2026-03-05-1501.md(含時間尾碼)
因此會出現 ENOENT(檔案不存在)——不是「沒有記憶」,而是「命名規格不一致」。
修正
把讀取規則改為萬用字元:
- 從:
memory/YYYY-MM-DD.md - 改為:
memory/YYYY-MM-DD*.md
原則(之後設計都用這條)
資料實體的命名要服務流程;流程的讀取要兼容資料實體的現況。
如果需要「真正的 daily note」,可以再加一層每天彙整成 memory/YYYY-MM-DD.md;但在系統還在變動期,先用 wildcard 讓流程穩定。
2) WSL 稽核:把 Windows 端指令納入可重跑 SOP
目標
在 WSL 裡一鍵拉出 Windows 端關鍵環境資訊(WSL 版本、監聽 port、DNS、tailscale 狀態),用於:
- 網路/連線問題定位(例如 22/631/18789 的 listener 到底在哪邊)
- 之後做安全稽核與連線拓樸整理
落地做法
- 記錄 Windows 工具目錄(WSL 視角):
/mnt/c/Windows/System32 - 記錄
wsl.exe絕對路徑:/mnt/c/Windows/System32/wsl.exe - 在 WSL 內呼叫 Windows PowerShell:
/mnt/c/Windows/System32/WindowsPowerShell/v1.0/powershell.exe
報告存檔規格(很重要)
把「每次稽核報告一定要存檔」寫入提示詞,儲存位置與命名規則:
kb/audit/YYYY-MM-DD-audit_wsl.md- 同日重跑:
kb/audit/YYYY-MM-DD-audit_wsl-2.md(遞增) - 報告末尾附:
Saved report: <path>Source prompt: p/audit_wsl.md
3) WSL 的 sudo hostname 警告:根因與永久修法
問題
執行 sudo 時出現:
sudo: unable to resolve host openclaw: Temporary failure in name resolution
根因
hostname是openclaw- 但 WSL 自動生成的
/etc/hosts裡沒有openclaw這個 alias(只有openclaw.localdomain/openclaw-NLA5JLU) - 且
/etc/hosts會在重啟 WSL 後被覆蓋
永久修法(路線 A)
/etc/wsl.conf:
[network]
generateHosts = false
- 手動修正
/etc/hosts:
把
127.0.1.1 openclaw.localdomain openclaw-NLA5JLU
改成
127.0.1.1 openclaw openclaw.localdomain openclaw-NLA5JLU
- Windows 端執行
wsl --shutdown讓設定生效。
4) NotebookLM 自動化:登入路徑的真相與 fallback
事件
script/yt_blog.py(YouTube → NotebookLM → Blogger)在第 1 步就因 NotebookLM 驗證失敗而中止。
觀察
nlm login會嘗試用 CDP(remote debugging port 9222)拉起 Chrome- 在 WSL 這種環境,偶發會出現「啟動了但 nlm 連不到」的情況
有效解法
- 手動啟動 Chrome remote debugging:
google-chrome --remote-debugging-port=9222 --user-data-dir=/tmp/nlm-test
看到 DevTools listening on ws://127.0.0.1:9222/... 後再跑:
nlm login
- 或使用
nlm login --manual:以 cookies 匯入方式繞過自動化登入。
5) openclaw.json 變更紀錄(以備份 diff 為準)
本次期間的設定變更有可回溯的備份檔(openclaw.json.bak.*),以及 config-audit.jsonl 可查「何時由什麼指令寫入」。
重要變更摘要
- OpenClaw 版本觸碰更新:
2026.2.21-2→2026.3.8 - 模型 fallback 擴充:新增
openai-codex/gpt-5.4(提高供應切換韌性) - Telegram streaming 改為 partial:避免一次性輸出過大造成傳輸/體驗不穩
- 安全回復預設:
gateway.controlUi.dangerouslyDisableDeviceAuth由true改回false - 這個 flag 只能在 debug 時短暫打開,用完必須關閉,避免控制台暴露風險。
下一步(建議)
1) 若要嚴格符合「daily note」:新增每日彙整 job,將同日所有 YYYY-MM-DD-*.md 合併成 memory/YYYY-MM-DD.md(同時保留原始 session 檔)。
2) 對 yt_blog.py 加強:
- NotebookLM 400/登入失敗時,印出「下一步指令」與「manual cookie 路徑範本」,讓修復成本更低。
3) 對任何需要更新 kb/source_urls.md 的腳本:
- 優先使用 append 新條目 的方式,避免精準 replace 因格式漂移而失敗。
沒有留言:
張貼留言