[{"data":1,"prerenderedAt":2995},["ShallowReactive",2],{"navigation":3,"\u002Fmindset\u002Fboris-cherny-tips":189,"\u002Fmindset\u002Fboris-cherny-tips-surround":2991},[4,35,57,75,101,123,149,171],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":34},"第 1 章：认识 Claude Code","i-lucide-rocket","\u002Fintro","1.intro",[10,14,18,22,26,30],{"title":11,"path":12,"stem":13},"什么是 Claude Code","\u002Fintro\u002Fwhat-is-claude-code","1.intro\u002F1.what-is-claude-code",{"title":15,"path":16,"stem":17},"Claude Code 与 Copilot、Cursor、Windsurf 的本质区别","\u002Fintro\u002Fvs-competitors","1.intro\u002F2.vs-competitors",{"title":19,"path":20,"stem":21},"AI 编程助手生态全景与选型指南","\u002Fintro\u002Fecosystem-guide","1.intro\u002F3.ecosystem-guide",{"title":23,"path":24,"stem":25},"LLM 的概率本质","\u002Fintro\u002Fllm-probability","1.intro\u002F4.llm-probability",{"title":27,"path":28,"stem":29},"从聊天机器人到 Agent","\u002Fintro\u002Ffrom-chatbot-to-agent","1.intro\u002F5.from-chatbot-to-agent",{"title":31,"path":32,"stem":33},"Claude Code 的 Agentic Loop 全拆解","\u002Fintro\u002Fagentic-loop","1.intro\u002F6.agentic-loop",false,{"title":36,"icon":37,"path":38,"stem":39,"children":40,"page":34},"第 2 章：安装与配置","i-lucide-settings","\u002Fsetup","2.setup",[41,45,49,53],{"title":42,"path":43,"stem":44},"系统要求与安装方式","\u002Fsetup\u002Fsystem-requirements","2.setup\u002F1.system-requirements",{"title":46,"path":47,"stem":48},"认证、登录与多账户管理","\u002Fsetup\u002Fauthentication","2.setup\u002F2.authentication",{"title":50,"path":51,"stem":52},"选择你的界面","\u002Fsetup\u002Fchoose-interface","2.setup\u002F3.choose-interface",{"title":54,"path":55,"stem":56},"Coding Plan","\u002Fsetup\u002Fcoding-plan","2.setup\u002F4.coding-plan",{"title":58,"icon":59,"path":60,"stem":61,"children":62,"page":34},"第 3 章：快速上手","i-lucide-hand","\u002Fquickstart","3.quickstart",[63,67,71],{"title":64,"path":65,"stem":66},"启动、交互模式与基本命令","\u002Fquickstart\u002Fstartup","3.quickstart\u002F1.startup",{"title":68,"path":69,"stem":70},"让 Claude 理解你的项目","\u002Fquickstart\u002Fcodebase-understanding","3.quickstart\u002F2.codebase-understanding",{"title":72,"path":73,"stem":74},"第一次代码变更","\u002Fquickstart\u002Ffirst-change","3.quickstart\u002F3.first-change",{"title":76,"icon":77,"path":78,"stem":79,"children":80,"page":34},"第 4 章：核心功能","i-lucide-laptop","\u002Fcore-features","4.core-features",[81,85,89,93,97],{"title":82,"path":83,"stem":84},"代码库全景扫描与模块关系分析","\u002Fcore-features\u002Fcodebase-scan","4.core-features\u002F1.codebase-scan",{"title":86,"path":87,"stem":88},"代码编辑与生成","\u002Fcore-features\u002Fedit-generate","4.core-features\u002F2.edit-generate",{"title":90,"path":91,"stem":92},"测试与调试","\u002Fcore-features\u002Ftest-debug","4.core-features\u002F3.test-debug",{"title":94,"path":95,"stem":96},"Git 工作流","\u002Fcore-features\u002Fgit-workflow","4.core-features\u002F4.git-workflow",{"title":98,"path":99,"stem":100},"工具链执行","\u002Fcore-features\u002Ftoolchain","4.core-features\u002F5.toolchain",{"title":102,"icon":103,"path":104,"stem":105,"children":106,"page":34},"第 5 章：进阶配置","i-lucide-wrench","\u002Fadvanced","5.advanced",[107,111,115,119],{"title":108,"path":109,"stem":110},"CLAUDE.md","\u002Fadvanced\u002Fclaude-md","5.advanced\u002F1.claude-md",{"title":112,"path":113,"stem":114},"Skills","\u002Fadvanced\u002Fskills","5.advanced\u002F2.skills",{"title":116,"path":117,"stem":118},"MCP","\u002Fadvanced\u002Fmcp","5.advanced\u002F3.mcp",{"title":120,"path":121,"stem":122},"Hooks 与 Plan 模式","\u002Fadvanced\u002Fhooks-plan","5.advanced\u002F4.hooks-plan",{"title":124,"icon":125,"path":126,"stem":127,"children":128,"page":34},"第 6 章：实战开发","i-lucide-hammer","\u002Fpractice","6.practice",[129,133,137,141,145],{"title":130,"path":131,"stem":132},"需求分析与架构设计","\u002Fpractice\u002Frequirements-architecture","6.practice\u002F1.requirements-architecture",{"title":134,"path":135,"stem":136},"项目脚手架搭建与技术选型","\u002Fpractice\u002Fscaffolding","6.practice\u002F2.scaffolding",{"title":138,"path":139,"stem":140},"核心功能实现","\u002Fpractice\u002Fcore-features","6.practice\u002F3.core-features",{"title":142,"path":143,"stem":144},"测试覆盖、代码审查与质量调优","\u002Fpractice\u002Ftesting-quality","6.practice\u002F4.testing-quality",{"title":146,"path":147,"stem":148},"部署上线与成果分享","\u002Fpractice\u002Fdeployment","6.practice\u002F5.deployment",{"title":150,"icon":151,"path":152,"stem":153,"children":154,"page":34},"第 7 章：心法层","i-lucide-brain","\u002Fmindset","7.mindset",[155,159,163,167],{"title":156,"path":157,"stem":158},"提示词设计原则","\u002Fmindset\u002Fprompt-design","7.mindset\u002F1.prompt-design",{"title":160,"path":161,"stem":162},"上下文管理策略","\u002Fmindset\u002Fcontext-management","7.mindset\u002F2.context-management",{"title":164,"path":165,"stem":166},"安全与权限控制","\u002Fmindset\u002Fsecurity","7.mindset\u002F3.security",{"title":168,"path":169,"stem":170},"Boris Cherny 的 9 条实战心法与团队推广经验","\u002Fmindset\u002Fboris-cherny-tips","7.mindset\u002F4.boris-cherny-tips",{"title":172,"icon":173,"path":174,"stem":175,"children":176,"page":34},"附录","i-lucide-paperclip","\u002Fappendix","8.appendix",[177,181,185],{"title":178,"path":179,"stem":180},"常用命令速查表","\u002Fappendix\u002Fa.command-cheatsheet","8.appendix\u002Fa.command-cheatsheet",{"title":182,"path":183,"stem":184},"AI 核心术语汇编","\u002Fappendix\u002Fb.ai-terminology","8.appendix\u002Fb.ai-terminology",{"title":186,"path":187,"stem":188},"资源链接与延伸阅读","\u002Fappendix\u002Fc.resources","8.appendix\u002Fc.resources",{"id":190,"title":168,"body":191,"description":197,"extension":2985,"links":2986,"meta":2987,"navigation":342,"path":169,"seo":2989,"stem":170,"__hash__":2990},"docs\u002F7.mindset\u002F4.boris-cherny-tips.md",{"type":192,"value":193,"toc":2931},"minimark",[194,198,210,217,223,226,231,237,243,248,255,261,283,290,293,304,524,527,530,538,544,547,550,570,577,579,583,588,602,605,612,615,618,634,637,642,657,664,667,673,675,679,684,693,696,703,706,709,726,729,767,777,780,800,803,809,811,815,820,825,828,839,842,845,865,1059,1065,1097,1100,1160,1163,1166,1169,1175,1178,1180,1184,1189,1194,1197,1200,1203,1206,1469,1472,1475,1478,1492,1497,1517,1520,1526,1542,1549,1551,1555,1560,1565,1568,1575,1578,1581,1605,1608,1614,1692,1699,1702,1839,1845,1847,1851,1856,1861,1864,1871,1874,1877,1883,1886,1891,1909,1912,1918,1921,1927,1929,1933,1938,1943,1946,1953,1956,1959,1979,1985,1988,1994,2000,2026,2040,2042,2046,2051,2056,2059,2066,2069,2072,2119,2122,2189,2192,2198,2248,2251,2260,2262,2265,2268,2272,2277,2280,2291,2294,2299,2302,2313,2316,2321,2324,2335,2338,2348,2368,2375,2378,2383,2390,2395,2402,2407,2417,2422,2429,2434,2441,2446,2453,2458,2469,2474,2481,2484,2489,2523,2529,2535,2549,2552,2558,2578,2581,2584,2704,2711,2713,2716,2723,2743,2750,2756,2788,2794,2800,2803,2806,2817,2824,2827,2927],[195,196,197],"p",{},"Boris Cherny 是 Anthropic Claude Code 团队的工程师，他在 Anthropic 官方博客发表的 \"Claude Code Best Practices\"（2025 年 4 月）成为 AI 协作领域被引用最广的实战指南之一。该文章与他后续的多次公开演讲、社区分享共同构成了\"Claude Code 工程心法\"的事实基础。本节将其浓缩为 9 条可立即落地的心法，并补充本人在多个团队推广 Claude Code 时积累的经验。",[195,199,200,201,205,206,209],{},"需要先澄清一点：",[202,203,204],"strong",{},"这 9 条心法不是从 Boris Cherny 原文逐字复述","——原文以英文写作、带有大量的具体场景细节，并不直接对应 9 条编号。本节做的是",[202,207,208],{},"结构化提炼","：把 Boris 多篇文章与公开演讲中反复出现的核心主张，归纳为 9 条便于团队记忆与推广的心法。每一条都标注其在 Anthropic 公开材料中的对应章节或观点，确保不偏离原意。读者需要原文细节时，建议直接阅读延伸阅读中的 Anthropic 官方博客与演讲录像。",[195,211,212,213,216],{},"本节的另一个目的是——",[202,214,215],{},"把\"工程师心法\"翻译成\"团队推广方法论\"","。一个工程师懂得 9 条心法是个人能力，让一个 8 人团队全员实践 9 条心法是组织能力。后者远比前者难，本节后半部分的\"团队推广经验\"专门讨论这部分。",[195,218,219,222],{},[202,220,221],{},"为什么是 9 条而不是 10 条或 5 条","：心法数量的选择本身就是一种刻意的设计权衡——5 条太少（覆盖不全工程实践的全貌）、15 条太多（团队记不住）、9 条恰好覆盖\"基础 + 机制 + 价值观\"三大层次（每层 3-4 条）、且符合人类短期记忆的\"7±2\"边界（通常被称为 Miller's Law）。读者在传播这些心法时也建议保持 9 条编号，便于团队内的统一引用——\"我们违反了第 8 条\"比\"我们违反了人类决策权那条\"更精确、更易在压力情境下被识别。这种\"编号即简称\"的设计，是任何团队规范在长期演化中保持不变形的关键。",[224,225],"hr",{},[227,228,230],"h2",{"id":229},"第一条claudemd-是项目记忆的根基","第一条：CLAUDE.md 是项目记忆的根基",[195,232,233,236],{},[202,234,235],{},"心法","：每个项目都应当维护一份 CLAUDE.md，作为团队与 AI 共享的\"项目记忆\"。它不是设计文档，也不是 README——它是\"高频偏差校正器\"，专门记录 AI 反复犯错的点、团队反复达成的共识。",[195,238,239,242],{},[202,240,241],{},"Anthropic 官方观点（来自 Claude Code Best Practices）","：CLAUDE.md 在每次会话开始时自动注入，是塑造 Claude 行为最直接的杠杆。它应当包含：项目结构概览、命令惯例、风格约定、关键技术决策。",[244,245,247],"h3",{"id":246},"pm-视角","PM 视角",[195,249,250,251,254],{},"PM 不需要懂 Markdown 语法，但需要理解：",[202,252,253],{},"你写在 CLAUDE.md 里的每一条业务规则，都会在工程师每次与 Claude 协作时被自动注入","。这意味着 CLAUDE.md 的质量直接决定 AI 协作的\"语义底色\"。一份描述清晰的 CLAUDE.md 让 Claude 知道\"这个产品给谁用\"、\"哪些数据是敏感的\"、\"哪些边界不能跨\"——业务约束转化为代码约束的转换效率会显著提升。",[195,256,257,260],{},[202,258,259],{},"PM 在 CLAUDE.md 维护中的具体角色","：很多 PM 会把\"维护文档\"理解为工程师的事，但 CLAUDE.md 是少数 PM 应当主动参与的工程产物——",[262,263,264,271,277],"ul",{},[265,266,267,270],"li",{},[202,268,269],{},"业务规则段落","：PM 直接撰写、明确措辞、举具体例子。例如\"用户邮箱必须唯一\"、\"批量操作必须支持中断恢复\"。这些规则工程师未必清楚业务源头，但写下去后会直接影响 Claude 生成的代码。",[265,272,273,276],{},[202,274,275],{},"优先级声明","：在功能开发期，PM 可以临时加一条\"本周优先 user 模块、其他模块的修改请等下周\"。这种\"焦点声明\"让 Claude 自动避开非优先模块。",[265,278,279,282],{},[202,280,281],{},"客户\u002F法务红线","：PM 经常是第一手知道\"哪些数据不能让 AI 处理\"、\"哪些动作有合规风险\"的人。把这些红线写进 CLAUDE.md，比让工程师\"猜\"高效得多。",[195,284,285,286,289],{},"PM 与工程师协作维护 CLAUDE.md 的健康节奏——",[202,287,288],{},"工程师每周更新技术细节，PM 每两周更新业务规则","。两个角色在同一份文档上协作，让 Claude 同时理解\"代码该怎么写\"与\"产品该往哪走\"。这种 PM-工程师在工程产物上的深度协作，是传统软件工程罕见的——但在 AI 协作时代会变得越来越普遍。",[244,291,292],{"id":292},"工程师视角",[195,294,295,296,299,300,303],{},"CLAUDE.md 的反模式是",[202,297,298],{},"过度膨胀","——把所有\"可能用得上\"的信息都塞进来。500 行以上的 CLAUDE.md 不仅占用上下文 Token，而且会稀释 Claude 对每条规则的关注度。本人推荐的健康长度是 ",[202,301,302],{},"200-400 行","，分为以下几个部分：",[305,306,311],"pre",{"className":307,"code":308,"language":309,"meta":310,"style":310},"language-markdown shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","# Project: [项目名]\n\n## Tech Stack（技术栈）\n- TypeScript 5.x + Vue 3 + Vite\n- Vitest for unit, Playwright for e2e\n- ESLint flat config + Prettier\n\n## Conventions（约定）\n- 命名：camelCase for vars, PascalCase for types\n- 文件：feature-based 目录结构\n- 测试：每个模块独立 __tests__\u002F 子目录\n\n## Critical Rules（铁律）\n- 所有自定义错误继承 BaseError\n- API 路径以 \u002Fapi\u002Fv1\u002F 开头\n- 永远不直接修改生产数据库\n\n## Recent Decisions（近期决策）\n- 2026-04-15: 切换到 Drizzle ORM（之前是 Prisma）\n- 2026-04-20: 启用 strict mode\n\n## Common Mistakes Claude Makes Here（这里 Claude 容易犯的错）\n- 写 SQL 时容易漏 transaction wrapper\n- 测试时容易忘记 mock 外部 API\n","markdown","",[312,313,314,337,344,353,363,371,379,384,392,400,408,429,434,442,450,458,466,471,479,487,495,500,508,516],"code",{"__ignoreMap":310},[315,316,319,323,327,330,334],"span",{"class":317,"line":318},"line",1,[315,320,322],{"class":321},"sMK4o","# ",[315,324,326],{"class":325},"sBMFI","Project: ",[315,328,329],{"class":321},"[",[315,331,333],{"class":332},"sfazB","项目名",[315,335,336],{"class":321},"]\n",[315,338,340],{"class":317,"line":339},2,[315,341,343],{"emptyLinePlaceholder":342},true,"\n",[315,345,347,350],{"class":317,"line":346},3,[315,348,349],{"class":321},"## ",[315,351,352],{"class":325},"Tech Stack（技术栈）\n",[315,354,356,359],{"class":317,"line":355},4,[315,357,358],{"class":321},"-",[315,360,362],{"class":361},"sTEyZ"," TypeScript 5.x + Vue 3 + Vite\n",[315,364,366,368],{"class":317,"line":365},5,[315,367,358],{"class":321},[315,369,370],{"class":361}," Vitest for unit, Playwright for e2e\n",[315,372,374,376],{"class":317,"line":373},6,[315,375,358],{"class":321},[315,377,378],{"class":361}," ESLint flat config + Prettier\n",[315,380,382],{"class":317,"line":381},7,[315,383,343],{"emptyLinePlaceholder":342},[315,385,387,389],{"class":317,"line":386},8,[315,388,349],{"class":321},[315,390,391],{"class":325},"Conventions（约定）\n",[315,393,395,397],{"class":317,"line":394},9,[315,396,358],{"class":321},[315,398,399],{"class":361}," 命名：camelCase for vars, PascalCase for types\n",[315,401,403,405],{"class":317,"line":402},10,[315,404,358],{"class":321},[315,406,407],{"class":361}," 文件：feature-based 目录结构\n",[315,409,411,413,416,420,424,426],{"class":317,"line":410},11,[315,412,358],{"class":321},[315,414,415],{"class":361}," 测试：每个模块独立 ",[315,417,419],{"class":418},"sHepR","__",[315,421,423],{"class":422},"so75L","tests",[315,425,419],{"class":418},[315,427,428],{"class":361},"\u002F 子目录\n",[315,430,432],{"class":317,"line":431},12,[315,433,343],{"emptyLinePlaceholder":342},[315,435,437,439],{"class":317,"line":436},13,[315,438,349],{"class":321},[315,440,441],{"class":325},"Critical Rules（铁律）\n",[315,443,445,447],{"class":317,"line":444},14,[315,446,358],{"class":321},[315,448,449],{"class":361}," 所有自定义错误继承 BaseError\n",[315,451,453,455],{"class":317,"line":452},15,[315,454,358],{"class":321},[315,456,457],{"class":361}," API 路径以 \u002Fapi\u002Fv1\u002F 开头\n",[315,459,461,463],{"class":317,"line":460},16,[315,462,358],{"class":321},[315,464,465],{"class":361}," 永远不直接修改生产数据库\n",[315,467,469],{"class":317,"line":468},17,[315,470,343],{"emptyLinePlaceholder":342},[315,472,474,476],{"class":317,"line":473},18,[315,475,349],{"class":321},[315,477,478],{"class":325},"Recent Decisions（近期决策）\n",[315,480,482,484],{"class":317,"line":481},19,[315,483,358],{"class":321},[315,485,486],{"class":361}," 2026-04-15: 切换到 Drizzle ORM（之前是 Prisma）\n",[315,488,490,492],{"class":317,"line":489},20,[315,491,358],{"class":321},[315,493,494],{"class":361}," 2026-04-20: 启用 strict mode\n",[315,496,498],{"class":317,"line":497},21,[315,499,343],{"emptyLinePlaceholder":342},[315,501,503,505],{"class":317,"line":502},22,[315,504,349],{"class":321},[315,506,507],{"class":325},"Common Mistakes Claude Makes Here（这里 Claude 容易犯的错）\n",[315,509,511,513],{"class":317,"line":510},23,[315,512,358],{"class":321},[315,514,515],{"class":361}," 写 SQL 时容易漏 transaction wrapper\n",[315,517,519,521],{"class":317,"line":518},24,[315,520,358],{"class":321},[315,522,523],{"class":361}," 测试时容易忘记 mock 外部 API\n",[195,525,526],{},"最后一节\"Common Mistakes\"是本人加的——它专门记录\"在这个项目里 Claude 反复犯过的错\"。每次发现新错误就追加一条，半年后这部分就成了团队最宝贵的\"AI 协作教训库\"。",[244,528,529],{"id":529},"实战示例",[305,531,536],{"className":532,"code":534,"language":535},[533],"language-text","# 反模式：CLAUDE.md 写成抽象规则\n\"代码要规范、错误要处理、测试要全面\"\n\n# 正确：CLAUDE.md 写成具体约束\n\"所有自定义错误继承 src\u002Ferrors\u002FBaseError.ts；\n错误必须含 field 与 resource 上下文；\n单元测试覆盖率 ≥ 90%、单个测试时长 ≤ 2 秒\"\n","text",[312,537,534],{"__ignoreMap":310},[195,539,540,543],{},[202,541,542],{},"CLAUDE.md 维护的\"减法心法\"","：",[195,545,546],{},"CLAUDE.md 的最大反模式不是\"写得太少\"，而是\"写得太多但都没人看\"。本人见过 1500 行的 CLAUDE.md——前两年攒下的所有规则都在里面，但 70% 已经过时、20% 互相冲突、只有 10% 在真正影响 Claude 行为。这种状态比\"没有 CLAUDE.md\"还糟糕——因为它给了团队\"我们已经把规范写下来了\"的错觉。",[195,548,549],{},"每月一次\"减法 review\"——逐条审视：",[262,551,552,558,564],{},[265,553,554,557],{},[202,555,556],{},"这条规则过去 30 天有没有被违反过？"," 如果没有，可能已经内化为团队习惯，可以删除。",[265,559,560,563],{},[202,561,562],{},"这条规则与其他规则有没有矛盾？"," 矛盾的规则必须二选一或合并。",[265,565,566,569],{},[202,567,568],{},"这条规则是否已被工具自动化？"," 例如已被 Hook 拦截的规则可以从 CLAUDE.md 删除。",[195,571,572,573,576],{},"减法 review 的目标——",[202,574,575],{},"让 CLAUDE.md 始终保持\"100% 活跃服役\"的状态","。每条规则都在真正塑造 Claude 行为，没有一条是装饰。",[224,578],{},[227,580,582],{"id":581},"第二条把一个会话只做一件事内化为习惯","第二条：把\"一个会话只做一件事\"内化为习惯",[195,584,585,587],{},[202,586,235],{},"：单次会话的边界应当与单个迭代单元对齐——一次会话只做一件事，做完就开新会话。",[195,589,590,593,594,597,598,601],{},[202,591,592],{},"Anthropic 官方观点","：长会话会因上下文累积、注意力稀释而导致质量下降。Claude Code 的 ",[312,595,596],{},"\u002Fcompact"," 与 ",[312,599,600],{},"\u002Fclear"," 命令是为这条心法设计的工具。",[244,603,247],{"id":604},"pm-视角-1",[195,606,607,608,611],{},"PM 看工程师工作时，有时会困惑为什么\"明明在做同一个功能、却频繁切换会话\"。这条心法的本质是",[202,609,610],{},"注意力资源的纪律性管理","——每次会话开新等同于\"工程师把脑子从旧任务清空、聚焦到新任务\"。这种\"主动清场\"听起来繁琐，但带来的输出质量差异是数倍级的。理解这条之后，PM 在 sprint planning 时会更主动地把\"功能\"拆成\"故事\"再拆成\"任务\"——拆得越细，AI 协作的边际效益越高。",[244,613,292],{"id":614},"工程师视角-1",[195,616,617],{},"判断\"是否该开新会话\"的标准：",[262,619,620,627],{},[265,621,622,623,626],{},"✅ ",[202,624,625],{},"应该开新会话","：换主题（从 user 模块切到 order 模块）、上一任务完成、上下文已超 30K Token",[265,628,629,630,633],{},"❌ ",[202,631,632],{},"不要开新会话","：还在做同一个函数的迭代、还在调试同一个 bug、距离开始才 5 分钟",[195,635,636],{},"参考 7.2 节的\"15 分钟到 90 分钟\"原则——这是会话的甜蜜区。",[195,638,639,543],{},[202,640,641],{},"判断\"会话该结束\"的四个隐性信号",[643,644,645,648,651,654],"ol",{},[265,646,647],{},"Claude 开始重复确认早前已经说过的事实——说明它的注意力开始稀释",[265,649,650],{},"Claude 输出的代码风格突然偏离项目惯例——说明 CLAUDE.md 的位置效应失效",[265,652,653],{},"工程师开始觉得\"再交代一遍很麻烦\"——说明上下文已经混乱到工程师都不愿意维护",[265,655,656],{},"工具调用结果开始被自动截断——说明上下文窗口接近上限",[195,658,659,660,663],{},"任何一个信号出现都应当主动结束会话。",[202,661,662],{},"不要心疼\"投入的对话历史\"——更宝贵的是当下的判断力","。",[244,665,529],{"id":666},"实战示例-1",[305,668,671],{"className":669,"code":670,"language":535},[533],"# 反模式：一个会话从早到晚\n\"帮我做用户管理模块\" → 写代码 → 调试 → 写测试 → 写文档 → 修 bug → ...\n（4 小时后 Claude 已经混淆了字段名、写出错误代码）\n\n# 正确：拆成多次会话\n会话 1（45 分钟）：定义类型 + CRUD\n会话 2（45 分钟）：补单元测试\n会话 3（30 分钟）：补集成测试\n会话 4（30 分钟）：写文档\n",[312,672,670],{"__ignoreMap":310},[224,674],{},[227,676,678],{"id":677},"第三条plan-模式优于乐观执行","第三条：Plan 模式优于乐观执行",[195,680,681,683],{},[202,682,235],{},"：高风险变更前，先让 Claude 输出 Plan、人工审批后再执行——比\"先执行再 review\"安全得多。",[195,685,686,688,689,692],{},[202,687,592],{},"：Claude Code 内置的 Plan 模式（",[312,690,691],{},"--permission-mode plan","）是为了对抗\"AI 乐观执行\"的反面机制。在该模式下，任何写文件、跑命令的动作前都会被强制中断、要求审批。",[244,694,247],{"id":695},"pm-视角-2",[195,697,698,699,702],{},"PM 不需要使用 Plan 模式，但需要理解它的存在意义——",[202,700,701],{},"它把\"AI 自动决策\"降级为\"AI 提议、人类审批\"","。这条机制的价值在高风险场景下尤为明显：架构重构、数据迁移、生产部署。让 Claude 先输出一份\"我打算做的所有动作\"，PM 也可以参与 review，从业务视角识别\"这个 plan 是否符合需求\"。",[244,704,292],{"id":705},"工程师视角-2",[195,707,708],{},"什么时候用 Plan 模式：",[262,710,711,714,717,720,723],{},[265,712,713],{},"✅ 涉及生产环境",[265,715,716],{},"✅ 涉及数据库 schema",[265,718,719],{},"✅ 跨 5 个以上文件的变更",[265,721,722],{},"✅ 首次进入陌生代码库",[265,724,725],{},"✅ 任何让你\"心里不踏实\"的操作",[195,727,728],{},"切换方式：",[305,730,734],{"className":731,"code":732,"language":733,"meta":310,"style":310},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","# 启动时\nclaude --permission-mode plan\n\n# 会话中临时\n\u002Fplan\n","bash",[312,735,736,742,753,757,762],{"__ignoreMap":310},[315,737,738],{"class":317,"line":318},[315,739,741],{"class":740},"sHwdD","# 启动时\n",[315,743,744,747,750],{"class":317,"line":339},[315,745,746],{"class":325},"claude",[315,748,749],{"class":332}," --permission-mode",[315,751,752],{"class":332}," plan\n",[315,754,755],{"class":317,"line":346},[315,756,343],{"emptyLinePlaceholder":342},[315,758,759],{"class":317,"line":355},[315,760,761],{"class":740},"# 会话中临时\n",[315,763,764],{"class":317,"line":365},[315,765,766],{"class":325},"\u002Fplan\n",[195,768,769,772,773,776],{},[202,770,771],{},"Plan 模式的\"心理成本\"与对抗策略","：很多工程师在尝试 Plan 模式后会反馈\"太繁琐了、每一步都要确认\"。这种感受合理但需要被对抗——",[202,774,775],{},"繁琐不是 Bug，是 Feature","。Plan 模式刻意让\"自动执行\"变得不那么轻松，目的是让工程师在按下\"批准\"前停下来思考一秒。这一秒的延迟正是它的价值所在——大部分错误都是\"想得不够清楚就动手\"造成的。",[195,778,779],{},"减少 Plan 模式繁琐感的几个技巧：",[643,781,782,788,794],{},[265,783,784,787],{},[202,785,786],{},"批量审批","：让 Claude 一次输出完整 plan（10 步、20 步），不要分次产出。一次审批整个 plan 比分 20 次审批省时间。",[265,789,790,793],{},[202,791,792],{},"Plan 模板化","：要求 Claude 用统一模板输出 plan（\"动作清单 \u002F 预期效果 \u002F 风险点 \u002F 回滚方案\"），工程师审阅时按模板对照，速度更快。",[265,795,796,799],{},[202,797,798],{},"Plan 模式仅限高风险任务","：日常迭代不开 plan 模式，只在涉及生产、数据、架构时切换。低风险任务用 default 或 acceptEdits 模式保持高效。",[244,801,529],{"id":802},"实战示例-2",[305,804,807],{"className":805,"code":806,"language":535},[533],"# 反模式：直接让 Claude 重构\n\"帮我把整个 user 模块重构为 hexagonal architecture\"\n→ Claude 一次性改了 18 个文件，工程师审查时疲惫漏掉关键 bug\n\n# 正确：先 Plan 再 review\n\"我想把 user 模块重构为 hexagonal architecture。\n请先进入 plan 模式，输出：\n1. 涉及的文件清单（保留 \u002F 新增 \u002F 删除）\n2. 每个文件的关键变更\n3. 重构的执行顺序\n4. 每一步的验证方式\n\n输出 plan 后等我审批，不要直接动手。\"\n",[312,808,806],{"__ignoreMap":310},[224,810],{},[227,812,814],{"id":813},"第四条skills-让团队最佳实践跨项目复用","第四条：Skills 让团队最佳实践跨项目复用",[195,816,817,819],{},[202,818,235],{},"：高频任务模式应当封装为 Skills，让最佳实践跨成员、跨项目复用。",[195,821,822,824],{},[202,823,592],{},"：Skills 是 Claude Code 提供的\"可复用提示词资产\"，每个 Skill 是一个 SKILL.md 文件 + 可选的辅助资源。它们在被显式调用时才占用上下文，平时不消耗 Token。",[244,826,247],{"id":827},"pm-视角-3",[195,829,830,831,834,835,838],{},"PM 可以把 Skills 理解为\"团队的 SOP（标准操作流程）\"——每一份 Skill 都是团队对某一类任务的\"最佳做法\"沉淀。当团队对\"用户调研报告应该有哪些段落\"有共识，就可以做一个 ",[312,832,833],{},"user-research-report"," skill；当工程师对\"如何起草一份 ADR\"有共识，就可以做一个 ",[312,836,837],{},"adr-draft"," skill。Skills 让团队的隐性知识显性化、显性知识可执行化。",[244,840,292],{"id":841},"工程师视角-3",[195,843,844],{},"Skills 的设计三原则：",[643,846,847,853,859],{},[265,848,849,852],{},[202,850,851],{},"小而专","：每个 Skill 只解决一个清晰场景",[265,854,855,858],{},[202,856,857],{},"示例先行","：在 SKILL.md 中放 2-3 个真实运行示例",[265,860,861,864],{},[202,862,863],{},"可被人类阅读","：100-300 行之间，结构清晰",[305,866,868],{"className":307,"code":867,"language":309,"meta":310,"style":310},"# .claude\u002Fskills\u002Fcrud-repository\u002FSKILL.md\n---\nname: crud-repository\ndescription: 为某个领域实体生成完整的 CRUD repository（含类型、校验、测试）\n---\n\n## 适用场景\n- 新增一个领域实体的存储层\n- 需要完整 CRUD + 边界处理 + 单元测试\n\n## 输入要求\n- 实体名（PascalCase）\n- 字段列表（含类型与约束）\n\n## 步骤\n1. 在 src\u002F\u003Centity>\u002F 下创建 types.ts、repository.ts、errors.ts\n2. 写 4 个 repository 函数：create \u002F get \u002F update \u002F delete\n3. 在 src\u002F\u003Centity>\u002F__tests__\u002F 下创建对应测试\n4. 测试覆盖率必须 ≥ 90%\n\n## 验收标准\n- pnpm typecheck 通过\n- pnpm test 全部通过\n- 与项目现有 repository 风格一致\n\n## 已知边界\n- 不处理跨实体事务\n- 不处理软删除（如需要走单独 skill）\n",[312,869,870,877,882,887,892,896,900,907,914,921,925,932,939,946,950,957,965,973,990,998,1002,1009,1016,1023,1030,1035,1043,1051],{"__ignoreMap":310},[315,871,872,874],{"class":317,"line":318},[315,873,322],{"class":321},[315,875,876],{"class":325},".claude\u002Fskills\u002Fcrud-repository\u002FSKILL.md\n",[315,878,879],{"class":317,"line":339},[315,880,881],{"class":361},"---\n",[315,883,884],{"class":317,"line":346},[315,885,886],{"class":361},"name: crud-repository\n",[315,888,889],{"class":317,"line":355},[315,890,891],{"class":361},"description: 为某个领域实体生成完整的 CRUD repository（含类型、校验、测试）\n",[315,893,894],{"class":317,"line":365},[315,895,881],{"class":321},[315,897,898],{"class":317,"line":373},[315,899,343],{"emptyLinePlaceholder":342},[315,901,902,904],{"class":317,"line":381},[315,903,349],{"class":321},[315,905,906],{"class":325},"适用场景\n",[315,908,909,911],{"class":317,"line":386},[315,910,358],{"class":321},[315,912,913],{"class":361}," 新增一个领域实体的存储层\n",[315,915,916,918],{"class":317,"line":394},[315,917,358],{"class":321},[315,919,920],{"class":361}," 需要完整 CRUD + 边界处理 + 单元测试\n",[315,922,923],{"class":317,"line":402},[315,924,343],{"emptyLinePlaceholder":342},[315,926,927,929],{"class":317,"line":410},[315,928,349],{"class":321},[315,930,931],{"class":325},"输入要求\n",[315,933,934,936],{"class":317,"line":431},[315,935,358],{"class":321},[315,937,938],{"class":361}," 实体名（PascalCase）\n",[315,940,941,943],{"class":317,"line":436},[315,942,358],{"class":321},[315,944,945],{"class":361}," 字段列表（含类型与约束）\n",[315,947,948],{"class":317,"line":444},[315,949,343],{"emptyLinePlaceholder":342},[315,951,952,954],{"class":317,"line":452},[315,953,349],{"class":321},[315,955,956],{"class":325},"步骤\n",[315,958,959,962],{"class":317,"line":460},[315,960,961],{"class":321},"1.",[315,963,964],{"class":361}," 在 src\u002F\u003Centity>\u002F 下创建 types.ts、repository.ts、errors.ts\n",[315,966,967,970],{"class":317,"line":468},[315,968,969],{"class":321},"2.",[315,971,972],{"class":361}," 写 4 个 repository 函数：create \u002F get \u002F update \u002F delete\n",[315,974,975,978,981,983,985,987],{"class":317,"line":473},[315,976,977],{"class":321},"3.",[315,979,980],{"class":361}," 在 src\u002F\u003Centity>\u002F",[315,982,419],{"class":418},[315,984,423],{"class":422},[315,986,419],{"class":418},[315,988,989],{"class":361},"\u002F 下创建对应测试\n",[315,991,992,995],{"class":317,"line":481},[315,993,994],{"class":321},"4.",[315,996,997],{"class":361}," 测试覆盖率必须 ≥ 90%\n",[315,999,1000],{"class":317,"line":489},[315,1001,343],{"emptyLinePlaceholder":342},[315,1003,1004,1006],{"class":317,"line":497},[315,1005,349],{"class":321},[315,1007,1008],{"class":325},"验收标准\n",[315,1010,1011,1013],{"class":317,"line":502},[315,1012,358],{"class":321},[315,1014,1015],{"class":361}," pnpm typecheck 通过\n",[315,1017,1018,1020],{"class":317,"line":510},[315,1019,358],{"class":321},[315,1021,1022],{"class":361}," pnpm test 全部通过\n",[315,1024,1025,1027],{"class":317,"line":518},[315,1026,358],{"class":321},[315,1028,1029],{"class":361}," 与项目现有 repository 风格一致\n",[315,1031,1033],{"class":317,"line":1032},25,[315,1034,343],{"emptyLinePlaceholder":342},[315,1036,1038,1040],{"class":317,"line":1037},26,[315,1039,349],{"class":321},[315,1041,1042],{"class":325},"已知边界\n",[315,1044,1046,1048],{"class":317,"line":1045},27,[315,1047,358],{"class":321},[315,1049,1050],{"class":361}," 不处理跨实体事务\n",[315,1052,1054,1056],{"class":317,"line":1053},28,[315,1055,358],{"class":321},[315,1057,1058],{"class":361}," 不处理软删除（如需要走单独 skill）\n",[195,1060,1061,1064],{},[202,1062,1063],{},"Skills 库的\"生命周期管理\"","：Skills 不是一次写好就一劳永逸——它需要持续维护、淘汰、迭代。本人推荐的生命周期：",[643,1066,1067,1073,1079,1085,1091],{},[265,1068,1069,1072],{},[202,1070,1071],{},"创建（New）","：首次发现某个高频模式时，由发现者起草 SKILL.md。",[265,1074,1075,1078],{},[202,1076,1077],{},"试用（Trial）","：试用 1-2 周，至少被 3 名工程师在不同场景使用。",[265,1080,1081,1084],{},[202,1082,1083],{},"稳定（Stable）","：通过试用，进入团队 Skills 库正式维护。",[265,1086,1087,1090],{},[202,1088,1089],{},"演化（Evolved）","：根据使用反馈持续优化（每月 review 一次）。",[265,1092,1093,1096],{},[202,1094,1095],{},"淘汰（Deprecated）","：当原有需求消失或被新 Skill 覆盖时主动淘汰。",[195,1098,1099],{},"把这五个状态写在 SKILL.md 的 frontmatter 里：",[305,1101,1105],{"className":1102,"code":1103,"language":1104,"meta":310,"style":310},"language-yaml shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","---\nname: crud-repository\nstatus: stable    # new \u002F trial \u002F stable \u002F evolved \u002F deprecated\ncreated: 2026-01-15\nlast-reviewed: 2026-04-01\n---\n","yaml",[312,1106,1107,1111,1123,1136,1146,1156],{"__ignoreMap":310},[315,1108,1109],{"class":317,"line":318},[315,1110,881],{"class":325},[315,1112,1113,1117,1120],{"class":317,"line":339},[315,1114,1116],{"class":1115},"swJcz","name",[315,1118,1119],{"class":321},":",[315,1121,1122],{"class":332}," crud-repository\n",[315,1124,1125,1128,1130,1133],{"class":317,"line":346},[315,1126,1127],{"class":1115},"status",[315,1129,1119],{"class":321},[315,1131,1132],{"class":332}," stable",[315,1134,1135],{"class":740},"    # new \u002F trial \u002F stable \u002F evolved \u002F deprecated\n",[315,1137,1138,1141,1143],{"class":317,"line":355},[315,1139,1140],{"class":1115},"created",[315,1142,1119],{"class":321},[315,1144,1145],{"class":361}," 2026-01-15\n",[315,1147,1148,1151,1153],{"class":317,"line":365},[315,1149,1150],{"class":1115},"last-reviewed",[315,1152,1119],{"class":321},[315,1154,1155],{"class":361}," 2026-04-01\n",[315,1157,1158],{"class":317,"line":373},[315,1159,881],{"class":325},[195,1161,1162],{},"每月做一次\"Skills 健康度 review\"——检查哪些处于 stable 状态但 6 个月没被调用过（可能可以淘汰）、哪些处于 trial 状态但已被广泛使用（应当转 stable）。这种纪律让 Skills 库始终保持\"高有效率\"，避免变成\"什么都有但没人用\"的代码博物馆。",[244,1164,529],{"id":1165},"实战示例-3",[195,1167,1168],{},"调用 Skill 一行搞定：",[305,1170,1173],{"className":1171,"code":1172,"language":535},[533],"请用 crud-repository skill 为 Order 实体生成 CRUD。\n字段：id(uuid)、userId(uuid)、amount(number)、status(enum)、createdAt(Date)\n",[312,1174,1172],{"__ignoreMap":310},[195,1176,1177],{},"Claude 会基于 SKILL.md 的指引，加上项目 CLAUDE.md 的风格约束，输出一致性远超\"每次重新描述\"的代码。",[224,1179],{},[227,1181,1183],{"id":1182},"第五条hooks-是工程文化的代码化","第五条：Hooks 是工程文化的代码化",[195,1185,1186,1188],{},[202,1187,235],{},"：把团队的\"我们应该这样做\"沉淀为 Hooks——让工具自动执行而非依赖人类自觉。",[195,1190,1191,1193],{},[202,1192,592],{},"：Hooks 是 Claude Code 在工具调用前后插入自定义脚本的机制。它把\"提醒\"升级为\"强制执行\"，把\"风险点\"升级为\"自动守卫\"。",[244,1195,247],{"id":1196},"pm-视角-4",[195,1198,1199],{},"PM 可以把 Hooks 理解为\"工程团队的自动化纪律\"——每条 Hook 都是团队对某种行为的明确规定（例如\"提交前必须跑 lint\"），并由工具自动执行而非依赖工程师记忆。Hooks 的存在让团队规范从\"墙上的口号\"变成\"流水线的强制门\"——任何违反规范的行为会被工具自动拦下。",[244,1201,292],{"id":1202},"工程师视角-4",[195,1204,1205],{},"常见 Hook 用法：",[305,1207,1211],{"className":1208,"code":1209,"language":1210,"meta":310,"style":310},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"hooks\": {\n    \"PostToolUse\": [\n      {\n        \"matcher\": \"Edit|Write\",\n        \"hooks\": [\n          {\n            \"type\": \"command\",\n            \"command\": \"pnpm lint --max-warnings=0 --quiet\"\n          }\n        ]\n      }\n    ],\n    \"PreToolUse\": [\n      {\n        \"matcher\": \"Bash\",\n        \"hooks\": [\n          {\n            \"type\": \"command\",\n            \"command\": \"node .claude\u002Fhooks\u002Fcheck-secret-leak.js\"\n          }\n        ]\n      }\n    ]\n  }\n}\n","json",[312,1212,1213,1218,1235,1250,1255,1279,1291,1296,1317,1335,1340,1345,1350,1355,1368,1372,1391,1403,1407,1425,1442,1446,1450,1454,1459,1464],{"__ignoreMap":310},[315,1214,1215],{"class":317,"line":318},[315,1216,1217],{"class":321},"{\n",[315,1219,1220,1223,1227,1230,1232],{"class":317,"line":339},[315,1221,1222],{"class":321},"  \"",[315,1224,1226],{"class":1225},"spNyl","hooks",[315,1228,1229],{"class":321},"\"",[315,1231,1119],{"class":321},[315,1233,1234],{"class":321}," {\n",[315,1236,1237,1240,1243,1245,1247],{"class":317,"line":346},[315,1238,1239],{"class":321},"    \"",[315,1241,1242],{"class":325},"PostToolUse",[315,1244,1229],{"class":321},[315,1246,1119],{"class":321},[315,1248,1249],{"class":321}," [\n",[315,1251,1252],{"class":317,"line":355},[315,1253,1254],{"class":321},"      {\n",[315,1256,1257,1260,1264,1266,1268,1271,1274,1276],{"class":317,"line":365},[315,1258,1259],{"class":321},"        \"",[315,1261,1263],{"class":1262},"sbssI","matcher",[315,1265,1229],{"class":321},[315,1267,1119],{"class":321},[315,1269,1270],{"class":321}," \"",[315,1272,1273],{"class":332},"Edit|Write",[315,1275,1229],{"class":321},[315,1277,1278],{"class":321},",\n",[315,1280,1281,1283,1285,1287,1289],{"class":317,"line":373},[315,1282,1259],{"class":321},[315,1284,1226],{"class":1262},[315,1286,1229],{"class":321},[315,1288,1119],{"class":321},[315,1290,1249],{"class":321},[315,1292,1293],{"class":317,"line":381},[315,1294,1295],{"class":321},"          {\n",[315,1297,1298,1301,1304,1306,1308,1310,1313,1315],{"class":317,"line":386},[315,1299,1300],{"class":321},"            \"",[315,1302,1303],{"class":1115},"type",[315,1305,1229],{"class":321},[315,1307,1119],{"class":321},[315,1309,1270],{"class":321},[315,1311,1312],{"class":332},"command",[315,1314,1229],{"class":321},[315,1316,1278],{"class":321},[315,1318,1319,1321,1323,1325,1327,1329,1332],{"class":317,"line":394},[315,1320,1300],{"class":321},[315,1322,1312],{"class":1115},[315,1324,1229],{"class":321},[315,1326,1119],{"class":321},[315,1328,1270],{"class":321},[315,1330,1331],{"class":332},"pnpm lint --max-warnings=0 --quiet",[315,1333,1334],{"class":321},"\"\n",[315,1336,1337],{"class":317,"line":402},[315,1338,1339],{"class":321},"          }\n",[315,1341,1342],{"class":317,"line":410},[315,1343,1344],{"class":321},"        ]\n",[315,1346,1347],{"class":317,"line":431},[315,1348,1349],{"class":321},"      }\n",[315,1351,1352],{"class":317,"line":436},[315,1353,1354],{"class":321},"    ],\n",[315,1356,1357,1359,1362,1364,1366],{"class":317,"line":444},[315,1358,1239],{"class":321},[315,1360,1361],{"class":325},"PreToolUse",[315,1363,1229],{"class":321},[315,1365,1119],{"class":321},[315,1367,1249],{"class":321},[315,1369,1370],{"class":317,"line":452},[315,1371,1254],{"class":321},[315,1373,1374,1376,1378,1380,1382,1384,1387,1389],{"class":317,"line":460},[315,1375,1259],{"class":321},[315,1377,1263],{"class":1262},[315,1379,1229],{"class":321},[315,1381,1119],{"class":321},[315,1383,1270],{"class":321},[315,1385,1386],{"class":332},"Bash",[315,1388,1229],{"class":321},[315,1390,1278],{"class":321},[315,1392,1393,1395,1397,1399,1401],{"class":317,"line":468},[315,1394,1259],{"class":321},[315,1396,1226],{"class":1262},[315,1398,1229],{"class":321},[315,1400,1119],{"class":321},[315,1402,1249],{"class":321},[315,1404,1405],{"class":317,"line":473},[315,1406,1295],{"class":321},[315,1408,1409,1411,1413,1415,1417,1419,1421,1423],{"class":317,"line":481},[315,1410,1300],{"class":321},[315,1412,1303],{"class":1115},[315,1414,1229],{"class":321},[315,1416,1119],{"class":321},[315,1418,1270],{"class":321},[315,1420,1312],{"class":332},[315,1422,1229],{"class":321},[315,1424,1278],{"class":321},[315,1426,1427,1429,1431,1433,1435,1437,1440],{"class":317,"line":489},[315,1428,1300],{"class":321},[315,1430,1312],{"class":1115},[315,1432,1229],{"class":321},[315,1434,1119],{"class":321},[315,1436,1270],{"class":321},[315,1438,1439],{"class":332},"node .claude\u002Fhooks\u002Fcheck-secret-leak.js",[315,1441,1334],{"class":321},[315,1443,1444],{"class":317,"line":497},[315,1445,1339],{"class":321},[315,1447,1448],{"class":317,"line":502},[315,1449,1344],{"class":321},[315,1451,1452],{"class":317,"line":510},[315,1453,1349],{"class":321},[315,1455,1456],{"class":317,"line":518},[315,1457,1458],{"class":321},"    ]\n",[315,1460,1461],{"class":317,"line":1032},[315,1462,1463],{"class":321},"  }\n",[315,1465,1466],{"class":317,"line":1037},[315,1467,1468],{"class":321},"}\n",[195,1470,1471],{},"Hooks 失败会阻断该次工具调用，并把错误信息回送给 Claude——Claude 会自然地进入\"修复或绕开\"的对话模式。",[244,1473,529],{"id":1474},"实战示例-4",[195,1476,1477],{},"把以下规则全部 Hook 化：",[262,1479,1480,1483,1486,1489],{},[265,1481,1482],{},"编辑\u002F写入后自动 lint：PostToolUse + Edit\u002FWrite",[265,1484,1485],{},"任何 git commit 前先跑 typecheck：PreToolUse + Bash(git commit*)",[265,1487,1488],{},"任何包含密钥的 prompt 自动拦截：UserPromptSubmit hook",[265,1490,1491],{},"任何修改 CLAUDE.md 的动作走 plan 模式：PreToolUse + Edit(CLAUDE.md)",[195,1493,1494,543],{},[202,1495,1496],{},"Hooks 设计的\"三层金字塔\"",[262,1498,1499,1505,1511],{},[265,1500,1501,1504],{},[202,1502,1503],{},"底层（必装）","：拦截灾难性操作（rm -rf、secret leak）。这些 Hook 失败就阻断动作，不容协商。",[265,1506,1507,1510],{},[202,1508,1509],{},"中层（推荐）","：自动化质量门（lint、typecheck、test）。这些 Hook 失败让 Claude 自己修复，提升流水线质量。",[265,1512,1513,1516],{},[202,1514,1515],{},"顶层（可选）","：流程优化（自动添加 audit 日志、自动生成 PR 描述）。这些 Hook 失败不阻断，仅记录。",[195,1518,1519],{},"新团队应当从底层开始装——优先保证不出灾难性事故。中层在使用 1-2 个月后再加，让团队感受 Hooks 的价值。顶层是锦上添花，不必强求。",[195,1521,1522,1525],{},[202,1523,1524],{},"Hooks 与 CI 的边界","：Hooks 在本地工程师机器上跑，CI 在团队服务器上跑。两者职责不同——",[262,1527,1528,1535],{},[265,1529,1530,1531,1534],{},"Hooks：",[202,1532,1533],{},"快速反馈","——本地 lint 失败立即知道，避免 push 出去才发现",[265,1536,1537,1538,1541],{},"CI：",[202,1539,1540],{},"最终守门","——即使本地 hooks 被绕过，CI 兜底拦截",[195,1543,1544,1545,1548],{},"健康的工程团队",[202,1546,1547],{},"两者兼有、互不替代","：Hooks 给开发者快速反馈、CI 给团队可信保证。本人见过的常见反模式——只装 Hooks 不装 CI（Hooks 被绕开就放行）、只装 CI 不装 Hooks（每次 push 才知道、本地反馈延迟）。两端都需要才能形成完整防御。",[224,1550],{},[227,1552,1554],{"id":1553},"第六条信任建立在我清楚-ai-在做什么基础上","第六条：信任建立在\"我清楚 AI 在做什么\"基础上",[195,1556,1557,1559],{},[202,1558,235],{},"：工程师对 AI 的信任不应来自\"AI 看起来很聪明\"，而应来自\"我能观察、验证、回滚 AI 的每一个动作\"。",[195,1561,1562,1564],{},[202,1563,592],{},"：透明度（Transparency）是 AI 协作的根基。Claude Code 的设计哲学是\"让 AI 的每一个动作都对工程师可见\"——工具调用、文件修改、命令执行都会显式展示。",[244,1566,247],{"id":1567},"pm-视角-5",[195,1569,1570,1571,1574],{},"PM 在与工程师讨论\"我们应该信任 AI 多少\"时，常常陷入\"是不是要把更多事交给 AI 自动做\"的讨论。这个讨论的隐含假设错了——",[202,1572,1573],{},"信任不是\"给多少权限\"的问题，而是\"我能否观察\"的问题","。一个高度可观测的系统即使把 90% 的动作交给 AI，依然安全；一个不可观测的系统即使只交 10% 也充满风险。PM 应当推动团队建立\"可观测性优先\"的工作文化，而不是无脑追求\"自动化最大化\"。",[244,1576,292],{"id":1577},"工程师视角-5",[195,1579,1580],{},"可观测性的三个维度：",[643,1582,1583,1589,1599],{},[265,1584,1585,1588],{},[202,1586,1587],{},"当下可见","：Claude 正在做什么——通过 Plan 模式、确认提示展示。",[265,1590,1591,1594,1595,1598],{},[202,1592,1593],{},"事后可查","：Claude 做过什么——通过 git log、审计日志、",[312,1596,1597],{},".claude\u002Fincidents.md"," 记录。",[265,1600,1601,1604],{},[202,1602,1603],{},"可被回滚","：Claude 做错了能否撤回——通过 git、Feature Flag、备份还原。",[195,1606,1607],{},"任何缺一项的协作模式都不应进入生产工作流。",[195,1609,1610,1613],{},[202,1611,1612],{},"信任的\"渐进式建立\"","：信任不是非黑即白，而是按以下五个层级逐步建立——",[1615,1616,1617,1633],"table",{},[1618,1619,1620],"thead",{},[1621,1622,1623,1627,1630],"tr",{},[1624,1625,1626],"th",{},"层级",[1624,1628,1629],{},"工程师对 AI 的信任程度",[1624,1631,1632],{},"典型工作模式",[1634,1635,1636,1648,1659,1670,1681],"tbody",{},[1621,1637,1638,1642,1645],{},[1639,1640,1641],"td",{},"0：陌生",[1639,1643,1644],{},"完全不信任",[1639,1646,1647],{},"Plan 模式、每步审批",[1621,1649,1650,1653,1656],{},[1639,1651,1652],{},"1：观察",[1639,1654,1655],{},"看 AI 做、不让独立做",[1639,1657,1658],{},"default 模式、单步确认",[1621,1660,1661,1664,1667],{},[1639,1662,1663],{},"2：辅助",[1639,1665,1666],{},"让 AI 做小事、自己做大事",[1639,1668,1669],{},"acceptEdits + 严格 deny",[1621,1671,1672,1675,1678],{},[1639,1673,1674],{},"3：协作",[1639,1676,1677],{},"AI 做大部分、自己做关键",[1639,1679,1680],{},"acceptEdits + 完善 Hooks",[1621,1682,1683,1686,1689],{},[1639,1684,1685],{},"4：默契",[1639,1687,1688],{},"AI 大部分自动、自己专注创造",[1639,1690,1691],{},"acceptEdits + 自动化全栈",[195,1693,1694,1695,1698],{},"新人入职从层级 0 起步，半年到一年逐步过渡到层级 3 或 4。",[202,1696,1697],{},"任何\"跳级\"都是危险信号","——例如新人第一周就开 acceptEdits，那不是高效，是事故温床。",[244,1700,529],{"id":1701},"实战示例-5",[305,1703,1705],{"className":731,"code":1704,"language":733,"meta":310,"style":310},"# 把 Claude 的所有工具调用记录到日志\n{\n  \"hooks\": {\n    \"PostToolUse\": [{\n      \"matcher\": \"*\",\n      \"hooks\": [{\n        \"type\": \"command\",\n        \"command\": \"echo \\\"[$(date)] $TOOL_NAME: $TOOL_INPUT\\\" >> .claude\u002Faudit.log\"\n      }]\n    }]\n  }\n}\n",[312,1706,1707,1712,1716,1726,1736,1752,1761,1776,1819,1826,1831,1835],{"__ignoreMap":310},[315,1708,1709],{"class":317,"line":318},[315,1710,1711],{"class":740},"# 把 Claude 的所有工具调用记录到日志\n",[315,1713,1714],{"class":317,"line":339},[315,1715,1217],{"class":321},[315,1717,1718,1721,1724],{"class":317,"line":346},[315,1719,1720],{"class":325},"  \"hooks\"",[315,1722,1119],{"class":1723},"s2Zo4",[315,1725,1234],{"class":332},[315,1727,1728,1731,1733],{"class":317,"line":355},[315,1729,1730],{"class":325},"    \"PostToolUse\"",[315,1732,1119],{"class":1723},[315,1734,1735],{"class":361}," [{\n",[315,1737,1738,1741,1743,1745,1748,1750],{"class":317,"line":365},[315,1739,1740],{"class":325},"      \"matcher\"",[315,1742,1119],{"class":1723},[315,1744,1270],{"class":321},[315,1746,1747],{"class":332},"*",[315,1749,1229],{"class":321},[315,1751,1278],{"class":332},[315,1753,1754,1757,1759],{"class":317,"line":373},[315,1755,1756],{"class":325},"      \"hooks\"",[315,1758,1119],{"class":1723},[315,1760,1735],{"class":361},[315,1762,1763,1766,1768,1770,1772,1774],{"class":317,"line":381},[315,1764,1765],{"class":325},"        \"type\"",[315,1767,1119],{"class":1723},[315,1769,1270],{"class":321},[315,1771,1312],{"class":332},[315,1773,1229],{"class":321},[315,1775,1278],{"class":332},[315,1777,1778,1781,1783,1785,1788,1791,1793,1796,1799,1802,1805,1808,1811,1814,1817],{"class":317,"line":386},[315,1779,1780],{"class":325},"        \"command\"",[315,1782,1119],{"class":1723},[315,1784,1270],{"class":321},[315,1786,1787],{"class":332},"echo ",[315,1789,1790],{"class":361},"\\\"",[315,1792,329],{"class":332},[315,1794,1795],{"class":321},"$(",[315,1797,1798],{"class":325},"date",[315,1800,1801],{"class":321},")",[315,1803,1804],{"class":332},"] ",[315,1806,1807],{"class":361},"$TOOL_NAME",[315,1809,1810],{"class":332},": ",[315,1812,1813],{"class":361},"$TOOL_INPUT\\\"",[315,1815,1816],{"class":332}," >> .claude\u002Faudit.log",[315,1818,1334],{"class":321},[315,1820,1821,1824],{"class":317,"line":394},[315,1822,1823],{"class":321},"      }",[315,1825,336],{"class":361},[315,1827,1828],{"class":317,"line":402},[315,1829,1830],{"class":361},"    }]\n",[315,1832,1833],{"class":317,"line":410},[315,1834,1463],{"class":361},[315,1836,1837],{"class":317,"line":431},[315,1838,1468],{"class":361},[195,1840,1841,1844],{},[312,1842,1843],{},".claude\u002Faudit.log"," 半年累积下来，是排查\"AI 协作事件\"最直接的证据链。",[224,1846],{},[227,1848,1850],{"id":1849},"第七条测试先行让-claude-写测试再写实现","第七条：测试先行——让 Claude 写测试再写实现",[195,1852,1853,1855],{},[202,1854,235],{},"：把 TDD（测试驱动开发）的\"红绿重构\"循环与 Claude Code 协作结合——让 Claude 先写测试、再写实现。",[195,1857,1858,1860],{},[202,1859,592],{},"：让 Claude 先写测试再写实现的模式有两个好处：(1) 测试是契约，约束 Claude 的实现路径；(2) 测试是审查工具，工程师只需读测试就能判断 Claude 对需求的理解是否正确。",[244,1862,247],{"id":1863},"pm-视角-6",[195,1865,1866,1867,1870],{},"PM 可以参与测试编写吗？答案是肯定的——",[202,1868,1869],{},"验收测试（Acceptance Test）就是 PM 视角的测试","。PM 把验收标准用结构化方式写出（\"用户输入正确密码后应当能登录\"），让 Claude 翻译为可执行的 Playwright\u002FCypress 测试。这种\"PM 写测试 + AI 翻译 + 工程师审查\"的模式比传统的\"PM 写需求文档 → 工程师独自实现 → QA 独自测试\"高效得多。",[244,1872,292],{"id":1873},"工程师视角-6",[195,1875,1876],{},"TDD 与 Claude 协作的标准对话：",[305,1878,1881],{"className":1879,"code":1880,"language":535},[533],"我要实现 createUser 函数。\n\n先帮我写 Vitest 测试，覆盖以下场景：\n- 正常输入返回 User，含 id 与 createdAt\n- email 不合法抛 ValidationError\n- name 长度超 100 抛 ValidationError\n- 同一 email 二次 create 抛 DuplicateError\n\n写完测试后停下来，等我确认再写实现。\n",[312,1882,1880],{"__ignoreMap":310},[195,1884,1885],{},"Claude 先写测试，工程师 review 测试是否覆盖了所有边界，确认后 Claude 才写实现。这条流程把\"Claude 是否理解需求\"前置到测试阶段就发现，避免了\"实现完才发现需求理解偏差\"。",[195,1887,1888,543],{},[202,1889,1890],{},"TDD 与 AI 协作的\"双重红利\"",[643,1892,1893,1899],{},[265,1894,1895,1898],{},[202,1896,1897],{},"第一重红利：测试质量提升","——当工程师审查测试是否覆盖足够边界时，往往会发现自己原先没想到的场景。AI 的\"穷举式列举\"能力在这一步特别有用——让 Claude 列出 10 个边界场景，工程师从中挑选最关键的 5 个。这种\"AI 列举 + 人类筛选\"模式比\"工程师独自冥想\"覆盖度高得多。",[265,1900,1901,1904,1905,1908],{},[202,1902,1903],{},"第二重红利：实现质量提升","——当 Claude 看到一份完整测试套件时，它的实现会自动遵循测试的契约。本人观察到，",[202,1906,1907],{},"先写测试再写实现的 Claude 输出代码 bug 率比\"直接写实现\"低 50% 以上","。这不是因为 Claude 变聪明了，而是因为它的目标变清晰了——从\"实现你描述的需求\"升级为\"通过这些具体测试\"。",[195,1910,1911],{},"ATDD（验收测试驱动开发）进一步把这条延伸到验收层。让 Claude 把产品经理写的\"用户故事\"翻译成可执行的验收测试，再下推到单元测试和实现：",[305,1913,1916],{"className":1914,"code":1915,"language":535},[533],"PM 提供以下用户故事：[贴用户故事]\n\n请把它翻译为：\n1. Playwright e2e 验收测试（覆盖关键路径）\n2. 单元测试清单（覆盖每个组件的边界）\n3. 实现的伪代码框架（不要真实代码）\n\n输出后等我和 PM review，确认后再写真实代码。\n",[312,1917,1915],{"__ignoreMap":310},[244,1919,529],{"id":1920},"实战示例-6",[305,1922,1925],{"className":1923,"code":1924,"language":535},[533],"# 反模式：先实现再补测试\n\"实现 createUser 函数\"\n（Claude 写完实现，又被催着补测试，测试质量差）\n\n# 正确：测试先行\n1. \"请先写 createUser 的测试，不要写实现\"\n2. [审查测试是否覆盖足够边界]\n3. \"现在写实现，让所有测试通过\"\n4. [Claude 实现，自动跑测试，全部通过]\n5. \"做一次 refactor，提高可读性，确保测试仍通过\"\n",[312,1926,1924],{"__ignoreMap":310},[224,1928],{},[227,1930,1932],{"id":1931},"第八条永远保留人类对关键决策的最终决定权","第八条：永远保留人类对关键决策的最终决定权",[195,1934,1935,1937],{},[202,1936,235],{},"：AI 可以是\"高级巡航辅助\"，但每一次\"接管方向盘\"的动作都必须由人类拍板。",[195,1939,1940,1942],{},[202,1941,592],{},"：Claude Code 的设计哲学是 Human-in-the-Loop（人类介入循环）——AI 提议，人类决策。这不是 AI 能力的限制，而是责任分配的必然要求。",[244,1944,247],{"id":1945},"pm-视角-7",[195,1947,1948,1949,1952],{},"PM 在与高管讨论\"用 AI 能不能完全自动化某些流程\"时，会反复遇到这个问题。本条心法的答案是：",[202,1950,1951],{},"绝对不能","。原因不在 AI 能力，而在于责任。任何重大决策（架构、合规、用户隐私、商业模型）出错后，必须有一个人类承担责任——法律责任、商业责任、伦理责任。把\"按按钮\"这件事交给 AI，等同于让责任链断裂。这条原则是工程伦理的底线。",[244,1954,292],{"id":1955},"工程师视角-7",[195,1957,1958],{},"哪些决策不能让 AI 拍板（参见 7.3 节的\"决策层\"）：",[262,1960,1961,1964,1967,1970,1973,1976],{},[265,1962,1963],{},"部署到生产环境",[265,1965,1966],{},"执行数据库 schema 迁移（含数据迁移）",[265,1968,1969],{},"删除分支、强制推送",[265,1971,1972],{},"操作密钥、Token、生产配置",[265,1974,1975],{},"选择架构方向、技术栈、商业模型",[265,1977,1978],{},"处理用户隐私、合规相关代码",[195,1980,1981,1982,663],{},"这些动作 Claude 可以\"提议 plan\"，但",[202,1983,1984],{},"最终执行由人类手动按下按钮",[244,1986,529],{"id":1987},"实战示例-7",[305,1989,1992],{"className":1990,"code":1991,"language":535},[533],"# 反模式：让 Claude 自动 deploy\n\"deploy 到 production\"\n（Claude 直接执行 deploy，半小时后线上挂掉）\n\n# 正确：Plan + 人工执行\n\"我想 deploy v1.5.0 到 production。\n请进入 plan 模式输出：\n1. deploy 命令清单\n2. 每一步的预期效果\n3. 万一失败的回滚步骤\n4. 上线后的健康检查清单\n\n我审阅 plan 后手动执行 deploy。\"\n",[312,1993,1991],{"__ignoreMap":310},[195,1995,1996,1999],{},[202,1997,1998],{},"人类决策权的\"心理建设\"","：保留人类决策权听起来理所当然，但实际操作中工程师常常会\"不知不觉地让出\"——例如疲劳、deadline 压力、Claude 表现得\"很自信\"——都可能让工程师在该停下时没停下。对抗这种\"决策权侵蚀\"的几条具体做法：",[643,2001,2002,2008,2014,2020],{},[265,2003,2004,2007],{},[202,2005,2006],{},"明确\"红线动作清单\"贴在工位","：把不能让 AI 自动决定的动作写在便签贴在显示器边缘——deploy、migration、push --force、修改密钥、删除分支。每天看见，强化记忆。",[265,2009,2010,2013],{},[202,2011,2012],{},"结对审批高风险动作","：任何 L3 级别的动作要求两个工程师共同审批。结对的 friction 让工程师在执行前自然会停下来。",[265,2015,2016,2019],{},[202,2017,2018],{},"疲劳时启用更严格的模式","：如果你已经工作 8 小时以上、或处于事故响应高压下，主动切到 plan 模式——AI 不会累，但你会，让工具替你保持谨慎。",[265,2021,2022,2025],{},[202,2023,2024],{},"反思日志（Decision Log）","：每周末花 10 分钟回顾本周的所有\"决策点\"——哪些是我自己想清楚的？哪些是顺着 AI 建议走的？后者占比超过 30% 就是警讯——说明决策权正在被悄然转移。",[195,2027,2028,2031,2032,2035,2036,2039],{},[202,2029,2030],{},"AI 决策权与工程伦理的更深一层","：保留人类决策权不只是为了\"防止 AI 出错\"，更深一层是为了",[202,2033,2034],{},"保持工程师作为\"有担当的专业人士\"的身份","。一个工程师如果习惯于\"什么都让 AI 决定\"，半年后他会发现自己的决策能力在退化——这不是 AI 的问题，是个体在 AI 协作时代的\"主动选择\"。",[202,2037,2038],{},"保留决策权本质上是工程师对自己的尊重——不让自己沦为 AI 的执行人","。这一层意义远超\"安全合规\"，触及职业身份的核心。理解这一层的工程师，会在 AI 协作时代变得越来越强大；只把 AI 当\"代写机\"的工程师，会在职业道路上慢慢失去声音。",[224,2041],{},[227,2043,2045],{"id":2044},"第九条把每次失败沉淀为团队资产","第九条：把每次失败沉淀为团队资产",[195,2047,2048,2050],{},[202,2049,235],{},"：每一次 AI 协作的失败（误操作、幻觉、上下文溢出）都是团队的学习机会——把它沉淀为 CLAUDE.md \u002F Skills \u002F Hooks 的更新。",[195,2052,2053,2055],{},[202,2054,592],{},"：失败的真正成本不是\"这次出错了\"，而是\"下次还会出同样的错\"。把失败资产化能阻断这条复发链路。",[244,2057,247],{"id":2058},"pm-视角-8",[195,2060,2061,2062,2065],{},"PM 在与工程团队 review 周报时，可以加上一栏\"本周 AI 协作失败事件\"——不是为了追责，而是为了",[202,2063,2064],{},"让失败的教训可见","。每周的失败列表逐渐形成\"团队的 AI 协作教训库\"，新人入职第一天读这份教训库，能跳过老员工\"踩过一遍才知道\"的所有坑。这是组织级别的复利效应。",[244,2067,292],{"id":2068},"工程师视角-8",[195,2070,2071],{},"失败资产化的标准流程：",[643,2073,2074,2083,2089,2113],{},[265,2075,2076,2079,2080,2082],{},[202,2077,2078],{},"记录","：在 ",[312,2081,1597],{}," 追加一条事件描述（时间、现象、根因、影响）。",[265,2084,2085,2088],{},[202,2086,2087],{},"分类","：是 Prompt 问题？上下文问题？权限问题？还是 Skill 问题？",[265,2090,2091,2094,2095],{},[202,2092,2093],{},"沉淀","：根据分类更新对应资产——\n",[262,2096,2097,2100,2107,2110],{},[265,2098,2099],{},"Prompt 问题 → 更新 CLAUDE.md 的\"Common Mistakes\"",[265,2101,2102,2103,2106],{},"上下文问题 → 更新 ",[312,2104,2105],{},".claude\u002Fstate.md"," 维护流程",[265,2108,2109],{},"权限问题 → 更新 settings.json 的 deny 规则",[265,2111,2112],{},"Skill 问题 → 修复对应 Skill 的 SKILL.md",[265,2114,2115,2118],{},[202,2116,2117],{},"传播","：在团队周会上 1 分钟分享这次失败与改进，让全员同步。",[244,2120,529],{"id":2121},"实战示例-8",[305,2123,2125],{"className":307,"code":2124,"language":309,"meta":310,"style":310},"# .claude\u002Fincidents.md\n\n## 2026-04-15: Claude 在 user 模块复用了 order 模块的 status 枚举\n- 现象：Claude 写 createUser 时把 OrderStatus.PENDING 当成 UserStatus 用，类型错误\n- 根因：长会话累积，Claude 上下文中两个枚举混淆\n- 影响：CI 失败，浪费 15 分钟修复\n- 沉淀：\n  1. CLAUDE.md 加一条 \"Common Mistakes\": \"user 与 order 模块的 status 枚举不要混用\"\n  2. 团队周会同步：长会话超 30K Token 主动开新会话\n",[312,2126,2127,2134,2138,2145,2152,2159,2166,2173,2181],{"__ignoreMap":310},[315,2128,2129,2131],{"class":317,"line":318},[315,2130,322],{"class":321},[315,2132,2133],{"class":325},".claude\u002Fincidents.md\n",[315,2135,2136],{"class":317,"line":339},[315,2137,343],{"emptyLinePlaceholder":342},[315,2139,2140,2142],{"class":317,"line":346},[315,2141,349],{"class":321},[315,2143,2144],{"class":325},"2026-04-15: Claude 在 user 模块复用了 order 模块的 status 枚举\n",[315,2146,2147,2149],{"class":317,"line":355},[315,2148,358],{"class":321},[315,2150,2151],{"class":361}," 现象：Claude 写 createUser 时把 OrderStatus.PENDING 当成 UserStatus 用，类型错误\n",[315,2153,2154,2156],{"class":317,"line":365},[315,2155,358],{"class":321},[315,2157,2158],{"class":361}," 根因：长会话累积，Claude 上下文中两个枚举混淆\n",[315,2160,2161,2163],{"class":317,"line":373},[315,2162,358],{"class":321},[315,2164,2165],{"class":361}," 影响：CI 失败，浪费 15 分钟修复\n",[315,2167,2168,2170],{"class":317,"line":381},[315,2169,358],{"class":321},[315,2171,2172],{"class":361}," 沉淀：\n",[315,2174,2175,2178],{"class":317,"line":386},[315,2176,2177],{"class":321},"  1.",[315,2179,2180],{"class":361}," CLAUDE.md 加一条 \"Common Mistakes\": \"user 与 order 模块的 status 枚举不要混用\"\n",[315,2182,2183,2186],{"class":317,"line":394},[315,2184,2185],{"class":321},"  2.",[315,2187,2188],{"class":361}," 团队周会同步：长会话超 30K Token 主动开新会话\n",[195,2190,2191],{},"把每次失败都按这个模板记录，半年后 incidents.md 就会变成全队最宝贵的\"AI 协作错误博物馆\"——比任何外部教程都更贴合本团队实际。",[195,2193,2194,2197],{},[202,2195,2196],{},"事件分级与响应","：本人把 AI 协作事件分为三级，对应不同的响应深度——",[1615,2199,2200,2213],{},[1618,2201,2202],{},[1621,2203,2204,2207,2210],{},[1624,2205,2206],{},"级别",[1624,2208,2209],{},"描述",[1624,2211,2212],{},"响应方式",[1634,2214,2215,2226,2237],{},[1621,2216,2217,2220,2223],{},[1639,2218,2219],{},"L1：小坑",[1639,2221,2222],{},"浪费 \u003C 30 分钟、不影响 PR",[1639,2224,2225],{},"个人记录、月底批量沉淀",[1621,2227,2228,2231,2234],{},[1639,2229,2230],{},"L2：中坑",[1639,2232,2233],{},"浪费 30-120 分钟、影响 PR 或 CI",[1639,2235,2236],{},"立即记录、当周沉淀到 CLAUDE.md",[1621,2238,2239,2242,2245],{},[1639,2240,2241],{},"L3：大坑",[1639,2243,2244],{},"浪费 > 2 小时 \u002F 涉及生产 \u002F 涉及合规",[1639,2246,2247],{},"立即停下、全团队 Postmortem、永久写入 CLAUDE.md",[195,2249,2250],{},"按级别响应能避免两种极端——一种是\"什么都记录\"导致维护负担过重、另一种是\"只记录重大事故\"导致小问题反复发生。L1 攒到月底批处理，L2 当周处理，L3 立即处理——这种节奏让团队的\"事件吸收能力\"始终跟得上\"事件产生频率\"。",[195,2252,2253,2256,2257,663],{},[202,2254,2255],{},"事件资产化的\"长尾效应\"","：第一个月你会觉得 incidents.md 像\"问题清单\"——满是麻烦。半年后你会发现它变成了\"团队的护城河\"——所有新人入职第一天读 incidents.md 就能跳过老员工踩过的所有坑。三年后你会发现它已经是公司级别的\"AI 协作工程文化资产\"——可以作为对外分享、招聘吸引、品牌建设的素材。",[202,2258,2259],{},"事件资产化的真正价值在长尾——短期看像负担，长期看是复利",[224,2261],{},[227,2263,2264],{"id":2264},"团队推广经验",[195,2266,2267],{},"工程师懂得 9 条心法是个人能力，让 8 人团队全员实践 9 条心法是组织能力。本人在多个团队推广 Claude Code 时积累了一些经验，归纳为下面三个部分。",[244,2269,2271],{"id":2270},"推广的三阶段模型","推广的\"三阶段\"模型",[195,2273,2274],{},[202,2275,2276],{},"第一阶段：种子培养（第 1 个月）",[195,2278,2279],{},"选定 1-2 名\"种子工程师\"——通常是对新技术好奇、愿意尝试、影响力强的成员。让他们先深度使用 Claude Code 1 个月，期间：",[262,2281,2282,2285,2288],{},[265,2283,2284],{},"给他们配备最好的工具（Claude Code 订阅、外部资源）",[265,2286,2287],{},"让他们记录所有\"惊喜时刻\"与\"踩坑时刻\"",[265,2289,2290],{},"月底产出\"种子报告\"——量化收益、列出问题、建议团队接入路径",[195,2292,2293],{},"种子阶段的目的不是\"立即推全员\"——而是积累团队特定的实战素材，避免推广时全靠\"网上别人的经验\"。",[195,2295,2296],{},[202,2297,2298],{},"第二阶段：双周迭代（第 2-3 个月）",[195,2300,2301],{},"种子报告 review 后，团队进入双周迭代阶段：",[262,2303,2304,2307,2310],{},[265,2305,2306],{},"每两周引入 1-2 名新成员加入实践",[265,2308,2309],{},"每两周的周会上分享\"上一周期的最佳实践\"与\"踩过的坑\"",[265,2311,2312],{},"持续维护团队 wiki 的\"Claude Code 实践指南\"",[195,2314,2315],{},"双周节奏的好处是——既不会让不情愿的成员被强迫推动、又不会让全员等待太久才能感受变化。",[195,2317,2318],{},[202,2319,2320],{},"第三阶段：全员对齐（第 4-6 个月）",[195,2322,2323],{},"到第 4 个月，团队 80% 以上成员应当已经在日常使用 Claude Code。这时进入全员对齐：",[262,2325,2326,2329,2332],{},[265,2327,2328],{},"出台正式的\"团队 Claude Code 工作公约\"（参考 7.2、7.3 节示例）",[265,2330,2331],{},"团队 CLAUDE.md \u002F Skills \u002F Hooks 库正式上线维护",[265,2333,2334],{},"新人 onboarding 包含 Claude Code 培训环节",[195,2336,2337],{},"到第 6 个月时，团队整体的 AI 协作能力应当形成质变——交付速度、代码质量、知识沉淀都有可观测的提升。",[195,2339,2340,2343,2344,2347],{},[202,2341,2342],{},"三阶段模型的\"反向工程\"","：以上是从\"零基础\"到\"全员对齐\"的正向路径。但很多团队是\"已经有人在用、缺乏统一规范\"的中间状态。对这种状态的正确做法是",[202,2345,2346],{},"反向工程三阶段","——",[643,2349,2350,2356,2362],{},[265,2351,2352,2355],{},[202,2353,2354],{},"先做现状审计","：调研团队中谁在用、用得怎样、有哪些自发形成的规范？",[265,2357,2358,2361],{},[202,2359,2360],{},"挑出\"事实上的种子\"","：从已经在用的成员中挑选 1-2 名，把他们的实践提炼为团队基线。",[265,2363,2364,2367],{},[202,2365,2366],{},"从\"种子的基线\"出发推广","：基线已经存在，推广就变成\"对齐 + 完善\"而非\"从零建立\"。",[195,2369,2370,2371,2374],{},"这种反向路径比正向路径快得多——因为团队已经有了真实素材，不需要从理论起步。",[202,2372,2373],{},"正向适合从零项目，反向适合现有团队","——选错路径会让推广效率打对折。",[244,2376,2377],{"id":2377},"常见阻力与化解",[195,2379,2380],{},[202,2381,2382],{},"阻力 1：资深工程师的\"不需要\"心态",[195,2384,2385,2386,2389],{},"部分资深工程师认为\"我已经写代码很快了，不需要 AI 帮忙\"。化解方式：",[202,2387,2388],{},"不强求他们使用，但要求他们参与 review","。让他们 review 用 AI 协作的成果，慢慢会发现\"AI 协作产出的代码质量比想象的高\"。一旦这层心理障碍打破，他们往往会成为最高效的 AI 协作者——因为他们的工程功底深，能精准引导 AI。",[195,2391,2392],{},[202,2393,2394],{},"阻力 2：初级工程师的\"依赖\"心态",[195,2396,2397,2398,2401],{},"部分初级工程师过度依赖 AI，停止思考、复制粘贴。化解方式：",[202,2399,2400],{},"强制\"先思考再问 AI\"的纪律","——例如规定\"提任何问题前先尝试自己解决 5 分钟\"。同时让他们参与 review 资深工程师的 AI 协作过程，看到\"AI 协作不是甩锅、而是协作\"。",[195,2403,2404],{},[202,2405,2406],{},"阻力 3：管理层的\"安全\"焦虑",[195,2408,2409,2410,2413,2414,2416],{},"部分管理层担心 AI 会\"泄漏代码\"、\"产生不可控代码\"、\"让团队失去技术能力\"。化解方式：",[202,2411,2412],{},"用具体的安全设计回应抽象的焦虑","——例如展示 settings.json 的 deny 列表、Hooks 的守卫机制、",[312,2415,1597],{}," 的事件记录。当管理层看到\"工程团队对风险的认知比管理层还细致\"，他们的焦虑会转化为信任。",[195,2418,2419],{},[202,2420,2421],{},"阻力 4：团队\"风格统一\"的担忧",[195,2423,2424,2425,2428],{},"部分团队担心\"每个人用 Claude 的风格不同，代码会越来越散乱\"。化解方式：",[202,2426,2427],{},"用 CLAUDE.md + Skills + Hooks 三层机制把\"风格\"代码化","。当工程师都用同一份 CLAUDE.md 与 Skills 时，他们与 AI 协作产出的代码风格自然趋同——比\"每个人凭手感\"还更一致。",[195,2430,2431],{},[202,2432,2433],{},"阻力 5：新人的\"焦虑\"心态",[195,2435,2436,2437,2440],{},"新人入职时如果发现\"全队都在用 AI 协作\"，可能会陷入\"我会不会被 AI 取代\"的焦虑。化解方式：",[202,2438,2439],{},"让新人理解\"AI 协作不是替代工程师、而是放大工程师能力\"","。具体做法——在 onboarding 中安排一个\"对照练习\"：让新人独立完成一个小功能、再用 AI 协作完成另一个相似难度的功能，比较两者的耗时、质量、学到的内容。这种亲身对比远比\"理论安抚\"有说服力——新人会发现 AI 协作的工程师反而需要更深的技术素养，因为他们承担\"审查与决策\"的角色。",[195,2442,2443],{},[202,2444,2445],{},"阻力 6：客户\u002F合规方的\"信任\"问题",[195,2447,2448,2449,2452],{},"部分行业客户（金融、医疗、政府）会要求\"代码必须由人类编写\"。化解方式：",[202,2450,2451],{},"用透明度回应——展示 AI 协作的全部审计日志、人类 review 流程、最终决策权","。让客户看到\"AI 协作的代码经过比纯人工编写更严格的审查\"，往往能化解这层担忧。如果客户合规要求\"绝对不能用 AI\"，则应该在合同中明确约定，并在该项目中关闭 AI 协作工具——这是合规优先于效率的明确选择。",[195,2454,2455],{},[202,2456,2457],{},"阻力 7：成本敏感团队的\"投入产出比\"质疑",[195,2459,2460,2461,2464,2465,2468],{},"部分团队（特别是小公司、初创团队）会质疑\"Claude Code 订阅的钱花得值不值\"。化解方式：",[202,2462,2463],{},"用具体数字回应抽象担忧","——例如展示\"上月 8 名工程师的会话数 × 平均节省时间 × 时薪\"对比订阅成本。本人见过的真实数据——一个月订阅成本约 $200\u002F人，一个月节省工程师时间约 30-50 小时（按时薪 $50 算节省 $1500-2500）。",[202,2466,2467],{},"ROI 通常 7-12 倍","，质疑会自然消解。需要警觉的反例是——如果 ROI 计算下来不到 2 倍，说明团队 AI 协作能力还没建立起来，应当先投资培训而不是急着扩大订阅。",[195,2470,2471],{},[202,2472,2473],{},"阻力 8：行业法规变动的\"未知\"恐惧",[195,2475,2476,2477,2480],{},"近两年 AI 相关法规快速演化（欧盟 AI Act、中国生成式 AI 管理办法等），部分团队担心\"今天用了未来违规怎么办\"。化解方式：",[202,2478,2479],{},"建立\"合规追踪机制\"","——指定一名工程师或法务每月扫描相关法规更新、整理团队应对动作。把法规变动从\"恐惧\"转化为\"流程化的关注\"。Anthropic 在合规方面的投入一直处于行业前列，跟随它的官方指引通常能避免大部分法规风险。",[244,2482,2483],{"id":2483},"度量推广成果",[195,2485,2486,543],{},[202,2487,2488],{},"度量指标",[643,2490,2491,2497,2503,2509,2515],{},[265,2492,2493,2496],{},[202,2494,2495],{},"使用率","：每周使用 Claude Code 的工程师比例（目标 80% 以上）",[265,2498,2499,2502],{},[202,2500,2501],{},"效率","：相同复杂度任务的平均交付时间（目标减少 30-50%）",[265,2504,2505,2508],{},[202,2506,2507],{},"质量","：单元测试覆盖率、CI 失败率、生产 bug 率（目标持续下降）",[265,2510,2511,2514],{},[202,2512,2513],{},"知识沉淀","：CLAUDE.md \u002F Skills \u002F Hooks 的累积条数（目标稳定增长）",[265,2516,2517,543,2520,2522],{},[202,2518,2519],{},"事件率",[312,2521,1597],{}," 的事件密度（目标先升后降——升说明开始注意、降说明真的解决了）",[195,2524,2525,2526,663],{},"把这些指标做成月度仪表板，让全员都能看到\"我们在哪里、我们要去哪里\"。",[202,2527,2528],{},"透明的指标比模糊的口号更能推动行为改变",[195,2530,2531,2534],{},[202,2532,2533],{},"反指标","（如果出现说明推广有问题）：",[262,2536,2537,2540,2543,2546],{},[265,2538,2539],{},"工程师人均代码量飙升但 PR 大小也飙升（说明在凑工作量、缺乏审查）",[265,2541,2542],{},"AI 协作故障率持续上升（说明权限设计或培训不到位）",[265,2544,2545],{},"CLAUDE.md 半年不更新（说明没有失败资产化的习惯）",[265,2547,2548],{},"Skills 库零增长（说明没有把高频任务沉淀的意识）",[195,2550,2551],{},"发现反指标后立即介入——往往是某个环节走偏，而不是整个体系失败。",[195,2553,2554,2557],{},[202,2555,2556],{},"度量框架的\"三层模型\"","：上述指标可以归类到三层——",[262,2559,2560,2566,2572],{},[265,2561,2562,2565],{},[202,2563,2564],{},"使用层","（使用率）：回答\"团队是否真的在用？\"",[265,2567,2568,2571],{},[202,2569,2570],{},"价值层","（效率、质量）：回答\"用了之后产生了价值吗？\"",[265,2573,2574,2577],{},[202,2575,2576],{},"沉淀层","（知识沉淀、事件率）：回答\"这些价值能不能传递与复利？\"",[195,2579,2580],{},"三层之间是渐进关系——光有使用层不够（用了但没产生价值），光有价值层不够（短期有效但无法持续）。完整的\"AI 协作团队成熟度\"必须三层都健康。",[195,2582,2583],{},"每月输出\"三层报告\"作为高管沟通材料：",[305,2585,2587],{"className":307,"code":2586,"language":309,"meta":310,"style":310},"## Claude Code 团队成熟度月报 — 2026-04\n\n### 使用层\n- 周活跃工程师：8\u002F8（100%）\n- 平均会话数\u002F人\u002F天：12 次\n\n### 价值层\n- 相比 3 月份：单功能交付时间减少 35%\n- CI 失败率：从 4.2% 降至 2.8%\n- 生产 bug：本月 3 起（vs 上月 5 起）\n\n### 沉淀层\n- CLAUDE.md 新增条款：5 条\n- Skills 库新增：2 个\n- 已记录事件：4 起（已全部转化为规则）\n\n### 风险信号\n- 暂无（详见 .claude\u002Fincidents.md）\n",[312,2588,2589,2596,2600,2608,2615,2622,2626,2633,2640,2647,2654,2658,2665,2672,2679,2686,2690,2697],{"__ignoreMap":310},[315,2590,2591,2593],{"class":317,"line":318},[315,2592,349],{"class":321},[315,2594,2595],{"class":325},"Claude Code 团队成熟度月报 — 2026-04\n",[315,2597,2598],{"class":317,"line":339},[315,2599,343],{"emptyLinePlaceholder":342},[315,2601,2602,2605],{"class":317,"line":346},[315,2603,2604],{"class":321},"### ",[315,2606,2607],{"class":325},"使用层\n",[315,2609,2610,2612],{"class":317,"line":355},[315,2611,358],{"class":321},[315,2613,2614],{"class":361}," 周活跃工程师：8\u002F8（100%）\n",[315,2616,2617,2619],{"class":317,"line":365},[315,2618,358],{"class":321},[315,2620,2621],{"class":361}," 平均会话数\u002F人\u002F天：12 次\n",[315,2623,2624],{"class":317,"line":373},[315,2625,343],{"emptyLinePlaceholder":342},[315,2627,2628,2630],{"class":317,"line":381},[315,2629,2604],{"class":321},[315,2631,2632],{"class":325},"价值层\n",[315,2634,2635,2637],{"class":317,"line":386},[315,2636,358],{"class":321},[315,2638,2639],{"class":361}," 相比 3 月份：单功能交付时间减少 35%\n",[315,2641,2642,2644],{"class":317,"line":394},[315,2643,358],{"class":321},[315,2645,2646],{"class":361}," CI 失败率：从 4.2% 降至 2.8%\n",[315,2648,2649,2651],{"class":317,"line":402},[315,2650,358],{"class":321},[315,2652,2653],{"class":361}," 生产 bug：本月 3 起（vs 上月 5 起）\n",[315,2655,2656],{"class":317,"line":410},[315,2657,343],{"emptyLinePlaceholder":342},[315,2659,2660,2662],{"class":317,"line":431},[315,2661,2604],{"class":321},[315,2663,2664],{"class":325},"沉淀层\n",[315,2666,2667,2669],{"class":317,"line":436},[315,2668,358],{"class":321},[315,2670,2671],{"class":361}," CLAUDE.md 新增条款：5 条\n",[315,2673,2674,2676],{"class":317,"line":444},[315,2675,358],{"class":321},[315,2677,2678],{"class":361}," Skills 库新增：2 个\n",[315,2680,2681,2683],{"class":317,"line":452},[315,2682,358],{"class":321},[315,2684,2685],{"class":361}," 已记录事件：4 起（已全部转化为规则）\n",[315,2687,2688],{"class":317,"line":460},[315,2689,343],{"emptyLinePlaceholder":342},[315,2691,2692,2694],{"class":317,"line":468},[315,2693,2604],{"class":321},[315,2695,2696],{"class":325},"风险信号\n",[315,2698,2699,2701],{"class":317,"line":473},[315,2700,358],{"class":321},[315,2702,2703],{"class":361}," 暂无（详见 .claude\u002Fincidents.md）\n",[195,2705,2706,2707,2710],{},"这种结构化月报让高管即使不懂技术细节，也能从指标变化看到推广效果。",[202,2708,2709],{},"让 AI 协作的价值从\"工程团队内部知道\"升级为\"全公司可见\"","——是推广能持续获得资源支持的关键。",[224,2712],{},[227,2714,2715],{"id":2715},"总结",[195,2717,2718,2719,2722],{},"Boris Cherny 的 9 条心法本质上回答了一个根本问题——",[202,2720,2721],{},"在 AI 协作时代，工程师与 AI 的协作关系应当如何设计","。9 条心法可以归纳为三个层次：",[262,2724,2725,2731,2737],{},[265,2726,2727,2730],{},[202,2728,2729],{},"基础层（1、2）","：建立项目记忆、管好任务边界。",[265,2732,2733,2736],{},[202,2734,2735],{},"机制层（3、4、5）","：用 Plan、Skills、Hooks 把工程文化代码化。",[265,2738,2739,2742],{},[202,2740,2741],{},"价值观层（6、7、8、9）","：可观测性、测试先行、人类决策权、失败资产化。",[195,2744,2745,2746,2749],{},"这三层缺一不可。基础层不打扎实，机制层是空中楼阁；机制层不健全，价值观再美好也落不了地；价值观若错位，前两层做得再好也会偏离正确方向。读者在团队推广时应当",[202,2747,2748],{},"按这三层的顺序循序渐进","，不要试图一次性把 9 条全部推广——抓住第一层，机制层会自然涌现，价值观层会在反复的实践中内化。",[195,2751,2752,2755],{},[202,2753,2754],{},"心法落地的\"60 天计划\"","：本人推荐工程师与团队 leader 用一份\"60 天计划\"把 9 条心法逐步落地——",[262,2757,2758,2764,2770,2776,2782],{},[265,2759,2760,2763],{},[202,2761,2762],{},"Day 1-7","：建立 CLAUDE.md 与 task 拆分习惯（心法 1、2）",[265,2765,2766,2769],{},[202,2767,2768],{},"Day 8-21","：引入 Plan 模式 + 开始建 Skills 库（心法 3、4）",[265,2771,2772,2775],{},[202,2773,2774],{},"Day 22-35","：装好 Hooks + 建立 audit 日志（心法 5、6）",[265,2777,2778,2781],{},[202,2779,2780],{},"Day 36-49","：实践 TDD 与 AI 协作 + 强化人类决策边界（心法 7、8）",[265,2783,2784,2787],{},[202,2785,2786],{},"Day 50-60","：建立事件资产化机制 + 输出团队心法手册（心法 9）",[195,2789,2790,2793],{},[202,2791,2792],{},"60 天后回头看","，团队的 AI 协作能力一定会有显著的质变——这种节奏既不会让团队感到压力骤增、又能在 2 个月内系统性建立完整的协作体系。比\"一次性推广所有规则\"或\"放任自流不做规划\"都好得多。",[195,2795,2796,2797,663],{},"第十一章\"最佳实践与效率心法\"到此落幕。从 7.1 提示词、7.2 上下文、7.3 安全到 7.4 心法，四节合起来构成了\"AI 协作时代的工程师心法体系\"。把这套心法贯彻到日常工作中，团队的 AI 协作能力会形成可观测的复利曲线——半年后、一年后、三年后回头看，",[202,2798,2799],{},"最大的差距不在于\"我们用了多先进的模型\"，而在于\"我们的团队心法是否已经内化\"",[195,2801,2802],{},"附录 A、B、C 提供命令速查表、AI 术语表与延伸阅读资源。建议读者把它们当作日常工具书，遇到具体问题随手查阅。",[195,2804,2805],{},"留给读者的两个习题：",[643,2807,2808,2811],{},[265,2809,2810],{},"在你当前项目里，挑一条本节的心法，与团队对齐后立即实践 1 周。1 周后回头评估：哪些奏效？哪些遇到阻力？为什么？",[265,2812,2813,2814,2816],{},"在你团队的下一次周会上，分享一次\"AI 协作失败事件\"——按 ",[312,2815,1597],{}," 的模板记录、归类、沉淀。半年后回头看你的 incidents.md，它将是全团队最宝贵的\"AI 协作教训库\"。",[195,2818,2819,2820,2823],{},"这两个习题做完，你就把 9 条心法从\"读过的内容\"真正变成了\"做过的事情\"。",[202,2821,2822],{},"心法的真正价值不在记忆，而在实践，更在持之以恒地反复实践与持续打磨","。读者可以把本节内容打印出来贴在工位旁，每周对照检查自己的工作方式——这种简单粗暴的\"显式提醒\"在 AI 协作早期是最有效的\"自我训练机制\"。半年后心法已经内化为肌肉记忆，便可以从墙上撤下来——但那时你已经成为团队中\"AI 协作能力\"最强的那批人之一。",[227,2825,2826],{"id":2826},"延伸阅读",[262,2828,2829,2839,2847,2855,2863,2871,2879,2887,2895,2903,2911,2919],{},[265,2830,2831,2838],{},[2832,2833,2837],"a",{"href":2834,"rel":2835},"https:\u002F\u002Fwww.anthropic.com\u002Fengineering\u002Fclaude-code-best-practices",[2836],"nofollow","Anthropic: Claude Code Best Practices"," — Boris Cherny 等人发表于 Anthropic 工程博客的官方实战指南",[265,2840,2841,2846],{},[2832,2842,2845],{"href":2843,"rel":2844},"https:\u002F\u002Fdocs.anthropic.com\u002Fclaude\u002Fdocs\u002Fclaude-code",[2836],"Anthropic Claude Code 官方文档"," — Permission Mode、Hooks、Skills 全览",[265,2848,2849,2854],{},[2832,2850,2853],{"href":2851,"rel":2852},"https:\u002F\u002Fwww.anthropic.com\u002Fengineering\u002Fbuilding-effective-agents",[2836],"Anthropic: Building Effective Agents"," — 构建有效 AI Agent 的工程指南",[265,2856,2857,2862],{},[2832,2858,2861],{"href":2859,"rel":2860},"https:\u002F\u002Fgithub.com\u002Fhesreallyhim\u002Fawesome-claude-code",[2836],"Awesome Claude Code"," — 社区维护的 Claude Code 资源集",[265,2864,2865,2870],{},[2832,2866,2869],{"href":2867,"rel":2868},"https:\u002F\u002Fwww.anthropic.com\u002Fengineering",[2836],"Anthropic Engineering Blog"," — Anthropic 工程博客（含多篇 Boris Cherny 文章）",[265,2872,2873,2878],{},[2832,2874,2877],{"href":2875,"rel":2876},"https:\u002F\u002Fwww.youtube.com\u002Fresults?search_query=boris+cherny+claude+code",[2836],"Boris Cherny on YouTube"," — Boris Cherny 公开演讲与访谈集合",[265,2880,2881,2886],{},[2832,2882,2885],{"href":2883,"rel":2884},"https:\u002F\u002Fwww.anthropic.com\u002Fnews\u002Fanthropics-responsible-scaling-policy",[2836],"Anthropic: Responsible Scaling Policy"," — 负责任 AI 部署的官方框架",[265,2888,2889,2894],{},[2832,2890,2893],{"href":2891,"rel":2892},"https:\u002F\u002Fwww.anthropic.com\u002Ftrust",[2836],"Anthropic Trust & Safety"," — Claude 系列的隐私、安全与上下文政策",[265,2896,2897,2902],{},[2832,2898,2901],{"href":2899,"rel":2900},"https:\u002F\u002Fwww.oreilly.com\u002Flibrary\u002Fview\u002Ftest-driven-development\u002F0321146530\u002F",[2836],"Kent Beck: Test-Driven Development by Example"," — TDD 经典原著",[265,2904,2905,2910],{},[2832,2906,2909],{"href":2907,"rel":2908},"https:\u002F\u002Fpragprog.com\u002Ftitles\u002Ftpp20\u002F",[2836],"Pragmatic Programmer 20th Anniversary Edition"," — 软件工艺与协作哲学",[265,2912,2913,2918],{},[2832,2914,2917],{"href":2915,"rel":2916},"https:\u002F\u002Fsre.google\u002Fsre-book\u002Ftable-of-contents\u002F",[2836],"Google SRE Book"," — SRE 实践与故障复盘文化",[265,2920,2921,2926],{},[2832,2922,2925],{"href":2923,"rel":2924},"https:\u002F\u002F12factor.net\u002Fzh_cn\u002F",[2836],"The Twelve-Factor App"," — 现代应用部署 12 准则（中文）",[2928,2929,2930],"style",{},"html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sHepR, html code.shiki .sHepR{--shiki-light:#39ADB5;--shiki-light-font-weight:bold;--shiki-default:#89DDFF;--shiki-default-font-weight:bold;--shiki-dark:#89DDFF;--shiki-dark-font-weight:bold}html pre.shiki code .so75L, html code.shiki .so75L{--shiki-light:#E53935;--shiki-light-font-weight:bold;--shiki-default:#F07178;--shiki-default-font-weight:bold;--shiki-dark:#F07178;--shiki-dark-font-weight:bold}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}",{"title":310,"searchDepth":318,"depth":339,"links":2932},[2933,2938,2943,2948,2953,2958,2963,2968,2973,2978,2983,2984],{"id":229,"depth":339,"text":230,"children":2934},[2935,2936,2937],{"id":246,"depth":346,"text":247},{"id":292,"depth":346,"text":292},{"id":529,"depth":346,"text":529},{"id":581,"depth":339,"text":582,"children":2939},[2940,2941,2942],{"id":604,"depth":346,"text":247},{"id":614,"depth":346,"text":292},{"id":666,"depth":346,"text":529},{"id":677,"depth":339,"text":678,"children":2944},[2945,2946,2947],{"id":695,"depth":346,"text":247},{"id":705,"depth":346,"text":292},{"id":802,"depth":346,"text":529},{"id":813,"depth":339,"text":814,"children":2949},[2950,2951,2952],{"id":827,"depth":346,"text":247},{"id":841,"depth":346,"text":292},{"id":1165,"depth":346,"text":529},{"id":1182,"depth":339,"text":1183,"children":2954},[2955,2956,2957],{"id":1196,"depth":346,"text":247},{"id":1202,"depth":346,"text":292},{"id":1474,"depth":346,"text":529},{"id":1553,"depth":339,"text":1554,"children":2959},[2960,2961,2962],{"id":1567,"depth":346,"text":247},{"id":1577,"depth":346,"text":292},{"id":1701,"depth":346,"text":529},{"id":1849,"depth":339,"text":1850,"children":2964},[2965,2966,2967],{"id":1863,"depth":346,"text":247},{"id":1873,"depth":346,"text":292},{"id":1920,"depth":346,"text":529},{"id":1931,"depth":339,"text":1932,"children":2969},[2970,2971,2972],{"id":1945,"depth":346,"text":247},{"id":1955,"depth":346,"text":292},{"id":1987,"depth":346,"text":529},{"id":2044,"depth":339,"text":2045,"children":2974},[2975,2976,2977],{"id":2058,"depth":346,"text":247},{"id":2068,"depth":346,"text":292},{"id":2121,"depth":346,"text":529},{"id":2264,"depth":339,"text":2264,"children":2979},[2980,2981,2982],{"id":2270,"depth":346,"text":2271},{"id":2377,"depth":346,"text":2377},{"id":2483,"depth":346,"text":2483},{"id":2715,"depth":339,"text":2715},{"id":2826,"depth":339,"text":2826},"md",null,{"date":2988},"2026-04-26",{"title":168,"description":197},"ZNB8B_Lo0u4KteEXXKKrrwzaQqFgx5SEElmtx9lztsk",[2992,2994],{"title":164,"path":165,"stem":166,"description":2993,"children":-1},"AI 执行、人类审查、人类决策",{"title":178,"path":179,"stem":180,"description":310,"children":-1},1777395311069]