一键导入
review-triage
Use when deciding how deeply to review a PR, which reviewers to involve, or whether to accept a large agentic PR
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Use when deciding how deeply to review a PR, which reviewers to involve, or whether to accept a large agentic PR
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
Plan test coverage and the TDD workflow for a GitHub issue through a grill-me interview, then produce an execution-ready plan doc (grounding, test locations, red/green steps, PR breakdown, review gates, task-list bookkeeping) at the repo root. Use when asked to plan a TDD implementation, plan which tests to add for an issue, or scope out test coverage before writing code.
Use ONLY when Nico explicitly invokes it (typically via /pdp-confidence-update) to write, prepare, or reconstruct the weekly PDP confidence update for a project channel. Do NOT trigger automatically from general Slack/status questions. Reconstructs the channel since the last `!pdp progress` post and drafts a ready-to-post update in Nico's house style.
Produces Nico's daily stand-up reply — "Yesterday", "Today", and "Blockers or risks" sections in his house style, organized by his current P1/P2/P3 epics with everything else under "Also" — then posts each as a separate Geekbot reply in his Slack DM once he agrees on the wording. Use when Nico asks to write his daily stand-up, stand-up message, Geekbot reply, or to summarize yesterday's work for stand-up.
Use when reviewing a PR in camunda/camunda that touches AGENTS.md, skills under .claude/skills/, the way the project uses ADRs, or the way the project uses architecture docs (not new ADRs or architecture docs themselves) — i.e., Agent-Ready initiative PRs
Use when user shares an error message, stack trace, or log snippet to investigate — or when investigating an incident that has a concrete error artifact (log line, exception, failed assertion). Skip when the incident has no error artifact, e.g. performance regressions, throughput/latency drops, capacity issues, or behavioral discrepancies without logs.
Refines an existing skill for effectiveness (does it achieve its goal?), efficiency (tokens spent doing so), and discoverability (does Claude trigger it when relevant?). Use when the user wants to optimize, refactor, audit, or tighten a skill, or invokes optimize-skill.
基于 SOC 职业分类
| name | review-triage |
| description | Use when deciding how deeply to review a PR, which reviewers to involve, or whether to accept a large agentic PR |
Before doing anything, look up basic details about the PR. If you don't know yet which PR to triage, ask the user to provide a link or PR identifier.
Match review effort to consequence. Treating all PRs identically wastes capacity on low-risk changes and underserves high-risk ones.
Core principle: Three variables determine the right review stack — blast radius, code lifespan, and team size — not diff size.
| Variable | Low end | High end |
|---|---|---|
| Blast radius | Config tweak, docs, dev-only | Payment path, auth, data migration |
| Code lifespan | Throwaway script, one-off demo | Long-lived, maintained system |
| Team size | Solo, no users | Multi-team, production users |
Require before accepting a PR for review:
Agent PRs average 51% larger than human submissions. Reject or chunk oversized diffs — they get rubber-stamped or generate low-value back-and-forth.
| Risk | Signals | Stack |
|---|---|---|
| Low | Config, docs, no-op refactor, solo/dev-only | Linter + quick glance |
| Medium | Feature addition, test changes, library upgrade | Type check + tests + one AI reviewer |
| High | Payment path, auth, data migration, production multi-team | Type check + tests + dual AI reviewers + domain owner + security pass |
Use heterogeneous reviewers — each catches different problem classes.
Data point: across 146 PRs, 93.4% of issues were caught by exactly one of four AI tools. Reviewer diversity beats single-tool depth.
Dual-model pattern: Pair one reviewer calibrated for everyday correctness with one calibrated for production-severity failures. Adversarial coverage surfaces bugs no single reviewer detects.
Caution: Faster agent output does not reduce review load — it increases it. Maintain reviewer headcount even as generation speed improves.
| Signal | Why it matters |
|---|---|
| Large test rewrites | Agent likely rewrote tests to match broken behavior rather than catching failures |
| Removed tests or skipped linting | Deterministic gates were lowered — CI cannot be negotiated with |
| Degraded coverage thresholds | Deterministic gates lowered — treat as regression |
| Untrusted input flowing to LLM calls | Prompt injection vulnerability |
| Duplicate helpers (existing elsewhere) | Agent didn't search before creating; signals weak codebase awareness |
| No intent capture / no decision log | Reviewer is first human to see code with no context for why it exists |
Read test changes before code changes. Test rewrites are a leading indicator of substantive behavioral changes being hidden.
Require agents to attach a decision log stating:
This recovers the "missing reasoning" problem — reviewers otherwise reconstruct intent from diffs alone.
| Decision | Human role |
|---|---|
| "Should this change exist?" | Always human |
| High blast-radius merge | Human-in-loop (review every merge) |
| Intent alignment ("is this what we asked for?") | Always human |
| Accountability when production breaks | Human-owned |
Human-on-loop (low risk): Spot-check and audit the system. Sample diffs rather than reviewing every one.
Human-in-loop (high risk): Review every merge. Own the merge decision.
Always compute the diff size. Only surface a split-suggestions section in the output if the diff crosses the threshold below — for smaller diffs, do this check silently and move on (do not mention it in the output).
Step 1 — Compute total changed lines (additions + deletions):
gh pr view <PR_NUMBER> --repo <owner>/<repo> --json additions,deletions
Sum additions + deletions. This is the same count GitHub's UI shows and is the source of truth. If gh isn't available or the PR isn't on GitHub, fall back to:
git diff --stat <base>...<head> # after fetching both refs locally
Threshold: total changed lines > 1000 → run Step 2 and include the split-suggestions section in the output. Total changed lines ≤ 1000 → stop here; the split-suggestions section is omitted entirely (no header, no "N/A", no mention).
Step 2 — If over threshold, analyze the diff for logical splits. Pull per-file stats to reason about structure:
gh pr diff <PR_NUMBER> --repo <owner>/<repo> > /tmp/pr.diff # full patch
gh api repos/<owner>/<repo>/pulls/<PR_NUMBER>/files --paginate \
--jq '.[] | "\(.additions+.deletions)\t\(.status)\t\(.filename)"'
git log --oneline <base>..<head> # commit boundaries, if cloned locally
Group the changed files using real signals, not arbitrary line-count buckets:
frontend/ vs backend/, or distinct service packages that don't share call pathsdist/, *.g.dart, snapshot files vs code a human actually wrote; generated diffs add bulk without adding review riskPropose 2–4 splits when the diff clearly decomposes along one or more of these lines. If it genuinely doesn't decompose (e.g. one tightly-coupled change touching many files for a single reason), say so explicitly instead of forcing an artificial split — in that case omit the split-suggestions section from the output even though the threshold was crossed, and note this in the Estimated human effort driver instead (e.g. "large but atomic — could not be split further").
Output exactly this structure, in this exact order, and nothing else — no preamble, no extra headers, no commentary before or after it. Do not reorder, rename, or drop fields; if a field's value is "none of the above," write that out explicitly (e.g. "None") rather than omitting the line.
## Triage Result
- **PR:** <owner/repo>#<number> — <short title>
- **Intake:** :white_check_mark: Pass | :flags: Flagged | :x: Rejected — <one-line reason if Flagged/Rejected, else "meets all four bars">
- **Tier:** :large_green_circle: Low | :large_orange_circle: Medium | :red_circle: High
- **:reasonably-sized-haystacks: Stack:** <tools and reviewers to involve>
- **:red-flag: Red flags:**
- <flag>
- <flag>
- **:standing_person: Gate:** Human-on-loop (spot-check) | Human-in-loop (review every merge)
- **:hourglass_flowing_sand: Estimated human effort:** <range, e.g. "5–10 min"> — <one-line driver>
### Suggested PR Splits
1. **<split name>** — <what this split contains> — <why it should be split out>
2. **<split name>** — <what this split contains> — <why it should be split out>
Fill in every placeholder (<...>); for fields with |-separated options, choose exactly one matching the actual verdict/tier and write only that one emoji+word, not the alternatives — the emojis are part of the fixed options, not a free choice. For Red flags, list one triggered flag per bullet line (- <flag>); if none triggered, write a single line - none instead of a comma-separated list.
The ### Suggested PR Splits header and its numbered list are the only conditional part of this template:
N. **<split name>** — <contents> — <rationale>.