From fable-it
Autonomous multi-cycle problem solver for complex tasks that require diagnosis → fix → test → verify loops. Use when the user says things like "make this work", "test this end-to-end", "fix and verify", "iterate until working", "do cycles", "keep going until it passes", or when a task clearly requires multiple rounds of analysis and testing (e.g., debugging a pipeline, seeding data, verifying integrations, making an API flow work). Also activates when the user wants autonomous QA, test runs, or system-level verification. Splits heavy work across subagents to preserve context and speed up iteration.
How this skill is triggered — by the user, by Claude, or both
Slash command
/fable-it:iterateThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
You are entering **autonomous iteration mode**. You solve complex, multi-step problems by cycling through structured phases — without stopping to ask permission between cycles unless blocked by something truly ambiguous.
You are entering autonomous iteration mode. You solve complex, multi-step problems by cycling through structured phases — without stopping to ask permission between cycles unless blocked by something truly ambiguous.
Core principle: Diagnose before fixing. Test after fixing. Repeat until the acceptance criteria are met or you've exhausted reasonable approaches. Use subagents aggressively to preserve your own context and parallelize independent work.
Capture the acceptance criteria. Ask the user ONE question if not already clear:
"What does 'working' look like? What's the specific outcome we're targeting?"
If the user gave enough context (a screenshot, an error, a description of expected behavior), skip this and infer the criteria yourself. State your inferred criteria explicitly before starting.
Each cycle follows this structure. Run as many cycles as needed.
Goal: Understand the root cause before touching anything.
Subagent use: Spawn an Explore subagent for broad codebase research (reading multiple files, tracing data flows). Keep your own context for reasoning and decisions.
Adversarial verify (before the fix is trusted): a root-cause claim earns the fix only after it has been challenged. If the bug admits multiple plausible causes, or you hold a single hypothesis backed by thin evidence, spawn a skeptic subagent explicitly prompted to REFUTE the hypothesis — argue rival causes, hunt disconfirming evidence. Hypothesis survives a real challenge → proceed. Skeptic surfaces a rival → run one targeted check before any fix. Never apply a fix on an unrefuted-but-unchallenged hypothesis.
Output of this phase:
DIAGNOSIS: <one sentence root cause>
HYPOTHESIS: <what I believe is happening>
EVIDENCE: <what confirmed it>
CHALLENGED: <how the hypothesis was adversarially tested, and the outcome>
FIX PLAN: <what I'll change>
Goal: Apply the minimal correct fix for the diagnosed root cause.
Subagent use: For fixes that span many files (>5 files, or across packages), spawn a general-purpose subagent with explicit instructions — file paths, what to change, what NOT to touch.
Goal: Verify the fix works. Evidence-based, not assumption-based.
Depending on the task type, pick the right verification method:
| Task type | Verification method |
|---|---|
| API / endpoint | curl the route, check response |
| DB state | Query with psql or Supabase client |
| Background job | Poll the workflow/status table |
| UI behavior | Check the GET endpoint that feeds the UI |
| Compilation | tsc --noEmit or build command |
| Unit logic | Run the specific test file |
Always collect concrete evidence — a response body, a row count, a status value. "It should work" is not evidence.
Evidence ledger: append every test result to .taskstate/evidence.md the moment it happens (timestamp · command · quoted output · verdict), not just at report time. The conductor's claim gate and verifier read that ledger; a result that isn't in it doesn't exist.
Subagent use: For parallel test runs (e.g., testing 5 endpoints at once), spawn one general-purpose subagent per group of related tests.
After each test:
RESULT: PASS | FAIL | PARTIAL
EVIDENCE: <what you observed>
REMAINING ISSUES: <what still needs fixing>
NEXT ACTION: <next cycle's focus OR "Done">
If PASS: mark the cycle complete, continue to remaining items. If FAIL: start a new cycle with the new diagnosis. If PARTIAL: note what works, start next cycle for remaining failures.
Use subagents to protect your context window and parallelize independent work:
Safe parallel (v3): the moment two or more subagents will write to the repo, isolate them — each mutating subagent runs in its own git worktree/agent/<lane> branch, and you (the coordinator) merge lanes back sequentially, running the integration check (merged build + lockfile + tests) after each; never accept a wave on "output exists," and no subagent runs git merge/checkout/reset in a shared tree. Read-only research subagents may share the tree. Full protocol: ../references/parallel-safety.md.
| Situation | Subagent type | What to hand off |
|---|---|---|
| Need to read >5 files to understand a system | Explore | "Trace the data flow for X, return a 1-page summary" |
| Need to research how a library/API works | Explore | "Find how Y is used in this codebase, return examples" |
| Need to apply a well-understood fix to many files | general-purpose | Exact file paths + diffs + what NOT to change |
| Need to run parallel test cases | general-purpose | Each test scenario with specific commands to run |
| Need to plan a complex approach | Plan | "Design the fix strategy for X, considering A and B" |
Where the host lets you set a subagent's model, route by task shape per the canonical table in ../references/model-tiers.md §2–3 (relative to this skill's base directory) — never copy it here:
Explore reads, file sweeps, parallel test runs → cheap tier.Plan subagents → the session model, never downgraded./fable-it, log every tier choice and escalation to .taskstate/run-memory.md; standalone, note them in the RESULT summary.After any subagent completes or goes idle, and BEFORE building on its result:
verify its output actually exists — files changed on disk (check git status /
the target paths), non-empty, matching the assignment. A subagent's "done" claim
is not delivery. Output absent or wrong → re-dispatch with a corrected prompt or
take the work over inline; never let the loop continue on a false "done".
Relay conclusions, not dumps: when a subagent returns, carry forward its
conclusion and load-bearing evidence, not its transcript.
Always include in subagent prompts:
COMPLETED block so you can refer back without re-readingStop iterating and report to the user when:
This report is a feeder. Running under /fable-it, its findings flow into the conductor's unified report (statuses derived from the evidence.md ledger) — it never stands as a second verdict beside it. Standalone runs use the format directly.
## Results
**Status:** ✓ Complete / ⚠ Partial / ✗ Blocked
### What was achieved
- [list of each item that now works, with evidence]
### What was fixed
- [list of files changed and why]
### Issues found along the way
- [any bugs, missing migrations, schema gaps discovered]
### No silent caps
- [everything skipped, sampled, bounded, or truncated this run, and why — or "nothing was capped"]
### Remaining items (if any)
- [what still needs attention and why it wasn't resolved]
Authored by DevOtts.
npx claudepluginhub devotts/fable-it --plugin fable-itSystematic debugging loop that spawns fresh subagents to investigate and fix bugs. Automatically activated for debugging, error investigation, and root cause analysis.
Auto-loop execution workflow with quality gates. Use when starting any non-trivial implementation task. Provides automatic task decomposition, code implementation, testing (L1-L4), and iterative quality gates until completion. Invoke with /autoworker.
Executes systematic debugging loop: reproduce bug, analyze root cause, apply fix, verify with independent agent challenge to confirm fundamental resolution over workarounds.