AI 工具体系 · 调度全景
PLUGIN & MCP · 调度全景

5 个项目 · 2 种形态
4 种调度方式

4 种 = Hook 确定性拦截 · Skill 语义触发 · MCP 工具 按需调用 · Slash 人工命令

每个 plugin / MCP 是做什么的,以及它在你写代码时——由什么触发、何时介入、怎么接力。

🧩 3 插件 + 2 MCP 实例🛡️ 6 道 Hook🧠 35 Skill🔌 1 引擎 2 实例
这页讲清楚

这张图只回答两件事

① 每个是做什么的

3 个插件 + 2 个 MCP 实例,各自的职责边界。先用「形态」给它们定调。

② 如何被调度的

运行时谁来决定「现在该谁上」——Hook / Skill / MCP 工具 / Slash 四种触发逻辑。

理解了这四种调度方式,整套体系就不再是黑盒。

先分清两种交付形态

Plugin 与 MCP:装进 Claude Code 的两种方式

形态一Claude Code 插件

/plugin install 安装。内部装两种东西:Skill(给 AI 的行为指引)+ Hook(挂在工具生命周期的确定性脚本)。

team-standards 团队开发规范
project-coding-profiles 项目编码画像
yoooni-daily-plugin Yoooni 日常工具箱(含一键安装)

形态二MCP 服务

claude mcp add 注册常驻进程(stdio),对外暴露一组工具。AI 需要时主动调用、按需取数,不灌满上下文。

domain-knowledge 业务公共认知库
cross-topology 跨项目拓扑库
两者共用同一引擎、两个实例
核心

四种调度方式 · 谁决定「现在该谁上」

Hook 钩子(确定性·机械拦截) Skill 技能(语义·LLM 判断) MCP 工具(按需·Agent 主动调) Slash 命令(人工·用户显式)四种

确定性

🛡️ Hook
运行时调度·与 LLM 无关

PreToolUse 工具调用前按 matcher 自动跑,可放行/警告/硬阻断。绕不过的防护栏。

语义

🧠 Skill
LLM 按 description 判断

把你的意图和技能描述比对,命中就加载这份「作业手册」。无需敲命令。

按需

📚 MCP 工具
Agent 主动调用

需要业务/拓扑认知时主动查。渐进披露:searchgetrelated

人工

⌨️ Slash
用户显式输入 /命令

你主动敲的 /命令(如 /plugin install):最确定(敲啥执行啥、无歧义),但用得最少——日常你大多是自然语言提需求(那是触发 Skill / 让 AI 调 MCP,不算 Slash)。多用于安装注册等一次性动作。

第 4 页详解

四种调度的生命周期:何时载入、何时触发

① 起点 · 人发起
⌨️ Slash / 需求

用户键入 /命令 或直接打字提需求——整件事的触发源,人指挥 AI。

② 加载期 · 会话就位
🧠 Skill 描述 · 📚 MCP 工具表

AI 上下文里已就位:每个技能"何时用"的描述 + 可调外部工具清单。Hook 则由宿主从 hooks.json 注册,AI 看不见

③ 干活 · 按需触发
🧠 翻手册 · 📚 取数据

命中意图 → 载入该 Skill 全文照做;需要业务/拓扑 → 主动调 MCP(先 search 摘要、再 get 正文)。

④ 落地前 · 拦截
🛡️ Hook 安检

AI 每次"即将 Write/Edit/Bash" → 宿主在落盘前自动跑 hook:放行 / 警告 / exit 2 阻断。绕不过。

🛡️ Hook 凭什么能自动拦? 真正写文件 / 跑命令的是宿主(Claude Code/Codex),不是模型——模型只发"工具调用请求",宿主才实际执行,它卡在每次工具调用的咽喉,故能在执行前插一脚(大脑发令、手上装安检,绕不过)。
拦截时机=PreToolUse:模型请求 Write/Edit/Bash → 宿主在真正落盘/执行前,把入参(路径/内容/命令)喂给 hook → 退出码 2=拦下(动作不发生、提示回灌让模型改)、0=放行。(PostToolUse 只能事后补救,能"拦"的只有执行前的 PreToolUse)
调度
何时载入(就位)
何时触发(起作用)
谁决定
🧠 Skill 技能
会话开始:只载入"有哪些技能 + 各管啥"的描述
对话命中 description → 载入该技能全文按它执行
LLM 语义
📚 MCP 工具
连接后:外部工具清单(名+schema)进可用表
AI 判断需要外部数据 → 主动调用、按需取
Agent 主动
🛡️ Hook 钩子
宿主启动:从 hooks.json 注册,AI 不感知
AI 每次"即将执行工具" → 宿主自动安检/拦截
运行时·确定性
⌨️ Slash 命令
命令清单在宿主注册,用户可见
用户显式键入 /命令(或直接提需求)
🔗 关系链:人(Slash/需求) ▶ Skill 领路 ▶ MCP 供料 ▶ AI 产出 ▶ Hook 把关 ▶ 落地Skill/MCP 是 AI 主动(按语义、按需),Slash 人发起Hook 被动拦截。⚠️ Hook 不是"AI 记得自己的禁区"——AI 事前并不知道,是宿主在动作落地前替它把关,所以绕不过。
第 5 页详解 · Hook 拆解

Hook 的触发与判定:绑定 → 喂数据 → 看退出码

🛡️ 触发时序:宿主启动读 hooks.json 登记 → 模型请求 Bash / Write → 命中 matcher → 执行前 spawn 脚本、stdin 喂 JSON(命令/路径/内容)→ 脚本判定 → exit 2 拦 / exit 0 放
// ① 触发:hooks.json —— 把「事件+工具」绑到脚本,宿主启动时登记进事件表 "PreToolUse": [{ "matcher": "Bash", // 哪类工具调用前拦(Bash / Write|Edit…) "hooks": [{ "command": "node …/check-commit-no-ai-signature.js" }] }] // ② 判定:脚本核心 —— 拿宿主喂来的命令,套「写死的正则」算真假(非 AI,确定性) const cmd = payload.tool_input.command; // 宿主 stdin 喂来的 git commit 全文 if (!/\bgit\b.*\bcommit\b/i.test(cmd)) process.exit(0); // 不是 commit → 放行 const 命中 = /(^|\n)\s*co-authored-by:.*\b(claude|anthropic)\b/i.test(cmd) // 署名行指向 AI || /🤖|noreply@anthropic\.com/i.test(cmd); // 机器人 emoji / 机器邮箱 process.exit(命中 ? 2 : 0); // 命中 → exit 2 拦截;否则 exit 0 放行
命中示例:提交信息结尾带 Co-Authored-By: Claude <noreply@anthropic.com> → 正则命中 → exit 2,commit 被拦,stderr 提示回灌、让模型删署名重提。
⚖️ 判定是确定性死规则(正则/布尔,不是模型理解):同输入永远同结果。规则写得越紧越少误判(正文普通提 "claude" 不命中);留 =warn / off 旁路兜底。
拟人化总览 · 用人话理解

把它想成:一个超级员工 + 老板下令 + 技能点 + 外部资料库 + 安检

🦸 超级员工 = AI 本体
手快、不知疲倦、什么都肯干——但要「武装」(技能 / 资料)才靠谱,要「约束」(安检)才放心。下面四个角色围着他转:

👔 老板(你)

= Slash 命令

下达需求「做这个 / 改那个」——一切的起点,人发号施令。

🎯 技能点

= Skill

员工内化的本领 / 招式书:先知道「我会哪些招」,命中场景就放对应招(先设计、按规范…)。

📚 外部资料库

= MCP

随时打电话查的资料库 / 外援专家:业务真理、DDL、跨项目地图,缺料就查、不瞎编。

🛡️ 安检 / 纪委

= Hook

不在员工身上,是公司装在流程上的关卡:他每次「交付 / 动手」前都要过安检,不合规当场拦、绕不过

🎬 老板下令(Slash) ▶ 超级员工凭技能点(Skill)干活、缺料就查外部资料库(MCP) ▶ 每次交付前过公司安检(Hook) ▶ 放行才落地。技能点 / 外援是「他自己」的延伸(主动用);安检是「公司」的外挂(被动拦、确定性)。
逐个项目 · 做什么 + 怎么调度
⚖️ team-standards 插件
26 skills + 6 hooks
团队通用「流程监理 + 编码规范」:先设计后编码、规范提交、知识沉淀,覆盖研发全流程。
HOOKPreToolUse·Bash(2 道)check-git-commit-skill(提交规范检查)、check-commit-no-ai-signature(AI 署名拦截)
HOOKPreToolUse·Write|Edit(4 道)check-design-doc(设计文档检查)、check-backend-kg-readiness(知识图谱预读)、check-comment-density(注释红线)、check-sql-ddl-readiness(写 SQL 前核对 DDL)
SKILL语义触发 26 个,如:design-doc-required(先出设计文档)、coding-standards-common(通用编码规范)、git-commit-standards(提交规范)、daily-work-log(工作日志)…
Hook 支持 warn / block / off 环境变量调档
📌 几个真实例子(问题 → 因 → 解)
🔴 做「打版进度展示染厂收胚时间」,AI 直接改 Morder.xml,方向反复(先 Revert 又重做)
🔍 没先理清取数口径/坐标就动手
design-doc-required 先出设计、定位坐标再写
🔴 提交打版进度改动时被自动加 Co-Authored-By: Claude 署名
🔍 宿主默认指令擅自追加
check-commit-no-ai-signature 落盘前机械拦下
🔴 把「染厂收胚时间」误取 transfer.tdate(应为 checkdate)
🔍 写 SQL 前没核对 DDL/字段口径
check-sql-ddl-readiness 改 SQL 前必读 DDL 基线
逐个项目 · 做什么 + 怎么调度
🧷 project-coding-profiles 插件
2 skills + 2 hooks
项目专属「编码画像」:GBK/UTF-8 编码守护、前端控件红线、新模块脚手架。仅在登记过画像的项目内生效。
HOOKPreToolUse·Write|Editcheck-file-encoding(编码守护):防 GBK 存量被 UTF-8 重存致乱码
HOOK写 WebRoot/**.{jsp,js}check-frontend-controls(前端控件红线):拦原生 alert/confirm/prompt
SKILLencoding-guard(编码守护指引:GBK↔UTF-8 回环)、module-scaffold(新模块脚手架:说"加个模块"自动生成骨架)
仅当 profile.json 的 rootMarkers 命中、且只查本次新增内容才触发
📌 几个真实例子(问题 → 因 → 解)
🔴 改打版工艺单上传的 jsp/Action,中文变乱码、编译不过
🔍 Yoooni 源码是 GBK,AI 默认按 UTF-8 写盘
check-file-encoding+encoding-guard GBK↔UTF-8 安全回环
🔴 打版进度页面弹窗用了原生 alert/confirm
🔍 AI 不知 Yoooni 前端控件红线
check-frontend-controls 拦原生弹窗、强制公共控件
🔴 加「打版工艺单批量文件上传」,从 Action 到 jsp 手写一堆样板
🔍 没有项目专属脚手架
module-scaffold 一句「加个模块」生成纵向切片
逐个项目 · 两个 MCP

业务认知 + 跨项目拓扑(同一引擎

📖 domain-knowledge

project-domain-knowledge · MCP

业务公共认知:计价/状态/流程/规则。「换代码重写也成立」的业务真理。

调度:Agent 按需 → search_knowledgeget_knowledgeget_relatedreload_knowledge 热加载

🗺️ cross-topology

cross-project-topology · 复用同一 server.js

跨项目拓扑:调用链 / 数据流 / 接口契约 / 服务依赖。「当前怎么连」的实现级地图。

工具集与 domain-knowledge 完全一致;靠 DOMAIN_KB_DIR 指向本仓库知识根
📌 几个真实例子(问题 → 因 → 解)
🔴 写打版进度取数,不知「配送染厂/染厂收胚」各取哪个时间字段
🔍 业务口径散在人脑/口头,没集中
domain-knowledge 自助查:makedate=配送、checkdate=收胚
🔴 改打版进度牵动 develop→织造收货→调拨入仓 多处,不知影响面
🔍 跨模块/单据关联没人记录
cross-topology 查调用链/影响面
🔴「染厂收胚=checkdate」口径每人各记一份、易漂移
🔍 没有集中权威源
✅ 集中 PDK:场景卡「打版送染厂调拨关联」+ DDL 基线,全员同步
逐个项目 · 日常工具箱
🧰 yoooni-daily-plugin 插件
7 skills
Yoooni 日常工具箱:新人入职、本地启动、生产日志排查。也是整套体系的「总开关」。
SKILL语义触发:「我是新人怎么开始」「启动 Yoooni」「查生产日志」「装公司工具」…
SLASHyoooni-install-team-tools:一键拉取+构建+注册前面四件套(team-standards / coding-profiles / domain-knowledge / cross-topology)
它们怎么接力 · 让 AI 改一个「面料计价」功能

调度时序(上半场)

1

SKILL你说「改一下计价逻辑」

design-doc-required 自动介入:先别写码,产出设计文档、定位代码坐标。

2

MCPAI 查业务真理

domain-knowledgesearch("计价") → 取「计价口径」「成本构成」,不用你逐条口述。

3

MCPAI 查跨项目链路

cross-topology:看计价涉及哪些项目/接口,改动会牵动谁。

4

HOOK即将写代码(拦截关卡)

PreToolUse·Write 触发多道 hook:设计文档?读过知识图谱?GBK 会乱码?前端用了原生弹窗?不合规 → 阻断。

它们怎么接力

调度时序(下半场)

5

SKILL按规矩落代码

coding-standards-common + encoding-guard:分层、GBK 编码回环、命名规范。

6

HOOK提交时再设一关

PreToolUse·Bashcheck-git-commit-skill:大改没走提交规范 skill 就拦下。

7

SKILL沉淀

daily-work-log 记日志;新业务规则回写 domain-knowledge 即时生效——下次别人直接复用。

🔑 Skill 先把你拉进流程 → MCP 喂认知 → Hook 每次落盘/提交把关 → Skill 收尾沉淀。Hook 不讲情面(确定性阻断),Skill/MCP 灵活(按语义和需要)。
这套东西怎么装起来的

注册接线 · 一个引擎,跑两个 MCP 实例

# 在 Claude Code 里说一句「安装公司团队工具」→ yoooni-install-team-tools skill 启动 # ① 脚本(install-team-tools.ps1) 自动执行 —— 你不用手敲 git clone/pull 2 个 MCP 仓(project-domain-knowledge 引擎 + cross-project-topology 知识) # 插件那 2 个不 clone cd project-domain-knowledge && npm install && npm run build # 构建唯一引擎 claude mcp add domain-knowledge -- node .../dist/server.js # 注册实例① claude mcp add cross-topology -e DOMAIN_KB_DIR=.../knowledge -- node .../dist/server.js # 实例②(同引擎) # ② 唯一要你手敲(slash 命令,脚本只能打印、你照着敲)—— 在 Claude Code 会话里 /plugin marketplace add https://gitee.com/wyoooni/team-standards.git # 先注册市场(来源) /plugin install team-standards@team-standards # 再从市场装 /plugin marketplace add https://gitee.com/wyoooni/project-coding-profiles.git /plugin install project-coding-profiles@project-coding-profiles /reload-plugins # 重载生效
① 脚本自动:只 clone 2 个 MCP 仓 + 构建 + 两个 claude mcp add(幂等)。为什么只 2 个?MCP 跑本地文件(dist/server.js + knowledge 目录)必须 clone;插件不用 clone——走市场由 Claude Code 自取。
⌨️ ② 插件两步、都得你手敲:先 /plugin marketplace add <gitee 仓>(注册市场/来源)→ 再 /plugin install <插件>@<市场>没注册市场就装不了;slash 命令脚本代不了,只能打印出来你照敲。
🔌 domain-knowledge

引擎指向 project-domain-knowledge/knowledge · 业务真理(稳定少改)

🔌 cross-topology

同引擎 + DOMAIN_KB_DIR 指向 cross-project-topology/knowledge · 拓扑(随代码变)

一句话收尾
四种调度各司其职:
Hook 把关、Skill 领路、MCP 供料、Slash 启动
你只管提需求,装备自动各就各位。
Hook 确定性阻断 Skill 语义领路 MCP 按需供料 Slash 人工启动
尾页 · 落地即自动维护

一个插件,全套自己保鲜

① 一次安装
yoooni-daily-plugin

一次 marketplace add + install,从此它当"管家"。

② 开会话即刷
SessionStart hook

每天后台 git pull + 必要时重建公司 MCP 仓,不阻塞会话。

③ 会话外也刷
Windows 计划任务

每 4 小时自动同步,Claude Code 没开也保持最新。

④ 插件有新版
自动提示 + 一键

新版提示带进上下文,一句"更新公司套件"即更。

✅ MCP 层 = 全自动

业务知识 / DDL / 引擎跑本地文件,git pull + 重建即最新,零操作

⚠️ 插件层 = 一键

装/更新走 /plugin slash、脚本代不了;做到自动检测 + 一句话更新

规范、知识、套件——装一次,之后自己保持最新
人只管提需求,工具自己进化。
1 / 12
← → / 空格 翻页 · F 全屏 · Home/End 首末页