假设你git到了Anthropic 官方发布面向法律行业的插件claude-for-legal的源码里面有12个插件商事合同、劳动法、诉讼、合规、尽职调查……但你一看这玩意儿针对美国的啊我是跟中国法打交道的玩个锤子还做适配先。于是你在这个基础上做了中国化改造把北大法宝的MCP接口或着我星球会员的法律法规和案例查询CLI接进去了把审查逻辑里的 Delaware law 换成了《民法典》把 GDPR 换成了《个人信息保护法》。你想用这个改造过的版本搭一套自己的法律AI体系。你装好了劳动法插件花了一个小时完成初始化填好了你们所的劳动争议审查规则、经济补偿金的计算偏好、哪类风险点要标红。第二天插件出了新版你安装更新。打开一看配置全没了模板恢复了初始状态。你让AI检索类似案件它回复说根据北大法宝查到的相关判例……但北大法宝的MCP你还没有配置账号也还没有绑定。AI看到配置文件里声明了北大法宝的连接信息就认为它能用然后从训练数据里补充了一批看起来真实的判决引用。你说帮我看看这个劳动合同系统里有竞业限制审查、劳务派遣合同审查、保密协议审查等十几个专项技能。AI选了一个结果是错的和你发的合同类型不符。你重发了一遍这次选了另一个结论又不一样。这三个问题不是偶发的bug是没有基础设施时必然会发生的系统性缺陷。解决它们的是四个文件plugin.json、.mcp.json、CLAUDE.md、SKILL.md。第一层plugin.json — 插件怎么被识别每个插件根目录下有一个隐藏文件夹.claude-plugin/里面是一个8行的plugin.json只有四个字段name、version、description、author。name 是整个插件在系统里的地址起点。技能的触发命令从这里派生——商事合同插件叫commercial-legal它的审查技能触发命令就是/commercial-legal:review劳动法插件叫employment-legal对应命令是/employment-legal:review。两个插件都有叫review的技能但前缀来自各自的 name永不冲突。用户配置文件的存储路径也从 name 派生不同插件的配置物理上分开存放。version 不是给用户看的更新日志是给系统的迁移信号。用户在 1.0.1 下填好了所有配置插件升到 1.0.2系统看到版本号变了就知道要去旧路径检查有没有已填写的配置找到了就迁移到新路径再触发增量问卷只问新增字段不让用户重来。版本号永远写1.0.0不更新这个机制就失效了。description 是四个字段里最容易被忽视的。它不是给人看的说明是给AI做技能匹配的触发信号。当用户说帮我审一下这份劳动合同系统需要从12个插件、几十个技能里找到最相关的那个判断依据就是把用户意图和每个插件的 description 做语义匹配。description 里写review employment contracts under PRC Labor Contract Law还是只写法律合同插件决定的是匹配精度也是这个技能能不能在正确的时机被调用。author 是信任链的起点。Anthropic 出品的插件和社区贡献者出品的插件在安装时走不同的审查路径。后者要通过白名单核验author 字段不在白名单里安装请求被拒绝。第二层.mcp.json — AI的外部工具怎么接入MCPModel Context Protocol模型上下文协议是 Anthropic 提出的一个开放标准让AI可以直接向外部系统发请求而不是依赖人工把数据粘贴到对话框里。.mcp.json这个文件告诉AI它有哪些外部工具可以用。每个连接器声明里description 字段是最重要的。AI决定要不要调用一个工具看的是这里不是 title。Ironclad 的 description 里写了expiring MSAs即将到期的主服务协议、termination clauses终止条款、vendor agreements供应商协议当用户问有没有快到期的合同AI会想到Ironclad如果 description 只写contract databaseAI可能想不到去调它或者调了却不知道该传什么参数。不同法律领域需要完全不同的连接器集合。商事合同插件连接 Ironclad合同库、DocuSign电子签名、iManage文档管理。诉讼插件连接 CourtListener联邦判例库、Trellis州法院数据、Everlaw电子取证平台。劳动法插件只需要 Slack 和 Google Drive。连接器不是越多越好多余的连接器会干扰 AI 的调用决策让它在不合适的场景下尝试调用一个根本用不到的工具。配置了不等于能用这是这一层最核心的规则。.mcp.json里声明了北大法宝不代表北大法宝可以查可能是账号没有、API key 没配置、网络不通。冷启动面试插件初始化向导有一个专门的探测步骤只有实际调用成功了才标记为✓ 可用声明了但没有探测通过的标记为⚪ 未验证并说明怎么确认。这条规则的代价是每次初始化要真正发出测试请求。收益是AI 不会在连接器不可用时从训练数据里补充一个听起来真实的引用。在法律工作里一个有来源但来源是虚构的结论比没有来源的结论更危险因为它看起来已经有依据了。第三层CLAUDE.md — 用户配置怎么在版本升级中活下来这是开头那个配置全没了问题的解法。根本矛盾在于插件自带的CLAUDE.md是模板随着插件版本更新会被替换。但用户填进去的配置是用户数据不能被替换。如果模板和用户数据住在同一个文件里更新模板就必然损坏用户数据没有中间地带。解法是物理分离让它们住在不同的文件放在不同的路径。插件目录里的CLAUDE.md是只读模板跟着插件版本走每次升级可以被覆盖。用户配置住在~/.claude/plugins/config/claude-for-legal/插件名/CLAUDE.md完全在插件目录之外插件怎么升级都碰不到它。还有第三层跨插件共享的公司画像存在~/.claude/plugins/config/claude-for-legal/company-profile.md12个插件都读它不需要每个插件里重复填一遍公司信息。模板里凡是需要用户填写的位置都有一个[PLACEHOLDER]标记。每个技能在开始工作之前都会先检查用户配置文件。发现[PLACEHOLDER]还在技能停下来拒绝继续这个插件还没有配置无法给出有用的输出。请先运行冷启动面试大约需要10-15分钟。[PLACEHOLDER]不是给人看的提示是给技能代码看的执行拒绝信号。宁可拒绝工作也不输出一个通用的、看起来像定制但实际上什么都没考虑的法律审查意见。通用的审查意见让人误以为已经针对自己的情况做了分析这比没有审查意见更危险。第四层SKILL.md 路由 — 用户的一句话怎么到达正确的技能用户说帮我看看这份合同系统里有十几个审查技能用哪个claude-for-legal的解法是两层分离一个路由技能负责识别文档类型再调用对应的专项技能。路由逻辑的核心是一张硬编码的映射表这里有个容易忽略的设计路由优先读文档标题不是优先读正文关键词。一份40页的主服务协议正文里confidential这个词可能出现上百次。如果用关键词匹配正文系统会把这份MSA误判为NDA审查结论完全错误。文档标题是路由的主要信号正文是备用。路由技能发现文档附件里有数据处理协议DPA会同时调用对应的数据保护分析合并成一份完整的审查备忘录。子技能被标记为user-invocable: false用户不能直接输入/nda-review这条技能只能由路由触发。原因很直接用户如果直接用/nda-review审一份 SaaS 合同结论是错的。为什么不让AI自由决定路由有两个理由。一是可审计性。硬编码的映射表路由出了问题能看到哪一步走错了能修复。AI自由决策出了问题不知道为什么也没法系统性修复。二是一致性。同一类合同每次都走同一条路由同类合同的审查结论才能横向比较。法律工作需要稳定的、可重复的流程不能今天心情好就路由对了。四个文件合在一起plugin.json解决身份问题这个插件叫什么名字、命名空间怎么隔离、description 让AI知道什么时候该调用它。.mcp.json解决工具诚实的问题声明了哪些外部连接器但声明不等于可用只有探测通过才标为可用。CLAUDE.md解决数据持久的问题模板和用户配置物理分离升级不丢数据[PLACEHOLDER]保证没有配置就不会输出错误结论。SKILL.md路由层解决意图准确的问题用户的一句话通过硬编码映射表找到对应的专项技能可审计、可修复。Anthropic 在这套设计里有一个反复出现的判断对于法律工作系统应该把确定地拒绝作为比不确定地回答更优先的选择。AI编造了一个有来源的虚假引用不如直接报错。插件没有配置就输出通用审查意见不如拒绝工作让用户先完成初始化。路由逻辑让AI自由发挥偶尔出错不如硬编码映射表出了错能找到根因并修复。四个文件把这个判断编码进了插件运行的每一个层次。