Files
cmbuyer/AGENTS.md
T
QiuSWandClaude Opus 5 ed489bd13e docs(tasks): switch to full-scope token and document agent MCP setup
窄权限 token 实测无法移动 kanban bucket(POST /projects/{p}/views/{v}/
buckets/{b}/tasks 返回 401,bucket 操作需要 project 级权限),导致
TODO / DOING / BLOCKED 的状态流转 agent 无法驱动。权衡后改用全量 token,
代价已在 T-008 方案第 5 节写明:任何配置此 MCP 的 agent 都持有该实例的
完整读写权,且 apiurl 走 http 公网 DDNS,token 明文过网。

AGENTS.md 增加各家 agent 的 MCP 配置片段(Claude Code 的 .mcp.json 与
Codex CLI 的 ~/.codex/config.toml),统一指向 scripts/vikunja-mcp.sh,
并明确任何配置文件内不得内联凭据——token 只存在于 vikunja.env。

看板卡片已归位:Doing #15,Done #12/#13/#14。

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-03 17:14:00 +08:00

141 lines
6.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# AGENTS.md
> Codex / AI coding agent 的仓库级入口。进入本仓库后先读本文,再进入
> [`docs/00-ai-start-here.md`](docs/00-ai-start-here.md)。
## 项目定位
cmbuyer 是一个自动化采购系统:**采购服务**(网页端,`admin/`,Go)负责建单与人工决策,
**采购工具**(Windows 桌面端,`client/`,Python)驱动 Android 手机在拼多多完成找货和下单。
**系统只创建待付款订单,任何情况下都不自动付款。**
当前状态:仓库只有文档,尚未开始编码。阶段为 Phase 0。
## 必读顺序
1. 本文。
2. [`docs/00-ai-start-here.md`](docs/00-ai-start-here.md):入口流程与**四条特有纪律**。
3. [`docs/05-coding-rules.md`](docs/05-coding-rules.md):**第 1 节红线**。
4. [`docs/current-state.md`](docs/current-state.md):当前代码现实与下一步任务。
5. 与当前任务相关的具体文档(按 [`docs/agent-context.json`](docs/agent-context.json) 路由)。
日常会话按 `agent-context.json` 的 `bootstrap.always_read` 与任务类型 `routes` 读取,
不机械重读全部文档。
## 四条不可协商的规则
### 1. 不碰钱
绝不编写点击支付、免密支付、先用后付或任何扣款控件的代码。
这条没有例外,也不接受「先做个开关默认关掉」。
系统**会**点击「提交订单」创建待付款订单,但必须满足四个前置条件(授权未消费且服务端
提交围栏已建立、闸门二通过、闸门三通过、控件唯一),且**只点一次**、点击后无论结果
都不重试。围栏申请失败或响应不明时不得点击;围栏建立后只能调和同一提交记录。
**第一趟试选的代码路径不得引用任何下单函数**,必须有测试证明不可达。
### 2. 安全边界只能收紧
[`docs/04-architecture.md`](docs/04-architecture.md) 第四节列出全部硬约束,含**三道价格
闸门**与**提交订单四条件**。**不得在任务中放宽任何一条**,包括为了让流程跑通而临时放宽。
确需变更时先改架构文档并说明理由。
价格**只在规格面板和订单确认页读**。别处读不到就转人工,不用其他位置的数字凑合。
### 3. 页面判据必须先真机取证
拼多多 App 会随版本改变页面结构。**不得从前序项目、旧文档或推理直接写判据。**
必须先真机 dump 取证,把截图路径、XML 路径和**拼多多 App 版本**写进任务文件。
### 4. 真机验收只能由人完成
`needs_device: true` 的任务,agent 不得自行标 `DONE`,保持 `DOING` 并写明等待事项。
## 前序项目的地位
`/mnt/d/chengma/cmroubao` 与 `/mnt/d/chengma/cmpdd` 是本项目的**设计依据,不是事实来源**。
- 可以参考它们的结构决策和护栏理由。
- **不得**把它们的页面判据、常量或结论当作已验证事实直接使用。
- 引用其中任何结论时,必须在本项目重新验证并记录证据。
搬运护栏时,**必须连同理由一起搬**。只搬代码不搬理由,后人会把它当碍事的逻辑删掉。
## 工作模式
- 默认**单任务、单责任 agent、单写入者**:一个任务只有一个负责人,同时只有一个 agent
修改该任务的 `write_paths`。
- 多 agent 并行只拆到写路径互不重叠的任务。`admin/` 采购服务与 `client/` 采购工具天然可并行。
这条不再只靠自觉:`scripts/validate_agent_context.py` 会拒绝两个 `DOING` 任务写同一路径。
- **共享文档只由任务所有者写入。** `docs/agent-context.json` 的 `shared_documents` 列出
跨任务共享的文档;受托执行者不得直接改它们,只提交建议由所有者合入。共享文档可以出现在
某个任务的 `write_paths`,但必须逐条显式列出,不得用通配圈走。
- 复杂任务先规划再编码。方案、不可变约束、写路径和验收门禁必须写入任务文件,
不能只停留在对话里。
- 任务内委派不是默认流程。委派后仍保持唯一写入者,执行者必须继承任务文件中的不可变
约束与验证要求。
- 无论是否委派,任务所有者都对结果负责,独立审阅差异、重跑验证;
**不能把执行者或工具的自我报告当成完成证据**。
## 任务状态存放在哪
任务的**协调状态**(标题、状态、标签、依赖、方案正文、执行记录)权威在自建 Vikunja 的
`cmbuyer` 项目;`docs/tasks/T-XXX.md` 里两行 `VIKUNJA EXPORT` 标记之间的内容是它的
**单向投影**,由 `scripts/vikunja_export.py` 覆盖写入,不要手工编辑。
**`write_paths`、`## 边界` 与安全边界条目的权威始终在 git**,不迁往 Vikunja。理由见
本文第 2 条:安全边界能不能收紧靠 `git diff` 逐条复核,权威一旦搬到远端,放宽边界的改动
在 diff 里只呈现为「导出内容更新」,审计链就断了。
只读任务内容不需要接入 Vikunja——导出产物就在仓库里,`git clone` 即可。只有写状态和
执行记录才需要配置 MCP。
各家 agent 指向**同一个包装脚本**,不要各写各的:
```jsonc
// Claude Code:仓库内 .mcp.json(已配置,无需重复)
{ "mcpServers": { "vikunja": { "type": "stdio", "command": "./scripts/vikunja-mcp.sh" } } }
```
```toml
# Codex CLI:~/.codex/config.toml
[mcp_servers.vikunja]
command = "/mnt/d/chengma/cmbuyer/scripts/vikunja-mcp.sh"
```
**任何配置都不得内联凭据。** 脚本自己按 `$VIKUNJA_ENV_FILE` → 仓库根 `vikunja.env` →
家目录的顺序读取,token 只存在于 `vikunja.env`(已 gitignore,样例见 `vikunja.env.example`)。
把 token 写进 agent 配置文件等于把它复制到一个没人在看的地方。
Vikunja 不可达时按 `degraded_mode` 处理:继续手头任务,不领新任务,不写远端。
## 验证
按 [`docs/03-tech-stack.md`](docs/03-tech-stack.md) 第六节的验证矩阵判断层级:
```bash
# 采购服务(admin/)
go test ./...
go vet ./...
# 采购工具(client/)
python -m unittest discover -s tests -t .
python -m compileall -q src tests
# 上下文清单
python scripts/validate_agent_context.py
```
**跨端契约改动必跑完整门禁**——两端会同时坏。
代码尚未初始化,上述命令在 T-001 / T-002 完成前不可运行;届时由对应任务替换为真实命令
并同步文档。
## 风格
- 文档与 UI 文案使用中文,标识符使用英文。
- 金额一律用十进制字符串,不用浮点数。
- 护栏必须连同**理由**一起注释。
- 内容面向执行,每条规则能落到「读取什么、修改什么、验证什么」。