Skip to main content

morning-guard-triage

每天早晨自动巡查所有昨日 loop session,生成守门晨报,将 verdict=block/warn 的高风险发现汇总为结构化状态文件,并可选地将值得修复的项推入隔离 worktree 或 Slack/Linear。

설치로 이동

소스 정보

저장소
cubxxw/agent-diff-guard
최근 소스 활동
2026년 6월 21일 03:12
감지된 SKILL.md 언어
중국어
스타
0
포크
0

설치 방법

기본적으로 소스를 먼저 확인하는 Prompt가 선택됩니다. 직접 명령으로 전환하거나 로컬 사본을 다운로드할 수도 있습니다.

소스 파일 검토

설치 여부를 결정하기 전에 SKILL.md와 SkillsMP에 표시된 보조 파일을 읽어 보세요.

SKILL.md 표시 중

SKILL.md
소스 지침 · 읽기 전용 미리보기
name
morning-guard-triage
description
每天早晨自动巡查所有昨日 loop session,生成守门晨报,将 verdict=block/warn 的高风险发现汇总为结构化状态文件,并可选地将值得修复的项推入隔离 worktree 或 Slack/Linear。
trigger
/morning-guard-triage
# /morning-guard-triage **设计一次,每天自动跑**。这是 agent-diff-guard Loop Guard 层的标准晨间巡查 skill——呼应 Loop Engineering 的核心理念:agent 在你睡觉时持续迭代,你醒来时需要一份精确到"该看什么"的简报,而不是翻阅 50 条 commit log。 --- ## 标准 Morning Triage Loop 形状(Osmani 框架) ``` ┌────────────────────────────────────────────────────────┐ │ Morning Triage Loop │ │ │ │ 1. list sessions → 找出昨日 / 活跃的 loop session │ │ 2. report per session → 生成晨报(drift/budget/findings)│ │ 3. aggregate → 汇总 block/warn 项到 PROGRESS.md│ │ 4. [可选] worktree → 为值得修复的项创建隔离分支 │ │ 5. [可选] notify → 推送摘要到 Slack / Linear │ └────────────────────────────────────────────────────────┘ ``` 每个步骤独立可跳过,无副作用(只读 + 写本地文件),适合作为 cron job 或 Claude Code `/loop` 的 post-iteration hook 运行。 --- ## 步骤详解与 Bash 命令示例 ### 步骤 1:读昨日所有 loop session ```bash # 列出所有 session(JSON 格式便于后续处理) SESSIONS=$(agent-diff-guard loop list --json) # 筛选昨日活跃 / 今日仍在运行的 session(jq 过滤) ACTIVE_IDS=$(echo "$SESSIONS" | jq -r '.[] | select(.status == "active" or .status == "emergency-braked") | .id') echo "待巡查 sessions:" echo "$ACTIVE_IDS" ``` ### 步骤 2:对每个 session 生成晨报 ```bash REPORT_DIR=".agent-guard/morning-$(date +%Y%m%d)" mkdir -p "$REPORT_DIR" for SID in $ACTIVE_IDS; do # 生成 JSON 晨报(含 topFindings / driftSummary / budgetSummary / recommendation) agent-diff-guard loop report --session "$SID" --json > "$REPORT_DIR/$SID.json" # 同时生成人类可读版本 agent-diff-guard loop report --session "$SID" > "$REPORT_DIR/$SID.txt" echo "✓ $SID 晨报已写入 $REPORT_DIR/" done ``` `generateReport()` 输出字段说明(来自 `src/loop/report.ts`): | 字段 | 含义 | |---|---| | `topFindings` | Top-5 高频发现(rule × path × count) | | `driftSummary.status` | `stable` / `drifting` / `diverged` | | `budgetSummary.budgetPct` | token 消耗百分比 | | `recommendation` | `continue` / `review-and-continue` / `rollback` / `stop` | | `emergencyBrakeTriggered` | 是否触发了紧急制动 | ### 步骤 3:汇总高风险项 → PROGRESS.md 状态文件 ```bash PROGRESS_FILE="MORNING-TRIAGE-$(date +%Y%m%d).md" { echo "# Morning Guard Triage — $(date +%Y-%m-%d)" echo "" echo "> 自动生成。verdict=block 的项需人工确认。" echo "" for SID in $ACTIVE_IDS; do R="$REPORT_DIR/$SID.json" echo "## $SID" echo "- recommendation: $(jq -r '.recommendation' "$R")" echo "- drift: $(jq -r '.driftSummary.status' "$R") / $(jq -r '(.driftSummary.currentDrift * 100 | floor | tostring) + "%"' "$R")" echo "- budget: $(jq -r '(.budgetSummary.budgetPct * 100 | floor | tostring) + "%"' "$R") used" echo "- emergency_brake: $(jq -r '.emergencyBrakeTriggered' "$R")" echo "" echo "### wake-you-up 发现" jq -r '.topFindings[] | select(.severity=="wake-you-up") | "- [ ] `\(.rule)` @ `\(.path)` ×\(.count)"' "$R" echo "" done } > "$PROGRESS_FILE" echo "✓ 状态文件:$PROGRESS_FILE" ``` ### 步骤 4(可选):为值得修复的发现创建隔离 worktree ```bash # 仅对 recommendation=rollback 或 review-and-continue 的 session 创建 worktree for SID in $ACTIVE_IDS; do REC=$(jq -r '.recommendation' "$REPORT_DIR/$SID.json") if [ "$REC" = "rollback" ] || [ "$REC" = "review-and-continue" ]; then BRANCH="fix/loop-triage-$SID-$(date +%Y%m%d)" git worktree add "../worktrees/$BRANCH" -b "$BRANCH" echo "✓ Worktree 已创建:../worktrees/$BRANCH(session=$SID)" fi done ``` ### 步骤 5(可选):通过 MCP connector 推送到 Slack / Linear ```bash # 需先配置 MCP connector(Slack / Linear webhook) # 在 claude_desktop_config.json 中添加对应 MCP server # 如已配置 Slack MCP server,在 Claude 对话中调用: # mcp__slack__post_message channel="#guard-alerts" text="$(cat MORNING-TRIAGE-YYYYMMDD.md | head -40)" # 如已配置 Linear MCP server,为每个 block 项创建 issue: # mcp__linear__create_issue title="[Loop Guard] $SID 触发 rollback" description="..." echo "ℹ️ MCP 推送步骤需在 Claude 对话上下文中执行(非纯 bash)" ``` --- ## 完整一键脚本 ```bash #!/usr/bin/env bash # morning-guard-triage.sh — 晨间守门巡查 # 用法:bash morning-guard-triage.sh # 建议:加入 crontab: 0 8 * * 1-5 bash /path/to/morning-guard-triage.sh set -euo pipefail DATE=$(date +%Y%m%d) REPORT_DIR=".agent-guard/morning-$DATE" PROGRESS_FILE="MORNING-TRIAGE-$DATE.md" mkdir -p "$REPORT_DIR" echo "=== Morning Guard Triage $DATE ===" # 1. 列出 session SESSIONS=$(agent-diff-guard loop list --json) ACTIVE_IDS=$(echo "$SESSIONS" | jq -r '.[] | select(.status == "active" or .status == "emergency-braked") | .id') if [ -z "$ACTIVE_IDS" ]; then echo "✓ 无活跃 session,今日无需巡查。" exit 0 fi # 2. 生成晨报 for SID in $ACTIVE_IDS; do agent-diff-guard loop report --session "$SID" --json > "$REPORT_DIR/$SID.json" agent-diff-guard loop report --session "$SID" > "$REPORT_DIR/$SID.txt" done # 3. 汇总到 PROGRESS.md { echo "# Morning Guard Triage — $(date +%Y-%m-%d)" echo "" echo "> 自动生成。verdict=block 的项需人工确认。" echo "" for SID in $ACTIVE_IDS; do R="$REPORT_DIR/$SID.json" echo "## $SID" echo "- recommendation: $(jq -r '.recommendation' "$R")" echo "- drift: $(jq -r '.driftSummary.status' "$R") / $(jq -r '(.driftSummary.currentDrift * 100 | floor | tostring) + "%"' "$R")" echo "- budget: $(jq -r '(.budgetSummary.budgetPct * 100 | floor | tostring) + "%"' "$R") used" echo "- emergency_brake: $(jq -r '.emergencyBrakeTriggered' "$R")" echo "" echo "### wake-you-up 发现" jq -r '.topFindings[] | select(.severity=="wake-you-up") | "- [ ] `\(.rule)` @ `\(.path)` ×\(.count)"' "$R" echo "" done } > "$PROGRESS_FILE" echo "✓ 状态文件:$PROGRESS_FILE" # 4. [可选] worktree(取消注释启用) # for SID in $ACTIVE_IDS; do # REC=$(jq -r '.recommendation' "$REPORT_DIR/$SID.json") # if [ "$REC" = "rollback" ] || [ "$REC" = "review-and-continue" ]; then # git worktree add "../worktrees/fix-$SID-$DATE" -b "fix/loop-$SID-$DATE" # fi # done echo "=== Triage 完成 ===" ``` --- ## PROGRESS.md 状态文件模板 以下为自动生成的 `MORNING-TRIAGE-YYYYMMDD.md` 示例: ```markdown # Morning Guard Triage — 2026-06-18 > 自动生成。verdict=block 的项需人工确认。 ## 01JXYZ...(session id) - recommendation: **review-and-continue** - drift: drifting / 62% - budget: 74% used - emergency_brake: false ### wake-you-up 发现 - [ ] `hardcoded-secret` @ `src/config.ts` ×3 - [ ] `test-deleted` @ `src/auth/auth.test.ts` ×1 ## 01JABC...(另一个 session) - recommendation: continue - drift: stable / 12% - budget: 31% used - emergency_brake: false ### wake-you-up 发现 (无) ``` --- ## 触发方式 | 方式 | 命令 | |---|---| | 手动触发 | `bash morning-guard-triage.sh` | | cron(工作日早 8 点) | `0 8 * * 1-5 bash /path/to/morning-guard-triage.sh` | | Claude Code skill | `/morning-guard-triage` | | PostToolUse hook | 在 `settings.json` 中注册(需配合 `agent-diff-guard loop install-hook`) | --- ## 依赖与前置条件 1. `agent-diff-guard` CLI 已安装并可执行(`bun run src/cli.ts` 或全局安装) 2. 至少存在一个已启动的 loop session(`agent-diff-guard loop start --goal "..." --budget 500k`) 3. `jq` 命令可用(`brew install jq` / `apt install jq`) 4. (步骤 5)Slack / Linear MCP server 已在 `claude_desktop_config.json` 中配置 --- ## Loop Engineering 对应关系 > "Build the guard for the loop, not the loop itself." > — agent-diff-guard LOOP-DESIGN.md 本 skill 不是 loop 管理器,是**所有 loop 的验证层晨报入口**: | Loop 失败模式 | 本 skill 的回应 | |---|---| | Goal drift | 晨报 `driftSummary` 标红 `diverged`,推进审查队列 | | Token explosion | 晨报 `budgetSummary.budgetPct > 90%` 时输出 `stop` 建议 | | Verification absence | 把昨夜 agent 产出的 `wake-you-up` 发现变成今早的 `- [ ]` checklist |
GitHub에서 보기