Hotdry.

Article

从 Vibe Coding 到系统工程:Claude Code 本能学习框架的 Research-First 实践

解析 177K-star Everything Claude Code 的本能 Instincts 系统(响应式模式学习)与 research-first 开发方法论,区别于 vibe coding 的系统性工程路径与可落地参数。

2026-05-10ai-systems

当 AI 编程工具从实验性玩具走向生产级助手,一个根本性的矛盾浮出水面:模型擅长即时生成代码,却缺乏对项目上下文、工程约定和长期演进的理解。Vibe Coding 的本质是「让模型猜」,而真正的工程化路径需要「让模型学」。Everything Claude Code(以下简称 ECC)正是围绕这一核心需求构建的完整系统 —— 通过本能 Instincts 机制实现响应式模式学习,通过 research-first 方法论确保每一次编码都建立在充分调研的基础上。

从概率性技能到确定性观察

ECC 的连续学习模块经历过一次架构范式转移。初代的 Continuous Learning v1 依赖技能(Skills)来触发观察行为,实质上是让模型在特定时机「尝试」识别模式。这种方案存在根本性缺陷:技能的触发率在 50% 到 80% 之间波动,意味着大量有价值的模式被遗漏。更关键的是,技能是概率性的 —— 它依赖于模型自身的判断,而模型往往对自己「应该学到什么」缺乏准确的元认知。

v2 版本彻底重构了学习管道。Continuous Learning v2 通过 PreToolUse 和 PostToolUse 两种钩子(Hooks)实现 100% 可靠的工具使用捕获。钩子是 Claude Code 事件系统的底层触发机制,每一个工具调用 —— 无论是文件读取、代码编辑还是 Bash 命令执行 —— 都会触发这些钩子。这意味着学习的覆盖面从「模型认为重要」扩展到了「实际发生的一切」。

这种设计的工程意义在于:模式发现从概率游戏变成了确定性过程。当用户在一次会话中多次纠正模型的函数式风格偏好时,系统不会因为技能没被触发而错失这条信号。当某个特定的项目约定在多次代码修改中被反复遵循时,系统有义务将其记录下来。

原子级本能的置信度演化

ECC v2 将最小的学习单元命名为「本能(Instinct)」,区别于 v1 中的完整技能。本能的原子性体现在一个触发器对应一个动作 —— 这是刻意为之的设计选择。完整的技能包含了工作流程、验证步骤和退出条件,过于笨重且难以跨项目复用。而本能是轻量级的模式片段,可以像乐高积木一样被灵活地组装成技能或命令。

每一个本能都携带一个 0.3 到 0.9 的置信度评分,这个评分不是静态标签,而是一个动态演化的数值指标。0.3 表示尝试性观察 —— 系统在一次或少数几次观察后推断出的弱假设;0.5 表示中等置信度,相关模式已被多次独立观察到;0.7 表示强置信度,系统对该模式的适用性有足够把握;0.9 表示几乎确定的核心行为,该模式已经成为项目开发中不可忽视的默认规范。

置信度的升降遵循明确的工程逻辑。当同一个模式被重复观察到,或者用户没有纠正系统建议的行为时,置信度累积增加。当用户明确提出相反的修正意见,或者该模式在较长时间内未被观察到时,置信度衰减。这种设计确保了学习系统的自我纠错能力 —— 它不会因为一次误判而固守错误假设。

一个本能的结构包含触发条件、动作描述、置信度数值、领域标签、证据来源和作用域属性。其中领域标签(code-style、testing、git、debugging、workflow 等)使得本能可以被结构化地组织和检索,而作用域属性则解决了跨项目污染的核心问题。

项目隔离与全局共享的双层架构

v2.1 引入的最重要特性是项目作用域本能(project-scoped instincts)。在此之前,所有本能都被存储在全局目录中,一个 React 项目中学到的「使用 React hooks」模式会被推送给完全不相关的 Go 微服务项目。这种跨项目污染在实践中造成了显著噪音 —— 模型在 Python 项目中被推送 Node.js 特有的约定,或者在 A 公司的代码库中应用了 B 公司的工程惯例。

项目隔离的实现依赖于多层项目检测机制。系统按优先级依次检查 CLAUDE_PROJECT_DIR 环境变量、git remote URL(通过哈希生成可移植的项目 ID),以及 git rev-parse 得到的仓库路径。每个项目获得一个 12 位哈希标识符(例如 a1b2c3d4e5f6),位于 ~/.claude/homunculus/projects.json 的注册文件负责将哈希映射为人类可读的名称。

作用域决策遵循一条清晰的原则:语言特定和框架特定的约定属于项目作用域,通用工程实践属于全局作用域。具体而言,「使用 React hooks」「遵循 Django REST 模式」「测试文件位于 __tests__/」属于项目本能;而「验证用户输入」「先写测试」「小型专注的提交」属于全局本能。这条边界不是硬编码规则,而是通过本能在多个项目中重复出现的频率来动态判断 —— 当同一个本能模式在两个以上项目中以高置信度出现时,系统自动将其标记为全局提升候选。

Research-First:从猜测到调研的范式转换

Vibe Coding 最大的工程风险不是代码质量,而是方向错误。在错误的技术假设上投入大量开发时间,是 AI 辅助编程中最昂贵的错误类型。Research-first 方法论是 ECC 对这一风险的直接回应。

Search-first 技能(Skill)的核心工作流程是「编码前先调研」。它不是一条建议,而是一套强制性的工作序列:首先通过官方文档、API 参考和社区资源验证框架假设,然后引用具体来源证明技术选型的合理性,最后对未经验证的部分明确标注不确定性。

这套流程与 Addy Osmani 的 agent-skills 形成有趣的互补。agent-skills 定义了 22 个覆盖完整开发周期的技能,其中 source-driven-development 同样强调「Ground every framework decision in official documentation」,而 doubt-driven-development 则提供了对抗自信输出的质疑框架。ECC 的 research-first 在这个生态中扮演的角色更加底层 —— 它不是在定义开发流程,而是为每一次技术决策提供可信的信息基础。

Research-first 的工程化价值体现在它将调研行为从「可选项」变成了「检查点」。系统不依赖模型自发地进行文档查阅,而是通过技能触发机制确保在实现之前完成调研。这种强制性的信息获取流程显著降低了基于过时或错误假设进行开发的风险。

从观察到演化:完整的本能生命周期

本能的学习和演化构成了一个四阶段流水线:观察、检测、存储和演化。

观察阶段由 PreToolUse 和 PostToolUse 钩子驱动。每个工具调用及其上下文(文件名、调用参数、返回结果)被写入对应项目的 observations.jsonl 文件。这是一种 append-only 的存储策略 —— 不覆盖历史观察,而是持续累积信号。观察者智能体以 5 分钟为间隔读取观察日志(可通过 config.json 调整间隔),当积累的观察数量达到配置的最小阈值(默认 20 条)时才触发模式分析。

检测阶段使用轻量级 Haiku 模型在后台运行,其任务是识别重复性模式:用户纠正产生的模式对应关系、错误解决过程中沉淀的调试策略、反复执行的工作流序列。每个检测到的模式附带置信度初始值和领域标签。

存储阶段根据模式类型自动判定作用域。如果检测到的模式与特定项目的技术栈或目录结构强相关,它被写入项目目录下的 instincts/personal/。如果模式具有跨项目的普适性,它进入全局 instincts/personal/ 目录。导入的本能(来自他人的共享文件)存储在 instincts/inherited/ 目录下,与自动学习的本能使用相同的置信度体系。

演化阶段通过 /evolve 命令触发。系统将相关本能聚类,生成技能(Skills)、命令(Commands)或代理(Agents)。聚类的依据是本能之间的领域标签关联和触发时机相似性。一个高置信度的「React hooks 模式」本能和一个「TypeScript 类型严格模式」本能可能被打包成一个 react-ts-workflow 技能。一个「数据库迁移审查」本能和一个「API 版本检查」本能可能演化为一个 api-stability-review 命令。

配套工具链:规则、代理与验证循环

本能系统并非孤立运行,而是嵌入在 ECC 的完整工具链中。182 个技能覆盖了从 TDD 工作流、安全审计到投资者材料的全场景;48 个专业化代理处理代码审查、构建错误解析和安全审计;68 个命令提供即时入口;34 条规则(common + 语言特定)定义了始终遵循的工程准则。

验证循环是这套系统中保证质量的最后一道防线。verification-loop 技能强制每次修改都必须经过构建、测试、类型检查和安全扫描。eval-harness 提供了 eval 驱动的开发方法,支持 checkpoint 和 pass@k 指标追踪。与 agent-skills 的五步验证流程(复现、定位、简化、修复、守卫)形成方法论上的共鸣 —— 两者都强调证据驱动的开发而非印象驱动的开发。

可落地的工程参数

对于希望采用这套系统的团队,以下参数提供了可量化的起点。

钩子配置参数: PreToolUse 和 PostToolUse 钩子通过 ${CLAUDE_PLUGIN_ROOT}/skills/continuous-learning-v2/hooks/observe.sh 脚本捕获所有工具调用。这是连续学习的触发器入口,需要 Claude Code v2.1.0 以上版本支持。SessionStart 上下文字符数默认上限 8000,可通过 ECC_SESSION_START_MAX_CHARS 环境变量调整,在本地模型或低上下文场景下建议降至 4000 或直接关闭。

置信度阈值参数: 0.3 到 0.9 的置信度区间中,0.5 是系统开始主动应用本能的阈值。0.8 是本能被推荐演化为技能的阈值。提升候选的标准是同一本能 ID 出现在 2 个以上项目中且平均置信度达到 0.8。

观察者配置参数: 观察者智能体默认禁用状态(observer.enabled: false),最小观察数阈值 20,运行时隔 5 分钟。这些参数通过 skills/continuous-learning-v2/config.json 控制。

多 MCP 限制参数: 每个 MCP 工具描述消耗上下文窗口。保持启用 MCP 数量在 10 以下,活动工具数在 80 以下,以避免 200k 上下文窗口被压缩至 70k 的性能陷阱。

结语

Vibe Coding 与系统性工程路径的本质区别不在于代码生成速度,而在于学习的持续性和知识的可迁移性。模型在一次会话中生成的代码可以被遗忘,但通过本能系统沉淀的模式会成为项目记忆的一部分。这种记忆具有置信度驱动的可靠性分级、项目隔离的边界控制,以及从本能到技能的演化路径 —— 这正是生产级 AI 辅助开发所需要的工程化基础设施。

资料来源:Everything Claude Code GitHub 仓库(177K+ stars,Anthropic Hackathon 获奖项目);continuous-learning-v2 技能文档;agent-skills 技能集合(Addy Osmani,Google 工程师)。

ai-systems

内容声明:本文无广告投放、无付费植入。

如有事实性问题,欢迎发送勘误至 i@hotdrydog.com