From ttal
Reviews PRs strictly against their originating plan, flagging in-scope undone work as always blocking to prevent scope leaks and pipeline waste.
npx claudepluginhub tta-lab/ttal-cli --plugin ttalThis skill uses the workspace's default tool permissions.
You wrote a plan. A worker executed it. Now you're reviewing their PR against that plan. Your job isn't to re-review the whole codebase — specialized agents (pr-review-lead etc.) do that. Your job is narrower and sharper: **did the PR actually deliver what the plan said it would?**
Performs scope-focused PR reviews on GitHub/GitLab: validates requirements compliance, prevents scope creep, triages out-of-scope findings to backlog issues.
Validates blocking code review feedback against implementation plan, categorizing issues as in-scope, out-of-scope, or unclear. Gets user decisions on misalignments to prevent scope creep before agent fixes. Use after reviews in plan execution.
Loads GitHub PR review comments into AI session for analysis, triage, and fix planning. Default analysis-only; explicit --mode fix for auto-fixes.
Share bugs, ideas, or general feedback.
You wrote a plan. A worker executed it. Now you're reviewing their PR against that plan. Your job isn't to re-review the whole codebase — specialized agents (pr-review-lead etc.) do that. Your job is narrower and sharper: did the PR actually deliver what the plan said it would?
This skill exists because lenient "it's mostly done, minor gaps can be follow-up nits" reviews leak scope and waste pipeline cycles. Read the rule, then the anti-pattern, then do the review.
Every finding falls into exactly one of three categories:
In-scope + done ✓ — plan called for it, PR delivered it. No action. Don't bother listing these except as a sanity check.
In-scope + undone 🔴 — plan called for it, PR didn't deliver it (or delivered a partial/watered-down version). ALWAYS BLOCKING. Never "non-blocking." Never "fold into follow-up PR." Never "minor gap." If it was in the plan, it's in this PR — or the PR is not done.
Cosmetic + no value ⚪ — not in the plan, no real value if added. Don't mention at all. Not even as a "minor nit." Noise wastes attention.
There is no fourth category. No "minor gap, non-blocking, fold into follow-up" escape hatch. That hatch is how scope leaks.
From an actual past review:
Review complete. Build + tests + vet all pass. CI still running. Matches plan exactly: ... Minor gaps (non-blocking):
- Aliyun 3-function refactor skipped — subtask e1f0a134 annotation asked for extracting three helper functions; worker inlined them instead.
- One AssemblyAI edge case uncovered — we're still billed. Rare case. Could be folded into 7a8ee4f1 cleanup or a follow-up nit commit.
Both items are Category 2 (in-scope + undone). Both were in the plan's subtask annotations. Both got mislabeled as "non-blocking."
What went wrong:
Correct classification:
# Execution steps (what the worker was supposed to do):
task <task-uuid> tree
# Orientation (what/why/anti-goals — if present):
# Look for "orientation: flicknote <hex>" in the task annotations, then:
flicknote detail <hex>
For each subtask in the tree and each explicit ask in annotations:
git diff origin/main..HEAD or the PR URL).Do NOT grade ambition (would a different plan have been better?). You're grading execution against YOUR plan.
LGTM — zero Category 2 findings. Every plan item is delivered. Advance the pipeline:
ttal go <hex>
# spawns pr-review-lead for the deeper review pass
NEED_WORK — one or more Category 2 findings. Send blockers directly to the worker via heredoc (typically long, often includes code):
cat <<EOF | ttal send --to <hex>:coder
# NEED_WORK
## Blockers (Category 2 — in-scope, undone)
1. <concrete finding>
Plan asked for: <quote/paraphrase from subtask or annotation>
PR delivered: <what's there, or nothing>
Fix: <what needs to happen>
2. <next finding>
...
## Questions (optional — ask before fixing if unclear)
- <question>
EOF
The worker fixes, pushes new commits, and you re-review. No ttal comment — ttal send is the single channel.
ttal send --to neil. Don't downgrade to non-blocking to paper over it.