diff --git a/AGENTS.md b/AGENTS.md index 58eecfd..4e65254 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -89,7 +89,24 @@ cmbuyer 是一个自动化采购系统:**采购服务**(网页端,`admin/` 在 diff 里只呈现为「导出内容更新」,审计链就断了。 只读任务内容不需要接入 Vikunja——导出产物就在仓库里,`git clone` 即可。只有写状态和 -执行记录才需要配置 MCP(`.mcp.json` → `scripts/vikunja-mcp.sh`,凭据见 `vikunja.env.example`)。 +执行记录才需要配置 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` 处理:继续手头任务,不领新任务,不写远端。 diff --git a/docs/tasks/T-008.md b/docs/tasks/T-008.md index 5941fd1..6952a2e 100644 --- a/docs/tasks/T-008.md +++ b/docs/tasks/T-008.md @@ -25,7 +25,7 @@ write_paths: - docs/tasks/_template.md --- - + ## 问题 / 背景 多 agent 并行时任务文档会互相覆盖。已观测到的事实:T-005 与 T-006 同时为 `DOING`, @@ -124,7 +124,7 @@ Vikunja 自动创建的英文名,不为了对齐中文表述去动 API: - 版本写死的理由:上游改工具名或行为会直接改变 agent 行为,与 `CLAUDE.md` 「交付产物新旧以 SHA-256 判断」同源,不接受静默升级。 - 凭据文件 `vikunja.env` 放仓库根目录,比照既有 `gitea.env` 模式加入 `.gitignore`; 同时提交 `vikunja.env.example`。脚本按 `$VIKUNJA_ENV_FILE` → 仓库根 → 家目录顺序 查找,便于其他 agent 换路径。 - `.mcp.json` 的 `command` 改为仓库内相对路径,使配置不绑定某台机器的家目录。 -- **签发窄权限 token**:当前 token 权限为全量,任何配置了此 MCP 的 agent 都能执行 `projects_delete`。须在 Vikunja 后台另签一个只覆盖 tasks、comments、labels 读写的 token 供 agent 使用,管理操作保留给人工 token。此步只能人工完成。 +- **token 权限:采用全量 token**(2026-08-03 决定)。曾试过只覆盖 tasks / comments / labels 的窄 token,实测 `POST /projects/{p}/views/{v}/buckets/{b}/tasks` 返回 401——bucket 操作需要 project 级权限,导致 `TODO` / `DOING` / `BLOCKED` 三者的状态流转 agent 无法驱动,与方案第 1 节「状态用 Kanban bucket 表达」直接冲突。权衡后取全量 token。**代价必须记录**:任何配置了此 MCP 的 agent 都持有对该 Vikunja 实例的完整读写权,包含 `projects_delete`;且 `apiurl` 是 `http://` 走公网 DDNS,token 明文过网。凭据只允许存放在 `vikunja.env`,不得内联进任何 agent 配置文件。 ### 6. 门禁 `scripts/validate_agent_context.py` @@ -169,7 +169,8 @@ Vikunja 网络,服务不可达时连校验都做不了: - 导出产物行尾为 LF;连续执行两次导出,第二次无文件变更(幂等)。 - 重启 Claude Code 后 `claude mcp list` 显示 vikunja 为 Connected,`.mcp.json` 使用 相对路径且在另一家目录下同样可用。 - `git status` 确认 `vikunja.env` 未被跟踪,`vikunja.env.example` 已提交。 -- **人工待办(未完成前不得标 `DONE`)**:在 Vikunja 后台签发窄权限 token 并替换 `vikunja.env`;确认看板视图可用。 +- 看板视图可用,卡片位置与 `status` 一致:`Doing` 放 #15,`Done` 放 #12 / #13 / #14。 +- 各家 agent 的 MCP 配置片段写入 `AGENTS.md`,统一指向 `scripts/vikunja-mcp.sh`,配置文件内不出现凭据。 ## 执行记录