Reasoning reflexion
Skill firststone-vc/reasoning-pack/skills/reasoning-reflexion
Use after producing any draft with a right/wrong dimension (code, math, structured extraction, factual analysis) and before it ships — runs a dedicated critique pass that hunts for errors in the draft, then a separate correction pass that fixes only what the critique found.From its SKILL.md
npx -y skills add firststone-vc/reasoning-pack --skill reasoning-reflexionAssembled 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
5.8 KB, ~1.3k tokens by cl100k_base, as published. Nobody here has run it
Reflexion (Self-Critique + Correction)
What this is — and isn't
Reflexion is a two-pass discipline: (1) critique — reread your own draft as an adversary looking for what's wrong, not for what's right; (2) correct — fix only the issues the critique surfaced, then stop.
It does not raise the model's ceiling. It re-spends compute the model already has on a task — finding errors — that competes with the task of generating the draft in the first place. A single unbroken generation pass has to handle content and correctness at once; splitting it into two passes gives correctness a full, undivided turn. This reliably catches: skipped edge cases, constraints from the prompt that got silently dropped, off-by-one/arithmetic slips, unsupported claims stated as fact, internal contradictions, and format/schema violations.
It will NOT catch errors that require knowledge or reasoning the model doesn't have — if it didn't know a fact was wrong while writing it, it usually won't know while reading it either. It also can't rescue a wrong approach chosen from the start; that needs re-planning (see reasoning-plan-then-execute), not critique. Treat reflexion as a net for slips, not a substitute for a verifier with an independent source of truth (see reasoning-verifier-loop for that).
Inputs required
- The task/spec the draft was supposed to satisfy — instructions, constraints, acceptance criteria. Without this, "critique" has nothing to check against and degrades into vague politeness.
- The draft itself, verbatim — the exact output to be critiqued.
- (optional, recommended) A checklist of failure modes specific to the task type — e.g. for code: null handling, off-by-one, resource leaks; for extraction: missing fields, wrong types, hallucinated values; for analysis: unstated assumptions, cherry-picked evidence, numbers that don't reconcile.
Steps
- Freeze the draft. Do not edit yet — treat it as read-only input to step 2.
- Critique pass — find, don't fix. Reread the draft against the task spec and the failure-mode checklist, in the voice of a skeptical reviewer who assumes a defect exists and is trying to locate it. Produce a list of concrete issues, each with: what's wrong, where (line/section/field), why (which spec requirement or logical check it fails), severity (blocking vs. cosmetic). If nothing survives honest scrutiny, say so explicitly — never invent an issue just to look thorough.
- Correction pass. Using only the issue list from step 2, rewrite the draft to resolve each item. Do not perform an unrelated fresh rewrite — every change should trace back to a specific critique item, so the diff stays reviewable.
- Re-check the fix, once. Confirm each critique item is actually resolved in the corrected draft, not just acknowledged. If a fix introduced a new issue, note it — but don't loop indefinitely.
- Stop after 2 rounds max. One critique-then-correct cycle is enough for most drafts; run a second only if round 1 found blocking issues. If round 2 still finds blocking issues, escalate (bigger model, human review, or re-plan) instead of running a third round — reflexion converges fast or it doesn't converge at all.
Guardrails
- Hard cap: 2 rounds. A third round on the same draft usually signals a structural problem (wrong approach), not a slip — stop and re-plan instead of iterating further.
- The critique pass must be allowed to output "no issues found." A critic that always finds something isn't critiquing, it's padding — that destroys the signal.
- Keep critique and correction as two distinct, visible passes. Don't silently merge them into one rewrite — the separation is what makes this different from just "try again."
Output format
## Critique
1. [blocking|minor] <issue> — <where> — <why: which requirement/check it violates>
2. ...
(or: "No issues found against the spec.")
## Corrected draft
<full corrected output>
## Resolved?
- Issue 1: fixed / not applicable / carried to round 2 (reason)
- Issue 2: ...
Worked example
Task: "Write a function days_between(d1, d2) that returns the number of whole days between two ISO date strings, always non-negative."
Draft (input to reflexion):
from datetime import date
def days_between(d1, d2):
a = date.fromisoformat(d1)
b = date.fromisoformat(d2)
return (b - a).days
Critique pass:
- [blocking] Return value can be negative when
d1is later thand2— violates "always non-negative." Fix: wrap the result inabs(). - [minor] No explicit handling for malformed input strings;
date.fromisoformatraisesValueErroron bad input, which is acceptable but undocumented — not blocking. - The day-subtraction logic itself is correct and the signature matches the spec — no issue there.
Correction pass:
from datetime import date
def days_between(d1, d2):
"""Return the number of whole days between two ISO date strings (always non-negative)."""
a = date.fromisoformat(d1)
b = date.fromisoformat(d2)
return abs((b - a).days)
Resolved?
- Issue 1: fixed (
abs()added). - Issue 2: not applicable — left as documented raise behavior via the docstring; no code change needed.
See also: reasoning-plan-then-execute (fixes a wrong approach, which critique alone cannot), reasoning-verifier-loop (adversarial check against an independent standard, not just a reread), reasoning-self-consistency (for tasks with one correct answer, sampling+voting is often cheaper than critique).
What ships with it
Read from the repository
Just SKILL.md. No reference files, no scripts.