[{"data":1,"prerenderedAt":3748},["ShallowReactive",2],{"navigation":3,"\u002Fadvanced\u002Fclaude-md":189,"\u002Fadvanced\u002Fclaude-md-surround":3743},[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":108,"body":191,"description":3736,"extension":3737,"links":3738,"meta":3739,"navigation":901,"path":109,"seo":3741,"stem":110,"__hash__":3742},"docs\u002F5.advanced\u002F1.claude-md.md",{"type":192,"value":193,"toc":3679},"minimark",[194,199,204,211,222,225,229,391,398,402,405,486,493,496,500,504,514,640,643,647,663,672,685,695,699,709,788,798,800,804,808,818,824,846,851,868,872,1270,1274,1279,1358,1363,1396,1401,1436,1441,1486,1489,1491,1495,1499,1508,1534,1542,1547,1553,1558,1585,1588,1592,1597,1607,1612,1618,1623,1632,1637,1653,1658,1664,1669,1681,1686,1699,1701,1705,1712,1721,1783,1790,1795,1815,1822,1828,1834,1844,1850,1932,1935,2002,2006,2012,2017,2142,2155,2157,2161,2165,2173,2179,2184,2211,2221,2237,2264,2268,2274,2306,2310,2316,2358,2363,2365,2369,2373,2376,2382,2388,2394,2398,2401,2463,2466,2472,2475,2481,2485,2530,2532,2536,2540,2545,2566,2569,2575,2592,2595,2599,2602,2638,2643,2647,2650,2763,2766,2773,2785,2794,2796,2800,2804,3004,3008,3301,3305,3492,3494,3498,3502,3530,3534,3537,3544,3553,3555,3559,3675],[195,196,198],"h2",{"id":197},"_1-什么是-claudemd","1. 什么是 CLAUDE.md",[200,201,203],"h3",{"id":202},"_11-定义与核心作用","1.1 定义与核心作用",[205,206,207,210],"p",{},[208,209,108],"code",{}," 是 Claude Code 的原生项目记忆机制，一个纯 Markdown 文件，在每次会话启动时自动注入 Claude 的上下文窗口。它充当\"AI 新成员的入职文档\"——你写一次，Claude 在每个会话中都知道你的项目上下文，无需重复解释。",[205,212,213,214,216,217,221],{},"与对话历史（每次会话重置）或代码库（Claude 按需探索）不同，",[208,215,108],{}," 是",[218,219,220],"strong",{},"始终存在","的。它是唯一一个保证在 Claude 上下文窗口中的文件，每次会话开始前就被加载。",[205,223,224],{},"Claude Code 官方文档将其定位为\"上下文注入文件\"（context injection file）——内容作为用户消息加载到系统提示之后，Claude 读取并尽力遵循，而非严格解析的配置。",[200,226,228],{"id":227},"_12-与-cursorrules-的对比","1.2 与 .cursorrules 的对比",[230,231,232,248],"table",{},[233,234,235],"thead",{},[236,237,238,242,245],"tr",{},[239,240,241],"th",{},"维度",[239,243,244],{},"CLAUDE.md (Claude Code)",[239,246,247],{},".cursorrules (Cursor)",[249,250,251,265,281,304,322,335,351,365,378],"tbody",{},[236,252,253,259,262],{},[254,255,256],"td",{},[218,257,258],{},"层级体系",[254,260,261],{},"5 层：组织\u002F用户\u002F项目\u002F子目录\u002F本地",[254,263,264],{},"单层文件，无继承",[236,266,267,272,278],{},[254,268,269],{},[218,270,271],{},"全局配置",[254,273,274,275],{},"支持 ",[208,276,277],{},"~\u002F.claude\u002FCLAUDE.md",[254,279,280],{},"无全局配置",[236,282,283,288,298],{},[254,284,285],{},[218,286,287],{},"模块化",[254,289,290,293,294,297],{},[208,291,292],{},".claude\u002Frules\u002F"," + ",[208,295,296],{},"@import"," 语法",[254,299,300,303],{},[208,301,302],{},".cursor\u002Frules\u002F"," 目录",[236,305,306,311,317],{},[254,307,308],{},[218,309,310],{},"路径作用域",[254,312,313,316],{},[208,314,315],{},"paths"," frontmatter 条件加载",[254,318,319,316],{},[208,320,321],{},"globs",[236,323,324,329,332],{},[254,325,326],{},[218,327,328],{},"自动记忆",[254,330,331],{},"Auto Memory 系统自动学习",[254,333,334],{},"无原生自动记忆",[236,336,337,342,348],{},[254,338,339],{},[218,340,341],{},"文件导入",[254,343,344,347],{},[208,345,346],{},"@path"," 递归导入（最深 5 层）",[254,349,350],{},"不支持",[236,352,353,358,363],{},[254,354,355],{},[218,356,357],{},"个人覆盖",[254,359,360],{},[208,361,362],{},"CLAUDE.local.md",[254,364,350],{},[236,366,367,372,375],{},[254,368,369],{},[218,370,371],{},"Token 可见性",[254,373,374],{},"可见上下文消耗",[254,376,377],{},"不可见",[236,379,380,385,388],{},[254,381,382],{},[218,383,384],{},"团队共享",[254,386,387],{},"通过 Git 共享项目级文件",[254,389,390],{},"通过 Git 共享",[205,392,393,394,397],{},"CLAUDE.md 拥有目前所有 AI 编程助手配置中最复杂的层级体系。如果你的团队使用多种 AI 工具，建议维护一个跨工具的 ",[208,395,396],{},"AGENTS.md"," 作为单一事实来源，然后在各工具的专属配置中导入它。",[200,399,401],{"id":400},"_13-claudemd-与-auto-memory-的关系","1.3 CLAUDE.md 与 Auto Memory 的关系",[205,403,404],{},"Claude Code 有两套互补的记忆系统：",[230,406,407,419],{},[233,408,409],{},[236,410,411,413,416],{},[239,412],{},[239,414,415],{},"CLAUDE.md 文件",[239,417,418],{},"Auto Memory",[249,420,421,434,447,460,473],{},[236,422,423,428,431],{},[254,424,425],{},[218,426,427],{},"谁编写",[254,429,430],{},"你（开发者）",[254,432,433],{},"Claude（自动）",[236,435,436,441,444],{},[254,437,438],{},[218,439,440],{},"内容",[254,442,443],{},"指令和规则",[254,445,446],{},"学习到的模式和事实",[236,448,449,454,457],{},[254,450,451],{},[218,452,453],{},"作用域",[254,455,456],{},"项目、用户或组织",[254,458,459],{},"每个工作树",[236,461,462,467,470],{},[254,463,464],{},[218,465,466],{},"加载方式",[254,468,469],{},"每次会话完整加载",[254,471,472],{},"每次会话加载前 200 行或 25KB",[236,474,475,480,483],{},[254,476,477],{},[218,478,479],{},"适用场景",[254,481,482],{},"编码标准、工作流、项目架构",[254,484,485],{},"构建命令、调试洞察、偏好",[205,487,488,489,492],{},"使用 CLAUDE.md 来",[218,490,491],{},"指导"," Claude 的行为；让 Auto Memory 自动处理 Claude 从你的纠正中学到的东西。",[494,495],"hr",{},[195,497,499],{"id":498},"_2-文件位置与加载机制","2. 文件位置与加载机制",[200,501,503],{"id":502},"_21-五层作用域体系","2.1 五层作用域体系",[205,505,506,507,509,510,513],{},"Claude Code 从多个位置读取 ",[208,508,108],{},"，按",[218,511,512],{},"从宽泛到具体","的层级叠加：",[230,515,516,531],{},[233,517,518],{},[236,519,520,522,525,528],{},[239,521,453],{},[239,523,524],{},"位置",[239,526,527],{},"用途",[239,529,530],{},"共享方式",[249,532,533,565,582,604,622],{},[236,534,535,540,559,562],{},[254,536,537],{},[218,538,539],{},"托管策略",[254,541,542,543,546,549,550,553,555,556],{},"macOS: ",[208,544,545],{},"\u002FLibrary\u002FApplication Support\u002FClaudeCode\u002FCLAUDE.md",[547,548],"br",{},"Linux\u002FWSL: ",[208,551,552],{},"\u002Fetc\u002Fclaude-code\u002FCLAUDE.md",[547,554],{},"Windows: ",[208,557,558],{},"C:\\Program Files\\ClaudeCode\\CLAUDE.md",[254,560,561],{},"组织级指令，IT\u002FDevOps 管理",[254,563,564],{},"机器上所有用户",[236,566,567,572,576,579],{},[254,568,569],{},[218,570,571],{},"用户全局",[254,573,574],{},[208,575,277],{},[254,577,578],{},"个人跨项目偏好",[254,580,581],{},"仅你（所有项目）",[236,583,584,589,598,601],{},[254,585,586],{},[218,587,588],{},"项目级",[254,590,591,594,595],{},[208,592,593],{},".\u002FCLAUDE.md"," 或 ",[208,596,597],{},".\u002F.claude\u002FCLAUDE.md",[254,599,600],{},"团队共享的项目指令",[254,602,603],{},"通过源码控制共享",[236,605,606,611,616,619],{},[254,607,608],{},[218,609,610],{},"本地覆盖",[254,612,613],{},[208,614,615],{},".\u002FCLAUDE.local.md",[254,617,618],{},"个人项目专属偏好",[254,620,621],{},"仅你（当前项目）",[236,623,624,629,634,637],{},[254,625,626],{},[218,627,628],{},"子目录",[254,630,631],{},[208,632,633],{},".\u002Fsubdir\u002FCLAUDE.md",[254,635,636],{},"目录专属规则",[254,638,639],{},"按需懒加载",[205,641,642],{},"更具体的文件优先于更宽泛的文件。当指令冲突时，Claude 优先使用最本地化的文件。",[200,644,646],{"id":645},"_22-加载顺序与解析规则","2.2 加载顺序与解析规则",[205,648,649,652,653,655,656,658,659,662],{},[218,650,651],{},"祖先文件（向上遍历）","：Claude 从当前工作目录向上遍历到 Git 根目录，沿途加载每个目录中的 ",[208,654,108],{}," 和 ",[208,657,362],{},"。所有发现的文件",[218,660,661],{},"拼接","到上下文中，而非相互覆盖。",[205,664,665,666,668,669,671],{},"在每个目录内，",[208,667,362],{}," 追加在 ",[208,670,108],{}," 之后，因此当指令冲突时，个人笔记是该层级最后读取的内容。",[205,673,674,677,678,680,681,684],{},[218,675,676],{},"后代文件（子目录懒加载）","：子目录中的 ",[208,679,108],{}," 不在启动时加载，而是在 Claude 读取该子目录中的文件时",[218,682,683],{},"按需加载","。这避免了无关上下文膨胀会话。",[686,687,692],"pre",{"className":688,"code":690,"language":691},[689],"language-text","# 示例：在 foo\u002Fbar\u002F 中运行 Claude Code\n加载顺序：\n1. ~\u002F.claude\u002FCLAUDE.md          (用户全局)\n2. foo\u002FCLAUDE.md                (祖先)\n3. foo\u002FCLAUDE.local.md          (祖先本地覆盖)\n4. foo\u002Fbar\u002FCLAUDE.md            (当前目录)\n5. foo\u002Fbar\u002FCLAUDE.local.md      (当前目录本地覆盖)\n# 子目录 foo\u002Fbar\u002Fbaz\u002FCLAUDE.md  仅在读取 baz\u002F 内文件时加载\n","text",[208,693,690],{"__ignoreMap":694},"",[200,696,698],{"id":697},"_23-排除特定文件","2.3 排除特定文件",[205,700,701,702,704,705,708],{},"在大型 monorepo 中，祖先 ",[208,703,108],{}," 可能包含与你工作无关的指令。使用 ",[208,706,707],{},"claudeMdExcludes"," 设置跳过特定文件：",[686,710,714],{"className":711,"code":712,"language":713,"meta":694,"style":694},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u002F\u002F .claude\u002Fsettings.local.json\n{\n  \"claudeMdExcludes\": [\n    \"**\u002Fmonorepo\u002FCLAUDE.md\",\n    \"\u002Fhome\u002Fuser\u002Fmonorepo\u002Fother-team\u002F.claude\u002Frules\u002F**\"\n  ]\n}\n","json",[208,715,716,725,732,750,765,776,782],{"__ignoreMap":694},[717,718,721],"span",{"class":719,"line":720},"line",1,[717,722,724],{"class":723},"sHwdD","\u002F\u002F .claude\u002Fsettings.local.json\n",[717,726,728],{"class":719,"line":727},2,[717,729,731],{"class":730},"sMK4o","{\n",[717,733,735,738,741,744,747],{"class":719,"line":734},3,[717,736,737],{"class":730},"  \"",[717,739,707],{"class":740},"spNyl",[717,742,743],{"class":730},"\"",[717,745,746],{"class":730},":",[717,748,749],{"class":730}," [\n",[717,751,753,756,760,762],{"class":719,"line":752},4,[717,754,755],{"class":730},"    \"",[717,757,759],{"class":758},"sfazB","**\u002Fmonorepo\u002FCLAUDE.md",[717,761,743],{"class":730},[717,763,764],{"class":730},",\n",[717,766,768,770,773],{"class":719,"line":767},5,[717,769,755],{"class":730},[717,771,772],{"class":758},"\u002Fhome\u002Fuser\u002Fmonorepo\u002Fother-team\u002F.claude\u002Frules\u002F**",[717,774,775],{"class":730},"\"\n",[717,777,779],{"class":719,"line":778},6,[717,780,781],{"class":730},"  ]\n",[717,783,785],{"class":719,"line":784},7,[717,786,787],{"class":730},"}\n",[205,789,790,791,793,794,797],{},"模式使用 glob 语法匹配绝对路径。托管策略 ",[208,792,108],{}," ",[218,795,796],{},"不可被排除","，确保组织级指令始终生效。",[494,799],{},[195,801,803],{"id":802},"_3-内容结构与编写规范","3. 内容结构与编写规范",[200,805,807],{"id":806},"_31-核心内容层次","3.1 核心内容层次",[205,809,810,811,813,814,817],{},"有效的 ",[208,812,108],{}," 回答一个问题：",[218,815,816],{},"没有这条指令，Claude 会犯什么错误？"," 如果 Claude 已经能正确做到，这条指令就是噪音。",[205,819,820,823],{},[218,821,822],{},"应包含的内容","：",[825,826,827,831,834,837,840,843],"ul",{},[828,829,830],"li",{},"构建、测试和 lint 命令（尤其是不明显的）",[828,832,833],{},"与惯例不同的代码风格规则",[828,835,836],{},"仓库工作流（分支命名、PR 流程、提交格式）",[828,838,839],{},"代码中不明显的架构决策",[828,841,842],{},"开发环境怪癖（必需的环境变量、必须运行的服务）",[828,844,845],{},"常见陷阱（容易犯且难调试的错误）",[205,847,848,823],{},[218,849,850],{},"不应包含的内容",[825,852,853,856,859,862,865],{},[828,854,855],{},"Claude 已知的标准语言惯例",[828,857,858],{},"linter\u002Fformatter 已覆盖的代码风格规则",[828,860,861],{},"详细的 API 文档（链接即可）",[828,863,864],{},"逐文件的代码库描述",[828,866,867],{},"频繁变化的信息",[200,869,871],{"id":870},"_32-推荐文件结构","3.2 推荐文件结构",[686,873,877],{"className":874,"code":875,"language":876,"meta":694,"style":694},"language-markdown shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","# Project: [项目名称]\n\n[一两句话描述项目用途和技术栈]\n\n## Tech Stack\n- [框架] [版本], [语言] [版本]\n- [数据库] via [ORM]\n- [测试框架]\n\n## Directory Structure\n- `src\u002Fapp\u002F` — 页面和路由\n- `src\u002Flib\u002F` — 共享工具和服务\n- `src\u002Fcomponents\u002F` — React 组件\n\n## Essential Commands\n- `npm run dev` — 启动开发服务器\n- `npm run test` — 运行测试套件\n- `npm run build` — 生产构建\n\n## Conventions\n- [Claude 默认不会遵循的惯例]\n- [Claude 默认不会遵循的惯例]\n\n## Architecture Decisions\n- [防止错误假设的关键决策]\n- [防止错误假设的关键决策]\n\n## Do Not\n- [明确的禁止事项]\n- [明确的禁止事项]\n\n## Verification\nAfter changes, always run:\n1. `npm run lint`\n2. `npm run test`\n3. `npm run build`\n","markdown",[208,878,879,897,903,912,916,924,962,983,995,1000,1008,1025,1040,1055,1060,1068,1083,1098,1113,1118,1126,1134,1141,1146,1154,1166,1177,1182,1190,1202,1213,1218,1226,1232,1246,1258],{"__ignoreMap":694},[717,880,881,884,888,891,894],{"class":719,"line":720},[717,882,883],{"class":730},"# ",[717,885,887],{"class":886},"sBMFI","Project: ",[717,889,890],{"class":730},"[",[717,892,893],{"class":758},"项目名称",[717,895,896],{"class":730},"]\n",[717,898,899],{"class":719,"line":727},[717,900,902],{"emptyLinePlaceholder":901},true,"\n",[717,904,905,907,910],{"class":719,"line":734},[717,906,890],{"class":730},[717,908,909],{"class":758},"一两句话描述项目用途和技术栈",[717,911,896],{"class":730},[717,913,914],{"class":719,"line":752},[717,915,902],{"emptyLinePlaceholder":901},[717,917,918,921],{"class":719,"line":767},[717,919,920],{"class":730},"## ",[717,922,923],{"class":886},"Tech Stack\n",[717,925,926,929,932,935,938,940,943,945,949,951,954,956,958,960],{"class":719,"line":778},[717,927,928],{"class":730},"-",[717,930,931],{"class":730}," [",[717,933,934],{"class":758},"框架",[717,936,937],{"class":730},"]",[717,939,931],{"class":730},[717,941,942],{"class":758},"版本",[717,944,937],{"class":730},[717,946,948],{"class":947},"sTEyZ",", ",[717,950,890],{"class":730},[717,952,953],{"class":758},"语言",[717,955,937],{"class":730},[717,957,931],{"class":730},[717,959,942],{"class":758},[717,961,896],{"class":730},[717,963,964,966,968,971,973,976,978,981],{"class":719,"line":784},[717,965,928],{"class":730},[717,967,931],{"class":730},[717,969,970],{"class":758},"数据库",[717,972,937],{"class":730},[717,974,975],{"class":947}," via ",[717,977,890],{"class":730},[717,979,980],{"class":758},"ORM",[717,982,896],{"class":730},[717,984,986,988,990,993],{"class":719,"line":985},8,[717,987,928],{"class":730},[717,989,931],{"class":730},[717,991,992],{"class":758},"测试框架",[717,994,896],{"class":730},[717,996,998],{"class":719,"line":997},9,[717,999,902],{"emptyLinePlaceholder":901},[717,1001,1003,1005],{"class":719,"line":1002},10,[717,1004,920],{"class":730},[717,1006,1007],{"class":886},"Directory Structure\n",[717,1009,1011,1013,1016,1019,1022],{"class":719,"line":1010},11,[717,1012,928],{"class":730},[717,1014,1015],{"class":730}," `",[717,1017,1018],{"class":758},"src\u002Fapp\u002F",[717,1020,1021],{"class":730},"`",[717,1023,1024],{"class":947}," — 页面和路由\n",[717,1026,1028,1030,1032,1035,1037],{"class":719,"line":1027},12,[717,1029,928],{"class":730},[717,1031,1015],{"class":730},[717,1033,1034],{"class":758},"src\u002Flib\u002F",[717,1036,1021],{"class":730},[717,1038,1039],{"class":947}," — 共享工具和服务\n",[717,1041,1043,1045,1047,1050,1052],{"class":719,"line":1042},13,[717,1044,928],{"class":730},[717,1046,1015],{"class":730},[717,1048,1049],{"class":758},"src\u002Fcomponents\u002F",[717,1051,1021],{"class":730},[717,1053,1054],{"class":947}," — React 组件\n",[717,1056,1058],{"class":719,"line":1057},14,[717,1059,902],{"emptyLinePlaceholder":901},[717,1061,1063,1065],{"class":719,"line":1062},15,[717,1064,920],{"class":730},[717,1066,1067],{"class":886},"Essential Commands\n",[717,1069,1071,1073,1075,1078,1080],{"class":719,"line":1070},16,[717,1072,928],{"class":730},[717,1074,1015],{"class":730},[717,1076,1077],{"class":758},"npm run dev",[717,1079,1021],{"class":730},[717,1081,1082],{"class":947}," — 启动开发服务器\n",[717,1084,1086,1088,1090,1093,1095],{"class":719,"line":1085},17,[717,1087,928],{"class":730},[717,1089,1015],{"class":730},[717,1091,1092],{"class":758},"npm run test",[717,1094,1021],{"class":730},[717,1096,1097],{"class":947}," — 运行测试套件\n",[717,1099,1101,1103,1105,1108,1110],{"class":719,"line":1100},18,[717,1102,928],{"class":730},[717,1104,1015],{"class":730},[717,1106,1107],{"class":758},"npm run build",[717,1109,1021],{"class":730},[717,1111,1112],{"class":947}," — 生产构建\n",[717,1114,1116],{"class":719,"line":1115},19,[717,1117,902],{"emptyLinePlaceholder":901},[717,1119,1121,1123],{"class":719,"line":1120},20,[717,1122,920],{"class":730},[717,1124,1125],{"class":886},"Conventions\n",[717,1127,1129,1131],{"class":719,"line":1128},21,[717,1130,928],{"class":730},[717,1132,1133],{"class":947}," [Claude 默认不会遵循的惯例]\n",[717,1135,1137,1139],{"class":719,"line":1136},22,[717,1138,928],{"class":730},[717,1140,1133],{"class":947},[717,1142,1144],{"class":719,"line":1143},23,[717,1145,902],{"emptyLinePlaceholder":901},[717,1147,1149,1151],{"class":719,"line":1148},24,[717,1150,920],{"class":730},[717,1152,1153],{"class":886},"Architecture Decisions\n",[717,1155,1157,1159,1161,1164],{"class":719,"line":1156},25,[717,1158,928],{"class":730},[717,1160,931],{"class":730},[717,1162,1163],{"class":758},"防止错误假设的关键决策",[717,1165,896],{"class":730},[717,1167,1169,1171,1173,1175],{"class":719,"line":1168},26,[717,1170,928],{"class":730},[717,1172,931],{"class":730},[717,1174,1163],{"class":758},[717,1176,896],{"class":730},[717,1178,1180],{"class":719,"line":1179},27,[717,1181,902],{"emptyLinePlaceholder":901},[717,1183,1185,1187],{"class":719,"line":1184},28,[717,1186,920],{"class":730},[717,1188,1189],{"class":886},"Do Not\n",[717,1191,1193,1195,1197,1200],{"class":719,"line":1192},29,[717,1194,928],{"class":730},[717,1196,931],{"class":730},[717,1198,1199],{"class":758},"明确的禁止事项",[717,1201,896],{"class":730},[717,1203,1205,1207,1209,1211],{"class":719,"line":1204},30,[717,1206,928],{"class":730},[717,1208,931],{"class":730},[717,1210,1199],{"class":758},[717,1212,896],{"class":730},[717,1214,1216],{"class":719,"line":1215},31,[717,1217,902],{"emptyLinePlaceholder":901},[717,1219,1221,1223],{"class":719,"line":1220},32,[717,1222,920],{"class":730},[717,1224,1225],{"class":886},"Verification\n",[717,1227,1229],{"class":719,"line":1228},33,[717,1230,1231],{"class":947},"After changes, always run:\n",[717,1233,1235,1238,1240,1243],{"class":719,"line":1234},34,[717,1236,1237],{"class":730},"1.",[717,1239,1015],{"class":730},[717,1241,1242],{"class":758},"npm run lint",[717,1244,1245],{"class":730},"`\n",[717,1247,1249,1252,1254,1256],{"class":719,"line":1248},35,[717,1250,1251],{"class":730},"2.",[717,1253,1015],{"class":730},[717,1255,1092],{"class":758},[717,1257,1245],{"class":730},[717,1259,1261,1264,1266,1268],{"class":719,"line":1260},36,[717,1262,1263],{"class":730},"3.",[717,1265,1015],{"class":730},[717,1267,1107],{"class":758},[717,1269,1245],{"class":730},[200,1271,1273],{"id":1272},"_33-指令编写原则","3.3 指令编写原则",[205,1275,1276,823],{},[218,1277,1278],{},"具体性优于意图",[686,1280,1282],{"className":874,"code":1281,"language":876,"meta":694,"style":694},"# 差\n- 格式化代码要规范\n- 测试你的改动\n- 保持文件组织\n\n# 好\n- 使用 2 空格缩进\n- 提交前运行 `npm test`\n- API handlers 放在 `src\u002Fapi\u002Fhandlers\u002F`\n",[208,1283,1284,1291,1298,1305,1312,1316,1323,1330,1344],{"__ignoreMap":694},[717,1285,1286,1288],{"class":719,"line":720},[717,1287,883],{"class":730},[717,1289,1290],{"class":886},"差\n",[717,1292,1293,1295],{"class":719,"line":727},[717,1294,928],{"class":730},[717,1296,1297],{"class":947}," 格式化代码要规范\n",[717,1299,1300,1302],{"class":719,"line":734},[717,1301,928],{"class":730},[717,1303,1304],{"class":947}," 测试你的改动\n",[717,1306,1307,1309],{"class":719,"line":752},[717,1308,928],{"class":730},[717,1310,1311],{"class":947}," 保持文件组织\n",[717,1313,1314],{"class":719,"line":767},[717,1315,902],{"emptyLinePlaceholder":901},[717,1317,1318,1320],{"class":719,"line":778},[717,1319,883],{"class":730},[717,1321,1322],{"class":886},"好\n",[717,1324,1325,1327],{"class":719,"line":784},[717,1326,928],{"class":730},[717,1328,1329],{"class":947}," 使用 2 空格缩进\n",[717,1331,1332,1334,1337,1339,1342],{"class":719,"line":985},[717,1333,928],{"class":730},[717,1335,1336],{"class":947}," 提交前运行 ",[717,1338,1021],{"class":730},[717,1340,1341],{"class":758},"npm test",[717,1343,1245],{"class":730},[717,1345,1346,1348,1351,1353,1356],{"class":719,"line":997},[717,1347,928],{"class":730},[717,1349,1350],{"class":947}," API handlers 放在 ",[717,1352,1021],{"class":730},[717,1354,1355],{"class":758},"src\u002Fapi\u002Fhandlers\u002F",[717,1357,1245],{"class":730},[205,1359,1360,823],{},[218,1361,1362],{},"使用 RFC 2119 语言标记关键规则",[686,1364,1366],{"className":874,"code":1365,"language":876,"meta":694,"style":694},"- MUST run tests before committing\n- MUST NOT modify migration files\n- NEVER force push to main\n- ALWAYS validate input with Zod\n",[208,1367,1368,1375,1382,1389],{"__ignoreMap":694},[717,1369,1370,1372],{"class":719,"line":720},[717,1371,928],{"class":730},[717,1373,1374],{"class":947}," MUST run tests before committing\n",[717,1376,1377,1379],{"class":719,"line":727},[717,1378,928],{"class":730},[717,1380,1381],{"class":947}," MUST NOT modify migration files\n",[717,1383,1384,1386],{"class":719,"line":734},[717,1385,928],{"class":730},[717,1387,1388],{"class":947}," NEVER force push to main\n",[717,1390,1391,1393],{"class":719,"line":752},[717,1392,928],{"class":730},[717,1394,1395],{"class":947}," ALWAYS validate input with Zod\n",[205,1397,1398,823],{},[218,1399,1400],{},"包含触发条件",[686,1402,1404],{"className":874,"code":1403,"language":876,"meta":694,"style":694},"# 差\n- 写测试\n\n# 好\n- 添加新 API endpoint 时，MUST 在 tests\u002Fapi\u002F 中添加对应测试\n",[208,1405,1406,1412,1419,1423,1429],{"__ignoreMap":694},[717,1407,1408,1410],{"class":719,"line":720},[717,1409,883],{"class":730},[717,1411,1290],{"class":886},[717,1413,1414,1416],{"class":719,"line":727},[717,1415,928],{"class":730},[717,1417,1418],{"class":947}," 写测试\n",[717,1420,1421],{"class":719,"line":734},[717,1422,902],{"emptyLinePlaceholder":901},[717,1424,1425,1427],{"class":719,"line":752},[717,1426,883],{"class":730},[717,1428,1322],{"class":886},[717,1430,1431,1433],{"class":719,"line":767},[717,1432,928],{"class":730},[717,1434,1435],{"class":947}," 添加新 API endpoint 时，MUST 在 tests\u002Fapi\u002F 中添加对应测试\n",[205,1437,1438,823],{},[218,1439,1440],{},"文件大小控制",[230,1442,1443,1453],{},[233,1444,1445],{},[236,1446,1447,1450],{},[239,1448,1449],{},"指标",[239,1451,1452],{},"建议",[249,1454,1455,1463,1471,1479],{},[236,1456,1457,1460],{},[254,1458,1459],{},"目标行数",[254,1461,1462],{},"少于 100 行",[236,1464,1465,1468],{},[254,1466,1467],{},"实际上限",[254,1469,1470],{},"200 行",[236,1472,1473,1476],{},[254,1474,1475],{},"理想 Token 数",[254,1477,1478],{},"少于 500 tokens",[236,1480,1481,1483],{},[254,1482,1467],{},[254,1484,1485],{},"3000-4000 tokens",[205,1487,1488],{},"研究表明，指令遵循率在约 150-200 条总指令后开始下降。Claude Code 的系统提示已占用约 50 条，因此你大约有 100-150 个指令槽位。",[494,1490],{},[195,1492,1494],{"id":1493},"_4-编写最佳实践","4. 编写最佳实践",[200,1496,1498],{"id":1497},"_41-如何写出有效的-claudemd","4.1 如何写出有效的 CLAUDE.md",[205,1500,1501,823],{},[218,1502,1503,1504,1507],{},"从 ",[208,1505,1506],{},"\u002Finit"," 开始，然后精修",[686,1509,1513],{"className":1510,"code":1511,"language":1512,"meta":694,"style":694},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","cd your-project\nclaude\n\u002Finit\n","bash",[208,1514,1515,1524,1529],{"__ignoreMap":694},[717,1516,1517,1521],{"class":719,"line":720},[717,1518,1520],{"class":1519},"s2Zo4","cd",[717,1522,1523],{"class":758}," your-project\n",[717,1525,1526],{"class":719,"line":727},[717,1527,1528],{"class":886},"claude\n",[717,1530,1531],{"class":719,"line":734},[717,1532,1533],{"class":886},"\u002Finit\n",[205,1535,1536,1538,1539,1541],{},[208,1537,1506],{}," 分析你的代码库，检测构建系统、测试框架和代码模式，生成一个入门 ",[208,1540,108],{},"。把它当作起点——自动生成的内容应该经过人工审查，删除 Claude 自己能推断的内容，添加项目特有的陷阱。",[205,1543,1544,823],{},[218,1545,1546],{},"用真实错误驱动添加",[205,1548,1549,1550,1552],{},"每次 Claude 犯错时问自己：一条 ",[208,1551,108],{}," 规则能否预防这个错误？如果可以，添加一条具体的规则。不要为假设性的错误添加规则。",[205,1554,1555,823],{},[218,1556,1557],{},"定期审查和修剪",[686,1559,1561],{"className":874,"code":1560,"language":876,"meta":694,"style":694},"# 每几周运行一次\nReview my CLAUDE.md file. Identify any instructions that are redundant,\nconflicting, or that you would follow correctly without being told.\nSuggest what to remove.\n",[208,1562,1563,1570,1575,1580],{"__ignoreMap":694},[717,1564,1565,1567],{"class":719,"line":720},[717,1566,883],{"class":730},[717,1568,1569],{"class":886},"每几周运行一次\n",[717,1571,1572],{"class":719,"line":727},[717,1573,1574],{"class":947},"Review my CLAUDE.md file. Identify any instructions that are redundant,\n",[717,1576,1577],{"class":719,"line":734},[717,1578,1579],{"class":947},"conflicting, or that you would follow correctly without being told.\n",[717,1581,1582],{"class":719,"line":752},[717,1583,1584],{"class":947},"Suggest what to remove.\n",[205,1586,1587],{},"如果 Claude 已经能在没有指令的情况下遵循某个惯例，这条规则就是死重——删除它，释放指令预算。",[200,1589,1591],{"id":1590},"_42-常见反模式","4.2 常见反模式",[205,1593,1594],{},[218,1595,1596],{},"1. 厨房水槽文件（The Kitchen Sink）",[205,1598,1599,1600,1602,1603,1606],{},"500 行的 ",[208,1601,108],{}," 试图记录一切。社区分析显示，指令遵循率从短文件的 95% 下降到长文件的 60% 以下。",[218,1604,1605],{},"修复","：无情地修剪到 Claude 无法从代码推断的规则。",[205,1608,1609],{},[218,1610,1611],{},"2. 在 CLAUDE.md 中重复 linter 规则",[205,1613,1614,1615,1617],{},"告诉 Claude \"使用单引号\"或\"用 tab 缩进\"，当你已有 ESLint\u002FPrettier\u002FRuff 配置时。这浪费了上下文 token。",[218,1616,1605],{},"：使用 pre-commit hooks，让 linter 做它的工作。",[205,1619,1620],{},[218,1621,1622],{},"3. 自动生成后从不审查",[205,1624,1625,1626,1628,1629,1631],{},"运行 ",[208,1627,1506],{}," 后从不审查输出。自动生成的文件通常包含显而易见的信息，遗漏项目特有的陷阱，可能弊大于利。",[218,1630,1605],{},"：始终手动精修。",[205,1633,1634],{},[218,1635,1636],{},"4. 幽灵指令",[205,1638,1639,1640,1643,1644,1646,1647,1649,1650,1652],{},"假设 Claude 记得前一次对话中的指令。对话指令在 ",[208,1641,1642],{},"\u002Fcompact"," 或新会话后不保留——只有 ",[208,1645,108],{}," 和 Auto Memory 持久化。",[218,1648,1605],{},"：重要的规则放入 ",[208,1651,108],{},"。",[205,1654,1655],{},[218,1656,1657],{},"5. 过时规则",[205,1659,1660,1661,1663],{},"引用已不存在的目录结构、构建系统或惯例。过时规则浪费 token 并导致错误假设。",[218,1662,1605],{},"：在重大重构后定期审查。",[205,1665,1666],{},[218,1667,1668],{},"6. 矛盾规则",[205,1670,1671,1672,1674,1675,1677,1678,1680],{},"两个 ",[208,1673,108],{}," 文件（或 ",[208,1676,108],{}," 与 rules 文件）给出冲突指令。Claude 会任意选择其一。",[218,1679,1605],{},"：定期跨所有指令文件审计冲突。",[205,1682,1683],{},[218,1684,1685],{},"7. 否定-only 约束",[205,1687,1688,1689,1692,1693,1695,1696,1698],{},"\"永远不要使用 ",[208,1690,1691],{},"--legacy-peer-deps","\" 让 Claude 在依赖冲突时束手无策。",[218,1694,1605],{},"：每条禁止都配一个方向：\"永远不要使用 ",[208,1697,1691],{},"；通过更新包到兼容版本来解决冲突。\"",[494,1700],{},[195,1702,1704],{"id":1703},"_5-模块化与进阶组织","5. 模块化与进阶组织",[200,1706,1708,1709,1711],{"id":1707},"_51-使用-import-拆分文件","5.1 使用 ",[208,1710,296],{}," 拆分文件",[205,1713,1714,1715,1717,1718,1720],{},"当项目增长时，单个 ",[208,1716,108],{}," 变得难以维护。",[208,1719,346],{}," 语法允许你拆分指令并选择性加载：",[686,1722,1724],{"className":874,"code":1723,"language":876,"meta":694,"style":694},"# CLAUDE.md (根)\n\nSee @README.md for project overview.\n\n## Commands\nnpm run test\n\n## Detailed guides\n- Architecture: @docs\u002Farchitecture.md\n- Database patterns: @docs\u002Fdatabase-conventions.md\n",[208,1725,1726,1733,1737,1742,1746,1753,1758,1762,1769,1776],{"__ignoreMap":694},[717,1727,1728,1730],{"class":719,"line":720},[717,1729,883],{"class":730},[717,1731,1732],{"class":886},"CLAUDE.md (根)\n",[717,1734,1735],{"class":719,"line":727},[717,1736,902],{"emptyLinePlaceholder":901},[717,1738,1739],{"class":719,"line":734},[717,1740,1741],{"class":947},"See @README.md for project overview.\n",[717,1743,1744],{"class":719,"line":752},[717,1745,902],{"emptyLinePlaceholder":901},[717,1747,1748,1750],{"class":719,"line":767},[717,1749,920],{"class":730},[717,1751,1752],{"class":886},"Commands\n",[717,1754,1755],{"class":719,"line":778},[717,1756,1757],{"class":947},"npm run test\n",[717,1759,1760],{"class":719,"line":784},[717,1761,902],{"emptyLinePlaceholder":901},[717,1763,1764,1766],{"class":719,"line":985},[717,1765,920],{"class":730},[717,1767,1768],{"class":886},"Detailed guides\n",[717,1770,1771,1773],{"class":719,"line":997},[717,1772,928],{"class":730},[717,1774,1775],{"class":947}," Architecture: @docs\u002Farchitecture.md\n",[717,1777,1778,1780],{"class":719,"line":1002},[717,1779,928],{"class":730},[717,1781,1782],{"class":947}," Database patterns: @docs\u002Fdatabase-conventions.md\n",[205,1784,1785,1786,1789],{},"导入解析相对于包含导入的文件，而非工作目录。支持绝对路径和家目录引用（",[208,1787,1788],{},"@~\u002F...","）。递归导入最深 5 层。",[205,1791,1792,823],{},[218,1793,1794],{},"何时使用导入 vs 内联",[825,1796,1797,1803,1809],{},[828,1798,1799,1802],{},[218,1800,1801],{},"内联","：Claude 每次会话都需要的规则（命令、关键约束）",[828,1804,1805,1808],{},[218,1806,1807],{},"导入","：Claude 仅在特定区域工作时需要的详细指南",[828,1810,1811,1814],{},[218,1812,1813],{},"子目录 CLAUDE.md","：自动加载的区域专属规则",[200,1816,1818,1819,1821],{"id":1817},"_52-使用-clauderules-组织规则","5.2 使用 ",[208,1820,292],{}," 组织规则",[205,1823,1824,1825,1827],{},"对于大型项目，将指令拆分为 ",[208,1826,292],{}," 目录中的多个文件：",[686,1829,1832],{"className":1830,"code":1831,"language":691},[689],".claude\u002F\n├── CLAUDE.md           # 主项目指令\n└── rules\u002F\n    ├── code-style.md   # 代码风格指南\n    ├── testing.md      # 测试约定\n    ├── api-design.md   # API 设计规则\n    └── frontend\u002F       # 子目录组织\n        └── react-patterns.md\n",[208,1833,1831],{"__ignoreMap":694},[205,1835,1836,1837,1840,1841,1843],{},"所有 ",[208,1838,1839],{},".md"," 文件被递归发现。无 ",[208,1842,315],{}," frontmatter 的规则在启动时无条件加载。",[205,1845,1846,1849],{},[218,1847,1848],{},"路径作用域规则","——添加 YAML frontmatter 限制规则加载时机：",[686,1851,1853],{"className":874,"code":1852,"language":876,"meta":694,"style":694},"---\npaths:\n  - \"src\u002Fapi\u002F**\u002F*.ts\"\n  - \"src\u002Fmiddleware\u002F**\u002F*.ts\"\n---\n\n# API Development Rules\n\n- All endpoints must include input validation\n- Use the standard error response format\n- Include OpenAPI documentation comments\n",[208,1854,1855,1860,1868,1881,1892,1896,1900,1907,1911,1918,1925],{"__ignoreMap":694},[717,1856,1857],{"class":719,"line":720},[717,1858,1859],{"class":730},"---\n",[717,1861,1862,1865],{"class":719,"line":727},[717,1863,315],{"class":1864},"swJcz",[717,1866,1867],{"class":730},":\n",[717,1869,1870,1873,1876,1879],{"class":719,"line":734},[717,1871,1872],{"class":730},"  -",[717,1874,1875],{"class":730}," \"",[717,1877,1878],{"class":758},"src\u002Fapi\u002F**\u002F*.ts",[717,1880,775],{"class":730},[717,1882,1883,1885,1887,1890],{"class":719,"line":752},[717,1884,1872],{"class":730},[717,1886,1875],{"class":730},[717,1888,1889],{"class":758},"src\u002Fmiddleware\u002F**\u002F*.ts",[717,1891,775],{"class":730},[717,1893,1894],{"class":719,"line":767},[717,1895,1859],{"class":730},[717,1897,1898],{"class":719,"line":778},[717,1899,902],{"emptyLinePlaceholder":901},[717,1901,1902,1904],{"class":719,"line":784},[717,1903,883],{"class":730},[717,1905,1906],{"class":886},"API Development Rules\n",[717,1908,1909],{"class":719,"line":985},[717,1910,902],{"emptyLinePlaceholder":901},[717,1912,1913,1915],{"class":719,"line":997},[717,1914,928],{"class":730},[717,1916,1917],{"class":947}," All endpoints must include input validation\n",[717,1919,1920,1922],{"class":719,"line":1002},[717,1921,928],{"class":730},[717,1923,1924],{"class":947}," Use the standard error response format\n",[717,1926,1927,1929],{"class":719,"line":1010},[717,1928,928],{"class":730},[717,1930,1931],{"class":947}," Include OpenAPI documentation comments\n",[205,1933,1934],{},"路径作用域规则在 Claude 读取匹配模式的文件时触发，而非每次工具使用都触发。支持的 glob 模式：",[230,1936,1937,1947],{},[233,1938,1939],{},[236,1940,1941,1944],{},[239,1942,1943],{},"模式",[239,1945,1946],{},"匹配",[249,1948,1949,1959,1972,1982,1992],{},[236,1950,1951,1956],{},[254,1952,1953],{},[208,1954,1955],{},"**\u002F*.ts",[254,1957,1958],{},"任何目录中的所有 TypeScript 文件",[236,1960,1961,1966],{},[254,1962,1963],{},[208,1964,1965],{},"src\u002F**\u002F*",[254,1967,1968,1971],{},[208,1969,1970],{},"src\u002F"," 目录下的所有文件",[236,1973,1974,1979],{},[254,1975,1976],{},[208,1977,1978],{},"*.md",[254,1980,1981],{},"项目根目录的 Markdown 文件",[236,1983,1984,1989],{},[254,1985,1986],{},[208,1987,1988],{},"src\u002Fcomponents\u002F*.tsx",[254,1990,1991],{},"特定目录中的 React 组件",[236,1993,1994,1999],{},[254,1995,1996],{},[208,1997,1998],{},"**\u002F*.{ts,tsx}",[254,2000,2001],{},"多种扩展名",[200,2003,2005],{"id":2004},"_53-monorepo-配置示例","5.3 Monorepo 配置示例",[686,2007,2010],{"className":2008,"code":2009,"language":691},[689],"my-monorepo\u002F\n├── CLAUDE.md              # 共享规则（lint、git、CI）\n├── .claude\u002F\n│   └── rules\u002F\n│       ├── testing.md\n│       └── security.md\n└── packages\u002F\n    ├── web\u002F\n    │   ├── CLAUDE.md      # Next.js 专属约定\n    │   └── src\u002F\n    ├── api\u002F\n    │   ├── CLAUDE.md      # Express\u002FFastify 专属约定\n    │   └── src\u002F\n    └── shared\u002F\n        ├── CLAUDE.md      # 共享库约定\n        └── src\u002F\n",[208,2011,2009],{"__ignoreMap":694},[205,2013,2014,2015,823],{},"根 ",[208,2016,108],{},[686,2018,2020],{"className":874,"code":2019,"language":876,"meta":694,"style":694},"# Monorepo\n\npnpm workspaces monorepo. Packages in `packages\u002F`.\n\n## Commands\n- `pnpm install` — install all dependencies\n- `pnpm -r build` — build all packages\n- `pnpm -r test` — test all packages\n\n## Rules\n- Changes to `packages\u002Fshared` require running tests in all consuming packages\n- Use workspace protocol for internal dependencies\n- Never install dependencies at the root unless they're dev tools\n",[208,2021,2022,2029,2033,2048,2052,2058,2072,2086,2100,2104,2111,2128,2135],{"__ignoreMap":694},[717,2023,2024,2026],{"class":719,"line":720},[717,2025,883],{"class":730},[717,2027,2028],{"class":886},"Monorepo\n",[717,2030,2031],{"class":719,"line":727},[717,2032,902],{"emptyLinePlaceholder":901},[717,2034,2035,2038,2040,2043,2045],{"class":719,"line":734},[717,2036,2037],{"class":947},"pnpm workspaces monorepo. Packages in ",[717,2039,1021],{"class":730},[717,2041,2042],{"class":758},"packages\u002F",[717,2044,1021],{"class":730},[717,2046,2047],{"class":947},".\n",[717,2049,2050],{"class":719,"line":752},[717,2051,902],{"emptyLinePlaceholder":901},[717,2053,2054,2056],{"class":719,"line":767},[717,2055,920],{"class":730},[717,2057,1752],{"class":886},[717,2059,2060,2062,2064,2067,2069],{"class":719,"line":778},[717,2061,928],{"class":730},[717,2063,1015],{"class":730},[717,2065,2066],{"class":758},"pnpm install",[717,2068,1021],{"class":730},[717,2070,2071],{"class":947}," — install all dependencies\n",[717,2073,2074,2076,2078,2081,2083],{"class":719,"line":784},[717,2075,928],{"class":730},[717,2077,1015],{"class":730},[717,2079,2080],{"class":758},"pnpm -r build",[717,2082,1021],{"class":730},[717,2084,2085],{"class":947}," — build all packages\n",[717,2087,2088,2090,2092,2095,2097],{"class":719,"line":985},[717,2089,928],{"class":730},[717,2091,1015],{"class":730},[717,2093,2094],{"class":758},"pnpm -r test",[717,2096,1021],{"class":730},[717,2098,2099],{"class":947}," — test all packages\n",[717,2101,2102],{"class":719,"line":997},[717,2103,902],{"emptyLinePlaceholder":901},[717,2105,2106,2108],{"class":719,"line":1002},[717,2107,920],{"class":730},[717,2109,2110],{"class":886},"Rules\n",[717,2112,2113,2115,2118,2120,2123,2125],{"class":719,"line":1010},[717,2114,928],{"class":730},[717,2116,2117],{"class":947}," Changes to ",[717,2119,1021],{"class":730},[717,2121,2122],{"class":758},"packages\u002Fshared",[717,2124,1021],{"class":730},[717,2126,2127],{"class":947}," require running tests in all consuming packages\n",[717,2129,2130,2132],{"class":719,"line":1027},[717,2131,928],{"class":730},[717,2133,2134],{"class":947}," Use workspace protocol for internal dependencies\n",[717,2136,2137,2139],{"class":719,"line":1042},[717,2138,928],{"class":730},[717,2140,2141],{"class":947}," Never install dependencies at the root unless they're dev tools\n",[205,2143,2144,2145,2148,2149,2151,2152,2154],{},"当 Claude 在 ",[208,2146,2147],{},"packages\u002Fweb\u002F"," 中工作时，它同时加载根 ",[208,2150,108],{}," 和包级 ",[208,2153,108],{},"。根规则处处适用；包规则仅在相关上下文中适用。",[494,2156],{},[195,2158,2160],{"id":2159},"_6-团队协作与知识沉淀","6. 团队协作与知识沉淀",[200,2162,2164],{"id":2163},"_61-版本控制策略","6.1 版本控制策略",[205,2166,2167,2168,655,2170,2172],{},"项目级 ",[208,2169,108],{},[208,2171,292],{}," 应该提交到 Git。这是团队共享的文档，随着团队成员从自己的错误中贡献规则而变得更好。",[205,2174,2175,2176,2178],{},"将 ",[208,2177,108],{}," 的变更视为代码 PR 一样审查：质疑每条新行是否值得它的位置。",[205,2180,2181,823],{},[218,2182,2183],{},"应提交到 Git 的文件",[825,2185,2186,2191,2196,2201,2206],{},[828,2187,2188,2190],{},[208,2189,108],{},"（项目根）",[828,2192,2193],{},[208,2194,2195],{},".claude\u002FCLAUDE.md",[828,2197,2198],{},[208,2199,2200],{},".claude\u002Frules\u002F*.md",[828,2202,2203],{},[208,2204,2205],{},".claude\u002Fcommands\u002F*.md",[828,2207,2208],{},[208,2209,2210],{},".claude\u002Fagents\u002F*.md",[205,2212,2213,2216,2217,2220],{},[218,2214,2215],{},"不应提交的文件","（加入 ",[208,2218,2219],{},".gitignore","）：",[825,2222,2223,2227,2232],{},[828,2224,2225],{},[208,2226,362],{},[828,2228,2229],{},[208,2230,2231],{},".claude\u002Fsettings.local.json",[828,2233,2234],{},[208,2235,2236],{},".claude\u002Fmemory\u002F",[686,2238,2242],{"className":2239,"code":2240,"language":2241,"meta":694,"style":694},"language-gitignore shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","# .gitignore\nCLAUDE.local.md\n.claude\u002Fsettings.local.json\n.claude\u002Fmemory\u002F\n","gitignore",[208,2243,2244,2249,2254,2259],{"__ignoreMap":694},[717,2245,2246],{"class":719,"line":720},[717,2247,2248],{},"# .gitignore\n",[717,2250,2251],{"class":719,"line":727},[717,2252,2253],{},"CLAUDE.local.md\n",[717,2255,2256],{"class":719,"line":734},[717,2257,2258],{},".claude\u002Fsettings.local.json\n",[717,2260,2261],{"class":719,"line":752},[717,2262,2263],{},".claude\u002Fmemory\u002F\n",[200,2265,2267],{"id":2266},"_62-审查流程","6.2 审查流程",[205,2269,2270,2271,2273],{},"为 ",[208,2272,108],{}," 修改建立审查流程：",[2275,2276,2277,2283,2292,2298],"ol",{},[828,2278,2279,2282],{},[218,2280,2281],{},"变更触发","：当 Claude 重复犯错或团队做出重大架构决策时",[828,2284,2285,2288,2289,2291],{},[218,2286,2287],{},"PR 审查","：像审查关键配置文件一样审查 ",[208,2290,108],{}," 修改",[828,2293,2294,2297],{},[218,2295,2296],{},"定期审计","：每月审查一次，删除过时规则",[828,2299,2300,2303,2304],{},[218,2301,2302],{},"团队共识","：决定哪些规则进入共享配置，哪些属于个人 ",[208,2305,362],{},[200,2307,2309],{"id":2308},"_63-跨工具同步","6.3 跨工具同步",[205,2311,2312,2313,2315],{},"如果团队使用多种 AI 工具，维护一个跨工具的 ",[208,2314,396],{}," 作为单一事实来源：",[686,2317,2319],{"className":874,"code":2318,"language":876,"meta":694,"style":694},"# CLAUDE.md\n@AGENTS.md\n\n## Claude-specific additions\n- Use the MCP server at localhost:3000 for database queries\n- Run \u002Fcompact after long refactoring sessions\n",[208,2320,2321,2328,2333,2337,2344,2351],{"__ignoreMap":694},[717,2322,2323,2325],{"class":719,"line":720},[717,2324,883],{"class":730},[717,2326,2327],{"class":886},"CLAUDE.md\n",[717,2329,2330],{"class":719,"line":727},[717,2331,2332],{"class":947},"@AGENTS.md\n",[717,2334,2335],{"class":719,"line":734},[717,2336,902],{"emptyLinePlaceholder":901},[717,2338,2339,2341],{"class":719,"line":752},[717,2340,920],{"class":730},[717,2342,2343],{"class":886},"Claude-specific additions\n",[717,2345,2346,2348],{"class":719,"line":767},[717,2347,928],{"class":730},[717,2349,2350],{"class":947}," Use the MCP server at localhost:3000 for database queries\n",[717,2352,2353,2355],{"class":719,"line":778},[717,2354,928],{"class":730},[717,2356,2357],{"class":947}," Run \u002Fcompact after long refactoring sessions\n",[205,2359,2360,2362],{},[208,2361,396],{}," 被至少 7 个主要 AI 编码工具支持（截至 2026 年初），是目前最接近跨工具标准的格式。",[494,2364],{},[195,2366,2368],{"id":2367},"_7-auto-memory-自动记忆系统","7. Auto Memory 自动记忆系统",[200,2370,2372],{"id":2371},"_71-工作原理","7.1 工作原理",[205,2374,2375],{},"Auto Memory 让 Claude 在会话中自动积累知识。Claude 根据信息对未来对话的有用性来决定是否保存。",[205,2377,2378,2379],{},"存储位置：",[208,2380,2381],{},"~\u002F.claude\u002Fprojects\u002F\u003Cproject>\u002Fmemory\u002F",[686,2383,2386],{"className":2384,"code":2385,"language":691},[689],"~\u002F.claude\u002Fprojects\u002F\u003Cproject>\u002Fmemory\u002F\n├── MEMORY.md          # 主索引，每次会话加载\n├── debugging.md       # 调试模式笔记\n├── api-conventions.md # API 设计决策\n└── ...                # Claude 创建的其他主题文件\n",[208,2387,2385],{"__ignoreMap":694},[205,2389,2390,2393],{},[208,2391,2392],{},"MEMORY.md"," 的前 200 行或前 25KB（以先到者为准）在每次会话开始时加载。超出此阈值的内容不会在会话启动时加载。主题文件按需读取。",[200,2395,2397],{"id":2396},"_72-启用与管理","7.2 启用与管理",[205,2399,2400],{},"Auto Memory 默认开启。通过以下方式切换：",[686,2402,2404],{"className":1510,"code":2403,"language":1512,"meta":694,"style":694},"# 在会话中\n\u002Fmemory\n\n# 或设置\n{\n  \"autoMemoryEnabled\": false\n}\n\n# 或环境变量\nCLAUDE_CODE_DISABLE_AUTO_MEMORY=1\n",[208,2405,2406,2411,2416,2420,2425,2429,2439,2443,2447,2452],{"__ignoreMap":694},[717,2407,2408],{"class":719,"line":720},[717,2409,2410],{"class":723},"# 在会话中\n",[717,2412,2413],{"class":719,"line":727},[717,2414,2415],{"class":886},"\u002Fmemory\n",[717,2417,2418],{"class":719,"line":734},[717,2419,902],{"emptyLinePlaceholder":901},[717,2421,2422],{"class":719,"line":752},[717,2423,2424],{"class":723},"# 或设置\n",[717,2426,2427],{"class":719,"line":767},[717,2428,731],{"class":730},[717,2430,2431,2434,2436],{"class":719,"line":778},[717,2432,2433],{"class":886},"  \"autoMemoryEnabled\"",[717,2435,746],{"class":1519},[717,2437,2438],{"class":730}," false\n",[717,2440,2441],{"class":719,"line":784},[717,2442,787],{"class":730},[717,2444,2445],{"class":719,"line":985},[717,2446,902],{"emptyLinePlaceholder":901},[717,2448,2449],{"class":719,"line":997},[717,2450,2451],{"class":723},"# 或环境变量\n",[717,2453,2454,2457,2460],{"class":719,"line":1002},[717,2455,2456],{"class":947},"CLAUDE_CODE_DISABLE_AUTO_MEMORY",[717,2458,2459],{"class":730},"=",[717,2461,2462],{"class":758},"1\n",[205,2464,2465],{},"显式保存到 Auto Memory：",[686,2467,2470],{"className":2468,"code":2469,"language":691},[689],"> Remember that we always use pnpm and never npm\n",[208,2471,2469],{"__ignoreMap":694},[205,2473,2474],{},"显式保存到 CLAUDE.md：",[686,2476,2479],{"className":2477,"code":2478,"language":691},[689],"> Add this to CLAUDE.md: always use named exports\n",[208,2480,2478],{"__ignoreMap":694},[200,2482,2484],{"id":2483},"_73-与-claudemd-的分工","7.3 与 CLAUDE.md 的分工",[230,2486,2487,2497],{},[233,2488,2489],{},[236,2490,2491,2494],{},[239,2492,2493],{},"使用 Auto Memory",[239,2495,2496],{},"使用 CLAUDE.md",[249,2498,2499,2507,2515,2522],{},[236,2500,2501,2504],{},[254,2502,2503],{},"个人偏好和习惯",[254,2505,2506],{},"团队共享的标准",[236,2508,2509,2512],{},[254,2510,2511],{},"构建怪癖和调试洞察",[254,2513,2514],{},"编码标准和架构决策",[236,2516,2517,2519],{},[254,2518,867],{},[254,2520,2521],{},"相对稳定的工作流",[236,2523,2524,2527],{},[254,2525,2526],{},"Claude 自己发现的模式",[254,2528,2529],{},"你明确想要执行的规则",[494,2531],{},[195,2533,2535],{"id":2534},"_8-进阶技巧","8. 进阶技巧",[200,2537,2539],{"id":2538},"_81-动态更新与条件规则","8.1 动态更新与条件规则",[205,2541,2542,823],{},[218,2543,2544],{},"在 CLAUDE.md 中嵌入自我改进指令",[686,2546,2548],{"className":874,"code":2547,"language":876,"meta":694,"style":694},"## Self-Improvement\n\nWhen you encounter a bad assumption during a session, suggest a CLAUDE.md correction.\n",[208,2549,2550,2557,2561],{"__ignoreMap":694},[717,2551,2552,2554],{"class":719,"line":720},[717,2553,920],{"class":730},[717,2555,2556],{"class":886},"Self-Improvement\n",[717,2558,2559],{"class":719,"line":727},[717,2560,902],{"emptyLinePlaceholder":901},[717,2562,2563],{"class":719,"line":734},[717,2564,2565],{"class":947},"When you encounter a bad assumption during a session, suggest a CLAUDE.md correction.\n",[205,2567,2568],{},"这创建一个反馈循环，文件通过正常使用而改进。",[205,2570,2571,2574],{},[218,2572,2573],{},"使用 HTML 注释添加维护者笔记","（不消耗 token）：",[686,2576,2578],{"className":874,"code":2577,"language":876,"meta":694,"style":694},"\u003C!-- maintainer: 这条规则在 v3 迁移后需要更新 -->\n- Use the new API client for all HTTP calls\n",[208,2579,2580,2585],{"__ignoreMap":694},[717,2581,2582],{"class":719,"line":720},[717,2583,2584],{"class":723},"\u003C!-- maintainer: 这条规则在 v3 迁移后需要更新 -->\n",[717,2586,2587,2589],{"class":719,"line":727},[717,2588,928],{"class":730},[717,2590,2591],{"class":947}," Use the new API client for all HTTP calls\n",[205,2593,2594],{},"块级 HTML 注释在注入 Claude 上下文前被剥离。代码块内的注释被保留。",[200,2596,2598],{"id":2597},"_82-多项目共享配置","8.2 多项目共享配置",[205,2600,2601],{},"使用符号链接维护跨项目共享的规则集：",[686,2603,2605],{"className":1510,"code":2604,"language":1512,"meta":694,"style":694},"# 维护一套共享规则\nln -s ~\u002Fshared-claude-rules .claude\u002Frules\u002Fshared\nln -s ~\u002Fcompany-standards\u002Fsecurity.md .claude\u002Frules\u002Fsecurity.md\n",[208,2606,2607,2612,2626],{"__ignoreMap":694},[717,2608,2609],{"class":719,"line":720},[717,2610,2611],{"class":723},"# 维护一套共享规则\n",[717,2613,2614,2617,2620,2623],{"class":719,"line":727},[717,2615,2616],{"class":886},"ln",[717,2618,2619],{"class":758}," -s",[717,2621,2622],{"class":758}," ~\u002Fshared-claude-rules",[717,2624,2625],{"class":758}," .claude\u002Frules\u002Fshared\n",[717,2627,2628,2630,2632,2635],{"class":719,"line":734},[717,2629,2616],{"class":886},[717,2631,2619],{"class":758},[717,2633,2634],{"class":758}," ~\u002Fcompany-standards\u002Fsecurity.md",[717,2636,2637],{"class":758}," .claude\u002Frules\u002Fsecurity.md\n",[205,2639,2640,2642],{},[208,2641,292],{}," 支持符号链接，循环符号链接会被检测并优雅处理。",[200,2644,2646],{"id":2645},"_83-使用-hooks-替代部分规则","8.3 使用 Hooks 替代部分规则",[205,2648,2649],{},"对于确定性操作（如格式化），使用 hooks 而非 CLAUDE.md 指令：",[686,2651,2653],{"className":711,"code":2652,"language":713,"meta":694,"style":694},"\u002F\u002F .claude\u002Fsettings.json\n{\n  \"hooks\": {\n    \"PostToolUse\": [\n      {\n        \"matcher\": \"Edit|Write\",\n        \"command\": \"npx prettier --write \\\"$TOOL_INPUT_FILE_PATH\\\"\"\n      }\n    ]\n  }\n}\n",[208,2654,2655,2660,2664,2678,2691,2696,2718,2744,2749,2754,2759],{"__ignoreMap":694},[717,2656,2657],{"class":719,"line":720},[717,2658,2659],{"class":723},"\u002F\u002F .claude\u002Fsettings.json\n",[717,2661,2662],{"class":719,"line":727},[717,2663,731],{"class":730},[717,2665,2666,2668,2671,2673,2675],{"class":719,"line":734},[717,2667,737],{"class":730},[717,2669,2670],{"class":740},"hooks",[717,2672,743],{"class":730},[717,2674,746],{"class":730},[717,2676,2677],{"class":730}," {\n",[717,2679,2680,2682,2685,2687,2689],{"class":719,"line":752},[717,2681,755],{"class":730},[717,2683,2684],{"class":886},"PostToolUse",[717,2686,743],{"class":730},[717,2688,746],{"class":730},[717,2690,749],{"class":730},[717,2692,2693],{"class":719,"line":767},[717,2694,2695],{"class":730},"      {\n",[717,2697,2698,2701,2705,2707,2709,2711,2714,2716],{"class":719,"line":778},[717,2699,2700],{"class":730},"        \"",[717,2702,2704],{"class":2703},"sbssI","matcher",[717,2706,743],{"class":730},[717,2708,746],{"class":730},[717,2710,1875],{"class":730},[717,2712,2713],{"class":758},"Edit|Write",[717,2715,743],{"class":730},[717,2717,764],{"class":730},[717,2719,2720,2722,2725,2727,2729,2731,2734,2737,2740,2742],{"class":719,"line":784},[717,2721,2700],{"class":730},[717,2723,2724],{"class":2703},"command",[717,2726,743],{"class":730},[717,2728,746],{"class":730},[717,2730,1875],{"class":730},[717,2732,2733],{"class":758},"npx prettier --write ",[717,2735,2736],{"class":947},"\\\"",[717,2738,2739],{"class":758},"$TOOL_INPUT_FILE_PATH",[717,2741,2736],{"class":947},[717,2743,775],{"class":730},[717,2745,2746],{"class":719,"line":985},[717,2747,2748],{"class":730},"      }\n",[717,2750,2751],{"class":719,"line":997},[717,2752,2753],{"class":730},"    ]\n",[717,2755,2756],{"class":719,"line":1002},[717,2757,2758],{"class":730},"  }\n",[717,2760,2761],{"class":719,"line":1010},[717,2762,787],{"class":730},[205,2764,2765],{},"Hooks 是确定性的；CLAUDE.md 指令是概率性的。让合适的工具做合适的工作。",[200,2767,2769,2770,2772],{"id":2768},"_84-compact-后的持久化","8.4 ",[208,2771,1642],{}," 后的持久化",[205,2774,2775,2776,2778,2779,2781,2782,2784],{},"项目根 ",[208,2777,108],{}," 在 ",[208,2780,1642],{}," 后存活：Claude 从磁盘重新读取并重新注入。子目录 ",[208,2783,108],{}," 不会自动重新注入；它们在 Claude 下次读取该子目录文件时重新加载。",[205,2786,2787,2788,2790,2791,2793],{},"如果指令在 ",[208,2789,1642],{}," 后消失，它要么是仅在对话中给出的，要么存在于尚未重新加载的嵌套 ",[208,2792,108],{}," 中。",[494,2795],{},[195,2797,2799],{"id":2798},"_9-完整示例模板","9. 完整示例模板",[200,2801,2803],{"id":2802},"_91-小型项目模板-60-行","9.1 小型项目模板（\u003C 60 行）",[686,2805,2807],{"className":874,"code":2806,"language":876,"meta":694,"style":694},"# Project: invoice-api\n\nFastAPI REST API for invoice management. Python 3.12, PostgreSQL 16.\n\n## Commands\nuv run pytest tests\u002F -x                    # run tests (stop on first failure)\nuv run pytest tests\u002Fintegration\u002F -x -k db  # integration tests (needs local PG)\nuv run ruff check --fix .                  # lint and auto-fix\nuv run mypy src\u002F                           # type check\n\n## Architecture\n- src\u002Fapi\u002F       -> route handlers (one file per resource)\n- src\u002Fmodels\u002F    -> SQLAlchemy models (alembic for migrations)\n- src\u002Fservices\u002F  -> business logic (handlers call services, never query DB directly)\n- src\u002Fcore\u002F      -> config, security, dependencies\n\n## Rules\n- MUST run `uv run pytest tests\u002F -x` and confirm all pass before committing\n- MUST NOT modify migration files -- generate new ones with `alembic revision --autogenerate`\n- All endpoints require authentication except those in src\u002Fapi\u002Fpublic.py\n- Use `Annotated[T, Depends(...)]` for dependency injection, not default arguments\n\n## Gotchas\n- The `invoice_number` field is generated server-side. Never accept it from client input.\n- PostgreSQL BIGINT IDs -- do not use `int` in Python models with upper bound check\n",[208,2808,2809,2816,2820,2825,2829,2835,2840,2845,2850,2855,2859,2866,2873,2880,2887,2894,2898,2904,2921,2935,2942,2959,2963,2970,2987],{"__ignoreMap":694},[717,2810,2811,2813],{"class":719,"line":720},[717,2812,883],{"class":730},[717,2814,2815],{"class":886},"Project: invoice-api\n",[717,2817,2818],{"class":719,"line":727},[717,2819,902],{"emptyLinePlaceholder":901},[717,2821,2822],{"class":719,"line":734},[717,2823,2824],{"class":947},"FastAPI REST API for invoice management. Python 3.12, PostgreSQL 16.\n",[717,2826,2827],{"class":719,"line":752},[717,2828,902],{"emptyLinePlaceholder":901},[717,2830,2831,2833],{"class":719,"line":767},[717,2832,920],{"class":730},[717,2834,1752],{"class":886},[717,2836,2837],{"class":719,"line":778},[717,2838,2839],{"class":947},"uv run pytest tests\u002F -x                    # run tests (stop on first failure)\n",[717,2841,2842],{"class":719,"line":784},[717,2843,2844],{"class":947},"uv run pytest tests\u002Fintegration\u002F -x -k db  # integration tests (needs local PG)\n",[717,2846,2847],{"class":719,"line":985},[717,2848,2849],{"class":947},"uv run ruff check --fix .                  # lint and auto-fix\n",[717,2851,2852],{"class":719,"line":997},[717,2853,2854],{"class":947},"uv run mypy src\u002F                           # type check\n",[717,2856,2857],{"class":719,"line":1002},[717,2858,902],{"emptyLinePlaceholder":901},[717,2860,2861,2863],{"class":719,"line":1010},[717,2862,920],{"class":730},[717,2864,2865],{"class":886},"Architecture\n",[717,2867,2868,2870],{"class":719,"line":1027},[717,2869,928],{"class":730},[717,2871,2872],{"class":947}," src\u002Fapi\u002F       -> route handlers (one file per resource)\n",[717,2874,2875,2877],{"class":719,"line":1042},[717,2876,928],{"class":730},[717,2878,2879],{"class":947}," src\u002Fmodels\u002F    -> SQLAlchemy models (alembic for migrations)\n",[717,2881,2882,2884],{"class":719,"line":1057},[717,2883,928],{"class":730},[717,2885,2886],{"class":947}," src\u002Fservices\u002F  -> business logic (handlers call services, never query DB directly)\n",[717,2888,2889,2891],{"class":719,"line":1062},[717,2890,928],{"class":730},[717,2892,2893],{"class":947}," src\u002Fcore\u002F      -> config, security, dependencies\n",[717,2895,2896],{"class":719,"line":1070},[717,2897,902],{"emptyLinePlaceholder":901},[717,2899,2900,2902],{"class":719,"line":1085},[717,2901,920],{"class":730},[717,2903,2110],{"class":886},[717,2905,2906,2908,2911,2913,2916,2918],{"class":719,"line":1100},[717,2907,928],{"class":730},[717,2909,2910],{"class":947}," MUST run ",[717,2912,1021],{"class":730},[717,2914,2915],{"class":758},"uv run pytest tests\u002F -x",[717,2917,1021],{"class":730},[717,2919,2920],{"class":947}," and confirm all pass before committing\n",[717,2922,2923,2925,2928,2930,2933],{"class":719,"line":1115},[717,2924,928],{"class":730},[717,2926,2927],{"class":947}," MUST NOT modify migration files -- generate new ones with ",[717,2929,1021],{"class":730},[717,2931,2932],{"class":758},"alembic revision --autogenerate",[717,2934,1245],{"class":730},[717,2936,2937,2939],{"class":719,"line":1120},[717,2938,928],{"class":730},[717,2940,2941],{"class":947}," All endpoints require authentication except those in src\u002Fapi\u002Fpublic.py\n",[717,2943,2944,2946,2949,2951,2954,2956],{"class":719,"line":1128},[717,2945,928],{"class":730},[717,2947,2948],{"class":947}," Use ",[717,2950,1021],{"class":730},[717,2952,2953],{"class":758},"Annotated[T, Depends(...)]",[717,2955,1021],{"class":730},[717,2957,2958],{"class":947}," for dependency injection, not default arguments\n",[717,2960,2961],{"class":719,"line":1136},[717,2962,902],{"emptyLinePlaceholder":901},[717,2964,2965,2967],{"class":719,"line":1143},[717,2966,920],{"class":730},[717,2968,2969],{"class":886},"Gotchas\n",[717,2971,2972,2974,2977,2979,2982,2984],{"class":719,"line":1148},[717,2973,928],{"class":730},[717,2975,2976],{"class":947}," The ",[717,2978,1021],{"class":730},[717,2980,2981],{"class":758},"invoice_number",[717,2983,1021],{"class":730},[717,2985,2986],{"class":947}," field is generated server-side. Never accept it from client input.\n",[717,2988,2989,2991,2994,2996,2999,3001],{"class":719,"line":1156},[717,2990,928],{"class":730},[717,2992,2993],{"class":947}," PostgreSQL BIGINT IDs -- do not use ",[717,2995,1021],{"class":730},[717,2997,2998],{"class":758},"int",[717,3000,1021],{"class":730},[717,3002,3003],{"class":947}," in Python models with upper bound check\n",[200,3005,3007],{"id":3006},"_92-中型团队项目模板","9.2 中型团队项目模板",[686,3009,3011],{"className":874,"code":3010,"language":876,"meta":694,"style":694},"# TaskFlow SaaS\n\nMulti-tenant project management SaaS. Users: SMBs (5-200 employees).\nBilling: per-seat subscription via Stripe. Data isolation: separate schema per tenant.\n\n## Tech Stack\nFrontend: Next.js 14 (App Router only), React 18, Tailwind CSS + shadcn\u002Fui, Zustand\nBackend: Next.js API Routes, Prisma ORM + PostgreSQL (Neon), NextAuth.js v5\n\n## Architecture Rules\n- All API routes MUST validate input with Zod schemas\n- Always check tenant ownership before DB operations\n- Use Server Actions for form mutations, not client-side fetch\n- Data fetching happens in Server Components, never in useEffect\n\n## Security Constraints\n- Never expose tenant IDs in client-side code or URLs\n- All user input must be sanitized before database insertion\n- Secrets must use environment variables -- never hardcoded\n\n## Coding Conventions\n- TypeScript strict mode -- no `any` types allowed\n- File names: kebab-case. Component names: PascalCase\n- Custom hooks prefixed with \"use\" (e.g., useTaskList)\n- Error handling: always use try\u002Fcatch in async functions\n\n## Do Not\n- Do not use the Pages Router or getServerSideProps\n- Do not use Redux -- we use Zustand\n- Do not write raw SQL -- always use Prisma\n- Do not create client components unnecessarily\n\n## Testing\n- Unit tests: Vitest. Integration tests: Playwright\n- All utility functions must have tests before merging\n- Test files live next to the file they test (*.test.ts)\n\n## Commands\n- `pnpm dev` -- start dev server (port 3000)\n- `pnpm test` -- run Vitest\n- `pnpm build` -- production build\n",[208,3012,3013,3020,3024,3029,3034,3038,3044,3049,3054,3058,3065,3072,3079,3086,3093,3097,3104,3111,3118,3125,3129,3136,3153,3160,3167,3174,3178,3184,3191,3198,3205,3212,3216,3223,3230,3237,3244,3249,3256,3271,3286],{"__ignoreMap":694},[717,3014,3015,3017],{"class":719,"line":720},[717,3016,883],{"class":730},[717,3018,3019],{"class":886},"TaskFlow SaaS\n",[717,3021,3022],{"class":719,"line":727},[717,3023,902],{"emptyLinePlaceholder":901},[717,3025,3026],{"class":719,"line":734},[717,3027,3028],{"class":947},"Multi-tenant project management SaaS. Users: SMBs (5-200 employees).\n",[717,3030,3031],{"class":719,"line":752},[717,3032,3033],{"class":947},"Billing: per-seat subscription via Stripe. Data isolation: separate schema per tenant.\n",[717,3035,3036],{"class":719,"line":767},[717,3037,902],{"emptyLinePlaceholder":901},[717,3039,3040,3042],{"class":719,"line":778},[717,3041,920],{"class":730},[717,3043,923],{"class":886},[717,3045,3046],{"class":719,"line":784},[717,3047,3048],{"class":947},"Frontend: Next.js 14 (App Router only), React 18, Tailwind CSS + shadcn\u002Fui, Zustand\n",[717,3050,3051],{"class":719,"line":985},[717,3052,3053],{"class":947},"Backend: Next.js API Routes, Prisma ORM + PostgreSQL (Neon), NextAuth.js v5\n",[717,3055,3056],{"class":719,"line":997},[717,3057,902],{"emptyLinePlaceholder":901},[717,3059,3060,3062],{"class":719,"line":1002},[717,3061,920],{"class":730},[717,3063,3064],{"class":886},"Architecture Rules\n",[717,3066,3067,3069],{"class":719,"line":1010},[717,3068,928],{"class":730},[717,3070,3071],{"class":947}," All API routes MUST validate input with Zod schemas\n",[717,3073,3074,3076],{"class":719,"line":1027},[717,3075,928],{"class":730},[717,3077,3078],{"class":947}," Always check tenant ownership before DB operations\n",[717,3080,3081,3083],{"class":719,"line":1042},[717,3082,928],{"class":730},[717,3084,3085],{"class":947}," Use Server Actions for form mutations, not client-side fetch\n",[717,3087,3088,3090],{"class":719,"line":1057},[717,3089,928],{"class":730},[717,3091,3092],{"class":947}," Data fetching happens in Server Components, never in useEffect\n",[717,3094,3095],{"class":719,"line":1062},[717,3096,902],{"emptyLinePlaceholder":901},[717,3098,3099,3101],{"class":719,"line":1070},[717,3100,920],{"class":730},[717,3102,3103],{"class":886},"Security Constraints\n",[717,3105,3106,3108],{"class":719,"line":1085},[717,3107,928],{"class":730},[717,3109,3110],{"class":947}," Never expose tenant IDs in client-side code or URLs\n",[717,3112,3113,3115],{"class":719,"line":1100},[717,3114,928],{"class":730},[717,3116,3117],{"class":947}," All user input must be sanitized before database insertion\n",[717,3119,3120,3122],{"class":719,"line":1115},[717,3121,928],{"class":730},[717,3123,3124],{"class":947}," Secrets must use environment variables -- never hardcoded\n",[717,3126,3127],{"class":719,"line":1120},[717,3128,902],{"emptyLinePlaceholder":901},[717,3130,3131,3133],{"class":719,"line":1128},[717,3132,920],{"class":730},[717,3134,3135],{"class":886},"Coding Conventions\n",[717,3137,3138,3140,3143,3145,3148,3150],{"class":719,"line":1136},[717,3139,928],{"class":730},[717,3141,3142],{"class":947}," TypeScript strict mode -- no ",[717,3144,1021],{"class":730},[717,3146,3147],{"class":758},"any",[717,3149,1021],{"class":730},[717,3151,3152],{"class":947}," types allowed\n",[717,3154,3155,3157],{"class":719,"line":1143},[717,3156,928],{"class":730},[717,3158,3159],{"class":947}," File names: kebab-case. Component names: PascalCase\n",[717,3161,3162,3164],{"class":719,"line":1148},[717,3163,928],{"class":730},[717,3165,3166],{"class":947}," Custom hooks prefixed with \"use\" (e.g., useTaskList)\n",[717,3168,3169,3171],{"class":719,"line":1156},[717,3170,928],{"class":730},[717,3172,3173],{"class":947}," Error handling: always use try\u002Fcatch in async functions\n",[717,3175,3176],{"class":719,"line":1168},[717,3177,902],{"emptyLinePlaceholder":901},[717,3179,3180,3182],{"class":719,"line":1179},[717,3181,920],{"class":730},[717,3183,1189],{"class":886},[717,3185,3186,3188],{"class":719,"line":1184},[717,3187,928],{"class":730},[717,3189,3190],{"class":947}," Do not use the Pages Router or getServerSideProps\n",[717,3192,3193,3195],{"class":719,"line":1192},[717,3194,928],{"class":730},[717,3196,3197],{"class":947}," Do not use Redux -- we use Zustand\n",[717,3199,3200,3202],{"class":719,"line":1204},[717,3201,928],{"class":730},[717,3203,3204],{"class":947}," Do not write raw SQL -- always use Prisma\n",[717,3206,3207,3209],{"class":719,"line":1215},[717,3208,928],{"class":730},[717,3210,3211],{"class":947}," Do not create client components unnecessarily\n",[717,3213,3214],{"class":719,"line":1220},[717,3215,902],{"emptyLinePlaceholder":901},[717,3217,3218,3220],{"class":719,"line":1228},[717,3219,920],{"class":730},[717,3221,3222],{"class":886},"Testing\n",[717,3224,3225,3227],{"class":719,"line":1234},[717,3226,928],{"class":730},[717,3228,3229],{"class":947}," Unit tests: Vitest. Integration tests: Playwright\n",[717,3231,3232,3234],{"class":719,"line":1248},[717,3233,928],{"class":730},[717,3235,3236],{"class":947}," All utility functions must have tests before merging\n",[717,3238,3239,3241],{"class":719,"line":1260},[717,3240,928],{"class":730},[717,3242,3243],{"class":947}," Test files live next to the file they test (*.test.ts)\n",[717,3245,3247],{"class":719,"line":3246},37,[717,3248,902],{"emptyLinePlaceholder":901},[717,3250,3252,3254],{"class":719,"line":3251},38,[717,3253,920],{"class":730},[717,3255,1752],{"class":886},[717,3257,3259,3261,3263,3266,3268],{"class":719,"line":3258},39,[717,3260,928],{"class":730},[717,3262,1015],{"class":730},[717,3264,3265],{"class":758},"pnpm dev",[717,3267,1021],{"class":730},[717,3269,3270],{"class":947}," -- start dev server (port 3000)\n",[717,3272,3274,3276,3278,3281,3283],{"class":719,"line":3273},40,[717,3275,928],{"class":730},[717,3277,1015],{"class":730},[717,3279,3280],{"class":758},"pnpm test",[717,3282,1021],{"class":730},[717,3284,3285],{"class":947}," -- run Vitest\n",[717,3287,3289,3291,3293,3296,3298],{"class":719,"line":3288},41,[717,3290,928],{"class":730},[717,3292,1015],{"class":730},[717,3294,3295],{"class":758},"pnpm build",[717,3297,1021],{"class":730},[717,3299,3300],{"class":947}," -- production build\n",[200,3302,3304],{"id":3303},"_93-大型-monorepo-模板","9.3 大型 Monorepo 模板",[686,3306,3308],{"className":874,"code":3307,"language":876,"meta":694,"style":694},"# Monorepo: DataPulse Platform\n\npnpm workspaces monorepo. Packages in `packages\u002F`.\n\n## Global Commands\n- `pnpm install` -- install all dependencies\n- `pnpm -r build` -- build all packages\n- `pnpm -r test` -- test all packages\n\n## Global Rules\n- Changes to `packages\u002Fshared` require running tests in all consuming packages\n- Use workspace protocol for internal dependencies: `\"@company\u002Fshared\": \"workspace:*\"`\n- Never install dependencies at the root unless they're dev tools\n\n## Verification\nAfter changes, always run:\n1. `pnpm lint`\n2. `pnpm -r test`\n3. `pnpm -r build`\n\n@packages\u002Fweb\u002FCLAUDE.md\n@packages\u002Fapi\u002FCLAUDE.md\n@packages\u002Fshared\u002FCLAUDE.md\n",[208,3309,3310,3317,3321,3333,3337,3344,3357,3370,3383,3387,3394,3408,3422,3428,3432,3438,3442,3453,3463,3473,3477,3482,3487],{"__ignoreMap":694},[717,3311,3312,3314],{"class":719,"line":720},[717,3313,883],{"class":730},[717,3315,3316],{"class":886},"Monorepo: DataPulse Platform\n",[717,3318,3319],{"class":719,"line":727},[717,3320,902],{"emptyLinePlaceholder":901},[717,3322,3323,3325,3327,3329,3331],{"class":719,"line":734},[717,3324,2037],{"class":947},[717,3326,1021],{"class":730},[717,3328,2042],{"class":758},[717,3330,1021],{"class":730},[717,3332,2047],{"class":947},[717,3334,3335],{"class":719,"line":752},[717,3336,902],{"emptyLinePlaceholder":901},[717,3338,3339,3341],{"class":719,"line":767},[717,3340,920],{"class":730},[717,3342,3343],{"class":886},"Global Commands\n",[717,3345,3346,3348,3350,3352,3354],{"class":719,"line":778},[717,3347,928],{"class":730},[717,3349,1015],{"class":730},[717,3351,2066],{"class":758},[717,3353,1021],{"class":730},[717,3355,3356],{"class":947}," -- install all dependencies\n",[717,3358,3359,3361,3363,3365,3367],{"class":719,"line":784},[717,3360,928],{"class":730},[717,3362,1015],{"class":730},[717,3364,2080],{"class":758},[717,3366,1021],{"class":730},[717,3368,3369],{"class":947}," -- build all packages\n",[717,3371,3372,3374,3376,3378,3380],{"class":719,"line":985},[717,3373,928],{"class":730},[717,3375,1015],{"class":730},[717,3377,2094],{"class":758},[717,3379,1021],{"class":730},[717,3381,3382],{"class":947}," -- test all packages\n",[717,3384,3385],{"class":719,"line":997},[717,3386,902],{"emptyLinePlaceholder":901},[717,3388,3389,3391],{"class":719,"line":1002},[717,3390,920],{"class":730},[717,3392,3393],{"class":886},"Global Rules\n",[717,3395,3396,3398,3400,3402,3404,3406],{"class":719,"line":1010},[717,3397,928],{"class":730},[717,3399,2117],{"class":947},[717,3401,1021],{"class":730},[717,3403,2122],{"class":758},[717,3405,1021],{"class":730},[717,3407,2127],{"class":947},[717,3409,3410,3412,3415,3417,3420],{"class":719,"line":1027},[717,3411,928],{"class":730},[717,3413,3414],{"class":947}," Use workspace protocol for internal dependencies: ",[717,3416,1021],{"class":730},[717,3418,3419],{"class":758},"\"@company\u002Fshared\": \"workspace:*\"",[717,3421,1245],{"class":730},[717,3423,3424,3426],{"class":719,"line":1042},[717,3425,928],{"class":730},[717,3427,2141],{"class":947},[717,3429,3430],{"class":719,"line":1057},[717,3431,902],{"emptyLinePlaceholder":901},[717,3433,3434,3436],{"class":719,"line":1062},[717,3435,920],{"class":730},[717,3437,1225],{"class":886},[717,3439,3440],{"class":719,"line":1070},[717,3441,1231],{"class":947},[717,3443,3444,3446,3448,3451],{"class":719,"line":1085},[717,3445,1237],{"class":730},[717,3447,1015],{"class":730},[717,3449,3450],{"class":758},"pnpm lint",[717,3452,1245],{"class":730},[717,3454,3455,3457,3459,3461],{"class":719,"line":1100},[717,3456,1251],{"class":730},[717,3458,1015],{"class":730},[717,3460,2094],{"class":758},[717,3462,1245],{"class":730},[717,3464,3465,3467,3469,3471],{"class":719,"line":1115},[717,3466,1263],{"class":730},[717,3468,1015],{"class":730},[717,3470,2080],{"class":758},[717,3472,1245],{"class":730},[717,3474,3475],{"class":719,"line":1120},[717,3476,902],{"emptyLinePlaceholder":901},[717,3478,3479],{"class":719,"line":1128},[717,3480,3481],{"class":947},"@packages\u002Fweb\u002FCLAUDE.md\n",[717,3483,3484],{"class":719,"line":1136},[717,3485,3486],{"class":947},"@packages\u002Fapi\u002FCLAUDE.md\n",[717,3488,3489],{"class":719,"line":1143},[717,3490,3491],{"class":947},"@packages\u002Fshared\u002FCLAUDE.md\n",[494,3493],{},[195,3495,3497],{"id":3496},"_10-故障排查","10. 故障排查",[200,3499,3501],{"id":3500},"_101-claude-不遵循-claudemd","10.1 Claude 不遵循 CLAUDE.md",[2275,3503,3504,3512,3518,3524],{},[828,3505,3506,3511],{},[218,3507,1625,3508],{},[208,3509,3510],{},"\u002Fmemory"," 验证文件是否被加载。如果文件未列出，Claude 看不到它。",[828,3513,3514,3517],{},[218,3515,3516],{},"检查文件位置"," 是否在会话的加载路径上。",[828,3519,3520,3523],{},[218,3521,3522],{},"使指令更具体","。\"使用 2 空格缩进\"比\"格式化代码要规范\"更有效。",[828,3525,3526,3529],{},[218,3527,3528],{},"查找冲突指令","。如果两个文件对同一行为给出不同指导，Claude 可能任意选择其一。",[200,3531,3533],{"id":3532},"_102-claudemd-太大","10.2 CLAUDE.md 太大",[205,3535,3536],{},"超过 200 行的文件消耗更多上下文并可能降低遵循率。使用路径作用域规则仅在 Claude 处理匹配文件时加载指令，或修剪非每次会话必需的内容。",[200,3538,3540,3541,3543],{"id":3539},"_103-指令在-compact-后丢失","10.3 指令在 ",[208,3542,1642],{}," 后丢失",[205,3545,2775,3546,2778,3548,3550,3551,2784],{},[208,3547,108],{},[208,3549,1642],{}," 后重新加载。子目录 ",[208,3552,108],{},[494,3554],{},[195,3556,3558],{"id":3557},"_11-参考来源","11. 参考来源",[825,3560,3561,3570,3577,3584,3591,3598,3605,3612,3619,3626,3633,3640,3647,3654,3661,3668],{},[828,3562,3563],{},[3564,3565,3569],"a",{"href":3566,"rel":3567},"https:\u002F\u002Fcode.claude.com\u002Fdocs\u002Fen\u002Fmemory",[3568],"nofollow","Claude Code 官方文档 - Memory",[828,3571,3572],{},[3564,3573,3576],{"href":3574,"rel":3575},"https:\u002F\u002Fcode.claude.com\u002Fdocs\u002Fen\u002Fclaude-directory",[3568],"Claude Code 官方文档 - .claude Directory",[828,3578,3579],{},[3564,3580,3583],{"href":3581,"rel":3582},"https:\u002F\u002Fclaude.com\u002Fblog\u002Fusing-claude-md-files",[3568],"Anthropic 博客 - Using CLAUDE.md files",[828,3585,3586],{},[3564,3587,3590],{"href":3588,"rel":3589},"https:\u002F\u002Finstitute.sfeir.com\u002Fen\u002Fclaude-code\u002Fclaude-code-memory-system-claude-md\u002Ftutorial\u002F",[3568],"SFEIR Institute - CLAUDE.md Memory System Tutorial",[828,3592,3593],{},[3564,3594,3597],{"href":3595,"rel":3596},"https:\u002F\u002Fblog.alexrusin.com\u002Fclaude-code-instructions-memory-setup-guide\u002F",[3568],"Alex Rusin Blog - Claude Code Instructions and Memory Setup Guide",[828,3599,3600],{},[3564,3601,3604],{"href":3602,"rel":3603},"https:\u002F\u002Fwww.datacamp.com\u002Ftutorial\u002Fwriting-the-best-claude-md",[3568],"DataCamp - Writing the Best CLAUDE.md",[828,3606,3607],{},[3564,3608,3611],{"href":3609,"rel":3610},"https:\u002F\u002Fsupalaunch.com\u002Fblog\u002Fclaude-code-claude-md-how-to-write-the-perfect-config-file-guide",[3568],"Supalaunch - How to Write the Perfect Config File",[828,3613,3614],{},[3564,3615,3618],{"href":3616,"rel":3617},"https:\u002F\u002Fchatforest.com\u002Fguides\u002Fwriting-effective-claude-md-files\u002F",[3568],"ChatForest - Writing Effective CLAUDE.md Files",[828,3620,3621],{},[3564,3622,3625],{"href":3623,"rel":3624},"https:\u002F\u002Fcodingnomads.com\u002Fclaude-md-project-memory-configuration",[3568],"CodingNomads - Writing CLAUDE.md Files That Claude Actually Follows",[828,3627,3628],{},[3564,3629,3632],{"href":3630,"rel":3631},"https:\u002F\u002Famitray.com\u002Fbest-practices-for-claude-md\u002F",[3568],"Amit Ray - Best Practices for CLAUDE.md",[828,3634,3635],{},[3564,3636,3639],{"href":3637,"rel":3638},"https:\u002F\u002Faiorg.dev\u002Fblog\u002Fclaude-code-best-practices",[3568],"AI Org - Claude Code Best Practices",[828,3641,3642],{},[3564,3643,3646],{"href":3644,"rel":3645},"https:\u002F\u002Fwww.tokencentric.app\u002Fblog\u002Fai-coding-config-files-compared",[3568],"TokenCentric - AI Coding Config Files Compared",[828,3648,3649],{},[3564,3650,3653],{"href":3651,"rel":3652},"https:\u002F\u002Fwww.agentrulegen.com\u002Fguides\u002Fcursorrules-vs-claude-md",[3568],"AgentRuleGen - Cursor Rules vs CLAUDE.md",[828,3655,3656],{},[3564,3657,3660],{"href":3658,"rel":3659},"https:\u002F\u002Fgithub.com\u002Fjosix\u002Fawesome-claude-md",[3568],"Awesome CLAUDE.md (GitHub)",[828,3662,3663],{},[3564,3664,3667],{"href":3665,"rel":3666},"https:\u002F\u002Fianlpaterson.com\u002Fblog\u002Fclaude-code-memory-architecture\u002F",[3568],"Ian Paterson - Claude Code Memory Architecture",[828,3669,3670],{},[3564,3671,3674],{"href":3672,"rel":3673},"https:\u002F\u002Fcallmephilip.com\u002Fposts\u002Fnotes-on-claude-md-structure-and-best-practices\u002F",[3568],"CallMePhilip - Notes on CLAUDE.md Structure",[3676,3677,3678],"style",{},"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 .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}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 .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}",{"title":694,"searchDepth":720,"depth":727,"links":3680},[3681,3686,3691,3696,3700,3707,3712,3717,3724,3729,3735],{"id":197,"depth":727,"text":198,"children":3682},[3683,3684,3685],{"id":202,"depth":734,"text":203},{"id":227,"depth":734,"text":228},{"id":400,"depth":734,"text":401},{"id":498,"depth":727,"text":499,"children":3687},[3688,3689,3690],{"id":502,"depth":734,"text":503},{"id":645,"depth":734,"text":646},{"id":697,"depth":734,"text":698},{"id":802,"depth":727,"text":803,"children":3692},[3693,3694,3695],{"id":806,"depth":734,"text":807},{"id":870,"depth":734,"text":871},{"id":1272,"depth":734,"text":1273},{"id":1493,"depth":727,"text":1494,"children":3697},[3698,3699],{"id":1497,"depth":734,"text":1498},{"id":1590,"depth":734,"text":1591},{"id":1703,"depth":727,"text":1704,"children":3701},[3702,3704,3706],{"id":1707,"depth":734,"text":3703},"5.1 使用 @import 拆分文件",{"id":1817,"depth":734,"text":3705},"5.2 使用 .claude\u002Frules\u002F 组织规则",{"id":2004,"depth":734,"text":2005},{"id":2159,"depth":727,"text":2160,"children":3708},[3709,3710,3711],{"id":2163,"depth":734,"text":2164},{"id":2266,"depth":734,"text":2267},{"id":2308,"depth":734,"text":2309},{"id":2367,"depth":727,"text":2368,"children":3713},[3714,3715,3716],{"id":2371,"depth":734,"text":2372},{"id":2396,"depth":734,"text":2397},{"id":2483,"depth":734,"text":2484},{"id":2534,"depth":727,"text":2535,"children":3718},[3719,3720,3721,3722],{"id":2538,"depth":734,"text":2539},{"id":2597,"depth":734,"text":2598},{"id":2645,"depth":734,"text":2646},{"id":2768,"depth":734,"text":3723},"8.4 \u002Fcompact 后的持久化",{"id":2798,"depth":727,"text":2799,"children":3725},[3726,3727,3728],{"id":2802,"depth":734,"text":2803},{"id":3006,"depth":734,"text":3007},{"id":3303,"depth":734,"text":3304},{"id":3496,"depth":727,"text":3497,"children":3730},[3731,3732,3733],{"id":3500,"depth":734,"text":3501},{"id":3532,"depth":734,"text":3533},{"id":3539,"depth":734,"text":3734},"10.3 指令在 \u002Fcompact 后丢失",{"id":3557,"depth":727,"text":3558},"项目记忆与团队知识沉淀","md",null,{"date":3740},"2026-04-26",{"title":108,"description":3736},"HJA1We06H2GgV7X9CsUIzMp5DFSyjLQWa8w_Ti1frto",[3744,3746],{"title":98,"path":99,"stem":100,"description":3745,"children":-1},"Claude Code 的核心能力不仅在于代码理解与生成，更在于它能深度集成并执行开发者日常使用的各类工具链。从 Git 操作、包管理、构建编译到数据库迁移、云部署，Claude Code 通过内置工具系统、MCP 协议扩展、Skills 自定义命令和 Hooks 自动化机制，将 AI 助手从\"建议者\"转变为\"执行者\"。本章将系统梳理 Claude Code 的工具链执行能力，涵盖原生集成、安全机制、自定义扩展等各个层面。",{"title":112,"path":113,"stem":114,"description":3747,"children":-1},"将重复工作流编码为可复用模板",1777395306168]