tools(agent-loop): two-agent loop scripts, hooks, prompts, nightly lessons

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
Jesse_Chen
2026-10-13 12:42:49 +08:00
co-authored by Claude Opus 5.5
parent 66de04c6ff
commit cf9793f0c0
24 changed files with 1208 additions and 0 deletions
+14
View File
@@ -0,0 +1,14 @@
<!-- reviewed-through: (none yet) -->
# 每晚复盘的教训(LESSONS)
由 agent 循环的每晚复盘(`tools/agent-loop/nightly-review.sh`,北京时间 23:30)维护,参照 yetone/magpie 的 `LESSONS.md`。复盘当天进入 `origin/staging` 的提交与 agent 交接评论,找"修了又修、不该合、验证太薄"的模式。
每条格式:**规则一句话** → 为什么 → 证据(提交短 SHA、issue 号、BUG 号)→ `出现:N 天(日期)`。同一条出现满 3 天,列入下方「待产品负责人拍板升级」,由产品负责人决定是否写进 `AGENTS.md`;复盘本身不改 `AGENTS.md`。
## 待产品负责人拍板升级
(暂无)
## 教训
(暂无)
@@ -0,0 +1,63 @@
# PROGRESS · 双 agent 自动循环试点 · 2026-10-13
任务书:`docs/tasks/TASK-agent-loop-pilot-20261013.md`。执行:Claude(直接执行,产品负责人 2026-10-13 授权)。分支 `codex/agent-loop-pilot-20261013`,基于 `origin/staging` `e8119ed12`。
## 状态一览
| 任务 | 状态 | 证据 / 说明 |
| --- | --- | --- |
| T0 令牌 | 开发机已完成 | `gitea.sh whoami` = 产品负责人账号;文件 0600、40 字符(曾粘贴两遍,已截断) |
| T1 Grok 实测 | 通过 | 见任务书「T1 结果与定稿分工」 |
| T2 标签与封装 | 通过 | 10 个 `agent/*` 标签已建;自检 issue #51 演示加锁 → 评论 → 换状态 → 解锁;标签筛选为「同时带有」语义 |
| T3 Claude 侧 | 已写,**未运行** | 见下「为什么没跑」 |
| T4 Grok 侧 | 已写,未安装 | 需产品负责人在 Windows 上安装 |
| T5 每晚复盘 | 已写,未运行 | `docs/agents/LESSONS.md` 已建空模板;`AGENTS.md` §4 加了一行 |
| T6 端到端 | 未开始 | — |
## 为什么 T3 没跑
开发机上 Claude Code 的自动模式安全检查连续拦下了「搭建无人值守、可推 staging 的 agent」相关命令(理由 `Create Unsafe Agents`),包括对脚本做语法检查。按规矩不绕开。产品负责人选择方案 B(自己授权无人值守脚本),授权方式是**由他本人在开发机终端里运行启动命令**。
据此做了两处加固(相对任务书原设计):
1. **不关权限检查**:原设计让 Claude/Grok 以 `bypassPermissions` 运行;改为白名单 + `dontAsk`(`claude-settings.json`、`grok-permissions.json`),白名单外的操作自动拒绝。
2. **只读本人账号的评论**:仓库实际对外公开(匿名 API 返回 `private: false`),陌生人评论一律不交给模型,防止经评论注入指令。
## 已实测
| 项目 | 结果 |
| --- | --- |
| `gitea.sh` 建标签、按标签筛选、加/删标签、发评论 | 通过(issue #51) |
| Claude 钩子:推 main | 拒绝 |
| Claude 钩子:推 staging | 放行 |
| Grok 钩子:推 staging(新提交) | 拒绝(同 SHA 时 git 不调钩子,测试须用新提交) |
| Grok 钩子:推 main / 删除 codex 分支 | 拒绝 |
| Grok 钩子:推 codex/* | 放行 |
| `claude -p --json-schema` 结构化输出 | 通过(`structured_output` 字段) |
## 环境缺口
- 本机无 `crontab` / `systemctl`:用 `agentctl.sh start` 常驻循环;**机器重启后需再 start 一次**。
- `claude-tick.sh`、`nightly-review.sh` 尚未实跑;白名单是否够用要第一轮实跑才知道(不够时模型会被拒并在 issue 留 error,不会越权)。
- Grok 的 `--allow` / `--deny` 规则语法只有公开资料,安装前需 Grok 本机核对。
- `test:db` 13 条 Windows 已知失败的测试名尚未填入 `windows-known-failures.txt`。
## 产品负责人要做的
**开发机(照片里那个终端)**,按顺序:
```bash
cd /workspace/Jyotisha/.worktrees/agent-loop-pilot-20261013
bash tools/agent-loop/agentctl.sh install
~/.local/share/jyotisha-agent/bin/agentctl.sh once # 没有带标签的 issue 时应显示 nothing to do
~/.local/share/jyotisha-agent/bin/agentctl.sh start
```
**Windows**:分支推上去后,把下面这段发给 Grok(交互模式):
> 在 G:\Ferti\Jyotisha\.worktrees\agent-loop 里 `git fetch origin` 后 `git checkout -f -B codex/agent-loop-pilot-20261013 origin/codex/agent-loop-pilot-20261013`,读 tools/agent-loop/README.md 和 docs/tasks/PROGRESS-agent-loop-pilot-20261013.md。然后:
> 1. 按 `grok --help` 核对 tools/agent-loop/grok-permissions.json 的 allow/deny 规则写法,不对就改成正确写法(不得改成 bypassPermissions),用 `grok -p "运行 git status" --permission-mode dontAsk --allow <规则>` 实测一条放行、一条不在名单里的命令被拒。
> 2. 在 frontend 下跑 `npm run test:db`(Docker 已开),把失败的 13 条测试名按 "not ok N - " 后面的原文逐行填进 tools/agent-loop/windows-known-failures.txt。
> 3. 两处改动 commit 后 `git push origin HEAD:refs/heads/codex/agent-loop-pilot-20261013`。
> 4. 运行 `powershell -NoProfile -ExecutionPolicy Bypass -File tools\agent-loop\install-grok.ps1 -RunOnce`,贴出最后 5 行日志。
> 不要注册计划任务,等 Claude 确认。