[{"data":1,"prerenderedAt":1174},["ShallowReactive",2],{"doc-page:\u002Fdocs\u002Fai-coding-rules":3},{"doc":4,"prev":1140,"next":1147,"resolvedType":8,"readingMinutes":144,"audience":1151,"checklist":1155,"related":1159},{"path":5,"title":6,"description":7,"docType":8,"resourceKind":9,"categoryId":10,"categoryLabel":11,"updatedAt":12,"publishedAt":12,"icon":13,"body":14},"\u002Fdocs\u002Fai-coding-rules","AI 编程助手规则配置","Cursor Rules、Claude Projects、Kiro Steering 等 AI 编程助手的规则与上下文配置","article",null,"ai-tools","AI 工具","2026-02-28","i-carbon-chat-bot",{"type":15,"value":16,"toc":1112},"minimark",[17,21,25,28,32,35,54,57,61,69,73,83,86,335,338,342,487,491,563,567,574,577,583,586,627,677,717,720,747,751,754,758,764,767,770,797,801,804,810,895,898,901,1011,1014,1018,1021,1035,1039,1042,1045,1048,1051,1072,1075,1108],[18,19,6],"h1",{"id":20},"ai-编程助手规则配置",[22,23,24],"p",{},"为 AI 编程助手提供项目上下文和编码规范，让它更好地理解你的项目。",[22,26,27],{},"这页适合作为“AI 编码规则沉淀入口”。真正有价值的不是把规则写得越长越好，而是让它稳定覆盖技术栈、目录边界、编码习惯、测试要求和交付标准。",[29,30,31],"h2",{"id":31},"推荐配置顺序",[22,33,34],{},"建议按这个顺序沉淀规则：",[36,37,38,42,45,48,51],"ol",{},[39,40,41],"li",{},"先写项目概述和技术栈",[39,43,44],{},"再写通用编码原则",[39,46,47],{},"再写按语言 \u002F 框架拆分的细则",[39,49,50],{},"再写测试、提交、部署相关约束",[39,52,53],{},"最后再加项目特有的禁区和例外说明",[22,55,56],{},"先从最小可执行规则开始，比一开始堆一大份“没人会维护”的长文档更有效。",[29,58,60],{"id":59},"cursor-rules","Cursor Rules",[22,62,63,64,68],{},"Cursor 支持项目级规则文件，放在 ",[65,66,67],"code",{},".cursor\u002Frules\u002F"," 目录下。",[70,71,72],"h3",{"id":72},"目录结构",[74,75,80],"pre",{"className":76,"code":78,"language":79},[77],"language-text",".cursor\u002F\n└── rules\u002F\n    ├── general.mdc        # 通用规则\n    ├── typescript.mdc     # TypeScript 规范\n    ├── vue.mdc            # Vue 组件规范\n    └── testing.mdc        # 测试规范\n","text",[65,81,78],{"__ignoreMap":82},"",[70,84,85],{"id":85},"规则文件格式",[74,87,91],{"className":88,"code":89,"language":90,"meta":82,"style":82},"language-markdown shiki shiki-themes github-light github-dark","---\ndescription: TypeScript 编码规范\nglobs: **\u002F*.ts, **\u002F*.tsx\nalwaysApply: false\n---\n\n# TypeScript 规范\n\n- 使用 `type` 而非 `interface`（除非需要 extends）\n- 优先使用 `const` 声明\n- 函数参数超过 3 个时使用对象参数\n- 所有导出函数必须有 JSDoc 注释\n- 使用 `unknown` 而非 `any`\n- 错误处理使用自定义 Error 类\n\n## 命名规范\n\n- 文件名：kebab-case（`user-service.ts`）\n- 类型\u002F接口：PascalCase（`UserProfile`）\n- 函数\u002F变量：camelCase（`getUserById`）\n- 常量：UPPER_SNAKE_CASE（`MAX_RETRY_COUNT`）\n- 布尔值：is\u002Fhas\u002Fcan 前缀（`isActive`）\n","markdown",[65,92,93,102,116,142,154,159,166,173,178,200,214,222,230,245,253,258,264,269,283,296,309,322],{"__ignoreMap":82},[94,95,98],"span",{"class":96,"line":97},"line",1,[94,99,101],{"class":100},"sVt8B","---\n",[94,103,105,109,112],{"class":96,"line":104},2,[94,106,108],{"class":107},"s9eBZ","description",[94,110,111],{"class":100},": ",[94,113,115],{"class":114},"sZZnC","TypeScript 编码规范\n",[94,117,119,122,124,128,130,134,137,139],{"class":96,"line":118},3,[94,120,121],{"class":107},"globs",[94,123,111],{"class":100},[94,125,127],{"class":126},"szBVR","*",[94,129,127],{"class":100},[94,131,133],{"class":132},"s7hpK","\u002F*.ts,",[94,135,136],{"class":126}," *",[94,138,127],{"class":100},[94,140,141],{"class":132},"\u002F*.tsx\n",[94,143,145,148,150],{"class":96,"line":144},4,[94,146,147],{"class":107},"alwaysApply",[94,149,111],{"class":100},[94,151,153],{"class":152},"sj4cs","false\n",[94,155,157],{"class":96,"line":156},5,[94,158,101],{"class":100},[94,160,162],{"class":96,"line":161},6,[94,163,165],{"emptyLinePlaceholder":164},true,"\n",[94,167,169],{"class":96,"line":168},7,[94,170,172],{"class":171},"sq-ep","# TypeScript 规范\n",[94,174,176],{"class":96,"line":175},8,[94,177,165],{"emptyLinePlaceholder":164},[94,179,181,185,188,191,194,197],{"class":96,"line":180},9,[94,182,184],{"class":183},"s4XuR","-",[94,186,187],{"class":100}," 使用 ",[94,189,190],{"class":152},"`type`",[94,192,193],{"class":100}," 而非 ",[94,195,196],{"class":152},"`interface`",[94,198,199],{"class":100},"（除非需要 extends）\n",[94,201,203,205,208,211],{"class":96,"line":202},10,[94,204,184],{"class":183},[94,206,207],{"class":100}," 优先使用 ",[94,209,210],{"class":152},"`const`",[94,212,213],{"class":100}," 声明\n",[94,215,217,219],{"class":96,"line":216},11,[94,218,184],{"class":183},[94,220,221],{"class":100}," 函数参数超过 3 个时使用对象参数\n",[94,223,225,227],{"class":96,"line":224},12,[94,226,184],{"class":183},[94,228,229],{"class":100}," 所有导出函数必须有 JSDoc 注释\n",[94,231,233,235,237,240,242],{"class":96,"line":232},13,[94,234,184],{"class":183},[94,236,187],{"class":100},[94,238,239],{"class":152},"`unknown`",[94,241,193],{"class":100},[94,243,244],{"class":152},"`any`\n",[94,246,248,250],{"class":96,"line":247},14,[94,249,184],{"class":183},[94,251,252],{"class":100}," 错误处理使用自定义 Error 类\n",[94,254,256],{"class":96,"line":255},15,[94,257,165],{"emptyLinePlaceholder":164},[94,259,261],{"class":96,"line":260},16,[94,262,263],{"class":171},"## 命名规范\n",[94,265,267],{"class":96,"line":266},17,[94,268,165],{"emptyLinePlaceholder":164},[94,270,272,274,277,280],{"class":96,"line":271},18,[94,273,184],{"class":183},[94,275,276],{"class":100}," 文件名：kebab-case（",[94,278,279],{"class":152},"`user-service.ts`",[94,281,282],{"class":100},"）\n",[94,284,286,288,291,294],{"class":96,"line":285},19,[94,287,184],{"class":183},[94,289,290],{"class":100}," 类型\u002F接口：PascalCase（",[94,292,293],{"class":152},"`UserProfile`",[94,295,282],{"class":100},[94,297,299,301,304,307],{"class":96,"line":298},20,[94,300,184],{"class":183},[94,302,303],{"class":100}," 函数\u002F变量：camelCase（",[94,305,306],{"class":152},"`getUserById`",[94,308,282],{"class":100},[94,310,312,314,317,320],{"class":96,"line":311},21,[94,313,184],{"class":183},[94,315,316],{"class":100}," 常量：UPPER_SNAKE_CASE（",[94,318,319],{"class":152},"`MAX_RETRY_COUNT`",[94,321,282],{"class":100},[94,323,325,327,330,333],{"class":96,"line":324},22,[94,326,184],{"class":183},[94,328,329],{"class":100}," 布尔值：is\u002Fhas\u002Fcan 前缀（",[94,331,332],{"class":152},"`isActive`",[94,334,282],{"class":100},[70,336,337],{"id":337},"常用规则模板",[339,340,341],"h4",{"id":341},"通用项目规则",[74,343,345],{"className":88,"code":344,"language":90,"meta":82,"style":82},"---\ndescription: 项目通用规则\nalwaysApply: true\n---\n\n# 项目概述\n\n这是一个使用 Nuxt 4 + TypeScript + UnoCSS 构建的知识库网站。\n\n## 技术栈\n\n- Nuxt 4（Vue 3 Composition API）\n- TypeScript 5\n- UnoCSS（Attributify 模式）\n- Nuxt Content v3\n- Cloudflare Pages 部署\n\n## 编码原则\n\n- 中文注释和文档\n- Composition API + `\u003Cscript setup>` 语法\n- 优先使用 VueUse 组合式函数\n- 最小化依赖，能用原生实现就不引入库\n",[65,346,347,351,360,369,373,377,382,386,391,395,400,404,411,418,425,432,439,443,448,452,459,472,479],{"__ignoreMap":82},[94,348,349],{"class":96,"line":97},[94,350,101],{"class":100},[94,352,353,355,357],{"class":96,"line":104},[94,354,108],{"class":107},[94,356,111],{"class":100},[94,358,359],{"class":114},"项目通用规则\n",[94,361,362,364,366],{"class":96,"line":118},[94,363,147],{"class":107},[94,365,111],{"class":100},[94,367,368],{"class":152},"true\n",[94,370,371],{"class":96,"line":144},[94,372,101],{"class":100},[94,374,375],{"class":96,"line":156},[94,376,165],{"emptyLinePlaceholder":164},[94,378,379],{"class":96,"line":161},[94,380,381],{"class":171},"# 项目概述\n",[94,383,384],{"class":96,"line":168},[94,385,165],{"emptyLinePlaceholder":164},[94,387,388],{"class":96,"line":175},[94,389,390],{"class":100},"这是一个使用 Nuxt 4 + TypeScript + UnoCSS 构建的知识库网站。\n",[94,392,393],{"class":96,"line":180},[94,394,165],{"emptyLinePlaceholder":164},[94,396,397],{"class":96,"line":202},[94,398,399],{"class":171},"## 技术栈\n",[94,401,402],{"class":96,"line":216},[94,403,165],{"emptyLinePlaceholder":164},[94,405,406,408],{"class":96,"line":224},[94,407,184],{"class":183},[94,409,410],{"class":100}," Nuxt 4（Vue 3 Composition API）\n",[94,412,413,415],{"class":96,"line":232},[94,414,184],{"class":183},[94,416,417],{"class":100}," TypeScript 5\n",[94,419,420,422],{"class":96,"line":247},[94,421,184],{"class":183},[94,423,424],{"class":100}," UnoCSS（Attributify 模式）\n",[94,426,427,429],{"class":96,"line":255},[94,428,184],{"class":183},[94,430,431],{"class":100}," Nuxt Content v3\n",[94,433,434,436],{"class":96,"line":260},[94,435,184],{"class":183},[94,437,438],{"class":100}," Cloudflare Pages 部署\n",[94,440,441],{"class":96,"line":266},[94,442,165],{"emptyLinePlaceholder":164},[94,444,445],{"class":96,"line":271},[94,446,447],{"class":171},"## 编码原则\n",[94,449,450],{"class":96,"line":285},[94,451,165],{"emptyLinePlaceholder":164},[94,453,454,456],{"class":96,"line":298},[94,455,184],{"class":183},[94,457,458],{"class":100}," 中文注释和文档\n",[94,460,461,463,466,469],{"class":96,"line":311},[94,462,184],{"class":183},[94,464,465],{"class":100}," Composition API + ",[94,467,468],{"class":152},"`\u003Cscript setup>`",[94,470,471],{"class":100}," 语法\n",[94,473,474,476],{"class":96,"line":324},[94,475,184],{"class":183},[94,477,478],{"class":100}," 优先使用 VueUse 组合式函数\n",[94,480,482,484],{"class":96,"line":481},23,[94,483,184],{"class":183},[94,485,486],{"class":100}," 最小化依赖，能用原生实现就不引入库\n",[339,488,490],{"id":489},"git-提交规则","Git 提交规则",[74,492,494],{"className":88,"code":493,"language":90,"meta":82,"style":82},"---\ndescription: Git 提交规范\nglobs: .git\u002F**\n---\n\n使用 Conventional Commits 格式：\n\n- type(scope): 中文描述\n- type: feat, fix, refactor, style, perf, test, docs, chore\n- scope 可选，指明影响范围\n- 描述使用中文，简洁明了\n",[65,495,496,500,509,518,522,526,531,535,542,549,556],{"__ignoreMap":82},[94,497,498],{"class":96,"line":97},[94,499,101],{"class":100},[94,501,502,504,506],{"class":96,"line":104},[94,503,108],{"class":107},[94,505,111],{"class":100},[94,507,508],{"class":114},"Git 提交规范\n",[94,510,511,513,515],{"class":96,"line":118},[94,512,121],{"class":107},[94,514,111],{"class":100},[94,516,517],{"class":114},".git\u002F**\n",[94,519,520],{"class":96,"line":144},[94,521,101],{"class":100},[94,523,524],{"class":96,"line":156},[94,525,165],{"emptyLinePlaceholder":164},[94,527,528],{"class":96,"line":161},[94,529,530],{"class":100},"使用 Conventional Commits 格式：\n",[94,532,533],{"class":96,"line":168},[94,534,165],{"emptyLinePlaceholder":164},[94,536,537,539],{"class":96,"line":175},[94,538,184],{"class":183},[94,540,541],{"class":100}," type(scope): 中文描述\n",[94,543,544,546],{"class":96,"line":180},[94,545,184],{"class":183},[94,547,548],{"class":100}," type: feat, fix, refactor, style, perf, test, docs, chore\n",[94,550,551,553],{"class":96,"line":202},[94,552,184],{"class":183},[94,554,555],{"class":100}," scope 可选，指明影响范围\n",[94,557,558,560],{"class":96,"line":216},[94,559,184],{"class":183},[94,561,562],{"class":100}," 描述使用中文，简洁明了\n",[29,564,566],{"id":565},"kiro-steering","Kiro Steering",[22,568,569,570,573],{},"Kiro 使用 ",[65,571,572],{},".kiro\u002Fsteering\u002F"," 目录下的 Markdown 文件。",[70,575,72],{"id":576},"目录结构-1",[74,578,581],{"className":579,"code":580,"language":79},[77],".kiro\u002F\n└── steering\u002F\n    ├── project.md         # 项目概述（始终包含）\n    ├── coding.md          # 编码规范（始终包含）\n    ├── vue-rules.md       # Vue 规范（匹配 .vue 文件时包含）\n    └── api-guide.md       # API 规范（手动引用）\n",[65,582,580],{"__ignoreMap":82},[70,584,585],{"id":585},"包含模式",[74,587,589],{"className":88,"code":588,"language":90,"meta":82,"style":82},"---\ninclusion: always\n---\n\n# 始终包含的规则\n\n这些规则在每次对话中都会生效。\n",[65,590,591,595,605,609,613,618,622],{"__ignoreMap":82},[94,592,593],{"class":96,"line":97},[94,594,101],{"class":100},[94,596,597,600,602],{"class":96,"line":104},[94,598,599],{"class":107},"inclusion",[94,601,111],{"class":100},[94,603,604],{"class":114},"always\n",[94,606,607],{"class":96,"line":118},[94,608,101],{"class":100},[94,610,611],{"class":96,"line":144},[94,612,165],{"emptyLinePlaceholder":164},[94,614,615],{"class":96,"line":156},[94,616,617],{"class":171},"# 始终包含的规则\n",[94,619,620],{"class":96,"line":161},[94,621,165],{"emptyLinePlaceholder":164},[94,623,624],{"class":96,"line":168},[94,625,626],{"class":100},"这些规则在每次对话中都会生效。\n",[74,628,630],{"className":88,"code":629,"language":90,"meta":82,"style":82},"---\ninclusion: fileMatch\nfileMatchPattern: \"**\u002F*.vue\"\n---\n\n# Vue 组件规范\n\n仅在打开 .vue 文件时生效。\n",[65,631,632,636,645,655,659,663,668,672],{"__ignoreMap":82},[94,633,634],{"class":96,"line":97},[94,635,101],{"class":100},[94,637,638,640,642],{"class":96,"line":104},[94,639,599],{"class":107},[94,641,111],{"class":100},[94,643,644],{"class":114},"fileMatch\n",[94,646,647,650,652],{"class":96,"line":118},[94,648,649],{"class":107},"fileMatchPattern",[94,651,111],{"class":100},[94,653,654],{"class":114},"\"**\u002F*.vue\"\n",[94,656,657],{"class":96,"line":144},[94,658,101],{"class":100},[94,660,661],{"class":96,"line":156},[94,662,165],{"emptyLinePlaceholder":164},[94,664,665],{"class":96,"line":161},[94,666,667],{"class":171},"# Vue 组件规范\n",[94,669,670],{"class":96,"line":168},[94,671,165],{"emptyLinePlaceholder":164},[94,673,674],{"class":96,"line":175},[94,675,676],{"class":100},"仅在打开 .vue 文件时生效。\n",[74,678,680],{"className":88,"code":679,"language":90,"meta":82,"style":82},"---\ninclusion: manual\n---\n\n# API 设计指南\n\n通过 #api-guide 手动引用。\n",[65,681,682,686,695,699,703,708,712],{"__ignoreMap":82},[94,683,684],{"class":96,"line":97},[94,685,101],{"class":100},[94,687,688,690,692],{"class":96,"line":104},[94,689,599],{"class":107},[94,691,111],{"class":100},[94,693,694],{"class":114},"manual\n",[94,696,697],{"class":96,"line":118},[94,698,101],{"class":100},[94,700,701],{"class":96,"line":144},[94,702,165],{"emptyLinePlaceholder":164},[94,704,705],{"class":96,"line":156},[94,706,707],{"class":171},"# API 设计指南\n",[94,709,710],{"class":96,"line":161},[94,711,165],{"emptyLinePlaceholder":164},[94,713,714],{"class":96,"line":168},[94,715,716],{"class":100},"通过 #api-guide 手动引用。\n",[70,718,719],{"id":719},"引用外部文件",[74,721,723],{"className":88,"code":722,"language":90,"meta":82,"style":82},"项目 API 规范请参考：#[[file:openapi.yaml]]\n数据库 Schema：#[[file:prisma\u002Fschema.prisma]]\n",[65,724,725,737],{"__ignoreMap":82},[94,726,727,730,734],{"class":96,"line":97},[94,728,729],{"class":100},"项目 API 规范请参考：#[[",[94,731,733],{"class":732},"svl0z","file:openapi.yaml",[94,735,736],{"class":100},"]]\n",[94,738,739,742,745],{"class":96,"line":104},[94,740,741],{"class":100},"数据库 Schema：#[[",[94,743,744],{"class":732},"file:prisma\u002Fschema.prisma",[94,746,736],{"class":100},[29,748,750],{"id":749},"claude-projects","Claude Projects",[22,752,753],{},"Claude 的 Project Knowledge 功能。",[70,755,757],{"id":756},"项目指令project-instructions","项目指令（Project Instructions）",[74,759,762],{"className":760,"code":761,"language":79},[77],"你是一位资深全栈开发者，帮助我维护一个 Nuxt 4 项目。\n\n技术栈：Nuxt 4, TypeScript, UnoCSS, Cloudflare Workers\n\n规范：\n- 使用 Composition API + \u003Cscript setup>\n- 中文注释\n- Conventional Commits 提交格式\n- 优先使用 VueUse\n\n回答风格：\n- 直接给代码，少说废话\n- 指出潜在问题\n- 提供替代方案\n",[65,763,761],{"__ignoreMap":82},[70,765,766],{"id":766},"上传项目文件",[22,768,769],{},"建议上传的文件：",[771,772,773,779,785,791,794],"ul",{},[39,774,775,778],{},[65,776,777],{},"package.json"," — 依赖信息",[39,780,781,784],{},[65,782,783],{},"tsconfig.json"," — TypeScript 配置",[39,786,787,790],{},[65,788,789],{},"nuxt.config.ts"," — 项目配置",[39,792,793],{},"核心类型定义文件",[39,795,796],{},"API Schema 文件",[29,798,800],{"id":799},"github-copilot","GitHub Copilot",[70,802,803],{"id":803},"项目级指令",[22,805,806,809],{},[65,807,808],{},".github\u002Fcopilot-instructions.md","：",[74,811,813],{"className":88,"code":812,"language":90,"meta":82,"style":82},"# Copilot 指令\n\n## 代码风格\n\n- TypeScript strict 模式\n- 使用 ESM import\n- 函数式编程优先\n- 避免 class，使用组合式函数\n\n## 项目特定\n\n- 使用 UnoCSS 而非 Tailwind\n- 路由使用 Nuxt 文件系统路由\n- 状态管理使用 useState composable\n",[65,814,815,820,824,829,833,840,847,854,861,865,870,874,881,888],{"__ignoreMap":82},[94,816,817],{"class":96,"line":97},[94,818,819],{"class":171},"# Copilot 指令\n",[94,821,822],{"class":96,"line":104},[94,823,165],{"emptyLinePlaceholder":164},[94,825,826],{"class":96,"line":118},[94,827,828],{"class":171},"## 代码风格\n",[94,830,831],{"class":96,"line":144},[94,832,165],{"emptyLinePlaceholder":164},[94,834,835,837],{"class":96,"line":156},[94,836,184],{"class":183},[94,838,839],{"class":100}," TypeScript strict 模式\n",[94,841,842,844],{"class":96,"line":161},[94,843,184],{"class":183},[94,845,846],{"class":100}," 使用 ESM import\n",[94,848,849,851],{"class":96,"line":168},[94,850,184],{"class":183},[94,852,853],{"class":100}," 函数式编程优先\n",[94,855,856,858],{"class":96,"line":175},[94,857,184],{"class":183},[94,859,860],{"class":100}," 避免 class，使用组合式函数\n",[94,862,863],{"class":96,"line":180},[94,864,165],{"emptyLinePlaceholder":164},[94,866,867],{"class":96,"line":202},[94,868,869],{"class":171},"## 项目特定\n",[94,871,872],{"class":96,"line":216},[94,873,165],{"emptyLinePlaceholder":164},[94,875,876,878],{"class":96,"line":224},[94,877,184],{"class":183},[94,879,880],{"class":100}," 使用 UnoCSS 而非 Tailwind\n",[94,882,883,885],{"class":96,"line":232},[94,884,184],{"class":183},[94,886,887],{"class":100}," 路由使用 Nuxt 文件系统路由\n",[94,889,890,892],{"class":96,"line":247},[94,891,184],{"class":183},[94,893,894],{"class":100}," 状态管理使用 useState composable\n",[29,896,897],{"id":897},"通用规则建议",[22,899,900],{},"不管用哪个 AI 工具，以下规则都值得配置：",[74,902,904],{"className":88,"code":903,"language":90,"meta":82,"style":82},"# 输出规范\n\n- 不要创建不必要的文档文件\n- 代码修改后检查类型错误\n- 保持最小化改动，不要过度工程化\n- 新增功能要考虑已有代码风格\n\n# 安全\n\n- 不要硬编码密钥和密码\n- 使用环境变量管理敏感信息\n- 输入验证和错误处理\n\n# 性能\n\n- 避免不必要的重渲染\n- 图片使用 WebP 格式\n- 按需导入，避免全量引入\n",[65,905,906,911,915,922,929,936,943,947,952,956,963,970,977,981,986,990,997,1004],{"__ignoreMap":82},[94,907,908],{"class":96,"line":97},[94,909,910],{"class":171},"# 输出规范\n",[94,912,913],{"class":96,"line":104},[94,914,165],{"emptyLinePlaceholder":164},[94,916,917,919],{"class":96,"line":118},[94,918,184],{"class":183},[94,920,921],{"class":100}," 不要创建不必要的文档文件\n",[94,923,924,926],{"class":96,"line":144},[94,925,184],{"class":183},[94,927,928],{"class":100}," 代码修改后检查类型错误\n",[94,930,931,933],{"class":96,"line":156},[94,932,184],{"class":183},[94,934,935],{"class":100}," 保持最小化改动，不要过度工程化\n",[94,937,938,940],{"class":96,"line":161},[94,939,184],{"class":183},[94,941,942],{"class":100}," 新增功能要考虑已有代码风格\n",[94,944,945],{"class":96,"line":168},[94,946,165],{"emptyLinePlaceholder":164},[94,948,949],{"class":96,"line":175},[94,950,951],{"class":171},"# 安全\n",[94,953,954],{"class":96,"line":180},[94,955,165],{"emptyLinePlaceholder":164},[94,957,958,960],{"class":96,"line":202},[94,959,184],{"class":183},[94,961,962],{"class":100}," 不要硬编码密钥和密码\n",[94,964,965,967],{"class":96,"line":216},[94,966,184],{"class":183},[94,968,969],{"class":100}," 使用环境变量管理敏感信息\n",[94,971,972,974],{"class":96,"line":224},[94,973,184],{"class":183},[94,975,976],{"class":100}," 输入验证和错误处理\n",[94,978,979],{"class":96,"line":232},[94,980,165],{"emptyLinePlaceholder":164},[94,982,983],{"class":96,"line":247},[94,984,985],{"class":171},"# 性能\n",[94,987,988],{"class":96,"line":255},[94,989,165],{"emptyLinePlaceholder":164},[94,991,992,994],{"class":96,"line":260},[94,993,184],{"class":183},[94,995,996],{"class":100}," 避免不必要的重渲染\n",[94,998,999,1001],{"class":96,"line":266},[94,1000,184],{"class":183},[94,1002,1003],{"class":100}," 图片使用 WebP 格式\n",[94,1005,1006,1008],{"class":96,"line":271},[94,1007,184],{"class":183},[94,1009,1010],{"class":100}," 按需导入，避免全量引入\n",[29,1012,1013],{"id":1013},"常见问题",[70,1015,1017],{"id":1016},"规则写了很多代理还是不听","规则写了很多，代理还是不听",[22,1019,1020],{},"高频原因通常包括：",[771,1022,1023,1026,1029,1032],{},[39,1024,1025],{},"规则层级混乱",[39,1027,1028],{},"规则互相冲突",[39,1030,1031],{},"没告诉它哪些规则始终生效",[39,1033,1034],{},"规则写得太抽象，没有可执行动作",[70,1036,1038],{"id":1037},"应该按工具分别写还是统一写一份","应该按工具分别写，还是统一写一份",[22,1040,1041],{},"更稳的做法通常是：保留一份“项目主规则”，再根据不同工具补各自适配层，避免完全重复维护。",[70,1043,1044],{"id":1044},"项目规则多久需要更新一次",[22,1046,1047],{},"只要技术栈、目录结构、测试策略或部署方式发生明显变化，就值得回头更新一次。",[29,1049,1050],{"id":1050},"延伸阅读",[771,1052,1053,1060,1066],{},[39,1054,1055],{},[1056,1057,1059],"a",{"href":1058},"\u002Fdocs\u002Fai-ide","AI IDE 与编辑器",[39,1061,1062],{},[1056,1063,1065],{"href":1064},"\u002Fdocs\u002Fprompt-engineering","提示词工程",[39,1067,1068],{},[1056,1069,1071],{"href":1070},"\u002Fdocs\u002Fai-api-usage","AI API 接入指南",[29,1073,1074],{"id":1074},"参考链接",[771,1076,1077,1085,1092,1100],{},[39,1078,1079,1084],{},[1056,1080,60],{"href":1081,"rel":1082},"https:\u002F\u002Fdocs.cursor.com\u002Fcontext\u002Frules-for-ai",[1083],"nofollow"," — Cursor 文档",[39,1086,1087,1091],{},[1056,1088,566],{"href":1089,"rel":1090},"https:\u002F\u002Fkiro.dev\u002Fdocs\u002Fsteering\u002F",[1083]," — Kiro 文档",[39,1093,1094,1099],{},[1056,1095,1098],{"href":1096,"rel":1097},"https:\u002F\u002Fdocs.github.com\u002Fen\u002Fcopilot\u002Fcustomizing-copilot\u002Fadding-repository-custom-instructions-for-github-copilot",[1083],"Copilot Instructions"," — GitHub 文档",[39,1101,1102,1107],{},[1056,1103,1106],{"href":1104,"rel":1105},"https:\u002F\u002Fgithub.com\u002FPatrickJS\u002Fawesome-cursorrules",[1083],"Awesome Cursor Rules"," — 规则集合",[1109,1110,1111],"style",{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .s7hpK, html code.shiki .s7hpK{--shiki-default:#B31D28;--shiki-default-font-style:italic;--shiki-dark:#FDAEB7;--shiki-dark-font-style:italic}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sq-ep, html code.shiki .sq-ep{--shiki-default:#005CC5;--shiki-default-font-weight:bold;--shiki-dark:#79B8FF;--shiki-dark-font-weight:bold}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}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 .svl0z, html code.shiki .svl0z{--shiki-default:#032F62;--shiki-default-text-decoration:underline;--shiki-dark:#DBEDFF;--shiki-dark-text-decoration:underline}",{"title":82,"searchDepth":104,"depth":104,"links":1113},[1114,1115,1120,1125,1129,1132,1133,1138,1139],{"id":31,"depth":104,"text":31},{"id":59,"depth":104,"text":60,"children":1116},[1117,1118,1119],{"id":72,"depth":118,"text":72},{"id":85,"depth":118,"text":85},{"id":337,"depth":118,"text":337},{"id":565,"depth":104,"text":566,"children":1121},[1122,1123,1124],{"id":576,"depth":118,"text":72},{"id":585,"depth":118,"text":585},{"id":719,"depth":118,"text":719},{"id":749,"depth":104,"text":750,"children":1126},[1127,1128],{"id":756,"depth":118,"text":757},{"id":766,"depth":118,"text":766},{"id":799,"depth":104,"text":800,"children":1130},[1131],{"id":803,"depth":118,"text":803},{"id":897,"depth":104,"text":897},{"id":1013,"depth":104,"text":1013,"children":1134},[1135,1136,1137],{"id":1016,"depth":118,"text":1017},{"id":1037,"depth":118,"text":1038},{"id":1044,"depth":118,"text":1044},{"id":1050,"depth":104,"text":1050},{"id":1074,"depth":104,"text":1074},{"path":1141,"title":1142,"description":1143,"docType":8,"resourceKind":9,"categoryId":1144,"categoryLabel":1145,"updatedAt":12,"publishedAt":12,"icon":1146},"\u002Fdocs\u002Fselfhosted-apps","自托管应用推荐","值得自建的开源应用：网盘、笔记、密码管理、RSS、导航页等","entertainment-resources","娱乐与资源","i-carbon-game-console",{"path":1148,"title":1149,"description":1150,"docType":8,"resourceKind":9,"categoryId":10,"categoryLabel":11,"updatedAt":12,"publishedAt":12,"icon":13},"\u002Fdocs\u002Fai-agent-security","AI 代理安全配置指南","OpenClaw、nanobot 等 AI 代理的安全配置最佳实践",[1152,1153,1154],"希望把零散经验整理成长期可复用工作流的人","正在使用 AI 工具、Agent 或自动化工作流的人","希望阅读时顺手建立自己的操作清单或收藏体系的人",[1156,1157,1158],"先浏览标题、摘要和目录，带着问题阅读会更高效","确认模型供应商、API Key、CLI 工具链与本地资源是否已准备好","如果页面里提到相关文档，尽量一起打开对照，效果通常更完整",[1160,1165,1169,1173],{"path":1161,"title":1162,"description":1163,"docType":8,"resourceKind":9,"categoryId":10,"categoryLabel":11,"updatedAt":1164,"publishedAt":1164,"icon":13},"\u002Fdocs\u002Fskills-guide","AI Agent Skills 指南","理解 skills 的作用、目录结构、编写方式，以及它与 MCP 的关系","2026-03-08",{"path":1166,"title":1167,"description":1168,"docType":8,"resourceKind":9,"categoryId":10,"categoryLabel":11,"updatedAt":12,"publishedAt":12,"icon":13},"\u002Fdocs\u002Fai-local-models","本地 AI 模型部署","Ollama、LM Studio、vLLM 本地大模型运行与 API 调用",{"path":1170,"title":1171,"description":1172,"docType":8,"resourceKind":9,"categoryId":10,"categoryLabel":11,"updatedAt":12,"publishedAt":12,"icon":13},"\u002Fdocs\u002Flocal-llm-deployment","本地 LLM 部署指南","使用 Ollama、vLLM、LM Studio 在本地运行大语言模型",{"path":1148,"title":1149,"description":1150,"docType":8,"resourceKind":9,"categoryId":10,"categoryLabel":11,"updatedAt":12,"publishedAt":12,"icon":13},1776215711221]