{"title":"为了构建长效AI助理，我给openclaw造了轮子，搭了coding班子","url":"/posts/2026-02-28-openclaw-automation-sharing/","date":"2026-02-28","type":"posts","content":"\u003ch1 id=\"为了构建长效ai助理我给openclaw造了轮子搭了coding班子\"\u003e\n  为了构建长效AI助理，我给openclaw造了轮子，搭了coding班子\n  \u003ca class=\"heading-link\" href=\"#%e4%b8%ba%e4%ba%86%e6%9e%84%e5%bb%ba%e9%95%bf%e6%95%88ai%e5%8a%a9%e7%90%86%e6%88%91%e7%bb%99openclaw%e9%80%a0%e4%ba%86%e8%bd%ae%e5%ad%90%e6%90%ad%e4%ba%86coding%e7%8f%ad%e5%ad%90\"\u003e\n    \u003ci class=\"fa-solid fa-link\" aria-hidden=\"true\" title=\"链接到标题\"\u003e\u003c/i\u003e\n    \u003cspan class=\"sr-only\"\u003e链接到标题\u003c/span\u003e\n  \u003c/a\u003e\n\u003c/h1\u003e\n\u003cp\u003e写在前面：这篇文章是我与我的 openclaw 一起完成的，我是纯云端的 openclaw，所以能力边界还是有限，过年期间除了带娃（两三个月啦），基本都是 vibe coding 来搭建 openclaw，目前已经能帮我快速完成很多事情，我确定很多内容可能都是造轮子也不是最优解，但这个过程感觉还是值得分享一下，也算是给这个春节交个作业。所有的轮子也都是 openclaw 的小班子自己造的，我只是个 commander：）\u003c/p\u003e\n\u003cp\u003e很多人用 OpenClaw / Agent，大概停在“能聊天、能查资料、能写点东西”的阶段。但我这段时间把它用得更深了一点：我现在这套云端 OpenClaw，已经不是“聊天机器人”了，而是一个永远在线的云端副官。它每天按时跑任务、能自检健康状态、并且能稳定处理一些非常具体的事：\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eAI 日报\u003c/strong\u003e：每天 06:30 自动抓 Watchlist + X 热点，生成中文简报并投递（邮件/Discord）\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e昨日邮件摘要\u003c/strong\u003e：拉取双 IMAP 邮箱，自动分类“费用/风险/行动/知会”，发一封脱水版摘要\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e本地生活/出行\u003c/strong\u003e：真实调用高德查 ETA/路线/天气/POI，并生成可手机打开的地图预览\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e办公协作\u003c/strong\u003e：对接 Outlook 邮件与日历，能在 Token 健康时可靠发信/建会\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e知识沉淀\u003c/strong\u003e：把关键内容整理成 Markdown，同步到 Obsidian/WebDAV\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e持续开发\u003c/strong\u003e：用主 Agent + coder/scoder 的协作流程，异步改脚本、跑自检验收，不堵塞主对话\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e但当我开始想要把它当成一个需要长期在线、持续产出、可恢复、可验收的系统，而不是一个“对话窗口”时，越往深用，越会遇到一些“浅用时看不见”的真实问题：\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e对话一长，模型很快触发 \u003cstrong\u003eTPM / 上下文限制\u003c/strong\u003e，反应变慢、逻辑松散、幻觉上升\u003c/li\u003e\n\u003cli\u003e一 \u003ccode\u003e/reset\u003c/code\u003e 虽能恢复智力，但助理立刻“断片”：规矩丢了、工程进度丢了、外部服务状态也丢了\u003c/li\u003e\n\u003cli\u003e能力多了以后最危险：\u003cstrong\u003e脚本/Token/API 明明坏了，Agent 还会嘴硬输出\u003c/strong\u003e——你以为系统在跑，其实在“编”\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e这篇文章我想分享的，就是我如何解决这些问题来构建长效助理，能做成可以自检健康状态，reset 后 3s 恢复工作，可以做成可运行、可恢复、可审计的一套云端 AI 操作系统：物理化状态、Reset V2、健康三件套、以及多 Agent 协作的工程闭环。\u003c/p\u003e\n\u003cp\u003e所以我写这篇，不是展示一个酷炫 Demo，而是把一套我已经在云端跑起来、可复用的架构方法分享出来：\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003e物理化（Physicalization）\u003c/strong\u003e：把记忆、能力、任务状态落地到文件系统\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eReset V2（Runtime Contract）\u003c/strong\u003e：把 reset 从“失忆”升级为“可控重启”\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e健康体系（selftest / health / capabilities）\u003c/strong\u003e：随时回答“现在到底还能不能可靠干活？”\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e多 Agent 协作（Main + coder + scoder）\u003c/strong\u003e：把 Coding 从聊天承诺变成工程交付\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr\u003e\n\u003ch2 id=\"1-运行环境纯服务端的中枢架构为什么我坚持云端\"\u003e\n  1. 运行环境：纯服务端的“中枢”架构（为什么我坚持云端）\n  \u003ca class=\"heading-link\" href=\"#1-%e8%bf%90%e8%a1%8c%e7%8e%af%e5%a2%83%e7%ba%af%e6%9c%8d%e5%8a%a1%e7%ab%af%e7%9a%84%e4%b8%ad%e6%9e%a2%e6%9e%b6%e6%9e%84%e4%b8%ba%e4%bb%80%e4%b9%88%e6%88%91%e5%9d%9a%e6%8c%81%e4%ba%91%e7%ab%af\"\u003e\n    \u003ci class=\"fa-solid fa-link\" aria-hidden=\"true\" title=\"链接到标题\"\u003e\u003c/i\u003e\n    \u003cspan class=\"sr-only\"\u003e链接到标题\u003c/span\u003e\n  \u003c/a\u003e\n\u003c/h2\u003e\n\u003cp\u003e我没有选择把 OpenClaw 跑在本地（比如 Mac mini），核心原因不是性能，而是\u003cstrong\u003e安全边界\u003c/strong\u003e。\u003c/p\u003e\n\u003cp\u003e当你把 Agent 用深，它就不再是“写写总结的对话框”，而是一个“连着真实世界”的中枢：它要握住我的邮箱/日历/地图/资讯源/账号 Token，要长期跑 Cron，要读写状态文件，要触发脚本工作流。对我来说，把这套能力直接放在桌面设备上，风险太高——权限、网络、设备丢失、误操作等都更不可控。\u003c/p\u003e\n\u003cp\u003e所以我把它放在云端 Headless 环境里：\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003e隔离与可控\u003c/strong\u003e：Linux VPS + Docker，把权限/依赖/网络边界锁死\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e24/7 可用\u003c/strong\u003e：定时任务不依赖我是否打开电脑\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e工程化自建\u003c/strong\u003e：由于没有桌面级能力（不能依赖 GUI 操作），我必须把任务做成“脚本 + SOP + health”的体系——也正是这些机制，让它从聊天工具进化成个人操作系统\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e系统能力连接如下：\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003e物理部署\u003c/strong\u003e：Linux VPS，通过 Docker 容器化\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e中枢连接\u003c/strong\u003e：Gmail/Outlook、诸葛/云通讯工作邮箱、高德地图 API、Yahoo Finance、Twitter（Bird CLI）\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e异步交付\u003c/strong\u003e：哪怕我在睡觉，凌晨 6 点也能唤醒 \u003ccode\u003egen_ai_digest.py\u003c/code\u003e，处理昨夜资讯，并通过 Outlook 或 Discord 异步交付\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr\u003e\n\u003ch2 id=\"2-对抗上下文癌症reset-v2-的背景与两轮迭代含健康体系\"\u003e\n  2. 对抗“上下文癌症”：Reset V2 的背景与两轮迭代（含健康体系）\n  \u003ca class=\"heading-link\" href=\"#2-%e5%af%b9%e6%8a%97%e4%b8%8a%e4%b8%8b%e6%96%87%e7%99%8c%e7%97%87reset-v2-%e7%9a%84%e8%83%8c%e6%99%af%e4%b8%8e%e4%b8%a4%e8%bd%ae%e8%bf%ad%e4%bb%a3%e5%90%ab%e5%81%a5%e5%ba%b7%e4%bd%93%e7%b3%bb\"\u003e\n    \u003ci class=\"fa-solid fa-link\" aria-hidden=\"true\" title=\"链接到标题\"\u003e\u003c/i\u003e\n    \u003cspan class=\"sr-only\"\u003e链接到标题\u003c/span\u003e\n  \u003c/a\u003e\n\u003c/h2\u003e\n\u003cp\u003e我后来看清一个事实：问题不在“模型不够聪明”，而在于\u003cstrong\u003e模型天然有限制\u003c/strong\u003e，而 I 把 OpenClaw 用到了会持续触发 these 限制的深度。\u003c/p\u003e\n\u003cp\u003e以 Gemini 为例：随着对话与任务推进，OpenClaw 的上下文会不断膨胀，最终超过 Gemini 的 input 限制；叠加 **TPM（Tokens Per Minute，每分钟 Token 上限）**等节流，系统会进入“脑雾状态”：变慢、变飘、幻觉上升，甚至 API 直接报错/拒绝服务。\u003c/p\u003e\n\u003cp\u003e因此我必须定期执行一个强制动作：\u003cstrong\u003ereset\u003c/strong\u003e。\u003c/p\u003e\n\u003cp\u003e但 reset 的副作用极其致命：此时 OpenClaw 已经积累了大量“工程化资产”：\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e它已经学会了一套任务/项目的开发规范与协作机制\u003c/li\u003e\n\u003cli\u003e我已经沉淀了一批脚本工具库与能力路由\u003c/li\u003e\n\u003cli\u003e已有项目的工程状态、排错经验、依赖关系都在推进中\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e常规 reset 会让这些东西瞬间“断片”：它会忘记规矩、忘记工具库、也不会主动去重新学习。\u003cbr\u003e\n于是我后面所有机制设计，本质都在回答同一个问题：\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e既然 reset 不可避免，我如何让系统在 reset 后依然能快速恢复到“可信运行态”，并能持续开发、持续迭代？\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003ch3 id=\"21-第一轮纯-sop-恢复重且不稳定\"\u003e\n  2.1 第一轮：纯 SOP 恢复（重且不稳定）\n  \u003ca class=\"heading-link\" href=\"#21-%e7%ac%ac%e4%b8%80%e8%bd%ae%e7%ba%af-sop-%e6%81%a2%e5%a4%8d%e9%87%8d%e4%b8%94%e4%b8%8d%e7%a8%b3%e5%ae%9a\"\u003e\n    \u003ci class=\"fa-solid fa-link\" aria-hidden=\"true\" title=\"链接到标题\"\u003e\u003c/i\u003e\n    \u003cspan class=\"sr-only\"\u003e链接到标题\u003c/span\u003e\n  \u003c/a\u003e\n\u003c/h3\u003e\n\u003cp\u003e第一轮 I 走得很直觉：reset 后让助理重读 SOP 文档恢复状态。\u003c/p\u003e\n\u003cp\u003e很快我发现它解决不了关键问题：\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eSOP 多为 Markdown，篇幅长、恢复成本重\u003c/li\u003e\n\u003cli\u003e更致命：它即使重读 SOP，也还是会忘脚本工具库\u003cbr\u003e\n——它可能记得“应该怎么做”，但不记得“该调用哪个脚本、有哪些能力入口、怎么验证”\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e所以 SOP-only 的恢复方式，达不到我想要的“重启后秒级可用”。\u003c/p\u003e\n\u003ch3 id=\"22-第二轮runtime-契约化恢复像操作系统引导\"\u003e\n  2.2 第二轮：Runtime 契约化恢复（像操作系统引导）\n  \u003ca class=\"heading-link\" href=\"#22-%e7%ac%ac%e4%ba%8c%e8%bd%aeruntime-%e5%a5%91%e7%ba%a6%e5%8c%96%e6%81%a2%e5%a4%8d%e5%83%8f%e6%93%8d%e4%bd%9c%e7%b3%bb%e7%bb%9f%e5%bc%95%e5%af%bc\"\u003e\n    \u003ci class=\"fa-solid fa-link\" aria-hidden=\"true\" title=\"链接到标题\"\u003e\u003c/i\u003e\n    \u003cspan class=\"sr-only\"\u003e链接到标题\u003c/span\u003e\n  \u003c/a\u003e\n\u003c/h3\u003e\n\u003cp\u003e第二轮是 scoder 给的关键建议：\u003cbr\u003e\n不要把恢复当成“读文档”，要把恢复当成“系统启动”——用机器可读的 runtime 契约 + 能力索引 + 健康体检把状态拉起来。\u003c/p\u003e\n\u003cp\u003e因此我迭代出了 \u003cstrong\u003eRuntime Contract\u003c/strong\u003e 与 BOOTSTRAP 引导流程：重启后严格按顺序加载三层定义文件。\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e第二轮之后，我也把“这次 runtime 改造”的设计过程沉淀成项目卡（例如 \u003ccode\u003eopenclaw-runtime-review.md\u003c/code\u003e）。\u003cbr\u003e\n因为 runtime 本身就是一条会持续演进的能力线：每次引入新的外部服务、增加新的 health 门槛或自检项，都需要一个可追溯的对齐锚点。\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003ch3 id=\"23-bootstrap-三层identity--constitution--tooling\"\u003e\n  2.3 BOOTSTRAP 三层：Identity / Constitution / Tooling\n  \u003ca class=\"heading-link\" href=\"#23-bootstrap-%e4%b8%89%e5%b1%82identity--constitution--tooling\"\u003e\n    \u003ci class=\"fa-solid fa-link\" aria-hidden=\"true\" title=\"链接到标题\"\u003e\u003c/i\u003e\n    \u003cspan class=\"sr-only\"\u003e链接到标题\u003c/span\u003e\n  \u003c/a\u003e\n\u003c/h3\u003e\n\u003ch3 id=\"层级一灵魂与人设identity-layer\"\u003e\n  层级一：灵魂与人设（Identity Layer）\n  \u003ca class=\"heading-link\" href=\"#%e5%b1%82%e7%ba%a7%e4%b8%80%e7%81%b5%e9%ad%82%e4%b8%8e%e4%ba%ba%e8%ae%beidentity-layer\"\u003e\n    \u003ci class=\"fa-solid fa-link\" aria-hidden=\"true\" title=\"链接到标题\"\u003e\u003c/i\u003e\n    \u003cspan class=\"sr-only\"\u003e链接到标题\u003c/span\u003e\n  \u003c/a\u003e\n\u003c/h3\u003e\n\u003cp\u003e\u003ccode\u003eSOUL.md\u003c/code\u003e 定义 Agent 自我认知与行为红线。我刻意把它写成“行动派”：\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e拒绝无意义客套，直接给结果\u003c/li\u003e\n\u003cli\u003e只读操作不请示（查路况/看日历）\u003c/li\u003e\n\u003cli\u003e想记住必须写入文件，禁止靠对话“记住”\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-markdown\" data-lang=\"markdown\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gh\"\u003e# SOUL.md\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gh\"\u003e\u003c/span\u003e\u003cspan class=\"k\"\u003e-\u003c/span\u003e Name: Jobs\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003e-\u003c/span\u003e Vibe: Sharp, Concise, No-nonsense.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003e-\u003c/span\u003e Core Truths:\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"k\"\u003e-\u003c/span\u003e Be genuinely helpful, not performatively helpful.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"k\"\u003e-\u003c/span\u003e Don\u0026#39;t ask permission for read-only actions.\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"k\"\u003e-\u003c/span\u003e If you want to remember something, WRITE IT TO A FILE.\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003ch3 id=\"层级二运行宪法constitution-layer\"\u003e\n  层级二：运行宪法（Constitution Layer）\n  \u003ca class=\"heading-link\" href=\"#%e5%b1%82%e7%ba%a7%e4%ba%8c%e8%bf%90%e8%a1%8c%e5%ae%aa%e6%b3%95constitution-layer\"\u003e\n    \u003ci class=\"fa-solid fa-link\" aria-hidden=\"true\" title=\"链接到标题\"\u003e\u003c/i\u003e\n    \u003cspan class=\"sr-only\"\u003e链接到标题\u003c/span\u003e\n  \u003c/a\u003e\n\u003c/h3\u003e\n\u003cp\u003e\u003ccode\u003eruntime/RUNTIME-CONTRACT.md\u003c/code\u003e 是系统“宪法”，机器可读、硬约束。重点不是口号，而是两条机制：\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e1）强制自检（Selftest）\u003c/strong\u003e\u003cbr\u003e\nReset 后必须运行 \u003ccode\u003eselftest_all.sh\u003c/code\u003e，并且是真实连接外部服务：\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eOutlook：刷新 OAuth Token\u003c/li\u003e\n\u003cli\u003eIMAP：登录邮箱确认密码/权限有效\u003c/li\u003e\n\u003cli\u003eMap API：真实路线/天气请求确认配额与返回结构正常\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003e2）健康锁定（Health Lock）\u003c/strong\u003e\u003cbr\u003e\n自检失败会落地健康文件（例如 \u003ccode\u003eruntime/health/outlook.json\u003c/code\u003e 标记 \u003ccode\u003estatus: error\u003c/code\u003e），后续所有相关操作被自动拦截，避免 Agent 瞎试导致账号被锁。\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-markdown\" data-lang=\"markdown\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gh\"\u003e# RUNTIME-CONTRACT.md\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gh\"\u003e\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gu\"\u003e## 健康状态与 selftest 契约\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gu\"\u003e\u003c/span\u003e\u003cspan class=\"k\"\u003e-\u003c/span\u003e Reset 后必须运行 selftest/selftest_all.sh\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003e-\u003c/span\u003e 任何操作前必须检查 runtime/health/*.json 状态\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gu\"\u003e## 全局硬规则\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"gu\"\u003e\u003c/span\u003e\u003cspan class=\"k\"\u003e-\u003c/span\u003e 时区：默认 Asia/Shanghai，禁止自作聪明转换\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003e-\u003c/span\u003e 专用实现优先：capability 中有定义，禁止使用通用 LLM 瞎猜 API\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003ch3 id=\"层级三能力索引tooling-layer\"\u003e\n  层级三：能力索引（Tooling Layer）\n  \u003ca class=\"heading-link\" href=\"#%e5%b1%82%e7%ba%a7%e4%b8%89%e8%83%bd%e5%8a%9b%e7%b4%a2%e5%bc%95tooling-layer\"\u003e\n    \u003ci class=\"fa-solid fa-link\" aria-hidden=\"true\" title=\"链接到标题\"\u003e\u003c/i\u003e\n    \u003cspan class=\"sr-only\"\u003e链接到标题\u003c/span\u003e\n  \u003c/a\u003e\n\u003c/h3\u003e\n\u003cp\u003e\u003ccode\u003eruntime/capabilities.yaml\u003c/code\u003e 类似 API 网关路由表：把自然语言意图精确化，并绑定 SOP 与 health 作为前置门槛。\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-yaml\" data-lang=\"yaml\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c\"\u003e# capabilities.yaml\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e\u003c/span\u003e\u003cspan class=\"nt\"\u003elocal_maps\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003esummary\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;查路线/POI/天气\u0026#34;\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003esops\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;memory/route-planning-SOP.md\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003eentry_scripts\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003eroute\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;python3 scripts/route_eta_amap.py \u0026#34;{origin}\u0026#34; \u0026#34;{dest}\u0026#34; --mode drive\u0026#39;\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003epoi\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;python3 scripts/poi_search.py \u0026#34;{location}\u0026#34; \u0026#34;{keyword}\u0026#34;\u0026#39;\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003ch3 id=\"24-reset-v2-的健康体系并入引导能力检查三件套selftest--health--capabilities\"\u003e\n  2.4 Reset V2 的“健康体系”并入引导：能力检查三件套（selftest / health / capabilities）\n  \u003ca class=\"heading-link\" href=\"#24-reset-v2-%e7%9a%84%e5%81%a5%e5%ba%b7%e4%bd%93%e7%b3%bb%e5%b9%b6%e5%85%a5%e5%bc%95%e5%af%bc%e8%83%bd%e5%8a%9b%e6%a3%80%e6%9f%a5%e4%b8%89%e4%bb%b6%e5%a5%97selftest--health--capabilities\"\u003e\n    \u003ci class=\"fa-solid fa-link\" aria-hidden=\"true\" title=\"链接到标题\"\u003e\u003c/i\u003e\n    \u003cspan class=\"sr-only\"\u003e链接到标题\u003c/span\u003e\n  \u003c/a\u003e\n\u003c/h3\u003e\n\u003cp\u003e这套 Runtime Contract 最终要回答一个非常具体的问题：\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e\u003cstrong\u003e这台 OpenClaw 现在到底还能不能可靠干活？\u003c/strong\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e所以我把“可用性”收敛为一套 \u003cstrong\u003e能力检查三件套\u003c/strong\u003e，并且它们是 Reset 引导的一部分。\u003cbr\u003e\n为了避免只讲概念，这里我按“脚本/文件分工”的视角，把它们拆开讲清楚：谁负责自检、谁负责落地状态、谁负责把自然语言路由到正确的能力入口。\u003c/p\u003e\n\u003chr\u003e\n\u003ch3 id=\"241-selftest_allsh一键总自检调度脚本全机烟雾测试入口\"\u003e\n  2.4.1 \u003ccode\u003eselftest_all.sh\u003c/code\u003e：一键总自检调度脚本（全机烟雾测试入口）\n  \u003ca class=\"heading-link\" href=\"#241-selftest_allsh%e4%b8%80%e9%94%ae%e6%80%bb%e8%87%aa%e6%a3%80%e8%b0%83%e5%ba%a6%e8%84%9a%e6%9c%ac%e5%85%a8%e6%9c%ba%e7%83%9f%e9%9b%be%e6%b5%8b%e8%af%95%e5%85%a5%e5%8f%a3\"\u003e\n    \u003ci class=\"fa-solid fa-link\" aria-hidden=\"true\" title=\"链接到标题\"\u003e\u003c/i\u003e\n    \u003cspan class=\"sr-only\"\u003e链接到标题\u003c/span\u003e\n  \u003c/a\u003e\n\u003c/h3\u003e\n\u003cp\u003e\u003cstrong\u003e作用\u003c/strong\u003e：\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e作为总入口，一次性串行/并行调用各领域的 \u003ccode\u003eselftest/\u0026lt;domain\u0026gt;.sh\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e跑完后保证 \u003ccode\u003eruntime/health/*.json\u003c/code\u003e 都是\u003cstrong\u003e最新检查结果\u003c/strong\u003e（刷新整台机的体检单）\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003e核心行为\u003c/strong\u003e（抽象理解即可）：\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e遍历一圈能力域，例如：\u003cbr\u003e\n\u003ccode\u003eai_daily / email_summary / email_check / outlook / local_maps / stocks / twitter_bird / ob_webdav / coding / web_preview / cron_midday_evening_briefing ...\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e对每个领域执行：\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-bash\" data-lang=\"bash\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ebash selftest/\u0026lt;domain\u0026gt;.sh\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003c/li\u003e\n\u003cli\u003e每个 selftest 脚本内部会写/更新：\u003ccode\u003eruntime/health/\u0026lt;domain\u0026gt;.json\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e所以 \u003ccode\u003eselftest_all.sh\u003c/code\u003e 的本质可以理解成一句话：\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e\u003cstrong\u003e批量刷新所有能力的体检单。\u003c/strong\u003e\u003cbr\u003e\n早上起床先把所有能力过一遍烟雾测试。\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003chr\u003e\n\u003ch3 id=\"242-selftestdomainsh单一领域的健康检查脚本最小但真实的业务验证\"\u003e\n  2.4.2 \u003ccode\u003eselftest/\u0026lt;domain\u0026gt;.sh\u003c/code\u003e：单一领域的健康检查脚本（最小但真实的业务验证）\n  \u003ca class=\"heading-link\" href=\"#242-selftestdomainsh%e5%8d%95%e4%b8%80%e9%a2%86%e5%9f%9f%e7%9a%84%e5%81%a5%e5%ba%b7%e6%a3%80%e6%9f%a5%e8%84%9a%e6%9c%ac%e6%9c%80%e5%b0%8f%e4%bd%86%e7%9c%9f%e5%ae%9e%e7%9a%84%e4%b8%9a%e5%8a%a1%e9%aa%8c%e8%af%81\"\u003e\n    \u003ci class=\"fa-solid fa-link\" aria-hidden=\"true\" title=\"链接到标题\"\u003e\u003c/i\u003e\n    \u003cspan class=\"sr-only\"\u003e链接到标题\u003c/span\u003e\n  \u003c/a\u003e\n\u003c/h3\u003e\n\u003cp\u003e每个领域一个 \u003ccode\u003eselftest\u003c/code\u003e 脚本，负责做“\u003cstrong\u003e最小但真实\u003c/strong\u003e”的业务验证：\u003cbr\u003e\n不是跑空壳，而是\u003cstrong\u003e真的连一次外部服务 / 跑一次 dry-run / 校验一次关键链路\u003c/strong\u003e。\u003c/p\u003e\n\u003cp\u003e几个典型例子：\u003c/p\u003e\n\u003ch4 id=\"selftestai_dailysh\"\u003e\n  \u003ccode\u003eselftest/ai_daily.sh\u003c/code\u003e\n  \u003ca class=\"heading-link\" href=\"#selftestai_dailysh\"\u003e\n    \u003ci class=\"fa-solid fa-link\" aria-hidden=\"true\" title=\"链接到标题\"\u003e\u003c/i\u003e\n    \u003cspan class=\"sr-only\"\u003e链接到标题\u003c/span\u003e\n  \u003c/a\u003e\n\u003c/h4\u003e\n\u003cp\u003e\u003cstrong\u003e检查\u003c/strong\u003e：能不能跑 \u003ccode\u003egen_ai_digest.py --dry-run\u003c/code\u003e，并确认：\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eWatchlist JSON 能读\u003c/li\u003e\n\u003cli\u003eBird CLI 能返回 AI 热点\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eGEMINI_API_KEY\u003c/code\u003e 可用（LLM 调用不报错）\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003e输出\u003c/strong\u003e：更新 \u003ccode\u003eruntime/health/ai_daily.json\u003c/code\u003e（status / checked_at / detail）\u003c/p\u003e\n\u003ch4 id=\"selftestemail_summarysh\"\u003e\n  \u003ccode\u003eselftest/email_summary.sh\u003c/code\u003e\n  \u003ca class=\"heading-link\" href=\"#selftestemail_summarysh\"\u003e\n    \u003ci class=\"fa-solid fa-link\" aria-hidden=\"true\" title=\"链接到标题\"\u003e\u003c/i\u003e\n    \u003cspan class=\"sr-only\"\u003e链接到标题\u003c/span\u003e\n  \u003c/a\u003e\n\u003c/h4\u003e\n\u003cp\u003e\u003cstrong\u003e检查\u003c/strong\u003e：\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e连一遍诸葛 + 云通讯 IMAP（可只取 1 封邮件 dry-run）\u003c/li\u003e\n\u003cli\u003e跑 \u003ccode\u003egen_email_summary.py --dry-run\u003c/code\u003e 看是否能正常结束\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003e输出\u003c/strong\u003e：更新 \u003ccode\u003eruntime/health/email_summary.json\u003c/code\u003e，detail 通常包含 IMAP 连接状态\u003c/p\u003e\n\u003ch4 id=\"selftestoutlooksh\"\u003e\n  \u003ccode\u003eselftest/outlook.sh\u003c/code\u003e\n  \u003ca class=\"heading-link\" href=\"#selftestoutlooksh\"\u003e\n    \u003ci class=\"fa-solid fa-link\" aria-hidden=\"true\" title=\"链接到标题\"\u003e\u003c/i\u003e\n    \u003cspan class=\"sr-only\"\u003e链接到标题\u003c/span\u003e\n  \u003c/a\u003e\n\u003c/h4\u003e\n\u003cp\u003e\u003cstrong\u003e检查\u003c/strong\u003e：\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e调 \u003ccode\u003eskills/outlook/scripts/outlook-token.sh test\u003c/code\u003e 验证 Token\u003c/li\u003e\n\u003cli\u003e可选：dry-run 发信或 \u003ccode\u003eoutlook-calendar.sh today\u003c/code\u003e 确认 API 正常返回\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003e输出\u003c/strong\u003e：更新 \u003ccode\u003eruntime/health/outlook.json\u003c/code\u003e（Token 状态 / 最近一次发信或拉取是否成功）\u003c/p\u003e\n\u003ch4 id=\"selftestlocal_mapssh\"\u003e\n  \u003ccode\u003eselftest/local_maps.sh\u003c/code\u003e\n  \u003ca class=\"heading-link\" href=\"#selftestlocal_mapssh\"\u003e\n    \u003ci class=\"fa-solid fa-link\" aria-hidden=\"true\" title=\"链接到标题\"\u003e\u003c/i\u003e\n    \u003cspan class=\"sr-only\"\u003e链接到标题\u003c/span\u003e\n  \u003c/a\u003e\n\u003c/h4\u003e\n\u003cp\u003e\u003cstrong\u003e检查\u003c/strong\u003e：\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e调一次 \u003ccode\u003eamap_weather.py\u003c/code\u003e 或 \u003ccode\u003eroute_eta_amap.py\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e确认 AMap key 存在且未过期，响应结构可解析\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003e输出\u003c/strong\u003e：更新 \u003ccode\u003eruntime/health/local_maps.json\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003e其他领域（\u003ccode\u003estocks.sh / twitter_bird.sh / ob_webdav.sh / coding.sh / web_preview.sh\u003c/code\u003e 等）遵循同一模式：\u003cbr\u003e\n\u003cstrong\u003e用一次最小业务调用验证链路，再写 health JSON。\u003c/strong\u003e\u003c/p\u003e\n\u003chr\u003e\n\u003ch3 id=\"243-runtimehealthjson各能力的体检单红绿灯--降级开关\"\u003e\n  2.4.3 \u003ccode\u003eruntime/health/*.json\u003c/code\u003e：各能力的“体检单”（红绿灯 + 降级开关）\n  \u003ca class=\"heading-link\" href=\"#243-runtimehealthjson%e5%90%84%e8%83%bd%e5%8a%9b%e7%9a%84%e4%bd%93%e6%a3%80%e5%8d%95%e7%ba%a2%e7%bb%bf%e7%81%af--%e9%99%8d%e7%ba%a7%e5%bc%80%e5%85%b3\"\u003e\n    \u003ci class=\"fa-solid fa-link\" aria-hidden=\"true\" title=\"链接到标题\"\u003e\u003c/i\u003e\n    \u003cspan class=\"sr-only\"\u003e链接到标题\u003c/span\u003e\n  \u003c/a\u003e\n\u003c/h3\u003e\n\u003cp\u003e\u003ccode\u003eruntime/health/*.json\u003c/code\u003e 不是脚本，而是 \u003cstrong\u003eselftest 的输出文件\u003c/strong\u003e。\u003cbr\u003e\n它在系统里扮演“权威状态源”的角色：主 Agent、SOP、Cron 都要先看它再决定下一步动作。\u003c/p\u003e\n\u003cp\u003e建议统一字段形态（示意）：\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-json\" data-lang=\"json\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nt\"\u003e\u0026#34;status\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;ok | degraded | error | unknown\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nt\"\u003e\u0026#34;checked_at\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;2026-02-25T02:15:37Z\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nt\"\u003e\u0026#34;detail\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;最近一次自检结果摘要\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"nt\"\u003e\u0026#34;details\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"p\"\u003e{\u003c/span\u003e \u003cspan class=\"nt\"\u003e\u0026#34;...\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;可选：更细节字段\u0026#34;\u003c/span\u003e \u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003e\u003cstrong\u003estatus 的业务含义\u003c/strong\u003e：\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eok\u003c/code\u003e：可以放心执行该领域能力，输出可以作为“业务可信结果”\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003edegraded\u003c/code\u003e：部分可用，需要在回答里提示风险/限制\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eerror\u003c/code\u003e：该领域视为不可用，只能说明原因 + 给降级方案\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eunknown\u003c/code\u003e：自检未跑过或过期；执行前应该先触发 selftest\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e典型映射：\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eruntime/health/ai_daily.json\u003c/code\u003e 决定 AI 日报链路是否可信\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eruntime/health/email_summary.json\u003c/code\u003e 决定昨日摘要是否能跑\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eruntime/health/outlook.json\u003c/code\u003e 决定是否\u003cstrong\u003e允许发 Outlook 邮件/写日程\u003c/strong\u003e（健康锁定的关键）\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eruntime/health/local_maps.json\u003c/code\u003e 决定查 ETA/天气是否走真实接口\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr\u003e\n\u003ch3 id=\"244-runtimecapabilitiesyaml从意图到脚本--sop--health的路由表能力地图\"\u003e\n  2.4.4 \u003ccode\u003eruntime/capabilities.yaml\u003c/code\u003e：从意图到“脚本 + SOP + health”的路由表（能力地图）\n  \u003ca class=\"heading-link\" href=\"#244-runtimecapabilitiesyaml%e4%bb%8e%e6%84%8f%e5%9b%be%e5%88%b0%e8%84%9a%e6%9c%ac--sop--health%e7%9a%84%e8%b7%af%e7%94%b1%e8%a1%a8%e8%83%bd%e5%8a%9b%e5%9c%b0%e5%9b%be\"\u003e\n    \u003ci class=\"fa-solid fa-link\" aria-hidden=\"true\" title=\"链接到标题\"\u003e\u003c/i\u003e\n    \u003cspan class=\"sr-only\"\u003e链接到标题\u003c/span\u003e\n  \u003c/a\u003e\n\u003c/h3\u003e\n\u003cp\u003e三件套的最后一环不是脚本，而是一份配置：\u003ccode\u003eruntime/capabilities.yaml\u003c/code\u003e。\u003cbr\u003e\n它告诉 Agent：\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e当用户说 X 时：\u003cbr\u003e\n\u003cstrong\u003e先看哪个 health\u003c/strong\u003e → 不健康时 \u003cstrong\u003e跑哪个 selftest\u003c/strong\u003e → 健康时 \u003cstrong\u003e执行哪个脚本\u003c/strong\u003e → 并参考 \u003cstrong\u003e哪些 SOP/项目卡\u003c/strong\u003e 来解释输出。\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e一个更完整的 domain 配置示意：\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-yaml\" data-lang=\"yaml\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nt\"\u003elocal_maps\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003esummary\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;本地生活 / 地图 \u0026amp; 路线（AMap）——drive/walk/transit 多方案 ETA...\u0026#34;\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003eintents\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;route\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;poi\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;weather\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003eentry_scripts\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003eroute\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;python3 scripts/route_eta_amap.py \u0026#34;{origin}\u0026#34; \u0026#34;{dest}\u0026#34; --mode drive --text\u0026#39;\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e\u003cspan class=\"nt\"\u003epoi\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e   \u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;python3 scripts/poi_search.py \u0026#34;{location}\u0026#34; \u0026#34;{keyword}\u0026#34; --radius 3000 --text\u0026#39;\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003ehealth_file\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;runtime/health/local_maps.json\u0026#34;\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003eselftest\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e \u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;selftest/local_maps.sh\u0026#34;\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003esops\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e- \u003cspan class=\"s2\"\u003e\u0026#34;memory/route-planning-SOP.md\u0026#34;\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e- \u003cspan class=\"s2\"\u003e\u0026#34;memory/poi-search-SOP.md\u0026#34;\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e  \u003c/span\u003e\u003cspan class=\"nt\"\u003ehard_rules\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"w\"\u003e    \u003c/span\u003e- \u003cspan class=\"s2\"\u003e\u0026#34;禁止直接用经验或 web_search 回答路线/ETA/POI/天气，除非专用实现不可用并说明原因。\u0026#34;\u003c/span\u003e\u003cspan class=\"w\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003e\u003cstrong\u003e字段分工一眼记住\u003c/strong\u003e：\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eentry_scripts.*\u003c/code\u003e：真正干活的业务脚本（route/poi/weather…）\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eselftest\u003c/code\u003e：health 过期/unknown 时该跑哪个自检\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003ehealth_file\u003c/code\u003e：执行前看哪张体检单\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003esops\u003c/code\u003e：绑定解释与操作规范（必要时再回指项目卡）\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003ehard_rules\u003c/code\u003e：强制约束“能用专用实现就不许瞎猜”\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr\u003e\n\u003ch3 id=\"245-一句话总结三件套如何配合\"\u003e\n  2.4.5 一句话总结：三件套如何配合\n  \u003ca class=\"heading-link\" href=\"#245-%e4%b8%80%e5%8f%a5%e8%af%9d%e6%80%bb%e7%bb%93%e4%b8%89%e4%bb%b6%e5%a5%97%e5%a6%82%e4%bd%95%e9%85%8d%e5%90%88\"\u003e\n    \u003ci class=\"fa-solid fa-link\" aria-hidden=\"true\" title=\"链接到标题\"\u003e\u003c/i\u003e\n    \u003cspan class=\"sr-only\"\u003e链接到标题\u003c/span\u003e\n  \u003c/a\u003e\n\u003c/h3\u003e\n\u003cp\u003e把三件套的协作关系压成一句话就是：\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eselftest_all.sh\u003c/code\u003e：\u003cstrong\u003e批量调度所有 selftest\u003c/strong\u003e，刷新整机健康状态\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eselftest/\u0026lt;domain\u0026gt;.sh\u003c/code\u003e：对单能力线做\u003cstrong\u003e最小但真实的业务自检\u003c/strong\u003e，更新对应 health\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eruntime/health/*.json\u003c/code\u003e：各领域的\u003cstrong\u003e红绿灯体检单\u003c/strong\u003e，决定是否执行、如何降级、是否锁定\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eruntime/capabilities.yaml\u003c/code\u003e：把“用户一句话”路由到\u003cstrong\u003e脚本 + SOP + health + selftest\u003c/strong\u003e，是能力层的“地图”\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch4 id=\"25-收益reset-后-3-秒恢复到可信运行态\"\u003e\n  2.5 收益：Reset 后 3 秒恢复到可信运行态\n  \u003ca class=\"heading-link\" href=\"#25-%e6%94%b6%e7%9b%8areset-%e5%90%8e-3-%e7%a7%92%e6%81%a2%e5%a4%8d%e5%88%b0%e5%8f%af%e4%bf%a1%e8%bf%90%e8%a1%8c%e6%80%81\"\u003e\n    \u003ci class=\"fa-solid fa-link\" aria-hidden=\"true\" title=\"链接到标题\"\u003e\u003c/i\u003e\n    \u003cspan class=\"sr-only\"\u003e链接到标题\u003c/span\u003e\n  \u003c/a\u003e\n\u003c/h4\u003e\n\u003cp\u003e现在 reset 不再意味着“失忆”，而是一次可控重启：\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e“Outlook 模块健康，地图模块降级（限流），我有 11 个可用能力。”\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e它不需要记得刚才聊了什么，因为\u003cstrong\u003e状态在文件里，而不在对话历史里\u003c/strong\u003e。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"3-解决执行顽疾主从-agent-的异步协作模型edtp\"\u003e\n  3. 解决执行顽疾：主从 Agent 的异步协作模型（EDTP）\n  \u003ca class=\"heading-link\" href=\"#3-%e8%a7%a3%e5%86%b3%e6%89%a7%e8%a1%8c%e9%a1%bd%e7%96%be%e4%b8%bb%e4%bb%8e-agent-%e7%9a%84%e5%bc%82%e6%ad%a5%e5%8d%8f%e4%bd%9c%e6%a8%a1%e5%9e%8bedtp\"\u003e\n    \u003ci class=\"fa-solid fa-link\" aria-hidden=\"true\" title=\"链接到标题\"\u003e\u003c/i\u003e\n    \u003cspan class=\"sr-only\"\u003e链接到标题\u003c/span\u003e\n  \u003c/a\u003e\n\u003c/h2\u003e\n\u003cp\u003e多 Agent 协作编程的起点，其实是三个痛点同时存在：\u003c/p\u003e\n\u003ch3 id=\"a单一主-agent-要么太贵要么只说不做\"\u003e\n  a）单一主 Agent 要么太贵，要么只说不做\n  \u003ca class=\"heading-link\" href=\"#a%e5%8d%95%e4%b8%80%e4%b8%bb-agent-%e8%a6%81%e4%b9%88%e5%a4%aa%e8%b4%b5%e8%a6%81%e4%b9%88%e5%8f%aa%e8%af%b4%e4%b8%8d%e5%81%9a\"\u003e\n    \u003ci class=\"fa-solid fa-link\" aria-hidden=\"true\" title=\"链接到标题\"\u003e\u003c/i\u003e\n    \u003cspan class=\"sr-only\"\u003e链接到标题\u003c/span\u003e\n  \u003c/a\u003e\n\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e用重型智能体模型效果好但成本高，还容易“规划过度复杂”\u003c/li\u003e\n\u003cli\u003e用普通对话模型成本低，但常见毛病是“只说不做”\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"b我借鉴-gui-编程主线程不卡顿子线程干重活\"\u003e\n  b）我借鉴 GUI 编程：主线程不卡顿，子线程干重活\n  \u003ca class=\"heading-link\" href=\"#b%e6%88%91%e5%80%9f%e9%89%b4-gui-%e7%bc%96%e7%a8%8b%e4%b8%bb%e7%ba%bf%e7%a8%8b%e4%b8%8d%e5%8d%a1%e9%a1%bf%e5%ad%90%e7%ba%bf%e7%a8%8b%e5%b9%b2%e9%87%8d%e6%b4%bb\"\u003e\n    \u003ci class=\"fa-solid fa-link\" aria-hidden=\"true\" title=\"链接到标题\"\u003e\u003c/i\u003e\n    \u003cspan class=\"sr-only\"\u003e链接到标题\u003c/span\u003e\n  \u003c/a\u003e\n\u003c/h3\u003e\n\u003cp\u003e像手机 App/桌面程序一样：主线程负责交互响应，子线程异步处理耗时逻辑与 IO。\u003cbr\u003e\n同理，多 Agent 解放主 Agent，让它保持任务接收与需求分析能力，把重型开发/长任务交给子 Agent 静默完成。\u003c/p\u003e\n\u003ch3 id=\"c主-agent--coder--scoder用成本换规模用-review换可靠\"\u003e\n  c）主 Agent + coder + scoder：用成本换规模，用 review换可靠\n  \u003ca class=\"heading-link\" href=\"#c%e4%b8%bb-agent--coder--scoder%e7%94%a8%e6%88%90%e6%9c%ac%e6%8d%a2%e8%a7%84%e6%a8%a1%e7%94%a8-review%e6%8d%a2%e5%8f%af%e9%9d%a0\"\u003e\n    \u003ci class=\"fa-solid fa-link\" aria-hidden=\"true\" title=\"链接到标题\"\u003e\u003c/i\u003e\n    \u003cspan class=\"sr-only\"\u003e链接到标题\u003c/span\u003e\n  \u003c/a\u003e\n\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003e主 Agent（Jobs）= PM/Tech Lead\u003c/strong\u003e：拆解任务、写任务书、验收，不直接改代码（主会话 token 成本高）\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003ecoder = 主工程师\u003c/strong\u003e：用便宜编程模型改脚本、补日志、自检闭环\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003escoder（Senior）= 架构师/Review\u003c/strong\u003e：用更强模型做方案与评审，提高复杂项目质量与可靠性\u003c/li\u003e\n\u003c/ul\u003e\n\u003cblockquote\u003e\n\u003cp\u003e实操里，主 Agent 在派单前通常会先定位到对应项目卡：\u003cbr\u003e\n“这次需求属于 \u003ccode\u003eai_daily\u003c/code\u003e / \u003ccode\u003eemail_summary\u003c/code\u003e 哪条线的哪个版本迭代”，再据此写 Task Spec（目标、约束、验收命令）。\u003cbr\u003e\n这样 coder 的改动不会脱离业务拓扑，scoder 的 review 也有统一的对齐基准。\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003ch3 id=\"31-edtp实证驱动型任务分发协议\"\u003e\n  3.1 EDTP：实证驱动型任务分发协议\n  \u003ca class=\"heading-link\" href=\"#31-edtp%e5%ae%9e%e8%af%81%e9%a9%b1%e5%8a%a8%e5%9e%8b%e4%bb%bb%e5%8a%a1%e5%88%86%e5%8f%91%e5%8d%8f%e8%ae%ae\"\u003e\n    \u003ci class=\"fa-solid fa-link\" aria-hidden=\"true\" title=\"链接到标题\"\u003e\u003c/i\u003e\n    \u003cspan class=\"sr-only\"\u003e链接到标题\u003c/span\u003e\n  \u003c/a\u003e\n\u003c/h3\u003e\n\u003cp\u003e主 Agent 在启动 coder/scoder 前，Task Spec 必须满足四条：\u003c/p\u003e\n\u003cp\u003e1）\u003cstrong\u003e实证式入场\u003c/strong\u003e：明确文件路径，必要时给关键函数/分支/行号\u003cbr\u003e\n2）\u003cstrong\u003eActive Role\u003c/strong\u003e：声明子 Agent 专家画像（Deep Researcher / System Architect / Senior Debugger / Protocol Specialist）\u003cbr\u003e\n3）\u003cstrong\u003e认知对齐握手\u003c/strong\u003e：子 Agent 启动后先复述任务与环境\u003cbr\u003e\n4）\u003cstrong\u003e证据分层闭环\u003c/strong\u003e：coder 提供命令+输出；researcher 提供事实链与引用\u003c/p\u003e\n\u003ch3 id=\"32-职责分工main--coder--scoder\"\u003e\n  3.2 职责分工：Main / coder / scoder\n  \u003ca class=\"heading-link\" href=\"#32-%e8%81%8c%e8%b4%a3%e5%88%86%e5%b7%a5main--coder--scoder\"\u003e\n    \u003ci class=\"fa-solid fa-link\" aria-hidden=\"true\" title=\"链接到标题\"\u003e\u003c/i\u003e\n    \u003cspan class=\"sr-only\"\u003e链接到标题\u003c/span\u003e\n  \u003c/a\u003e\n\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003e主 Agent\u003c/strong\u003e：理解诉求、拆解任务、写 Task Spec、决定起谁、验收\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003ecoder\u003c/strong\u003e：按 Task Spec 改代码/调 cron/补日志与自检，交付“改动文件 + 验证命令 + 输出”\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003escoder\u003c/strong\u003e：系统级重构/复杂需求介入，或 coder 多轮失败时介入，做架构方案与 review\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"33-任务状态三档说话必须对得上事实\"\u003e\n  3.3 任务状态三档：说话必须对得上事实\n  \u003ca class=\"heading-link\" href=\"#33-%e4%bb%bb%e5%8a%a1%e7%8a%b6%e6%80%81%e4%b8%89%e6%a1%a3%e8%af%b4%e8%af%9d%e5%bf%85%e9%a1%bb%e5%af%b9%e5%be%97%e4%b8%8a%e4%ba%8b%e5%ae%9e\"\u003e\n    \u003ci class=\"fa-solid fa-link\" aria-hidden=\"true\" title=\"链接到标题\"\u003e\u003c/i\u003e\n    \u003cspan class=\"sr-only\"\u003e链接到标题\u003c/span\u003e\n  \u003c/a\u003e\n\u003c/h3\u003e\n\u003cp\u003eCoding 任务只允许三档状态：未开始 / 进行中 / 已完成。主 Agent 禁止口头说“在改了/改完了”，除非存在对应 session 与验证记录。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"4-个性化能力固化sop-与项目卡机制\"\u003e\n  4. 个性化能力固化：SOP 与项目卡机制\n  \u003ca class=\"heading-link\" href=\"#4-%e4%b8%aa%e6%80%a7%e5%8c%96%e8%83%bd%e5%8a%9b%e5%9b%ba%e5%8c%96sop-%e4%b8%8e%e9%a1%b9%e7%9b%ae%e5%8d%a1%e6%9c%ba%e5%88%b6\"\u003e\n    \u003ci class=\"fa-solid fa-link\" aria-hidden=\"true\" title=\"链接到标题\"\u003e\u003c/i\u003e\n    \u003cspan class=\"sr-only\"\u003e链接到标题\u003c/span\u003e\n  \u003c/a\u003e\n\u003c/h2\u003e\n\u003ch3 id=\"41-sop通用-skill-不够我的场景高度个性化\"\u003e\n  4.1 SOP：通用 skill 不够，我的场景高度个性化\n  \u003ca class=\"heading-link\" href=\"#41-sop%e9%80%9a%e7%94%a8-skill-%e4%b8%8d%e5%a4%9f%e6%88%91%e7%9a%84%e5%9c%ba%e6%99%af%e9%ab%98%e5%ba%a6%e4%b8%aa%e6%80%a7%e5%8c%96\"\u003e\n    \u003ci class=\"fa-solid fa-link\" aria-hidden=\"true\" title=\"链接到标题\"\u003e\u003c/i\u003e\n    \u003cspan class=\"sr-only\"\u003e链接到标题\u003c/span\u003e\n  \u003c/a\u003e\n\u003c/h3\u003e\n\u003cp\u003e通用 skill 解决的是泛化能力，但我的很多任务是强个性化的：账号、知识结构、任务流程、分类口径、输出格式、降级策略……\u003cbr\u003e\n这些无法靠 prompt 临时讲一遍稳定运行，所以我把它们沉淀成 SOP，让新模型/新 Agent “看一眼说明书就能上手”。\u003c/p\u003e\n\u003ch3 id=\"42-项目卡机制一类持续性需求--一张长期维护的项目卡\"\u003e\n  4.2 项目卡机制：一类持续性需求 = 一张长期维护的项目卡\n  \u003ca class=\"heading-link\" href=\"#42-%e9%a1%b9%e7%9b%ae%e5%8d%a1%e6%9c%ba%e5%88%b6%e4%b8%80%e7%b1%bb%e6%8c%81%e7%bb%ad%e6%80%a7%e9%9c%80%e6%b1%82--%e4%b8%80%e5%bc%a0%e9%95%bf%e6%9c%9f%e7%bb%b4%e6%8a%a4%e7%9a%84%e9%a1%b9%e7%9b%ae%e5%8d%a1\"\u003e\n    \u003ci class=\"fa-solid fa-link\" aria-hidden=\"true\" title=\"链接到标题\"\u003e\u003c/i\u003e\n    \u003cspan class=\"sr-only\"\u003e链接到标题\u003c/span\u003e\n  \u003c/a\u003e\n\u003c/h3\u003e\n\u003cp\u003e项目卡这块，我把设计浓缩成一句话：\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e\u003cstrong\u003e一类持续性的需求 = 一张长期维护的项目卡\u003c/strong\u003e\u003cbr\u003e\n用来承载这条能力线的「背景 → 架构 → 用法 → 迭代史」。\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e它解决的不是“怎么调用脚本”，而是更上层的三个问题：\u003cbr\u003e\n\u003cstrong\u003e这条能力为什么存在？系统拓扑是什么？未来如何持续迭代与交接？\u003c/strong\u003e\u003c/p\u003e\n\u003chr\u003e\n\u003ch4 id=\"421-什么时候需要项目卡\"\u003e\n  4.2.1 什么时候需要项目卡？\n  \u003ca class=\"heading-link\" href=\"#421-%e4%bb%80%e4%b9%88%e6%97%b6%e5%80%99%e9%9c%80%e8%a6%81%e9%a1%b9%e7%9b%ae%e5%8d%a1\"\u003e\n    \u003ci class=\"fa-solid fa-link\" aria-hidden=\"true\" title=\"链接到标题\"\u003e\u003c/i\u003e\n    \u003cspan class=\"sr-only\"\u003e链接到标题\u003c/span\u003e\n  \u003c/a\u003e\n\u003c/h4\u003e\n\u003cp\u003e满足下面任意一条，就应该有一张 \u003ccode\u003enotes/projects/\u0026lt;name\u0026gt;.md\u003c/code\u003e：\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e这件事会\u003cstrong\u003e长期存在、持续迭代\u003c/strong\u003e（不是一次性的脚本）\u003c/li\u003e\n\u003cli\u003e牵涉多个脚本 / 定时任务 / 外部服务（例如 IMAP + Outlook + LLM）\u003c/li\u003e\n\u003cli\u003e未来可能要交接给别的 Agent，或者自己隔一段时间再回来继续做\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e典型例子包括：\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eai-daily.md\u003c/code\u003e：AI 日报整条流水线\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eemail-summary.md\u003c/code\u003e：昨日邮件摘要\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eopenclaw-runtime-review.md\u003c/code\u003e：runtime 改造项目\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003emiaokong-website.md\u003c/code\u003e：个人站点内容 + 构建 + 预览 + 部署\u003c/li\u003e\n\u003c/ul\u003e\n\u003chr\u003e\n\u003ch4 id=\"422-一张项目卡里应该有什么\"\u003e\n  4.2.2 一张项目卡里应该有什么？\n  \u003ca class=\"heading-link\" href=\"#422-%e4%b8%80%e5%bc%a0%e9%a1%b9%e7%9b%ae%e5%8d%a1%e9%87%8c%e5%ba%94%e8%af%a5%e6%9c%89%e4%bb%80%e4%b9%88\"\u003e\n    \u003ci class=\"fa-solid fa-link\" aria-hidden=\"true\" title=\"链接到标题\"\u003e\u003c/i\u003e\n    \u003cspan class=\"sr-only\"\u003e链接到标题\u003c/span\u003e\n  \u003c/a\u003e\n\u003c/h4\u003e\n\u003cp\u003e项目卡的结构我会尽量统一（表述可以变，但骨架不变），通常包含 5 块：\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e背景 \u0026amp; 目标\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e为什么要做这条能力，它解决什么具体痛点\u003c/li\u003e\n\u003cli\u003e例如 AI 日报：减少手动刷 newsletter / X 的时间，每天 06:30 前用一封邮件搞定\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e架构拓扑（Topology）\u003c/strong\u003e\u003cbr\u003e\n用三层视角描述数据流向：\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eData Layer：RSS / Watchlist / Bird / IMAP 等\u003c/li\u003e\n\u003cli\u003eLogic Layer：核心脚本（如 \u003ccode\u003egen_ai_digest.py\u003c/code\u003e、\u003ccode\u003egen_email_summary.py\u003c/code\u003e）\u003c/li\u003e\n\u003cli\u003eTransport Layer：发送链路（如 \u003ccode\u003esend_ai_briefing.sh\u003c/code\u003e、Outlook API 等）\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e依赖与环境\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e需要哪些环境变量 / API keys\u003c/li\u003e\n\u003cli\u003e依赖哪些外部 CLI 或服务（bird、outlook-cli、tvscreener 等）\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e使用方式 / 调用方式\u003c/strong\u003e\u003cbr\u003e\n给未来的自己一个“快速上手区”：\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e手动跑一次的命令\u003c/li\u003e\n\u003cli\u003e定时任务怎么配置（在哪个 Cron / OpenClaw cron id）\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e迭代日志\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e用时间线记录关键变更（V1.0 上线、V1.1 加源、V2.0 换架构……）\u003c/li\u003e\n\u003cli\u003e目的是让“现在的状态”与“为什么变成现在”可追溯\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ol\u003e\n\u003chr\u003e\n\u003ch4 id=\"423-项目卡在整体系统里的角色\"\u003e\n  4.2.3 项目卡在整体系统里的角色\n  \u003ca class=\"heading-link\" href=\"#423-%e9%a1%b9%e7%9b%ae%e5%8d%a1%e5%9c%a8%e6%95%b4%e4%bd%93%e7%b3%bb%e7%bb%9f%e9%87%8c%e7%9a%84%e8%a7%92%e8%89%b2\"\u003e\n    \u003ci class=\"fa-solid fa-link\" aria-hidden=\"true\" title=\"链接到标题\"\u003e\u003c/i\u003e\n    \u003cspan class=\"sr-only\"\u003e链接到标题\u003c/span\u003e\n  \u003c/a\u003e\n\u003c/h4\u003e\n\u003cp\u003e项目卡在系统里承接三件事：\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e「能力之上」的业务文档\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003ecapabilities.yaml\u003c/code\u003e 只告诉 Agent：有个能力、入口脚本是什么\u003c/li\u003e\n\u003cli\u003e真正的业务背景、目标、边界、拓扑与约束，写在项目卡里\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003eCoding 协作的锚点\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e主 Agent 起 coder/scoder 时，优先指向项目卡：\u003cbr\u003e\n“这次需求属于 ai_daily 这条线的 V1.2”\u003c/li\u003e\n\u003cli\u003ecoder 依据项目卡的拓扑与约束去改脚本，而不是在仓库里乱翻\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e长期记忆 / 交接介质\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e隔一阵子回来看、或者换 Agent，只要读项目卡就能知道：\n\u003cul\u003e\n\u003cli\u003e这条业务线当前现状\u003c/li\u003e\n\u003cli\u003e哪些脚本/cron 是“正途”，哪些只是历史残件\u003c/li\u003e\n\u003cli\u003e下一步可以怎么迭代\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ol\u003e\n\u003chr\u003e\n\u003ch2 id=\"5-应用场景这些架构如何转化为实战能力\"\u003e\n  5. 应用场景：这些架构如何转化为实战能力？\n  \u003ca class=\"heading-link\" href=\"#5-%e5%ba%94%e7%94%a8%e5%9c%ba%e6%99%af%e8%bf%99%e4%ba%9b%e6%9e%b6%e6%9e%84%e5%a6%82%e4%bd%95%e8%bd%ac%e5%8c%96%e4%b8%ba%e5%ae%9e%e6%88%98%e8%83%bd%e5%8a%9b\"\u003e\n    \u003ci class=\"fa-solid fa-link\" aria-hidden=\"true\" title=\"链接到标题\"\u003e\u003c/i\u003e\n    \u003cspan class=\"sr-only\"\u003e链接到标题\u003c/span\u003e\n  \u003c/a\u003e\n\u003c/h2\u003e\n\u003ch3 id=\"51-邮件蒸馏与脱水简报\"\u003e\n  5.1 邮件蒸馏与“脱水”简报\n  \u003ca class=\"heading-link\" href=\"#51-%e9%82%ae%e4%bb%b6%e8%92%b8%e9%a6%8f%e4%b8%8e%e8%84%b1%e6%b0%b4%e7%ae%80%e6%8a%a5\"\u003e\n    \u003ci class=\"fa-solid fa-link\" aria-hidden=\"true\" title=\"链接到标题\"\u003e\u003c/i\u003e\n    \u003cspan class=\"sr-only\"\u003e链接到标题\u003c/span\u003e\n  \u003c/a\u003e\n\u003c/h3\u003e\n\u003cp\u003eCron 触发 \u003ccode\u003egen_email_summary.py\u003c/code\u003e，IMAP 拉取邮件，LLM 分类为“费用/风险/行动/知会”，输出极简日报。\u003c/p\u003e\n\u003ch3 id=\"52-路线渲染与-web-预览\"\u003e\n  5.2 路线渲染与 Web 预览\n  \u003ca class=\"heading-link\" href=\"#52-%e8%b7%af%e7%ba%bf%e6%b8%b2%e6%9f%93%e4%b8%8e-web-%e9%a2%84%e8%a7%88\"\u003e\n    \u003ci class=\"fa-solid fa-link\" aria-hidden=\"true\" title=\"链接到标题\"\u003e\u003c/i\u003e\n    \u003cspan class=\"sr-only\"\u003e链接到标题\u003c/span\u003e\n  \u003c/a\u003e\n\u003c/h3\u003e\n\u003cp\u003e\u003ccode\u003eroute_eta_amap.py\u003c/code\u003e 拉数据 → \u003ccode\u003eamap_render.py\u003c/code\u003e 生成静态 HTML → Nginx 暴露链接，手机点开即路线对比。\u003c/p\u003e\n\u003ch3 id=\"53-自动笔记obsidian-sync\"\u003e\n  5.3 自动笔记（Obsidian Sync）\n  \u003ca class=\"heading-link\" href=\"#53-%e8%87%aa%e5%8a%a8%e7%ac%94%e8%ae%b0obsidian-sync\"\u003e\n    \u003ci class=\"fa-solid fa-link\" aria-hidden=\"true\" title=\"链接到标题\"\u003e\u003c/i\u003e\n    \u003cspan class=\"sr-only\"\u003e链接到标题\u003c/span\u003e\n  \u003c/a\u003e\n\u003c/h3\u003e\n\u003cp\u003e\u003ccode\u003eob_note_sync.py\u003c/code\u003e 对接 WebDAV，将对话精华整理成 Markdown 并同步。\u003c/p\u003e\n\u003ch3 id=\"54-全网资讯哨兵bird--watchlist\"\u003e\n  5.4 全网资讯哨兵（Bird + Watchlist）\n  \u003ca class=\"heading-link\" href=\"#54-%e5%85%a8%e7%bd%91%e8%b5%84%e8%ae%af%e5%93%a8%e5%85%b5bird--watchlist\"\u003e\n    \u003ci class=\"fa-solid fa-link\" aria-hidden=\"true\" title=\"链接到标题\"\u003e\u003c/i\u003e\n    \u003cspan class=\"sr-only\"\u003e链接到标题\u003c/span\u003e\n  \u003c/a\u003e\n\u003c/h3\u003e\n\u003cp\u003eBird CLI 监控 X 热点 + Watchlist 抓 RSS，输出 AI 日报与热点聚合。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"结语稳定性来自架构而不是-prompt\"\u003e\n  结语：稳定性来自架构，而不是 Prompt\n  \u003ca class=\"heading-link\" href=\"#%e7%bb%93%e8%af%ad%e7%a8%b3%e5%ae%9a%e6%80%a7%e6%9d%a5%e8%87%aa%e6%9e%b6%e6%9e%84%e8%80%8c%e4%b8%8d%e6%98%af-prompt\"\u003e\n    \u003ci class=\"fa-solid fa-link\" aria-hidden=\"true\" title=\"链接到标题\"\u003e\u003c/i\u003e\n    \u003cspan class=\"sr-only\"\u003e链接到标题\u003c/span\u003e\n  \u003c/a\u003e\n\u003c/h2\u003e\n\u003cp\u003e当你把业务逻辑\u003cstrong\u003e文档化（SOP）\u003c/strong\u003e、任务\u003cstrong\u003e异步化（Sub-agents）\u003c/strong\u003e、状态\u003cstrong\u003e物理化（Files \u0026amp; Configs）\u003c/strong\u003e，AI 就不再是一个不稳定的黑盒，而是一个真正可管理、可迭代的云端副官。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"附录当前系统能力全景runtime-capabilities\"\u003e\n  附录：当前系统能力全景（Runtime Capabilities）\n  \u003ca class=\"heading-link\" href=\"#%e9%99%84%e5%bd%95%e5%bd%93%e5%89%8d%e7%b3%bb%e7%bb%9f%e8%83%bd%e5%8a%9b%e5%85%a8%e6%99%afruntime-capabilities\"\u003e\n    \u003ci class=\"fa-solid fa-link\" aria-hidden=\"true\" title=\"链接到标题\"\u003e\u003c/i\u003e\n    \u003cspan class=\"sr-only\"\u003e链接到标题\u003c/span\u003e\n  \u003c/a\u003e\n\u003c/h2\u003e\n\u003ch3 id=\"1-高频自动化任务\"\u003e\n  1）⚡ 高频自动化任务\n  \u003ca class=\"heading-link\" href=\"#1-%e9%ab%98%e9%a2%91%e8%87%aa%e5%8a%a8%e5%8c%96%e4%bb%bb%e5%8a%a1\"\u003e\n    \u003ci class=\"fa-solid fa-link\" aria-hidden=\"true\" title=\"链接到标题\"\u003e\u003c/i\u003e\n    \u003cspan class=\"sr-only\"\u003e链接到标题\u003c/span\u003e\n  \u003c/a\u003e\n\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eai_daily\u003c/code\u003e：AI 日报（✅ 健康）\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eemail_summary\u003c/code\u003e：昨日邮件摘要（✅ 健康）\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003ecron_midday_evening_briefing\u003c/code\u003e：中晚报推送（✅ 健康）\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"2-实用工具箱\"\u003e\n  2）🛠️ 实用工具箱\n  \u003ca class=\"heading-link\" href=\"#2-%e5%ae%9e%e7%94%a8%e5%b7%a5%e5%85%b7%e7%ae%b1\"\u003e\n    \u003ci class=\"fa-solid fa-link\" aria-hidden=\"true\" title=\"链接到标题\"\u003e\u003c/i\u003e\n    \u003cspan class=\"sr-only\"\u003e链接到标题\u003c/span\u003e\n  \u003c/a\u003e\n\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003elocal_maps\u003c/code\u003e：路线/POI/天气（✅ 健康）\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003estocks\u003c/code\u003e：行情 + 技术分析（✅ 健康）\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003etwitter_bird\u003c/code\u003e：热点搜索（✅ 健康）\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"3-办公与协作\"\u003e\n  3）📅 办公与协作\n  \u003ca class=\"heading-link\" href=\"#3-%e5%8a%9e%e5%85%ac%e4%b8%8e%e5%8d%8f%e4%bd%9c\"\u003e\n    \u003ci class=\"fa-solid fa-link\" aria-hidden=\"true\" title=\"链接到标题\"\u003e\u003c/i\u003e\n    \u003cspan class=\"sr-only\"\u003e链接到标题\u003c/span\u003e\n  \u003c/a\u003e\n\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003eemail_check\u003c/code\u003e：未读邮件摘要\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eoutlook_calendar\u003c/code\u003e：日程管理（✅ 健康）\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eob_webdav\u003c/code\u003e：笔记同步（✅ 健康）\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"4-开发与预览\"\u003e\n  4）💻 开发与预览\n  \u003ca class=\"heading-link\" href=\"#4-%e5%bc%80%e5%8f%91%e4%b8%8e%e9%a2%84%e8%a7%88\"\u003e\n    \u003ci class=\"fa-solid fa-link\" aria-hidden=\"true\" title=\"链接到标题\"\u003e\u003c/i\u003e\n    \u003cspan class=\"sr-only\"\u003e链接到标题\u003c/span\u003e\n  \u003c/a\u003e\n\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003ecoding\u003c/code\u003e：调度 coder/scoder（EDTP 验收）\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eweb_preview\u003c/code\u003e：Markdown 渲染为网页链接\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"5底层实现索引technical-mapping\"\u003e\n  5）底层实现索引（Technical Mapping）\n  \u003ca class=\"heading-link\" href=\"#5%e5%ba%95%e5%b1%82%e5%ae%9e%e7%8e%b0%e7%b4%a2%e5%bc%95technical-mapping\"\u003e\n    \u003ci class=\"fa-solid fa-link\" aria-hidden=\"true\" title=\"链接到标题\"\u003e\u003c/i\u003e\n    \u003cspan class=\"sr-only\"\u003e链接到标题\u003c/span\u003e\n  \u003c/a\u003e\n\u003c/h3\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth style=\"text-align: left\"\u003e领域 (Domain)\u003c/th\u003e\n          \u003cth style=\"text-align: left\"\u003e核心能力\u003c/th\u003e\n          \u003cth style=\"text-align: left\"\u003e物理实现 (Script/Tool)\u003c/th\u003e\n          \u003cth style=\"text-align: left\"\u003e对应 SOP\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd style=\"text-align: left\"\u003eLocal Maps\u003c/td\u003e\n          \u003ctd style=\"text-align: left\"\u003e路线规划、ETA、POI、天气\u003c/td\u003e\n          \u003ctd style=\"text-align: left\"\u003e\u003ccode\u003eroute_eta_amap.py\u003c/code\u003e, \u003ccode\u003epoi_search.py\u003c/code\u003e\u003c/td\u003e\n          \u003ctd style=\"text-align: left\"\u003e\u003ccode\u003eroute-planning-SOP.md\u003c/code\u003e\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd style=\"text-align: left\"\u003eEmail Summary\u003c/td\u003e\n          \u003ctd style=\"text-align: left\"\u003e昨日摘要生成与发送\u003c/td\u003e\n          \u003ctd style=\"text-align: left\"\u003e\u003ccode\u003egen_email_summary.py\u003c/code\u003e, \u003ccode\u003esend_email_summary.sh\u003c/code\u003e\u003c/td\u003e\n          \u003ctd style=\"text-align: left\"\u003e\u003ccode\u003eemail-summary.md\u003c/code\u003e\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd style=\"text-align: left\"\u003eAI Daily\u003c/td\u003e\n          \u003ctd style=\"text-align: left\"\u003eWatchlist + Twitter 日报\u003c/td\u003e\n          \u003ctd style=\"text-align: left\"\u003e\u003ccode\u003egen_ai_digest.py\u003c/code\u003e, \u003ccode\u003ebird\u003c/code\u003e CLI\u003c/td\u003e\n          \u003ctd style=\"text-align: left\"\u003e\u003ccode\u003eai-daily.md\u003c/code\u003e\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd style=\"text-align: left\"\u003eOutlook\u003c/td\u003e\n          \u003ctd style=\"text-align: left\"\u003e日历管理、邮件发送\u003c/td\u003e\n          \u003ctd style=\"text-align: left\"\u003e\u003ccode\u003eoutlook-calendar.sh\u003c/code\u003e, \u003ccode\u003eoutlook-mail.sh\u003c/code\u003e\u003c/td\u003e\n          \u003ctd style=\"text-align: left\"\u003e\u003ccode\u003eoutlook-SOP.md\u003c/code\u003e\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd style=\"text-align: left\"\u003eObsidian\u003c/td\u003e\n          \u003ctd style=\"text-align: left\"\u003eWebDAV 写入\u003c/td\u003e\n          \u003ctd style=\"text-align: left\"\u003e\u003ccode\u003eob_note_sync.py\u003c/code\u003e\u003c/td\u003e\n          \u003ctd style=\"text-align: left\"\u003e\u003ccode\u003emiaok-约定.md\u003c/code\u003e\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd style=\"text-align: left\"\u003eCoding\u003c/td\u003e\n          \u003ctd style=\"text-align: left\"\u003e异步编码与架构评审\u003c/td\u003e\n          \u003ctd style=\"text-align: left\"\u003e\u003ccode\u003esessions_spawn\u003c/code\u003e\u003c/td\u003e\n          \u003ctd style=\"text-align: left\"\u003e\u003ccode\u003ecoding-SOP.md\u003c/code\u003e\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd style=\"text-align: left\"\u003eWeb Preview\u003c/td\u003e\n          \u003ctd style=\"text-align: left\"\u003e渲染发布预览\u003c/td\u003e\n          \u003ctd style=\"text-align: left\"\u003e\u003ccode\u003eweb_preview_publish.py\u003c/code\u003e, Nginx\u003c/td\u003e\n          \u003ctd style=\"text-align: left\"\u003e\u003ccode\u003e基础设置-总览.md\u003c/code\u003e\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd style=\"text-align: left\"\u003eTwitter\u003c/td\u003e\n          \u003ctd style=\"text-align: left\"\u003e热点搜索与聚合\u003c/td\u003e\n          \u003ctd style=\"text-align: left\"\u003e\u003ccode\u003ebird\u003c/code\u003e CLI\u003c/td\u003e\n          \u003ctd style=\"text-align: left\"\u003e\u003ccode\u003etwitter-bird-SOP.md\u003c/code\u003e\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd style=\"text-align: left\"\u003eStocks\u003c/td\u003e\n          \u003ctd style=\"text-align: left\"\u003e行情与技术分析\u003c/td\u003e\n          \u003ctd style=\"text-align: left\"\u003e\u003ccode\u003eyf\u003c/code\u003e, \u003ccode\u003etvscreener\u003c/code\u003e\u003c/td\u003e\n          \u003ctd style=\"text-align: left\"\u003e\u003ccode\u003emiaok-炒股-SOP.md\u003c/code\u003e\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n","description":"分享我如何利用 OpenClaw 构建个人自动化系统，包括物理化状态、Reset V2、健康三件套以及多 Agent 协作流程。"}