2026年5月28日 2 分钟阅读

AI 编程 Agent 写出面条式代码?用 Unspaghettit 的行为规范拿回控制权

tinyash 0 条评论

你的 AI 编程助手是不是也开始「失控」了?一开始它很听话,但随着项目膨胀,每次修改都像在走钢丝——改一行代码就崩三处功能,prompt 里塞满了历史上下文,却仍然记不住关键的约束条件。这不是你的 prompt 写得不够好,而是你的 AI 助缺少一个可执行的规范契约

Unspaghettit 就是为这个问题而生的开源工具。它让你和 AI 之间共享一个可执行的行为规范(executable specification),通过 MCP 协议将项目意图结构化为可验证的模型,让每一次代码生成都基于明确的规则而非模糊的记忆。


为什么你需要行为规范?

目前主流的 AI 编码工作流是「prompt-in, code-out」:你写好 prompt,LLM 生成代码。但问题在于:

  • Prompts 是一次性的,每次对话都会被遗忘
  • 项目意图和约束只能靠人工记忆或写在 README 里
  • 多人协作时,不同 Agent 对同一功能的理解可能完全不同
  • 生成的代码容易偏离设计意图,形成所谓的「prompt spaghetti」

Unspaghettit 提供了一种完全不同的思路:以规范为真相来源(spec as source of truth),AI 和人类都参考同一套结构化规范工作,prompt 变成了一次性的「任务描述」而非核心知识库。


Unspaghettit 的核心概念

规范即代码

Unspaghettit 将产品行为建模为一系列结构化实体:

  • Feature(功能):产品的一个独立能力模块
  • Surface(界面):功能对外的交互入口(CLI 命令、API 端点、UI 组件)
  • Action(动作):用户或系统可执行的具体操作
  • State(状态):系统在某一时刻的快照
  • Rule(规则):约束状态转换的业务逻辑
  • Scenario(场景):一个完整的行为路径,附带预期结果——可直接执行的断言

每个 Scenario 都是一个可执行断言run_all_scenarios 在模拟器中运行全部场景并报告通过/失败——也就是说,你在写一行代码之前就可以验证规范的一致性。

MCP 原生集成

Unspaghettit 的核心是一个 MCP 服务器,支持在其规范模型上进行创建、读取、编辑和验证。任何支持 MCP 的 AI 工具都可以直接使用:

  • Claude Desktop / Claude Code
  • Cursor
  • Gemini
  • Windsurf / Kiro
  • Codex

安装完成后,直接对你的 AI 说:

>”Using the Unspaghettit MCP, create a new project. Model the first feature and make it implementation-ready.”

AI 就会通过 MCP 调用在规范的框架下工作。


快速上手

安装

npm install -g unspaghettit
cd your-project
unspa init
unspa dashboard

unspa init 会自动配置 MCP 服务器到你已安装的 AI 客户端。unspa dashboardhttp://localhost:3000 启动一个可视化面板,你可以在面板中实时观察 AI 对规范的修改。新用户建议先打开 /tutorial 完成从 Project → Feature → Surface → Action → Rule → Simulator 的完整教学。

定义第一个 Feature

安装后,你可以让 AI 帮你建模一个功能。例如,创建一个「用户注册」功能:

Feature: 用户注册
  Surface: register API
    Action: registerUser
      Parameters: email, password, name
      State before: { user: null }
      State after:  { user: { email, name, status: "pending" } }
      Rule: email 格式必须合法
      Rule: 密码至少 8 位,包含字母和数字
  Scenario: 用合法信息注册 →
    Given email="test@example.com", password="pass1234"
    Result: user.status = "pending" ✓

AI 通过 MCP 工具调用就能完成这些建模。修改规范后,用 run_all_scenarios 验证一致性——如果在模拟器中场景通过,说明你的规范是自洽的。

Code → Spec:反向建模

更实用的场景是已有代码库。你可以让 AI 读现有项目,自动反向建模:

“Read this codebase and model its behavior into Unspaghettit. Show me which modules have gaps.”

AI 会扫描源码,生成 features、actions、scenarios,并用 maturity scoring 功能给每项打分——标出关键问题、缺失的规则、未覆盖的场景。这就像给你的项目照了一次 X 光。


实战场景一:用规范驱动新功能开发

你正在开发一个任务管理系统,需要新增「任务指派」功能。传统做法是写一个长长的 prompt 描述需求,然后让 AI 生成代码。但需求会变,prompt 会旧。

用 Unspaghettit 的流程是:

  1. 建模:让 AI 通过 MCP 创建 Feature: 任务指派,定义其 Surface、Action、Rule
  2. 验证:运行 run_all_scenarios 确认规范本身无误
  3. 生成类型:执行 generate_types,自动生成 TypeScript 的类型定义文件
  4. 实现:告诉 AI “implement the next thing”,AI 会从 implementation queue 取下一个待实现项
  5. 审计maturity scoring 报告实现覆盖率和缺口

整个过程,你的规范文件(纯 JSON 格式,可直接 Git 提交)记录了产品的当前意图,不会因为 AI 的上下文窗口刷新而丢失。

实战场景二:重构旧项目

项目中积累了大量「谁也不敢改」的历史代码?让 Unspaghettit 做一次逆向建模:

unspa init

score_feature 会输出结构化的改进建议——覆盖率最低的 surface、最危险的 rule 缺失。这就把「代码重构」从凭感觉变成了有据可查的工程决策。


团队协作优势

  • 本地优先:所有规范文件都是 Git 版本化的 JSON,无需云服务
  • 多 Agent 支持:内置 Yjs WebSocket 服务器,多个 LLM 和人可以实时编辑同一规范
  • 可审计.unspa.json 的 behavioral index 记录了每个实体的实现位置,变更历史可以追溯
  • 可导出:项目导出为加密文件,支持带密码分享

什么时候该用?

Unspaghettit 最适合以下场景:

  • 项目有明确的业务规则和状态转换(而非纯粹的 CRUD)
  • 多个 AI Agent 或多人协作同一代码库
  • AI 生成的代码频繁偏离预期,需要结构化约束
  • 希望将产品意图从「对话记忆」沉淀为可版本化文档

不适合的场景:原型阶段快速验证、纯展示型页面开发、一次性脚本。


写在最后

AI 编码工具越来越强,但「如何告诉 AI 你想要什么」这件事本身还没被工具化。Unspaghettit 提供了一种看起来有点「重」但极其可靠的思路——你有规范,它可执行,AI 知道你在说什么。

如果你也厌倦了在 prompt 里反复描述同一条规则,不妨试试这种「面向规范开发」(Spec-Driven Development)的方式。项目开源(AGPL-3.0),MIT 许可证团队也可以直接 fork 使用。

发表评论

你的邮箱地址不会被公开,带 * 的为必填项。