OpenClaw 的 Agent 不是只有一段 prompt。它有自己的 workspace,里面放着长期记忆、人格设定、工具约定、skills,以及 memory-core 生成的记忆文件。
这些文件长期积累以后,本质上就是 Agent 的“大脑”。如果机器坏了,或者误删了 workspace,就不只是丢配置,而是丢掉了 Agent 和用户长期协作形成的上下文。
所以这次我把 OpenClaw 的 workspace 接入 Git,推到一个私有仓库里,作为可恢复的备份。
Workspace 在哪里 链接到标题
OpenClaw 默认 workspace 路径是:
~/.openclaw/workspace
在一台示例机器上,对应:
/home/agent/.openclaw/workspace
它和 ~/.openclaw/ 是两个概念:
| 路径 | 内容 | 是否应该进 Git |
|---|---|---|
~/.openclaw/workspace |
Agent 工作区、记忆、skills | 可以,建议私有仓库 |
~/.openclaw/ |
配置、凭据、session、运行状态 | 不应该提交 |
OpenClaw 官方文档也明确建议:把 workspace 当作 private memory,放进私有 Git 仓库备份。
官方示例命令大致是:
cd ~/.openclaw/workspace
git init
git add AGENTS.md SOUL.md TOOLS.md IDENTITY.md USER.md HEARTBEAT.md memory/
git commit -m "Add agent workspace"
Workspace 里都有什么 链接到标题
实际查看 workspace,大概有这些文件:
AGENTS.md
SOUL.md
TOOLS.md
IDENTITY.md
USER.md
HEARTBEAT.md
MEMORY.md
DREAMS.md
memory/
skills/
skills-lock.json
.agents/
.openclaw/
其中比较重要的是:
| 文件 | 作用 |
|---|---|
AGENTS.md |
Agent 的操作原则和长期约定 |
SOUL.md |
人格、语气、边界 |
USER.md |
用户画像和偏好 |
TOOLS.md |
本地工具使用约定 |
HEARTBEAT.md |
定期检查任务 |
MEMORY.md |
长期记忆,最重要 |
DREAMS.md |
dreaming 生成的人类可读日记 |
memory/YYYY-MM-DD.md |
每日记忆日志 |
skills/、.agents/ |
workspace 内的自定义技能 |
这些文件大多应该进入 Git,尤其是 MEMORY.md 和自定义 skills。它们不可再生,丢了很难恢复。
官方建议之外的现实问题 链接到标题
官方建议把 memory/ 一起提交。但实际执行时,我发现一个问题:memory-core 的一些中间产物里可能包含原始会话片段。
例如:
memory/.dreams/session-corpus/
memory/.dreams/events.jsonl
memory/.dreams/short-term-recall.json.migrated
memory/dreaming/light/
memory/dreaming/rem/
memory/dreaming/deep/
这些文件有两个特点:
- 自动生成,变动频繁;
- 可能包含原始聊天、token、凭据、webhook 等敏感片段。
官方文档也强调不要提交 secrets、raw dumps of chats、sensitive attachments。于是我的处理原则是:
- 提交长期稳定记忆;
- 不提交原始会话 dump;
- 不提交 dreaming 中间产物;
- 对
MEMORY.md中已经沉淀进去的 token 做脱敏。
最终 .gitignore 链接到标题
最终使用的 .gitignore 是:
# Official starter: avoid committing secrets
.DS_Store
.env
**/*.key
**/*.pem
**/secrets*
# OpenClaw runtime state inside workspace
.openclaw/
# Temporary/sandbox folder
~/
# Raw chat dumps / recall runtime artifacts (may contain sensitive transcripts)
memory/.dreams/
# One-time auth / QR artifacts
lark-qr.png
# Dreaming intermediate narrative may include raw snippets/secrets
memory/dreaming/
这里有一个取舍:官方示例只给了防密钥泄露的 starter,但我额外排除了 memory/.dreams/ 和 memory/dreaming/。
原因不是它们“不重要”,而是它们太接近原始聊天和运行时状态。我的目标是备份 Agent 的可恢复记忆,而不是把所有原始 session 全量归档进 Git。
敏感信息扫描 链接到标题
提交前做了两类检查。
第一,看大文件:
git ls-files --others --exclude-standard -z \
| xargs -0 du -k \
| sort -rn \
| head -20
第二,扫敏感字符串:
git ls-files --others --exclude-standard -z \
| xargs -0 grep -InE \
"(sk-[A-Za-z0-9_-]{20,}|whk_[A-Za-z0-9_]+|凭据|password|appSecret|apiKey)" \
2>/dev/null \
| head -80
这一步发现:
MEMORY.md里有 webhook token;- dreaming 中间产物里有 Windmill token 和凭据片段;
- raw session corpus 里有大量原始对话。
处理方式:
MEMORY.md里的真实 token 替换为<OPENCLAW_WEBHOOK_TOKEN>、<WINDMILL_TOKEN>;memory/.dreams/、memory/dreaming/加入.gitignore;- 删除临时脱敏备份文件,避免误提交。
推送到私有仓库 链接到标题
GitHub 上新建私有仓库:
<PRIVATE_GIT_REMOTE_URL>
然后在 workspace 里配置 remote:
cd /home/agent/.openclaw/workspace
git remote add origin <PRIVATE_GIT_REMOTE_URL>
git branch -M main
提交并推送:
git add .
git commit -m "first commit"
git push -u origin main
实际推送前确认:
git ls-files --cached | grep -E "\.dreams|dreaming|node_modules|\.openclaw|lark-qr" || true
确保这些目录没有进入提交。
后续怎么维护 链接到标题
OpenClaw 官方文档只给了手动更新方式:
git status
git add .
git commit -m "Update memory"
git push
也就是说,OpenClaw 没有内置自动 push 机制。实际有三种维护方式:
| 方式 | 说明 |
|---|---|
| 手动 push | 想起来时执行 git 命令 |
| 让 Agent 执行 | 对 OpenClaw 说“提交并推送 workspace” |
| cron 自动推送 | 在宿主机每天定时提交 |
我更倾向于第三种。因为 dreaming 通常凌晨运行,可以在它之后自动提交:
30 3 * * * cd ~/.openclaw/workspace && git add -A && git commit -m "Daily workspace backup $(date +\%F)" && git push
这个 cron 要注意两点:
- 如果没有变更,
git commit会失败,最好用脚本包装一下; - commit message 中的
%在 crontab 里要转义成\%。
更稳一点的脚本是:
#!/usr/bin/env bash
set -euo pipefail
cd ~/.openclaw/workspace
if git diff --quiet && git diff --cached --quiet; then
exit 0
fi
git add -A
if git diff --cached --quiet; then
exit 0
fi
git commit -m "Daily workspace backup $(date +%F)"
git push
然后 cron 调这个脚本即可。
我的最终取舍 链接到标题
最终进入 Git 的内容包括:
AGENTS.mdSOUL.mdTOOLS.mdIDENTITY.mdUSER.mdHEARTBEAT.mdMEMORY.md(已脱敏)DREAMS.mdmemory/YYYY-MM-DD.mdskills/.agents/skills-lock.json
没有进入 Git 的内容包括:
memory/.dreams/memory/dreaming/.openclaw/lark-qr.png~/
这是我认为比较平衡的方案:保留 Agent 的长期记忆和可恢复配置,不把原始聊天、运行态缓存、密钥片段塞进仓库。
总结 链接到标题
OpenClaw workspace 值得接入 Git,而且应该是私有仓库。
它保存的不只是配置,而是 Agent 长期协作积累出的状态:怎么称呼用户、什么工具可用、哪些事情已经发生、哪些判断已经沉淀进长期记忆。
但 Git 化之前一定要做一次清理:
- 明确 workspace 和
~/.openclaw/的边界; - 配好
.gitignore; - 扫描敏感信息;
- 脱敏
MEMORY.md; - 不提交 raw session corpus 和 dreaming 中间产物。
这样,Agent 的“大脑”就既能备份,又不会把运行时隐私和密钥一起推上 GitHub。