Files
xsser 1be1c478b6 release: v3.2.0 — teardown protocol (agent lifecycle accounting)
PUA v3.1 之前覆盖 agent 生命周期的前 4 阶段(Define → Spawn → Monitor →
Accept),缺后 3 阶段(Release → Cleanup → Orphan handling),导致验收通过的
agent 堆在上下文、worktree 变孤儿、tmux pane 常驻、后台 agent 永久吃 token。
v3.2 补齐会计层:SubagentStop hook + 3 个新 slash 命令 + teardown 协议文档。

Why (Netflix Keeper Test): 职业球队里打完比赛的球员必须下场,继续站场上只会
拖垮全队节奏。agent 也一样。

What:
- NEW hooks/subagent-teardown.sh — SubagentStop 会计,写 teardown.jsonl +
  从 active-agents.json 移除(单行 compact jsonl)
- NEW commands/team-status.md — 列在场阵容(活跃 agent / PID / TTL / age)
- NEW commands/reap-orphans.md — 扫 stale agent(mtime > 30min)批量回收
- NEW commands/teardown-all.md — 级联释放 P10 → P9 → P8 → P7 全员下场
- NEW skills/pua/references/teardown-protocol.md — 生命周期 7 阶段协议 +
  6 条 Release 规则 + Cleanup checklist + Orphan 三层防御

Bugfix:
- hooks/pua-loop-hook.sh: 新增 Gate 0(SubagentStop isolation),state file
  路径改为绝对路径 $HOME/.claude/pua/loop-active.md(SESSION_ID 在 setup
  时不可用,固定名)+ legacy fallback
- scripts/setup-pua-loop.sh: ABS + legacy 双写 state
- hooks/hooks.json: 注册 SubagentStop → subagent-teardown.sh
- commands/on.md: 修复 feedback_frequency=0 tombstone 不恢复的不对称 bug
- commands/cancel-pua-loop.md + team-status.md: 移除不支持的
  Read(~/...) tilde 权限语法

E2E 验证 (10/10 全绿):
T1 hooks.json syntax | T2 teardown jsonl compact | T3 active-agents 选择性清除
T4 setup 双写 MD5 identical | T5 Gate 0 真拦截 SubagentStop
T6 主会话 Stop 注入 decision:block valid JSON | T7 Gate 0 对带 transcript
的 sub 仍拦截 | T8 无 tilde | T9 feedback_frequency 恢复 | T10 SubagentStop 注册
2026-04-18 02:40:57 +08:00

1.9 KiB
Raw Permalink Blame History

description, allowed-tools
description allowed-tools
查看当前活跃的 PUA agent/team 清单、PID、TTL。/pua:team-status。Triggers on: '/pua:team-status', '查看 agent 状态', 'pua team status', 'list agents'.
Bash(ls:*)
Bash(stat:*)
Bash(jq:*)
Bash(cat:*)
Bash(test:*)
Bash(find:*)

PUA Team Status — 活跃 agent 清单

职业球队需要上场阵容表。这个命令列出所有"还在场上"的 agent 及其年龄。

执行步骤

  1. 确保 ~/.claude/pua/ 存在:

    mkdir -p "$HOME/.claude/pua"
    
  2. 扫描 loop state 文件:

    ls -la "$HOME/.claude/pua/"loop-*.md 2>/dev/null || echo "NO_LOOP"
    
  3. 扫描 legacy 相对路径(向后兼容):

    test -f .claude/pua-loop.local.md && ls -la .claude/pua-loop.local.md || echo "NO_LEGACY"
    
  4. 扫描 active agents 记录(若 PostToolUse hook 已记录):

    test -f "$HOME/.claude/pua/active-agents.json" && \
      jq -r '.agents[] | "\(.id) | spawn=\(.spawn_time) | status=\(.status)"' \
        "$HOME/.claude/pua/active-agents.json" || echo "NO_AGENTS_FILE"
    
  5. 输出表格格式:

    | Type    | ID / File                          | Age      | Status    |
    |---------|-----------------------------------|----------|-----------|
    | loop    | loop-<session>.md                 | 00:05:23 | ACTIVE    |
    | loop    | .claude/pua-loop.local.md         | 01:34:11 | ⚠️ STALE  |
    | agent   | p8-backend                        | 00:12:04 | RUNNING   |
    | orphan  | loop-<dead>.md                    | 02:15:00 | 🧟 ORPHAN |
    
  6. 若发现 STALE/ORPHAN,追加提示:

    🧹 发现 N 个孤儿状态。建议执行 /pua:reap-orphans 批量清理。

判定规则

  • ACTIVEmtime < 30min
  • STALE30min ≤ mtime < 2h
  • ORPHAN:mtime ≥ 2h 或无对应活跃 session

无活跃 team 时

[PUA TEAM STATUS] 没有活跃 agent。球队下班。