Work review
Reviews a single tracked issue's pushed implementation across GitHub (gh) or Linear (MCP) as a fresh, independent agent — reads the issue's requirements and the pushed diff, adversarially checks whether the work is correct and complete, and writes a verdict that routes the issue to done (accepted), changes-requested (feedback, back to the implement loop), needs-human (escalation), or blocked. It never implements or fixes anything — review only. It also applies a human's verdict on a needs-human issue. Tracker, labels and the round cap come from the committed config (.tituskirch-skills.json). Use when the user wants to review, check, or sign off one specific issue's AI work, mentions an issue awaiting review, or says things like "review issue 42", "check the work on issue 42", "reviewe Issue 42", or gives a verdict on an escalated issue.From its SKILL.md
npx -y skills add TitusKirch/skills --skill work-reviewAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 1 stars1 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
SKILL.md
10.6 KB, ~2.1k tokens by cl100k_base, as published. Nobody here has run it
work-review
Take one issue that an implementer pushed and review it — the stateless review-unit behind work-review-queue, and the deliberate counterweight to work-implement. A different agent, with fresh context: it did not build this and carries no "it works because I wrote it" bias. State lives in the issue's lifecycle label; the review is read-only and idempotent, so a crashed review just re-runs.
This skill is the review half of the two-loop workflow. It never implements, edits, commits, or merges — its only outputs are a verdict (a label move plus a comment): done, changes-requested, needs human, or blocked.
Opted out? If the repo config sets work to false, all work-* skills are disabled — stop and tell the user they are turned off in .tituskirch-skills.json. Check .work == false on the resolved config before any action. A missing jq or config exits non-zero too, so a pass is not evidence the config was read.
Workflow
1. Load config & resolve tracker
Resolve .tituskirch-skills.json via templates/resolve-config.sh, never by reading the raw file (REFERENCE.md states how, missing jq included); the work.* section holds tracker, labels, and work.review.maxRounds (default 3). Resolve the tracker (work.tracker, falling back to issue.tracker); reuse the issue catalog cache. Config + mechanics: REFERENCE.md.
2. Resolve the target issue
- Explicit — an id/number/key (
/work-review 42,ENG-123). - Self-select — none given → the selection query: the single highest-priority issue in
reviewRequested. None → say so and stop.
3. Read the state → pick the action
reviewRequested→ claim it (step 4) then review the pushed work (steps 5–7). The normal path.reviewingassigned to this runner → a previous review leased it and crashed; resume — review is read-only and idempotent, so just re-run steps 5–7 (no re-claim needed).reviewingheld by a different runner → in-flight elsewhere, not ours.needs human+ a human verdict this session → apply the human's call: "looks good" →done; feedback →changes-requested(record the feedback). This is the one place a human's word resolves an escalation.- anything else (
ready/working/changes-requested/done/blocked) → not ours; nothing to do.
4. Claim the review (lease) — when reviewing is configured
If work.labels.reviewing resolves to a label string, flip reviewRequested → reviewing and assign the issue to the runner before reading the diff — the tracker-global claim that stops a second clone reviewing the same issue and writing a competing verdict (the review lock only proves no live reviewer in this checkout). Honour the review single-flight lock (the Lease & race rules and The single-flight lock in work-implement's REFERENCE) — take it (direct run) or run under the drain's (queue).
When reviewing is false/unset (the default), skip this step entirely — there is no lease label, so the review loop behaves exactly as before: the lock alone, reviewing straight off reviewRequested. The verdict at step 7 then moves the label off reviewRequested; when the lease is on, it moves off reviewing. Either way the verdict label move clears the in-flight state.
5. Gather the work
-
Requirements — re-read the issue body (what was asked) and any prior review feedback on the issue/PR (so a re-review checks the last round was addressed).
-
The pushed diff — the artifact to review, scoped to this issue:
- PR present (
worktree) → the PR's diff (gh pr diff <n>). - No PR (
branch:<name>, e.g.branch:dev) → the issue's own commit range on the branch (the commits referencing this issue since it was last picked up). See review-after-land.
- PR present (
-
Checks — the pushed head must be green on the repo's own gate, and this review establishes that rather than inheriting it. Two sources, in this order:
- The forge's checks, but only where the head's base actually triggers them. Read which workflows the base runs before reading their result — an empty or irrelevant check list is
unknown, never green. - The repo's
verify, run here. Underbranch:<name>there is no PR and CI commonly never ran at all, so this is the only source that exists. Run it against the pushed head in a throwaway worktree — the review is read-only towards the user's tree, which is not the same as running nothing (recipe).
The implementer's own green run is not a source. It proves a tree passed before the push, and on a shared branch that tree has since moved. Re-running is the whole point of a second agent: same gate, different tree, no inherited verdict.
Red, or a gate that could not be run at all → a review finding, never a pass.
- The forge's checks, but only where the head's base actually triggers them. Read which workflows the base runs before reading their result — an empty or irrelevant check list is
6. Review — adversarially
You are the skeptic. Judge, in this order:
- Does it do what the issue asked? Match the diff against the body's requirements — nothing missing, nothing out of scope.
- Is it correct? Look for real defects: wrong logic, edge cases, broken references, secrets, regressions.
- Is a human needed? Apply the escalation policy — sensitive surfaces (via CODEOWNERS / branch protection), ambiguous intent you cannot confirm, a change too large/risky to sign off confidently, or checks red without a clear cause.
7. Verdict — one label move + a comment
Count the review rounds first — the number of times this issue has entered reviewRequested (recipe) — and compare to work.review.maxRounds. A count that could not be read is not zero rounds: escalate to needs human rather than let the loop run uncapped. Then:
| Verdict | When | Action |
|---|---|---|
done | correct, complete, low-risk | set done — accepted |
needs human | correct but risky/sensitive, OR you cannot confidently judge, OR round ≥ maxRounds and still not passing | set needs human + comment why a human is needed |
changes-requested | fixable problems, round < maxRounds | post the feedback (gh pr review --request-changes with inline comments, or an issue/Linear comment referencing the commit), then set changes-requested — back to the implement loop |
blocked | broken beyond a fixable change / a hard human call | set blocked + comment |
Report the verdict and the reasoning. Inside a work-review-queue drain, return the verdict and let the drain move on.
Guardrails
- Review only — never implement. No
Edit/Write/commit/merge/push. If the fix is obvious, describe it in the feedback; do not apply it. The implement loop applies it. - A different agent than the implementer. Review as a fresh skeptic; when in doubt,
needs human— never rubber-stamp. - Lease before review, when
reviewingis configured. ClaimreviewRequested → reviewing+ assign before reading the diff, so a second clone cannot review the same issue and write a competing verdict — the review loop's counterpart of the implement lease. Withlabels.reviewingoff (the default), the review lock alone applies: today's behaviour, unchanged. - Read-only and idempotent. A crashed review re-runs; posting feedback, dedupe against feedback you already left.
doneis a real acceptance, given by AI review (low-risk) or by a human (vianeeds human). Never setdoneon a change you could not confidently review — escalate instead.- The round cap is a floor for the human, not a ceiling on quality — at
maxRounds, escalate toneeds human; never quietly accept unfinished work to end the loop. - Attribution-free & secret-free — no
Generated with/🤖 line, no agent self-naming in comments; scan the diff for secrets and flag them.
Reference
Config, the selection query, the round-count recipe, the escalation policy, review-after-land, and the feedback recipes: REFERENCE.md. The implement half and the shared lifecycle: work-implement.
What ships with it: 2 files
77.5 KB alongside SKILL.md, 1 of them executable
templates/
- resolve-config.shruns2.0 KB
- REFERENCE.md75.6 KB
Gives 0 of the 12 instructions most review quality skills give in ~2.1k tokens
Counted across 1,048 of the 1,783 authors here whose files we hold, read 2026-08-07
- Ask questions one at a timein 81 of 1048, across 64 files
- Provide a recommended answer for each questionin 73 of 1048, across 50 files
- Explore the codebase instead of asking answerable questionsin 66 of 1048, across 42 files
- Resolve dependencies between decisions one-by-onein 42 of 1048, across 17 files
- Interview the user relentlessly about the planin 38 of 1048, across 13 files
- Order findings by severityin 31 of 1048
- Resolve each branch of the decision treein 27 of 1048, across 5 files
- Run a grilling sessionin 26 of 1048, across 5 files
- Update CONTEXT.md immediately when a term is resolvedin 26 of 1048, across 11 files
- Propose precise canonical terms for vague languagein 25 of 1048, across 7 files
- Create documentation files lazilyin 24 of 1048, across 5 files
- Assign severity to every findingin 24 of 1048
Said here and by no other author read
- Stop if work skills are disabled in config
- Resolve config using the provided script
- Resolve target issue by explicit id or self-select
- Re-read issue body and prior review feedback
- Run repo verify checks in a throwaway worktree
- Review the pushed diff adversarially
Grouped from the skills themselves: near-identical wordings counted once, and counted by distinct author, so one author publishing three of these counts once. Length counted with cl100k_base; the agent that loads this file may tokenize it differently.