[{"data":1,"prerenderedAt":1003},["ShallowReactive",2],{"blog-claude-code-ecosystem":3},{"id":4,"title":5,"body":6,"category":989,"date":990,"description":16,"extension":991,"meta":992,"navigation":171,"path":993,"seo":994,"stem":995,"tags":996,"__hash__":1002},"blog\u002Fblog\u002Fclaude-code-ecosystem.md","Claude Code 可编程生态：Skills、MCP 与 Hook 体系全解",{"type":7,"value":8,"toc":973},"minimark",[9,13,17,25,30,41,44,78,82,87,98,101,107,110,202,208,212,256,259,278,283,289,293,300,304,310,394,404,427,432,436,443,446,512,515,624,634,639,643,646,720,726,808,822,827,831,838,879,893,897,900,949,952,959,962,969],[10,11,5],"h1",{"id":12},"claude-code-可编程生态skillsmcp-与-hook-体系全解",[14,15,16],"p",{},"Claude Code 上手一两周后，你大概率会遇到同一个瓶颈：每次都要手动描述内部框架的用法、每次都要提醒它\"别用 npm，用 pnpm\"、每次改完代码都要自己跑一遍 typecheck。",[14,18,19,20,24],{},"CC 提供了五件套来解决这个问题：",[21,22,23],"strong",{},"Skills、Plugins、Subagents、MCP、Hooks","。很多人把它们混为一谈，其实一个是\"知识\u002FSOP\"，一个是\"打包分发单位\"，一个是\"隔离执行角色\"，一个是\"外部系统连接器\"，一个是\"事件触发器\"。这篇逐一拆解。",[26,27,29],"h2",{"id":28},"_1-五件套的关系一张图看清","1. 五件套的关系（一张图看清）",[31,32,37],"pre",{"className":33,"code":35,"language":36},[34],"language-text","        ┌────────── Plugin (分发\u002F安装单位) ──────────┐\n        │                                             │\n        │ 可包含：Skills + Subagents + MCP + Hooks    │\n        │          + Slash commands                    │\n        └─────────────────────────────────────────────┘\n\nSkill    = 一份 SKILL.md，告诉 CC \"遇到 X 场景该怎么做\" (SOP)\nSubagent = 一个专门角色 (只读探索 \u002F 测试执行 \u002F 代码审查)\nMCP      = 连接外部系统 (数据库 \u002F Jira \u002F 监控 \u002F wiki)\nHook     = 事件钩子 (编辑前后、工具调用前后触发脚本)\n","text",[38,39,35],"code",{"__ignoreMap":40},"",[14,42,43],{},"结论直给：",[45,46,47,54,60,66,72],"ul",{},[48,49,50,51],"li",{},"\"我要让 CC 在遇到 X 场景时按 Y 步骤做\" → 写 ",[21,52,53],{},"Skill",[48,55,56,57],{},"\"我要让 CC 连上公司 Jira\u002F监控\u002F数据库\" → 配 ",[21,58,59],{},"MCP",[48,61,62,63],{},"\"我要一个只读探索、不污染主上下文的角色\" → 造 ",[21,64,65],{},"Subagent",[48,67,68,69],{},"\"我要每次改代码后自动跑 lint\" → 配 ",[21,70,71],{},"Hook",[48,73,74,75],{},"\"我要把以上几样打包分发给团队\" → 打成 ",[21,76,77],{},"Plugin",[26,79,81],{"id":80},"_2-skills按需注入的-sop","2. Skills：按需注入的 SOP",[83,84,86],"h3",{"id":85},"skill-的本质","Skill 的本质",[14,88,89,90,93,94,97],{},"一个 Skill 就是一个目录，里面至少有一个 ",[38,91,92],{},"SKILL.md","，前置 frontmatter 声明名字和触发描述。CC 在处理任务时扫描所有可用 Skills 的描述，",[21,95,96],{},"按需加载","——这是核心价值：不常驻上下文，只在相关时注入。",[14,99,100],{},"最小骨架：",[31,102,105],{"className":103,"code":104,"language":36},[34],"my-skill\u002F\n├── SKILL.md            # 必需\n├── templates\u002F          # 可选：代码模板\n├── scripts\u002F            # 可选：辅助脚本\n└── references\u002F         # 可选：详细文档（按需再读）\n",[38,106,104],{"__ignoreMap":40},[14,108,109],{},"SKILL.md 示例：",[31,111,115],{"className":112,"code":113,"language":114,"meta":40,"style":40},"language-markdown shiki shiki-themes github-dark","---\nname: internal-rpc-handler\ndescription: |\n  创建或修改公司内部 InternalRPC 框架的 handler。\n  USE WHEN: 用户要求添加 RPC 接口、涉及 @company\u002Frpc 相关代码。\n  DO NOT USE FOR: 外部 HTTP API（用 rest-api skill）。\nallowed-tools: Read Edit Bash(pnpm test:rpc *)\n---\n\n# InternalRPC Handler 创建规范\n\n## 步骤\n1. 在 `packages\u002Frpc\u002Fhandlers\u002F` 下创建 `\u003Cname>.handler.ts`\n2. 继承 `BaseHandler`，实现 `handle(ctx, req)` ...\n","markdown",[38,116,117,125,131,137,143,149,155,161,166,173,179,184,190,196],{"__ignoreMap":40},[118,119,122],"span",{"class":120,"line":121},"line",1,[118,123,124],{},"---\n",[118,126,128],{"class":120,"line":127},2,[118,129,130],{},"name: internal-rpc-handler\n",[118,132,134],{"class":120,"line":133},3,[118,135,136],{},"description: |\n",[118,138,140],{"class":120,"line":139},4,[118,141,142],{},"  创建或修改公司内部 InternalRPC 框架的 handler。\n",[118,144,146],{"class":120,"line":145},5,[118,147,148],{},"  USE WHEN: 用户要求添加 RPC 接口、涉及 @company\u002Frpc 相关代码。\n",[118,150,152],{"class":120,"line":151},6,[118,153,154],{},"  DO NOT USE FOR: 外部 HTTP API（用 rest-api skill）。\n",[118,156,158],{"class":120,"line":157},7,[118,159,160],{},"allowed-tools: Read Edit Bash(pnpm test:rpc *)\n",[118,162,164],{"class":120,"line":163},8,[118,165,124],{},[118,167,169],{"class":120,"line":168},9,[118,170,172],{"emptyLinePlaceholder":171},true,"\n",[118,174,176],{"class":120,"line":175},10,[118,177,178],{},"# InternalRPC Handler 创建规范\n",[118,180,182],{"class":120,"line":181},11,[118,183,172],{"emptyLinePlaceholder":171},[118,185,187],{"class":120,"line":186},12,[118,188,189],{},"## 步骤\n",[118,191,193],{"class":120,"line":192},13,[118,194,195],{},"1. 在 `packages\u002Frpc\u002Fhandlers\u002F` 下创建 `\u003Cname>.handler.ts`\n",[118,197,199],{"class":120,"line":198},14,[118,200,201],{},"2. 继承 `BaseHandler`，实现 `handle(ctx, req)` ...\n",[14,203,204,207],{},[21,205,206],{},"关键：description 写得越具体、触发条件越清晰，CC 越准确地知道什么时候加载它。"," 建议用 USE WHEN \u002F DO NOT USE FOR 两段式。",[83,209,211],{"id":210},"写-skill-的五条黄金法则","写 Skill 的五条黄金法则",[213,214,215,221,234,240,246],"ol",{},[48,216,217,220],{},[21,218,219],{},"description 是索引","：把用户可能说的话、可能触发的文件类型全写进去",[48,222,223,226,227,230,231],{},[21,224,225],{},"SKILL.md 自己精简","：核心 SOP 放主文件，大段示例\u002F模板放 ",[38,228,229],{},"templates\u002F","、",[38,232,233],{},"references\u002F",[48,235,236,239],{},[21,237,238],{},"写命令清单而不是散文","：\"Step 1 → Step 2\" 的 checklist 比大段说明有效",[48,241,242,245],{},[21,243,244],{},"包含反例","：\"不要这样做\"比\"要这样做\"更能防止事故",[48,247,248,251,252,255],{},[21,249,250],{},"绑定到可验证的产物","：例如\"生成后必须跑 ",[38,253,254],{},"pnpm test:rpc","\"",[83,257,258],{"id":258},"放在哪里",[45,260,261,268,275],{},[48,262,263,264,267],{},"个人全局：",[38,265,266],{},"~\u002F.claude\u002Fskills\u002F\u003Cname>\u002FSKILL.md","（只对你生效）",[48,269,270,271,274],{},"项目级：",[38,272,273],{},".claude\u002Fskills\u002F\u003Cname>\u002FSKILL.md","（随仓库提交，团队共享）",[48,276,277],{},"通过 Plugin 分发：跨项目共享",[14,279,280],{},[21,281,282],{},"强烈建议：团队约定的东西走项目级（进 git），个人习惯走全局。",[14,284,285,288],{},[21,286,287],{},"小结："," Skills 是整个 CC 可编程体系里 ROI 最高的部分——零运维成本，纯 markdown，写完就生效。内部框架越闭源、团队规范越特殊，Skills 的价值越大。",[26,290,292],{"id":291},"_3-subagents保护主会话上下文的隔离执行","3. Subagents：保护主会话上下文的隔离执行",[14,294,295,296,299],{},"主会话的上下文是最宝贵的资源。把一个任务派给 subagent 去跑——比如\"扫描 200 个文件找出所有用了老配置的地方\"——它会用光自己的上下文，但",[21,297,298],{},"只把摘要返回","给你。主会话还是干净的，继续推进高层决策。",[83,301,303],{"id":302},"定义一个-subagent","定义一个 Subagent",[14,305,306,307],{},"路径：",[38,308,309],{},".claude\u002Fagents\u002F\u003Cname>.md",[31,311,313],{"className":112,"code":312,"language":114,"meta":40,"style":40},"---\nname: code-explorer\ndescription: 只读代码探索；用于快速回答\"X 功能在哪实现\"\ntools: Read, Grep, Glob\nmodel: haiku                   # 探索用 Haiku 4.5，又快又便宜\nisolation: worktree            # 在临时 worktree 里跑，零改动自动清理\npermissionMode: plan           # 强制只读\nmaxTurns: 30\neffort: low\n---\n\n你是代码考古专家。硬规则：\n1. 只读，不改任何文件\n2. 输出结构化：文件清单 \u002F 关键函数 \u002F 调用关系\n3. 不要把大段源码贴回主会话，用\"文件:行号\"\n4. 不确定的地方标 UNKNOWN，不要猜\n",[38,314,315,319,324,329,334,339,344,349,354,359,363,367,372,377,382,388],{"__ignoreMap":40},[118,316,317],{"class":120,"line":121},[118,318,124],{},[118,320,321],{"class":120,"line":127},[118,322,323],{},"name: code-explorer\n",[118,325,326],{"class":120,"line":133},[118,327,328],{},"description: 只读代码探索；用于快速回答\"X 功能在哪实现\"\n",[118,330,331],{"class":120,"line":139},[118,332,333],{},"tools: Read, Grep, Glob\n",[118,335,336],{"class":120,"line":145},[118,337,338],{},"model: haiku                   # 探索用 Haiku 4.5，又快又便宜\n",[118,340,341],{"class":120,"line":151},[118,342,343],{},"isolation: worktree            # 在临时 worktree 里跑，零改动自动清理\n",[118,345,346],{"class":120,"line":157},[118,347,348],{},"permissionMode: plan           # 强制只读\n",[118,350,351],{"class":120,"line":163},[118,352,353],{},"maxTurns: 30\n",[118,355,356],{"class":120,"line":168},[118,357,358],{},"effort: low\n",[118,360,361],{"class":120,"line":175},[118,362,124],{},[118,364,365],{"class":120,"line":181},[118,366,172],{"emptyLinePlaceholder":171},[118,368,369],{"class":120,"line":186},[118,370,371],{},"你是代码考古专家。硬规则：\n",[118,373,374],{"class":120,"line":192},[118,375,376],{},"1. 只读，不改任何文件\n",[118,378,379],{"class":120,"line":198},[118,380,381],{},"2. 输出结构化：文件清单 \u002F 关键函数 \u002F 调用关系\n",[118,383,385],{"class":120,"line":384},15,[118,386,387],{},"3. 不要把大段源码贴回主会话，用\"文件:行号\"\n",[118,389,391],{"class":120,"line":390},16,[118,392,393],{},"4. 不确定的地方标 UNKNOWN，不要猜\n",[14,395,396,399,400,403],{},[21,397,398],{},"关键坑","：",[38,401,402],{},"tools"," 字段省略 = 继承全部工具。想真正限制权限必须显式写白名单。",[14,405,406,407,410,411,414,415,418,419,422,423,426],{},"CC 自带几个内置 subagent：",[38,408,409],{},"Explore","（只读探索）、",[38,412,413],{},"Plan","（出实施计划）、",[38,416,417],{},"code-reviewer","（阶段性收尾 review）、",[38,420,421],{},"general-purpose","（兜底）。日常用法很简单——自然语言：\"让 code-explorer 去找所有调用 ",[38,424,425],{},"PaymentService.charge"," 的地方，只返回清单。\"",[14,428,429,431],{},[21,430,287],{}," Subagent 解决的核心问题是上下文预算隔离。主会话开 Sonnet\u002FOpus 做高层决策，脏活累活派给 Haiku subagent 去跑——成本降一个量级，主会话永远清爽。",[26,433,435],{"id":434},"_4-mcp把内部系统安全地接进-agent","4. MCP：把内部系统安全地接进 Agent",[14,437,438,439,442],{},"MCP (Model Context Protocol) 是一套让 Agent 安全调用外部工具\u002F数据源的协议。对资深工程师而言，MCP 的意义是：",[21,440,441],{},"终于可以让 CC 安全地\"看到\"公司内部系统，而不是把敏感数据贴进 prompt","。",[14,444,445],{},"MCP server 提供三类能力（很多教程只讲 tools，漏了后两者）：",[447,448,449,465],"table",{},[450,451,452],"thead",{},[453,454,455,459,462],"tr",{},[456,457,458],"th",{},"能力",[456,460,461],{},"含义",[456,463,464],{},"典型用法",[466,467,468,482,499],"tbody",{},[453,469,470,476,479],{},[471,472,473],"td",{},[21,474,475],{},"Tools",[471,477,478],{},"Agent 能调用的函数",[471,480,481],{},"查 Jira、跑 SQL、发 PR comment",[453,483,484,489,492],{},[471,485,486],{},[21,487,488],{},"Resources",[471,490,491],{},"Agent 能读取的数据",[471,493,494,495,498],{},"把内部 wiki\u002F设计文档当 ",[38,496,497],{},"@"," 引用",[453,500,501,506,509],{},[471,502,503],{},[21,504,505],{},"Prompts",[471,507,508],{},"可复用的 prompt 模板",[471,510,511],{},"团队共享的\"按规范生成 RFC\"",[14,513,514],{},"安装命令（推荐用 CLI 而不是手写 JSON）：",[31,516,520],{"className":517,"code":518,"language":519,"meta":40,"style":40},"language-bash shiki shiki-themes github-dark","# stdio 类（本地子进程）\nclaude mcp add --transport stdio playwright -- npx -y @playwright\u002Fmcp@latest\n\n# HTTP 类（远端服务）\nclaude mcp add --transport http sentry https:\u002F\u002Fmcp.sentry.dev\u002Fmcp\n\n# 团队共享：加 --scope project，写入 .mcp.json 进 git\nclaude mcp add --transport http rpc-docs --scope project https:\u002F\u002Fmcp.internal\u002Fmcp\n","bash",[38,521,522,528,563,567,572,591,595,600],{"__ignoreMap":40},[118,523,524],{"class":120,"line":121},[118,525,527],{"class":526},"sAwPA","# stdio 类（本地子进程）\n",[118,529,530,534,538,541,545,548,551,554,557,560],{"class":120,"line":127},[118,531,533],{"class":532},"svObZ","claude",[118,535,537],{"class":536},"sU2Wk"," mcp",[118,539,540],{"class":536}," add",[118,542,544],{"class":543},"sDLfK"," --transport",[118,546,547],{"class":536}," stdio",[118,549,550],{"class":536}," playwright",[118,552,553],{"class":543}," --",[118,555,556],{"class":536}," npx",[118,558,559],{"class":543}," -y",[118,561,562],{"class":536}," @playwright\u002Fmcp@latest\n",[118,564,565],{"class":120,"line":133},[118,566,172],{"emptyLinePlaceholder":171},[118,568,569],{"class":120,"line":139},[118,570,571],{"class":526},"# HTTP 类（远端服务）\n",[118,573,574,576,578,580,582,585,588],{"class":120,"line":145},[118,575,533],{"class":532},[118,577,537],{"class":536},[118,579,540],{"class":536},[118,581,544],{"class":543},[118,583,584],{"class":536}," http",[118,586,587],{"class":536}," sentry",[118,589,590],{"class":536}," https:\u002F\u002Fmcp.sentry.dev\u002Fmcp\n",[118,592,593],{"class":120,"line":151},[118,594,172],{"emptyLinePlaceholder":171},[118,596,597],{"class":120,"line":157},[118,598,599],{"class":526},"# 团队共享：加 --scope project，写入 .mcp.json 进 git\n",[118,601,602,604,606,608,610,612,615,618,621],{"class":120,"line":163},[118,603,533],{"class":532},[118,605,537],{"class":536},[118,607,540],{"class":536},[118,609,544],{"class":543},[118,611,584],{"class":536},[118,613,614],{"class":536}," rpc-docs",[118,616,617],{"class":543}," --scope",[118,619,620],{"class":536}," project",[118,622,623],{"class":536}," https:\u002F\u002Fmcp.internal\u002Fmcp\n",[14,625,626,629,630,633],{},[21,627,628],{},"安全三原则","：只读连接优先、用环境变量而不是明文 token、限制 ",[38,631,632],{},"allowedTools"," 防止越权。",[14,635,636,638],{},[21,637,287],{}," MCP 是 CC 从\"单机工具\"升级到\"企业级 Agent\"的关键一步。优先接入 GitHub\u002FJira（工作流闭环）、DB 只读连接（让 CC 看 schema 写 SQL 质量直线上升）、内部 wiki（架构文档随手可查）。",[26,640,642],{"id":641},"_5-hooks事件驱动的自动化护栏","5. Hooks：事件驱动的自动化护栏",[14,644,645],{},"在以下时机自动跑脚本（约 29 个事件，挑最常用的）：",[447,647,648,660],{},[450,649,650],{},[453,651,652,655,658],{},[456,653,654],{},"事件",[456,656,657],{},"触发时机",[456,659,464],{},[466,661,662,675,694,707],{},[453,663,664,669,672],{},[471,665,666],{},[38,667,668],{},"PostToolUse",[471,670,671],{},"CC 调用工具后",[471,673,674],{},"改代码后自动 typecheck + lint",[453,676,677,682,685],{},[471,678,679],{},[38,680,681],{},"PreToolUse",[471,683,684],{},"CC 调用工具前",[471,686,687,688,230,691],{},"拦截 ",[38,689,690],{},"rm -rf",[38,692,693],{},"git push -f",[453,695,696,701,704],{},[471,697,698],{},[38,699,700],{},"SessionStart",[471,702,703],{},"会话开始",[471,705,706],{},"注入环境信息",[453,708,709,714,717],{},[471,710,711],{},[38,712,713],{},"Stop",[471,715,716],{},"会话结束",[471,718,719],{},"提醒沉淀 CLAUDE.md",[14,721,722,723,399],{},"最有价值的 Hook 配置——",[21,724,725],{},"自动反馈环",[31,727,731],{"className":728,"code":729,"language":730,"meta":40,"style":40},"language-jsonc shiki shiki-themes github-dark","{\n  \"hooks\": {\n    \"PostToolUse\": [\n      {\n        \"matcher\": \"Edit|Write\",\n        \"hooks\": [\n          {\n            \"type\": \"command\",\n            \"command\": \"pnpm -s typecheck && pnpm -s lint --max-warnings 0 || exit 2\"\n          }\n        ]\n      }\n    ]\n  }\n}\n","jsonc",[38,732,733,738,743,748,753,758,763,768,773,778,783,788,793,798,803],{"__ignoreMap":40},[118,734,735],{"class":120,"line":121},[118,736,737],{},"{\n",[118,739,740],{"class":120,"line":127},[118,741,742],{},"  \"hooks\": {\n",[118,744,745],{"class":120,"line":133},[118,746,747],{},"    \"PostToolUse\": [\n",[118,749,750],{"class":120,"line":139},[118,751,752],{},"      {\n",[118,754,755],{"class":120,"line":145},[118,756,757],{},"        \"matcher\": \"Edit|Write\",\n",[118,759,760],{"class":120,"line":151},[118,761,762],{},"        \"hooks\": [\n",[118,764,765],{"class":120,"line":157},[118,766,767],{},"          {\n",[118,769,770],{"class":120,"line":163},[118,771,772],{},"            \"type\": \"command\",\n",[118,774,775],{"class":120,"line":168},[118,776,777],{},"            \"command\": \"pnpm -s typecheck && pnpm -s lint --max-warnings 0 || exit 2\"\n",[118,779,780],{"class":120,"line":175},[118,781,782],{},"          }\n",[118,784,785],{"class":120,"line":181},[118,786,787],{},"        ]\n",[118,789,790],{"class":120,"line":186},[118,791,792],{},"      }\n",[118,794,795],{"class":120,"line":192},[118,796,797],{},"    ]\n",[118,799,800],{"class":120,"line":198},[118,801,802],{},"  }\n",[118,804,805],{"class":120,"line":384},[118,806,807],{},"}\n",[14,809,810,811,814,815,821],{},"效果：CC 每次改完 ",[38,812,813],{},".ts"," 文件，自动跑 typecheck。",[21,816,817,820],{},[38,818,819],{},"exit 2"," 是关键","——它表示阻塞错误，stderr 会反馈给 CC 让它自己修。这是从\"人手动验证\"到\"Agent 自我纠正\"的质变。每个有类型系统的项目都应该配一个。",[14,823,824,826],{},[21,825,287],{}," Hooks 是基础设施层的\"护栏\"——不是用来教 CC 怎么干活，而是防止它搞破坏。typecheck hook + 危险命令拦截 = 基本的安全网。",[26,828,830],{"id":829},"_6-plugins打包分发上述所有能力","6. Plugins：打包分发上述所有能力",[14,832,833,834,837],{},"Plugin 就是 Skills\u002FSubagents\u002FMCP\u002FHooks 的打包壳子，带 ",[38,835,836],{},"plugin.json"," 元数据，通过 marketplace 分发。安装：",[31,839,841],{"className":517,"code":840,"language":519,"meta":40,"style":40},"\u002Fplugin marketplace add anthropics\u002Fclaude-code    # 加 marketplace\n\u002Fplugin install github@claude-plugins-official    # 装具体 plugin\n\u002Fplugin                                          # 打开交互界面\n",[38,842,843,859,872],{"__ignoreMap":40},[118,844,845,848,851,853,856],{"class":120,"line":121},[118,846,847],{"class":532},"\u002Fplugin",[118,849,850],{"class":536}," marketplace",[118,852,540],{"class":536},[118,854,855],{"class":536}," anthropics\u002Fclaude-code",[118,857,858],{"class":526},"    # 加 marketplace\n",[118,860,861,863,866,869],{"class":120,"line":127},[118,862,847],{"class":532},[118,864,865],{"class":536}," install",[118,867,868],{"class":536}," github@claude-plugins-official",[118,870,871],{"class":526},"    # 装具体 plugin\n",[118,873,874,876],{"class":120,"line":133},[118,875,847],{"class":532},[118,877,878],{"class":526},"                                          # 打开交互界面\n",[14,880,881,884,885,888,889,892],{},[21,882,883],{},"选型建议","：只是自己\u002F一个仓库用 → 直接放 ",[38,886,887],{},".claude\u002Fskills\u002F"," 或 ",[38,890,891],{},".claude\u002Fagents\u002F"," 即可，不要打包 plugin。跨多个仓库复用 → 才打成 plugin，放到公司内部 git。",[26,894,896],{"id":895},"推荐引入顺序按-roi团队级","推荐引入顺序（按 ROI，团队级）",[14,898,899],{},"对于一个 5-20 人的后端\u002F全栈团队：",[213,901,902,908,919,925,931,937,943],{},[48,903,904,907],{},[21,905,906],{},"项目级 CLAUDE.md","（0 成本，立刻有效）",[48,909,910,399,913,230,916],{},[21,911,912],{},"1-2 个 Subagent",[38,914,915],{},"code-explorer",[38,917,918],{},"test-runner",[48,920,921,924],{},[21,922,923],{},"PostToolUse typecheck\u002Flint Hook","（挡掉 70% 低级错误）",[48,926,927,930],{},[21,928,929],{},"2-5 个内部框架 Skill","（公司越闭源 ROI 越高）",[48,932,933,936],{},[21,934,935],{},"GitHub \u002F Jira MCP","（工作流闭环）",[48,938,939,942],{},[21,940,941],{},"DB 只读 MCP","（让 CC 看 schema）",[48,944,945,948],{},[21,946,947],{},"把上面打包成内部 Plugin","，新人 onboard 一条命令装完",[26,950,951],{"id":951},"总结",[14,953,954,955,958],{},"CC 的可编程体系本质上做三件事：",[21,956,957],{},"灌上下文（Skills）、装能力（MCP\u002FSubagents）、定规则（Hooks\u002FCLAUDE.md）","。理解了这个框架，你就知道每个新需求该往哪个方向走。",[14,960,961],{},"最重要的是：不要一开始全上。先配 typecheck hook 和 1-2 个 Skill，把基础打牢，再按需扩展。插件装得越多不等于越强——每个 Skill\u002FHook 都消耗 attention。少而精。",[14,963,964],{},[965,966,968],"a",{"href":967},"\u002Fblog\u002F","返回博客列表",[970,971,972],"style",{},"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 pre.shiki code .sAwPA, html code.shiki .sAwPA{--shiki-default:#6A737D}html pre.shiki code .svObZ, html code.shiki .svObZ{--shiki-default:#B392F0}html pre.shiki code .sU2Wk, html code.shiki .sU2Wk{--shiki-default:#9ECBFF}html pre.shiki code .sDLfK, html code.shiki .sDLfK{--shiki-default:#79B8FF}",{"title":40,"searchDepth":127,"depth":127,"links":974},[975,976,981,984,985,986,987,988],{"id":28,"depth":127,"text":29},{"id":80,"depth":127,"text":81,"children":977},[978,979,980],{"id":85,"depth":133,"text":86},{"id":210,"depth":133,"text":211},{"id":258,"depth":133,"text":258},{"id":291,"depth":127,"text":292,"children":982},[983],{"id":302,"depth":133,"text":303},{"id":434,"depth":127,"text":435},{"id":641,"depth":127,"text":642},{"id":829,"depth":127,"text":830},{"id":895,"depth":127,"text":896},{"id":951,"depth":127,"text":951},"AI\u002FLLM","2026-05-03","md",{},"\u002Fblog\u002Fclaude-code-ecosystem",{"title":5,"description":16},"blog\u002Fclaude-code-ecosystem",[997,998,59,999,1000,1001],"Claude Code","Skills","Plugins","Hooks","AI编程","VaSLsSFiOtPMQHx4I0A-J3YhF3B7Q7ix3DW76Ftu9P4",1779959652907]