Files
ai-workflow/AGENTS.md
T

6.2 KiB
Raw Blame History

AGENTS.md

本文档为在此仓库中工作的 AI 编码代理(Codex、Cursor、Copilot 等)提供指导。

第一性原理

请使用第一性原理思考。你不能总是假设我非常清楚自己想要什么和该怎么得到。请保持审慎,从原始需求和问题出发,如果动机和目标不清晰,停下来和我讨论。

方案规范

当需要你给出修改或重构方案时必须符合以下规范:

  • 不允许给出兼容性或补丁性的方案
  • 不允许过度设计,保持最短路径实现且不能违反第一条要求
  • 不允许自行给出我提供的需求以外的方案,例如一些兜底和降级方案,这可能导致业务逻辑偏移问题
  • 必须确保方案的逻辑正确,必须经过全链路的逻辑验证

这是什么

这是一个多代理 AI 编排系统。

关键命令

Inbox CLI(核心工具)

cd inbox && go build -o /tmp/inbox-host ./cmd/inbox
export INBOX_WORKSPACE=/Users/xd/project/ai-workflow-v2

/tmp/inbox-host server --workspaces-dir /Users/xd/project/ai-workflow-v2/inbox-worktrees --port 3000
/tmp/inbox-host api GET /api/v2/projects
/tmp/inbox-host api POST /api/v2/topics --data '{"workspace_id":"ws_1","title":"Signup Flow","space":"workflow","status":"execution"}'

DashboardReact UI

cd dashboard && npm install && npm run dev   # Vite 开发服务器
cd dashboard && npm run build                # 生产构建 → dist/

开发模式下,Dashboard 会将 /api 代理到 http://localhost:3000

Apps

# phonesiteNext.js 静态站点)
cd apps/phonesite && npm install && npm run dev
cd apps/phonesite && npm test                # Vitest
cd apps/phonesite && npx playwright test     # E2E

# redbook(全栈:Go + Next.js
cd apps/redbook/backend && go run ./cmd/server   # :8080
cd apps/redbook/backend && go test ./...
cd apps/redbook/frontend && npm install && npm run dev
cd apps/redbook/frontend && npm test

架构

当前流程

当前激活的流程以 HTTP 为中心:

  1. inbox server 启动 Inbox API。
  2. inbox api ... 或 Dashboard 调用 /api/v2/*
  3. HTTP 层通过 internal/store/sqlite 直接写入 SQLite。
  4. 运行时角色解析从数据库读取,并快照到 workflow run 中。

运行时目录结构

<repo>/.runtime/inbox.db          # Inbox V2 SQLite 存储

Inbox CLIGoinbox/

单个二进制文件,提供两个命令:

  • server:启动 HTTP API
  • api:通用的、面向 AI 的 HTTP 包装器

关键模块区域:

  • internal/base/:通用基础原语
  • internal/domain/:稳定的业务实体与规则
  • internal/app/:运行时配置与 workflow-run 服务
  • internal/httpapi//api/v2/* 处理器
  • internal/store/sqlite/SQLite schema 与仓储实现

角色系统

角色是数据库驱动的运行时配置,而不是文件驱动的事实来源。

  • leader 负责用户对话、任务拆解、链路编排,以及宿主机上的最终执行决策
  • worker 在隔离的 worktree/container 中执行分配的链路任务,并向 leader 回传证据
  • user 是仅供人类使用的运行时角色,永远不会由 AI 运行时自动执行

Dashboarddashboard/

基于 React 19 + TypeScript + Vite + Tailwind + Framer Motion。页面包括:Timeline、Topics、Roles、Executions、Merges。通过轮询 inbox web API 获取更新。

工程规则

最高优先级:修复根因,而不是增加回退逻辑

  • 默认直接修复根因。除非用户明确要求这种权衡,否则不要添加 fallback 逻辑、ignore 规则、兼容性分支、防御性特判或“以防万一”的条件分支。
  • 如果真正的问题是糟糕的历史状态、陈旧的运行时产物、脏 worktree 或畸形数据,应通过迁移、清理步骤、修复脚本或定向数据修正直接修复状态,而不是让应用逻辑静默容忍这些问题。
  • 不要把运维残留吸收到产品逻辑中。运行时文件、缓存文件、生成产物、临时目录以及本地 OS 噪音,都应在源头被隔离、迁移或显式清理。
  • 在考虑“增强韧性”的补丁之前,先问自己:“为什么会出现这个坏状态?”以及“能不能直接移除这个坏状态的来源?”优先做源头治理。
  • 如果 fallback 看起来不可避免,先停下来,把这个权衡显式告知用户,再决定是否实现。不要为了短期方便,悄悄加入长期分支逻辑。
  • 优先选择一条干净、易解释的路径,而不是堆叠逻辑去保留旧错误。

不要添加遗留兼容层

  • 不要为旧数据、旧字段值、旧路由、旧目录布局、旧分支命名或旧运行时行为添加兼容代码。
  • 不要保留双路径逻辑,例如 new flow || old flow、fallback-to-legacy 分支、针对历史数据的静默运行时协调,或把 cleanup-by-ignore 规则塞进核心逻辑里。
  • 如果旧数据或运行时残留有问题,应通过显式迁移、修复脚本、定向 DB 更新或一次性清理直接修正。不要把问题藏进应用逻辑里。
  • 如果旧实现正在被替换,就删除旧路径,而不是长期同时支持两套。
  • 不要留下没有移除计划的“临时” fallback 分支。在这个仓库里,临时兼容逻辑通常就是错误方向。

清晰的模块归属

  • 新行为必须放进职责单一、边界明确的模块中。
  • 不要把一个特性零散地分布在 handler、service、helper 和 infra 文件中,而没有清晰的模块边界。
  • HTTP handler 应保持轻量:解析请求、调用 application service、写回响应。
  • Application service 应负责编排和业务流程。
  • git、container、filesystem、process execution 等基础设施细节应封装在职责明确、接口收敛的专用模块之后。
  • 做重构时,优先先提取模块,再把逻辑迁移进去,而不是让部分逻辑继续散落在旧文件中。

处理破坏性变更的首选方式

  • 优先干净替换,而不是渐进兼容。
  • 优先 schema/data migration,而不是运行时分支。
  • 优先显式清理,而不是用 ignore 掩盖问题。
  • 优先显式失败,而不是隐藏 fallback 行为。
  • 新模块就位后,优先删除废弃代码。