
1. 先说结论Codex和Claude Code到底在兴奋什么最近后台收到最多的私信是两类一类是“Codex怎么装、Claude Code怎么配”另一类是“现在满屏都在说Skill、Agent Skill这东西和插件有什么区别我到底要不要装”。老实说前一类问题网上教程已经很多了真正值得掰开揉碎讲的是后一类。因为Skill这个机制恰恰是决定AI Coding工具是“高级自动补全”还是“真正的AI架构师”的分水岭。我自己的判断Codex和Claude Code的底层价值不在一行行补代码的速度而在于它们把“对话式Agent”和“可复用的能力包”拼在了一起。你可以让Agent读代码、改代码、跑测试但如果它每次进入项目都是一张白纸那它本质上只是比你手速快一点儿的初级程序员。真正让它像老员工一样干活的东西是提前塞给它的那套“工作手册”——也就是现在大家挂在嘴边的Skill。这篇文章不聊那种“教你三分钟装好Claude Code”的入门内容而是直接进到架构层面Agent、Skill、上下文、工作流之间的关系然后拿一个具体的场景——Birdview也就是代码库全局鸟瞰视图类Skill来讲清楚怎么把一个Skill设计出来、注册进去、让Agent真正用起来。适合谁看已经跑通Codex或Claude Code基础使用、但对“Agent为什么还是不够聪明”这件事有困惑的人以及准备在团队里推行AI Coding规范、想把“看代码先看全局”变成团队默认动作的技术负责人。2. Agent、Skill、Workflow先把架构关系理清楚2.1 Skill和Agent不是一回事一个管决策一个管能力很多人把Agent和Skill混在一起聊其实是两个层级的东西。Agent是决策主体它根据你的指令决定下一步干什么、先调用什么、怎么验证结果。Agent拥有“对话记忆”和“工具调用循环”它会自己决定要不要调用某个工具来获取信息。Skill则是被Agent调用的“能力模块”它本质上是“一段可复用的指令若干工具脚本示例数据”的封装。你可以把Agent理解成一个新入职的工程师Skill则是他手里那本厚厚的《团队开发手册》——手册本身不会替工程师做决策但工程师翻到对应章节就知道该怎么处理某类任务。这个区别在落地的时候很重要。如果你把一段很长的架构规范直接写进Agent的系统提示词里这个Agent会变慢、变呆因为每轮对话它都得背着这一大段内容做推理。但如果你把它拆成一个个Skill只有在Agent判断“现在需要理解代码库结构”的时候才去加载对应Skill那大部分无关对话里Agent的注意力就不会被稀释。热词里有人搜“skill和agent的区别”这不是概念考试题而是直接影响你配置方式的设计决策。2.2 Skill的组成说明文件、参考示例、可执行脚本一个标准Skill一般包含三个部分。第一是说明文件通常叫SKILL.md里面写清楚这个Skill解决什么问题、在什么场景下触发、使用步骤是什么、有哪些注意事项。第二是参考示例给Agent一些输入输出的例子让它能模仿预期行为。第三是可选的可执行脚本比如Python脚本用来扫描目录结构、生成依赖关系等。拿Birdview类Skill举例。它的SKILL.md会写在开始任何大规模代码修改之前先调用此Skill分析项目根目录结构、识别核心模块、生成模块依赖清单、标注关键入口文件。参考示例则是一份“某个典型项目分析后的输出模板”。而可执行脚本可能是一个目录扫描工具帮Agent快速获取文件树而非自己一层层地翻。这种“说明示例脚本”的三段式结构能让Agent在执行时有据可依而不是靠模型猜。2.3 为什么Skill机制能解决“上下文爆炸”问题大模型最贵的资源是上下文窗口。你不可能让Claude Code在每次对话里都完整读一遍整个项目——那既慢又贵而且真塞进去之后模型反而容易抓不住重点。Skill机制提供的是“按需加载”的思路Agent先读一个极小的清单文件知道项目里有哪些Skill可用然后基于当前任务判断该加载哪一个。这就好比图书馆不会把几十万册藏书全摆在你桌上而是先给你一张分类索引卡你去对应书架取那一本。Codex和Claude Code在这方面的实现路径略有差异但核心思想一样让信息在需要时才进入上下文。这就能解释为什么同样一个Agent有人觉得好用有人觉得智障。区别常常不在模型本身而在你给它配了哪些Skill、以及这些Skill的设计质量。一个写得好的Birdview Skill能让Agent在动手改代码前先花几十秒摸清全局一个没配Skill的Agent则可能一头扎进某个文件里改完才发现改了错误模块。3. Birdview类Skill的价值让Agent先看地图再动手3.1 大模型写代码时最缺的不是语法是全局感AI编码最常见的翻车场景不是语法错误而是“局部正确、全局错误”。模型在一个函数里改得很合理但它不知道这个函数被另外三个模块调用或者另一个地方已经有类似工具函数存在结果就是重复造轮子、改坏接口、引入循环依赖。人类程序员犯这种错的概率较低的原因是我们天然具备“代码库地理感”——知道项目大致分几层、核心模块在哪、数据怎么流转。但Agent不一样它每次会话开始都是失忆状态对代码库没有持续的地图。Birdview类Skill就是干这件事的给Agent提供高层级代码库视图。它可能包含整体目录结构图、模块边界划分、核心数据流方向、关键服务入口列表。这有点像一个城市规划图Agent在进入具体街道之前先知道自己在一个什么规模的城市里、市中心在哪、主干道怎么分布。没有这张图Agent就像空降到一个陌生城市的出租车司机虽然会开车但只能靠导航一条条路试。3.2 Birdview的常见形态目录树、架构图、接口总览、变更影响面在设计Birdview Skill的时候不能把它设计成一个“万能分析器”那会什么都做不好。我建议拆成四种具体形态按任务类型选择加载第一种是目录结构总览适合Agent刚开始接触项目时快速建立文件层级概念。第二种是模块依赖图适合改动某个模块前判断影响范围。第三种是关键接口清单适合做跨模块改造时快速定位需要同步修改的地方。第四种是服务与部署视图适合排查线上问题时理解请求链路。我这里要强调一下这些形态不必一次全给Agent。比如你只改了前端组件就不需要后端服务图谱。所以设计Skill时要考虑“触发条件”——什么任务下该加载哪种子视图。好的Birdview Skill像是给Agent配了一位“咨询顾问”你先告诉顾问你打算做什么它再决定给你哪张地图。3.3 架构图不是越复杂越好控制在“能决策”的粒度一个非常容易犯的错误是生成一张巨大的、包含所有类和函数的架构图然后丢给Agent。这种图信息量过大模型看完其实什么都没记住。我自己在实操中总结的粒度标准是让Agent能回答三个问题即可——项目里有哪几个核心模块我当前要改的文件属于哪个模块我改完之后可能影响哪些相邻模块所以输出格式我倾向于用分层列表而不是复杂图形。第一层是项目级目录第二层是模块级边界第三层才细化到文件级入口。控制在三层以内每层不超过十几个条目。信息密度大不等于有效够决策用才是标准。这个原则对Skill设计里的“输出规范”章节尤其重要——你得明确告诉Agent“不要输出全量文件树只输出模块层”。4. 实操接入让Codex和Claude Code学会“开工前先看全貌”4.1 设计Skill入口与说明文件SKILL.md里到底该写什么我先直接给出一个可参考的SKILL.md结构这是我试过多个项目后留下来的模板不同工具可以再裁剪。--- name: birdview description: 在开始代码修改前快速分析代码库全局结构输出模块地图、关键入口与影响面。 trigger: 新项目初始化、大范围重构、跨模块改动、未知代码库探索 version: 1.0.0 --- # Birdview ## 使用场景 - 首次接触一个新代码库 - 准备进行大规模修改或重构 - 需要评估某个改动的跨模块影响 ## 禁止事项 - 不要输出全量文件树 - 不要逐行读源码后再汇报 - 不要在没有模块边界分析的情况下直接给出修改建议 ## 步骤 1. 使用 scan_tree 脚本获取仓库顶层目录结构深度不超过 3 层 2. 定位核心配置文件package.json / pyproject.toml / go.mod 等识别技术栈 3. 根据目录命名与配置文件中的模块声明划分核心业务模块 4. 输出分层结构项目层 - 模块层 - 关键文件层 5. 标注核心入口文件与路由注册位置 6. 若任务涉及修改输出受影响模块清单这个文件是给Agent读的不是给人读的所以语言要直白、动作要具体、禁忌要明确。我发现很多人写的Skill文档语言太“广告化”比如“本Skill旨在帮助用户获得更好体验”Agent看了等于没看。你得告诉它具体的步骤序列它才能执行。4.2 配套脚本轻量扫描器别让Agent自己翻文件纯粹靠模型自己去一层层翻目录不是不行但效率很低、而且容易漏。配一个轻量脚本能显著提升Skill的可靠性。我自己习惯用Python写因为跨平台好处理一个简单的目录树扫描器大概长这样import os import json import sys def scan_tree(root, max_depth3, exclude(node_modules, .git, dist, build, __pycache__)): result {name: os.path.basename(root), type: dir, children: []} if max_depth 0: return result try: entries sorted(os.listdir(root)) except PermissionError: return result for entry in entries: if entry in exclude or entry.startswith(.): continue full_path os.path.join(root, entry) if os.path.isdir(full_path): result[children].append(scan_tree(full_path, max_depth - 1, exclude)) else: result[children].append({name: entry, type: file}) return result if __name__ __main__: base sys.argv[1] if len(sys.argv) 1 else . print(json.dumps(scan_tree(base), indent2, ensure_asciiFalse))这个脚本我故意写得非常简单因为它的目的是给Agent提供“结构化目录快照”而不是做复杂的静态分析。复杂分析可以等Agent读完快照后自己决定是否需要。脚本控制在40行以内是有原因的太复杂的脚本容易在部分环境里跑不起来而简单的脚本几乎不会失败。AI Coding的实操里有条铁律——越底层的工具越要稳否则Agent会在工具上反复挣扎而不是专注于你交给它的任务。实际上这个扫描脚本还承担了一个隐藏功能它阻止了Agent在没有地图的情况下“瞎逛”。经验里Agent特别容易在探索阶段违反预期本来你想让它改一个组件它先把整个项目翻了一遍。有了扫描器给出的结构快照它就能快速定位目标。4.3 注册Skill到Codex和Claude Code不同工具的配置姿势目前主流AI Coding工具对自定义Skill的支持方式有差异但方向一致都是在你项目的配置目录里放一个带特定约定的文件夹。以类似结构为例一种常见做法是在项目根目录建立skills目录每个Skill一个子目录里面放SKILL.md和相关脚本。Agent在启动时会读取这个目录索引但不加载全部内容直到任务匹配Skill描述才把对应文档注入上下文。以一个典型的项目结构来示意my-project/ ├── skills/ │ └── birdview/ │ ├── SKILL.md │ └── scripts/ │ └── scan_tree.py ├── .agent/ │ └── agent.md └── src/需要注意Skill目录的命名、描述字段的准确程度直接影响Agent能否在正确的时机触发它。如果你的SKILL.md里description写得太模糊比如“分析项目结构”Agent可能在你问“这个项目怎么启动”时也去加载它浪费上下文写得太窄Agent又该触发时不触发。这个分寸需要根据你自己的项目反复调。4.4 让“先跑Birdview”成为默认动作工作流规则示例Skill装好之后还差最后一步让Agent在每次重大任务前主动先跑一遍Birdview而不是等你手动命令。这一步可以通过Agent的全局指令文件来实现。比如在项目的Agent配置里加入这样一段## 默认工作流 1. 接受到代码修改类任务时先检查是否已了解该模块在全局中的位置。 2. 如果不确定先调用 birdview skill 获取模块地图。 3. 获取地图后再定位具体文件禁止在无地图状态下直接修改。 4. 修改完成后对照地图确认影响面在交付说明中列出受影响模块。这条规则的价值在于把“先看全貌再动手”从偶发行为变成固定行为。我发现不用规则约束的话Agent十次里有两次会跳过探索直接改代码短期看起来快了但返工率明显上升。加了这条规则后初期每次任务多了几十秒分析时间但整体交付质量稳定很多。5. 选型和踩坑Birdview类Skill的三个常见问题5.1 坑一把Skill做成“架构图生成器”而不是“架构发现器”我见过有人为了让AI Coding看起来更酷让Agent直接调用绘图工具生成漂亮的架构图。思路我理解但这里有个方向性问题Agent需要的不是“一张给人看的架构图”而是“一份它自己能据此决策的结构化信息”。这两者有本质区别。图表为了美观会丢信息、合并节点、使用视觉隐喻这些对人类友好但对Agent反而是损失。Agent更需要的是一份语义清晰的JSON或Markdown结构化数据里面明确标注模块边界、依赖关系、入口位置。所以我会坚定建议Birdview类Skill的输出格式首选Markdown列表或JSON而不是生成Graphviz/D2图片。图片只能给人看模型无法基于图片做细致的代码修改决策。你可能会说“多模态模型能看图”但实测下来让它从架构图中定位到具体的文件行号准确率远不如直接给它结构化文本。5.2 坑二一次性全量扫描把上下文塞爆另一个高频出问题的地方是扫描范围失控。无良配置会生成一个包含几千个文件的全量树然后一股脑塞给Agent。这样做的后果是Agent的上下文被大量无关文件名占满真正重要的模块关系反而被淹没。我在4.1里写的max_depth3和exclude列表不是随便选的这两条参数的价值就是控制信号的信噪比。更进阶的做法是分段加载先扫根目录了解顶层结构然后由Agent基于任务目标“按需下沉”到特定子目录扫描。相当于先看城市地图再放大到具体街区。这个动作我个人建议用一个循环实现Agent分析当前任务后提出一个访问路径列表比如“我需要看src/core/和src/api/这两个目录的详情”然后针对性地展开这两处。这比一次性扫全库高效得多。5.3 坑三把Skill和指令混在一个文件里越写越乱最后一个常见问题是职责混乱。很多人会不断往Agent配置里追加各种指令“先看架构图”“记住要写单元测试”“代码风格要遵守ESLint”“提交信息要按Conventional Commits”。结果这个文件越来越长Agent每次对话都要背一大坨内容推理效率严重下降。实际上这里应该分层全局配置里只放“所有任务都适用”的规则比如代码风格和提交流程而“特定任务才需要”的能力比如架构分析就应该拆成独立的Skill按需加载。这个分层逻辑听起来简单但落地时大部分人做不到。因为往全局文件里加一行字是最省事的操作拆成Skill则需要额外设计触发条件、输入输出格式。然而省事的后果就是Agent越来越钝。你要相信Skill机制的架构优势只有在你想清楚“什么该常驻、什么该按需”之后才体现得出来。一次性的配置省下的时间会在后面几十次对话里加倍还回来。5.4 常见问题速查表我把这几类问题整理成一个表格方便你对照排查现象根因处理方案Agent从不主动加载Birdviewdescription关键词写得太窄在description中加触发场景词如“重构、影响面、模块分析”Agent加载Birdview后仍乱改代码Skill输出粒度过粗让输出精确到关键文件与模块边界并给出影响面清单上下文很快被占满扫描深度过深或排除规则不全限制max_depth为2-3层排除node_modules、dist等目录每次都重新扫描效率低下未缓存上次分析结果将架构快照存入项目缓存文件供后续会话复用全局指令文件越来越长Skill与指令混放按“常驻规则/按需能力”拆分层级指令文件只留常驻内容6. 团队落地Birdview怎么融入AI Coding协作流程6.1 把Skill纳入代码库版本管理如果你只是在你自己电脑上配置一个Birdview那它顶多算你个人的小技巧。一旦团队开始多个人都用AI CodingSkill的共享和版本管理就成了一个工程问题。我的建议是Skill直接放进代码仓库和项目源码一起管理。这样新成员clone完仓库就自带这套AI协作配置不用再读一份“团队AI环境配置手册”一步一步折腾。仓库里的skills目录最好统一命名、统一结构。我在4.3给的示例结构可以直接用也可以增加一个docs目录放设计文档。还有一点经验Skill的版本号写在SKILL.md的frontmatter里升级时别只改内容版本号和变更说明要一起更新。这样在排查“为什么Agent行为突然变了”的时候能追到是哪一次Skill更新导致的。6.2 多智能体协作场景不同角色加载不同Skill热词里有人搜“多智能体AI agent coding协助开发规范”这块其实很适合接上架构分析类Skill。在多人协作的AI Coding流程里往往不是只有一个Agent而是有负责需求分析的、负责写代码的、负责Code Review的。每个Agent职责不同应该加载的Skill也不同。比如负责大型重构的技术负责人Agent开工前必须先加载Birdview做全局影响分析负责具体功能开发的Agent只需要加载按模块划分的局部结构Skill做Code Review的Agent则额外需要一个“变动范围对照”的Skill来检查提交涉及的文件是否与预期一致。如果所有Agent共享同一套全量Skill不仅浪费上下文还容易造成角色混乱。把Skill按角色分配本质上是在给每个Agent配一套专属工具箱。6.3 从“装一个Skill”到“沉淀一套编码规范”最后我想说一个容易被忽略的点Skill不仅是给Agent用的它同时也是团队经验的沉淀容器。你踩过的那些坑——哪种改动容易破坏哪个模块、哪个目录结构常常被人误解、哪个接口变更连锁影响最大——都可以写进Birdview的说明文件里。AI Coding时代真正值钱的可能不是某一个脚本而是这份不断更新的“代码库生存指南”。我有一次把某项目里“用户鉴权模块的改动必须同步更新数据库迁移脚本”这条注意事项写进了该模块对应的Skill说明里。后来每次Agent动这个模块它都会主动提醒我是否需要做数据库变更。这就是把个人经验编译进团队AI基础设施的过程。当你把这种事做到七八个模块以后你会发现Agent的靠谱程度上一个台阶因为它不再是那个“只会写代码但不懂项目规矩”的新人了。7. 一些基于实操的最终提醒写到这里内容已经足够长最后只补充三句掏心窝的话。第一Skill设计是“减”的艺术。不要试图让一个Skill覆盖所有分析场景宁可拆成四个精准的小Skill也不要写一个什么都管的“超级Skill”。模型在模糊指令面前远没有你想象的聪明边界清晰才能稳定触发。第二别迷信任何现成的Skill市场。社区里那些“一键安装的Skill推荐”可以拿来当参考但真正贴合你项目的Skill一定得改过、试过、在真实任务里验证过。Birdview这类架构分析Skill尤其如此因为它高度依赖项目的目录风格和技术栈。通用模板能给你骨架血肉得自己填。第三把AI Coding当作一个需要持续调校的系统而不是装完就能躺赢的工具。我会在每个迭代周期花点时间翻一翻Agent最近失败的任务看看是不是哪个Skill的说明有歧义、哪个脚本返回格式不够友好。这个“调校”的过程其实是团队把AI能力内化的过程。等你的Skill库沉淀够厚你会明显感觉到Agent从“偶尔惊艳”变成了“稳定够用”——那才是AI Coding真正上价值的时候。