dev-manager-tauri/AGENTS.md
lanrtop 86995f7472
All checks were successful
Push & PR Check / check (push) Successful in 51s
docs(conventions): 自验报告纪律三条——负面披露/改断言报备/两把尺子
用户确立 agent 协作协议执行版(多角度辩证后选最小成本版落地):
1. 交人终验前反馈必含「没验什么」一节(负面披露收窄已知盲区)
2. 自修中改断言/验收标准需显式声明(封 Goodhart 最短路径,diff 可审计)
3. agent 自验对 acceptance、人终验对意图(acceptance 可能继承需求
   理解偏差,两把尺子不可合一)

三处同步:AGENTS.md(单一来源)+ 接入包模板(分发子项目)+
agents-meta-rules(设计草案)。完整辩证(五张力/四调节器/三缝隙)
存档于 governance-feedback-loop 模块设计档案节。
实证案例:mcp-single-server 自验全绿但 git-bash 层全挂,端到端终验抓住。
2026-07-06 22:46:04 +09:00

12 KiB
Raw Blame History

炼境 — AI Agent 上下文

本文件遵循 AGENTS.md 开放规范,供 Claude Code、Qwen Code、Cursor、Copilot 等 AI 工具读取。

项目定位

Git 多空间开发管理器,同时也是项目 Agent 化改造引擎。 以蓝图为神经系统,以 Claude 为智能层,感知所管理项目的功能运转、质量状态与成长方向。 炼境本身亦被纳入其中,形成可自我进化的开发智能闭环。

技术栈

  • 前端React 19 + TypeScript + TailwindCSS + React Query + Zustand + React Flow
  • 后端Rust + Tauri v2 + SQLiterusqlite + r2d2
  • MCP Server内嵌于 Tauri 进程HTTP供 Claude Code 调用炼境数据
  • 包管理pnpm禁止 npm/yarn/npx/bun

核心开发约束

包管理pnpm 唯一,禁止 npm / yarn / npx / bun。

TypeScript:优先 TypeScript避免 any;函数/变量 camelCase组件 PascalCaseasync/await不用裸 Promise 链try/catch 不吞异常。

Rust 业务函数:禁止在函数内部调用 pool().get(),连接由调用方传入(依赖注入,便于 in-memory DB 测试。Tauri command 层负责获取连接并调用(薄包装,无需测试)。

架构速查

src/lib/commands.ts              所有 Tauri command 的前端封装(唯一调用入口)
src-tauri/src/commands/          Rust 后端实现(每功能一个 .rs 文件)
src-tauri/src/db.rs              SQLite 建表 + migration 逻辑
src-tauri/src/mcp_server.rs      MCP Server 路由层 + SSE 协议agent 调用炼境的入口)
src-tauri/src/mcp_tools.rs       MCP 工具 schema + dispatch + 实现(工具清单以 tools_list_result 为准)
src-tauri/src/mcp_webhook.rs     Gitea webhook 处理push/PR 事件写入飞轮)
src-tauri/src/mcp_inject.rs      MCP 配置注入(写入被管理项目的 .claude/settings.json
src-tauri/resources/onboarding/  接入包分发模板AGENTS.md/lefthook/git-workflow
.blueprint/                      项目蓝图manifest + 模块详情 + 任务卡)
docs/ai-context/                 AI 上下文文档(速查卡、契约映射)
docs/templates/                  炼境接入包模板草案(设计层)

关键约定

  1. 新增 Tauri command → 必须同步更新 src/lib/commands.ts,否则前端无法调用
  2. SQLite 新增表或字段 → 必须在 db.rsmigrate() 里补 migration 语句,否则旧版本升级后启动报错
  3. 修改接入包模板(resources/onboarding/)→ 检查 docs/templates/agents-meta-rules.md 是否需要同步

多 AI CLI 协作

本项目可由多个 AI CLI 协同。交接时附上:

已完成:<修改了哪些文件 + 核心决策>
待验证:<需要对方确认的地方>
约束继承:<影响后续工作的关键限制>

Agent 友好工程四支柱

修改代码前,确认这个项目满足四支柱:

可导航:凭文件名/目录名可在 30 秒内定位某功能的代码。通用能力有独立家,不寄生在业务模块下。

可推理:公共类型只在一处定义。改一个接口,类型检查能报出所有受影响处。

可验证typecheck / lint / test 各有一条命令真能跑。关键路径有冒烟测试。

可记忆:规则按场景注入(不是一份巨型文档)。决策只写"为什么",代码自己回答"是什么"。


文档防腐元规则

做任何改动时,判断它属于哪类变更:

T1 外部契约变更(最高优先级)

其他代码、服务、或 agent 依赖的定义——Tauri command 接口、MCP 接口、数据库 schema、共享类型。 → 查 docs/ai-context/project-context.yaml 找到对应文档,检查并同步更新。

T2 架构边界变更

模块划分、目录结构、依赖方向、命令分组变化。 → 检查本文件架构速查和 docs/ai-context/project-brief.md 是否需要同步。

T3 工具链变更

引入或替换库、Tauri 版本升级、Rust 依赖变更。 → 更新本文件技术栈声明;更新 docs/ai-context/project-context.yaml

T4 常驻上下文过期

本文件AGENTS.mddocs/ai-context/project-brief.md 描述的现实已经改变。 → 立即更新。这两份文档常驻 agent 上下文,过期危害最大。

不触发检查

内部重构、性能优化、bug fix外部行为不变、测试文件、UI 样式调整。


文档防腐铁律

  • 文档只写稳定的:为什么、铁律、意图、架构决策。
  • 易变的(端口、表名、命令清单)交给工具自省,不写死进常驻文档。
  • 单一事实来源:两处说同一事时,删掉派生的那处。
  • 两份文档打架时,信代码,不信文档。

定期防腐自查

  • 技术栈声明还和 package.json / Cargo.toml 一致吗?
  • project-brief.md 最近 30 天有没有随架构改动更新?
  • src/lib/commands.ts 的封装覆盖了所有 src-tauri/src/commands/ 下的 command 吗?
  • 接入包模板(resources/onboarding/)和 docs/templates/ 内容一致吗?

项目蓝图

本项目使用 .blueprint/ 目录维护项目全景架构图,驱动需求讨论和任务管理。 本节适用于任何 AI 编程工具Claude / Qwen / Cursor / Copilot 等)。

对话开始时必须执行

  1. 读取 .blueprint/manifest.yaml 了解项目全景和当前状态
  2. 读取 .blueprint/CONVENTIONS.md 了解完整工作流规则

需求讨论 → 蓝图同步规则

用户说的 AI 应做的
"我想加个 XX 功能" 确认需求后manifest 新增模块status: concept创建 .blueprint/modules/<id>.md
"XX 功能需要 A、B、C" 在模块文件中拆分为任务卡
"这个方案确定了" 模块 status → planned补充任务卡 files/acceptance
"开始做 XX" 模块 status → in_progress
没提蓝图但在讨论功能 主动提议更新蓝图

复杂度决策(讨论新功能 / 拆解需求时)

complexity 执行流程
S / M 直接拆任务卡,确保每张卡有 files + acceptance + complexity → 标记 📋
L复杂系统设计 先做架构设计Claude 用 /architect 技能,其他工具按 CONVENTIONS「复杂功能分析流程」章节执行输出设计文档用户确认后拆成 S/M 任务卡

L 级任务禁止直接写代码,必须先经过 架构设计 → 任务拆解 流程。

任务执行两阶段提交

  • 开始写代码前:任务卡前缀改为 🔵status → in_progress
  • 完成验收后:任务卡前缀改为 status → done更新 manifest updated 日期

完整规则(迭代管理、阻塞处理、复盘笔记等)详见 .blueprint/CONVENTIONS.md

核心开发约束

包管理

  • pnpm 唯一:禁止 npm / yarn / npx / bun
  • lock 文件只有 pnpm-lock.yaml,不生成其他

代码规范

  • TypeScript 优先,避免 any
  • 函数/变量 camelCase组件 PascalCase
  • 异步统一 async/await,不用裸 Promise 链
  • 错误处理明确 try/catch,不吞异常
  • 优先编辑现有文件,避免创建不必要的新文件

Git 工作流

docs/ai-context/git-workflow.mdConventional Commits + Rules-Applied trailer + PR 规范)。 commit 必须符合 Conventional Commitslefthook 强制),炼境据此采集飞轮数据。

炼境自身的分支策略

git-workflow.md 是分发给被管理子项目的接入包模板dev→main 双分支)。 炼境自身使用以下策略,不套用子项目模板。

任务复杂度 分支策略
S简单增删改 直接 push master,不开分支
M中等逻辑 feat/<blueprint-module-id> 分支,完成后 PR → master
L复杂系统 feat/<blueprint-module-id> 分支,必须走 PR + CI 验证

分支命名:直接对应蓝图模块 IDfeat/manage-multi-viewfeat/flywheel-intelligence

为什么 M/L 要开分支

  • PR body 是 agent 自验报告的归宿飞轮从中采集结构化数据PR 事件比 push 事件包含更多意图信息)
  • feat/* 分支触发 PR CI是 agent 自验链条的最后一环(本地 typecheck → PR CI → 人终验)
  • 炼境推荐子项目走 PR 工作流,自身也应遵守同一套规范

agent 按钮与验证路径

完整体系设计见 docs/ai-context/agent-button-system.md

分工原则:人定目标 → agent 执行 → agent 自验(走 agent 按钮)→ 人终验。 人只保留两件事:需求澄清(目标定义权)目标验收(终验权)

开发任何功能时遵守:

  1. 边界单点实现业务校验只写在能力本体层API/commandUI 只呈现不复制逻辑—— 否则人与 agent 的验证路径会分裂
  2. 载体就近选择(本项目的 agent 按钮是什么,按项目类型对号入座):
    项目类型 agent 按钮载体
    Web 服务 HTTP API 本身(前端按钮与 curl 调同一 endpoint天然双投影
    CLI/脚本 命令与 npm scripts
    桌面应用 测试直接调用 command 函数
    UI 呈现层 Playwright 驱动真界面(最后手段,仅关键路径)
  3. 完成的定义:功能实现后,由 agent 沿投影路径真实走通一次(起服务 → 调接口 → 断言行为),再交人做 UI 终验——不许绕过功能手改产物冒充验证
  4. 侦察 → 驻军agent 走通的关键路径,顺手固化为一条测试(炼境主路径为 cargo testvitest 仅在引入独立纯逻辑模块后按需添加); 一次性验收不固化(少而稳 > 多而脆)
  5. acceptance 可执行化/splitter 生成任务卡时,acceptance 字段必须是可执行验证路径, 格式:[载体] 调用/运行什么(参数) → 断言什么
    • 正例:[Tauri command] apply_onboarding_pack(project_id) → written≥1文件在磁盘存在
    • 正例:[HTTP API] POST /api/users → 201body.id 非空
    • 反例:功能正常可用模糊agent 无法自验)
  6. 自验报告纪律:交人终验前的反馈必须含「没验什么」一节(未覆盖的路径、依赖的 假设、不确定的地方);自修过程中改了断言/验收标准必须显式声明理由(改功能让测试过是 常规改测试让功能过需报备agent 自验对 acceptance人终验对意图——acceptance 可能继承需求理解偏差,两把尺子不可合一

炼境自己的 Agent 按钮清单

能力 调用方式 通过标准
TypeScript 类型检查 pnpm typecheck 无输出exit 0
Rust 单元测试 cargo testsrc-tauri/ 目录) 无 FAILED
MCP 工具调用 src-tauri/src/mcp_tools.rs 工具列表 返回 JSON无 error 字段
蓝图状态读取 .blueprint/manifest.yaml 文件可解析,字段完整
蓝图状态更新 编辑 .blueprint/modules/<id>.md 文件写入成功,格式合法

自验失败降级约定

  • 失败 2 次内:自行修正,继续自验
  • 失败 3 次:停止执行,输出以下内容后等待人工介入:
    1. 失败原因(具体报错或不通过的断言)
    2. 已尝试的修正路径
    3. 需要人决策的具体问题

多 AI CLI 协作

本项目可由多个 AI CLI 协同。交接时把结果总结成 3 条传给下一个:

1. 已完成:<改了哪些文件 + 核心决策>
2. 待验证:<需要确认的地方>
3. 约束继承:<影响后续的关键限制>