1. 为什么你的 OpenClaw 总是“差点意思”很多人把 OpenClaw 装好、能正常聊天之后就以为大功告成了。但用上一周你会发现一个尴尬的现象它好像每次都在“重新认识你”。昨天刚聊过的项目背景今天开新会话就忘得一干二净你让它帮忙处理个定时任务它一脸茫然你想让它按固定格式输出它每次给的模板都不一样。这不是模型不行而是你只给了它“性格”没给它“工作方法”。SOUL.md 决定它像谁USER.md 决定它在帮谁但真正决定它能不能稳定干活的是 AGENTS.md 这份工作手册以及围绕它展开的记忆、定时、技能这几套机制。这篇就聚焦 OpenClaw 进阶配置落地围绕 AGENTS.md、memoryFlush、Cron、Skill 四个热词给你可复制的 settings.json / config.toml 骨架以及 TaoToken 统一 Key 的接入方式。每一步都附上验证动作确保你改完能立刻看到效果而不是改完不知道对不对。适合谁看已经装好 OpenClaw、能正常聊天、写过 SOUL.md / USER.md、知道 MEMORY.md 和 memory/ 分层结构大概是怎么回事的人。如果你还没到这一步建议先把基础跑通再回来。下面所有配置里的 API 通道统一走 TaoToken 的 OpenAI 兼容接口这样你换模型、加子 Agent、跑 Cron 都不用再折腾 Key。2. 前置用 TaoToken 统一 Key 打通 OpenClaw 的模型通道OpenClaw 支持多种模型后端但如果你每个功能都单独配一套 Key子 Agent、Cron、Skill 各用各的管理起来会非常乱。我的做法是统一走 TaoToken 的 API 通道一个 Key 覆盖所有场景。TaoToken 的接口地址是https://taotoken.net/api兼容 OpenAI 的/v1/chat/completions格式。你只需要在 OpenClaw 的模型配置里把 base_url 指向它再把 Key 填进去就行。先拿到 Key访问https://taotoken.net/api-keys创建一个 API Key。建议按用途分 Key比如一个给主对话一个给子 Agent 和 Cron方便后面排查用量。然后在 OpenClaw 的openclaw.json或你用的config.toml里配置模型通道。以 JSON 为例{ models: { default: { provider: openai-compatible, baseUrl: https://taotoken.net/api, apiKey: sk-你的TaoTokenKey, model: gpt-4o-mini } } }如果你用的是 TOML 格式[models.default] provider openai-compatible base_url https://taotoken.net/api api_key sk-你的TaoTokenKey model gpt-4o-mini这里有个细节baseUrl后面不要加/v1OpenClaw 内部会自己拼/v1/chat/completions。如果你手动加了/v1请求路径会变成/v1/v1/chat/completions直接 404。这个坑我踩过排查了半天。配好之后先别急着往下走用一条最简单的请求验证通道是否通。你可以直接在 OpenClaw 里发一句“你好”看它能不能正常回复。如果报 401检查 Key 有没有复制完整如果报 404检查 baseUrl 是不是多写了/v1。通道通了后面的 AGENTS.md、memoryFlush、Cron、Skill 才有意义因为它们全都依赖这个模型通道。3. AGENTS.md给 AI 一份能落地的工作手册AGENTS.md 是整套进阶配置里最关键的一环。它解决的核心问题是AI 不知道该怎么工作。新 session 启动时该先读什么记忆写到哪什么操作可以直接做什么必须先问你这些不写清楚它每次都会用不同的方式“猜”。3.1 Session 启动流程把“恢复现场”写死新 session 本质上是“刚醒来”它不会自动带着上次对话的上下文。你要把恢复流程写进 AGENTS.md。建议用英文写规则模型执行更稳定## Every Session Before doing anything else: 1. Read SOUL.md — this is who you are 2. Read USER.md — this is who youre helping 3. Read memory/YYYY-MM-DD.md (today yesterday) for recent context 4. If in MAIN SESSION (direct chat with your human): Also read MEMORY.md Dont ask permission. Just do it.为什么读“今天 昨天”因为凌晨的时候“今天”的日志可能还是空的昨天才有内容。为什么 MEMORY.md 只在主会话读因为它往往放的是更私人、更核心的索引信息不适合在群聊或 Cron、子 Agent 的 session 里加载。3.2 记忆写入规范教它记“可复用的结论”很多人的记忆系统翻车不是分层结构问题而是写入规范没定。结果要么什么都堆到 MEMORY.md 变成流水账要么根本不写下次直接忘。在 AGENTS.md 里把“写到哪里、写什么、怎么写”明确下来## Memory You wake up fresh each session. These files are your continuity. ### 记忆分层 | 层级 | 文件 | 用途 | |------|------|------| | 索引层 | MEMORY.md | 核心信息与索引保持精简建议 40 行 | | 项目层 | memory/projects.md | 各项目当前状态与待办 | | 基础设施层 | memory/infra.md | 服务器、API、部署配置速查 | | 教训层 | memory/lessons.md | 踩过的坑按严重程度分级 | | 日志层 | memory/YYYY-MM-DD.md | 每日原始记录但要“记结论” | ### 写入规则 - 日志当天发生的事写入 memory/YYYY-MM-DD.md格式固定 - 项目状态项目有进展同步更新 memory/projects.md - 教训踩坑后写入 memory/lessons.md - MEMORY.md只在索引变化时更新保持精简 ### 铁律 - 记结论不记过程 - 用标签便于 memorySearch - 想记住就写文件别指望“脑子里记着”日志格式建议固定成这样方便后面 memorySearch 命中[PROJECT:名称] 标题 结论: 一句话总结 文件变更: 涉及的文件 教训: 踩坑点如有 标签: #tag1 #tag2这套格式的优势是你用 memorySearch 搜关键字时命中会更集中、更干净。非结构化的流水账会把相似度稀释掉搜起来就会变玄学。3.3 安全边界哪些能做哪些必须问把“内部 vs 外部”划清楚不然迟早踩坑尤其是群聊和自动化任务## Safety - Dont exfiltrate private data. Ever. - Dont run destructive commands without asking. - trash rm (recoverable beats gone forever) - When in doubt, ask. ### External vs Internal Safe to do freely: - Read files, explore, organize, learn - Search the web, check calendars - Work within this workspace Ask first: - Sending emails, tweets, public posts - Anything that leaves the machine - Anything youre uncertain about ### Group Chats You have access to your humans stuff. That doesnt mean you share it. In groups, youre a participant — not their voice, not their proxy.写完 AGENTS.md 后验证动作很简单开一个新 session问它“你现在应该先读哪些文件”如果它能按你写的顺序答出来说明生效了。如果它答得乱七八糟检查文件是不是放在 OpenClaw 能读到的路径下。4. memoryFlush压缩前先落盘聊再久也不丢关键信息聊久了突然“失忆”是 OpenClaw 用户最常见的抱怨。根本原因是上下文接近上限时触发了 compaction压缩压缩本身正常但可能丢细节。解决办法是开 memoryFlush让它在压缩前先把重要信息写进文件。在openclaw.json里加{ agents: { defaults: { compaction: { reserveTokensFloor: 20000, memoryFlush: { enabled: true, softThresholdTokens: 4000 } } } } }参数怎么理解reserveTokensFloor20000表示压缩后至少保留一段“最近对话”softThresholdTokens4000表示剩余空间少于 4000 token 时触发 flush。太小写不下太大触发太频繁4000 是个比较稳的中间值。如果你用 TOML[agents.defaults.compaction] reserve_tokens_floor 20000 [agents.defaults.compaction.memory_flush] enabled true soft_threshold_tokens 4000验证动作故意跟它聊一段长内容聊到快触发压缩然后去看memory/目录下当天的日志文件看有没有自动写入的结论。如果有说明 memoryFlush 生效了。另外让 memorySearch 更准的一个技巧是一条日志只讲一个主题。标题里就写清主题比如“nginx 反代”“IPv6 配置”“端口冲突”结论放在固定位置标签补齐同义词。这样检索命中率会明显提升。5. Cron 定时任务精确到分钟的自动化Heartbeat 适合“顺便检查一下”的轻量任务精度不高。如果你要做“每天 9:00 发早报”“每周一 10:00 发周报”得用 Cron它精确到分钟。在 OpenClaw 的配置里加 Cron 任务{ cron: { jobs: [ { name: morning-report, schedule: 0 9 * * *, tz: Asia/Shanghai, prompt: 生成今日早报汇总 memory/projects.md 中的待办和昨日日志结论 }, { name: weekly-review, schedule: 0 10 * * 1, tz: Asia/Shanghai, prompt: 生成本周周报提炼 memory/lessons.md 中的教训 } ] } }几个常用表达式0 9 * * *每天 9:000 9 * * 1每周一 9:000 9,18 * * *每天 9:00 和 18:00*/30 * * * *每 30 分钟。一定要设置tz不然默认 UTC东八区会偏 8 小时。这是最常见的坑很多人配完发现早报在下午发就是时区没设。验证动作把某个任务的时间设成 2 分钟后等它触发看有没有按 prompt 执行并输出结果。确认没问题再改回正式时间。6. Skill 开发从 0 写一个能用的 SkillSkill 本质上是一份操作手册Markdown。OpenClaw 会把每个 skill 的 description 放进系统提示里用户发消息时匹配哪些 skill 可能触发匹配到了就读取对应的 SKILL.md 按步骤执行。所以 description 不是“写得优雅”而是“写得覆盖全面”。SKILL.md 建议结构frontmattername/description、触发后第一步做什么、步骤可执行可复现、输出格式固定模板、错误处理一定要写。以 IP 归属地查询为例适合新手练手触发简单、步骤明确、输出固定--- name: ip-lookup description: 查询 IP 地址的归属地、运营商和 ASN 信息。当用户提到查 IPIP 归属地这个 IP 在哪时触发。 --- ## 步骤 1. 从用户消息中提取 IP 地址如果没有则询问 2. 调用 curl -s https://ipinfo.io/{IP}/json 获取信息 3. 解析返回的 JSON提取 city、region、country、org 4. 按固定格式输出 ## 输出格式 IP: {IP} 归属地: {country} {region} {city} 运营商: {org} ## 错误处理 - 如果 curl 返回非 200提示查询失败请检查 IP 格式 - 如果 IP 格式不合法提示请输入合法的 IPv4 或 IPv6 地址写 skill 的一个原则先手动跑通流程再把流程写成 skill。这样成功率最高。验证动作写完后在对话里说“查一下 8.8.8.8 的归属地”看它有没有按你的格式输出。7. 本篇常见错排查配置改完不生效是进阶路上最烦的事。下面这几个错我基本都遇到过。报 401 UnauthorizedTaoToken Key 没填对或者复制时带了空格。去https://taotoken.net/api-keys重新复制一次注意别把前后空格带进去。报 404 Not FoundbaseUrl 多写了/v1。TaoToken 的地址是https://taotoken.net/apiOpenClaw 内部会拼/v1/chat/completions你手动加/v1就变成双份了。memoryFlush 没触发检查softThresholdTokens是不是设得太小比如 500那基本永远触发不了。4000 左右比较稳。另外确认enabled是 true。Cron 时间不对99% 是没设tz。默认 UTC东八区偏 8 小时。加上tz: Asia/Shanghai就好。Skill 不触发description 写得太窄。模型是靠 description 匹配的你只写“查询 IP”用户说“这个地址在哪”就匹配不上。把常见说法都覆盖进去。子 Agent 报 429同时派的子 Agent 太多。普通个人额度同时 2 个最稳额度大的可以试 3 个4 个以上大概率限流尤其是带 web 搜索或工具调用时。排查顺序建议先确认模型通道通发一句“你好”再确认 AGENTS.md 生效问它启动读什么最后查 memoryFlush、Cron、Skill 各自的配置。一层一层来别一次改一堆。8. 配置顺序与后续接入如果你不想一次性全做按这个优先级来最稳先写 AGENTS.md启动流程 记忆规范 安全边界再开 memoryFlush然后配 Cron最后写 Skill。每做完一步就验证一步别攒着一起测。模型通道统一走 TaoToken 之后你换模型、加子 Agent、跑 Cron 都不用再折腾 Key。需要看模型对话效果可以去https://taotoken.net/models长期跑编码和 Agent 任务可以了解https://taotoken.net/coding-plan接入文档在https://taotoken.net/docKey 管理在https://taotoken.net/api-keys。官网入口是https://taotoken.net/?utm_sourcetaotoken_aicg_blog_end。最后说个真实经验AGENTS.md 不要一次写太长先写启动流程和记忆规范这两块跑一周看它哪里不听话再针对性补规则。一次性写几百行模型反而抓不住重点。配置是调出来的不是写出来的。