Loading blog posts...
Loading blog posts...
Loading...

Most teams waste Claude Fable 5 by copying its outputs instead of capturing its process. The real value isn’t what Fable produces - it’s how it thinks through problems. The pattern that pays off: pull that reasoning into reusable skills you can run on cheaper models.
Fable 5 doesn’t just complete tasks. It breaks work into phases, puts clear checkpoints between them, handles errors with specific recovery paths, and validates results before it calls anything “done.” The good news is those behaviors are visible, which means you can capture them.
What you’re reusing isn’t a copied system prompt or a clever instruction set. It’s a behavioral workflow encoded as a SKILL.md file. That skill defines the contract between intent and verification - the phases, the gates, the checks - without tying you to a specific model.
text# Skill: Code Review Workflow ## Phases 1. UNDERSTAND: Parse PR context, identify changed files, note dependencies 2. ANALYZE: Check each file against project conventions, flag patterns 3. VERIFY: Run static analysis, confirm test coverage, validate types 4. SYNTHESIZE: Compile findings into prioritized feedback ## Phase Gates - UNDERSTAND → ANALYZE: Must list all affected modules - ANALYZE → VERIFY: Must document at least one observation per file - VERIFY → SYNTHESIZE: All automated checks must complete ## Error Recovery - Missing context: Request specific files before proceeding - Ambiguous convention: Flag for human decision, continue with assumption noted - Tool failure: Retry once, then proceed with manual equivalent
The Phase Gates section is where the real value tends to show up. Without explicit gates, a model can jump from “understand” straight to “synthesize” and quietly skip verification. Fable naturally pauses for these checkpoints; cheaper models usually need them spelled out.
The error recovery section keeps the workflow moving when reality gets messy. Instead of stalling or failing silently, the skill tells the model exactly how to proceed.
Skill extraction works best with a fresh Fable session and a representative task. Don’t start with your gnarliest project. Pick something that exercises the workflow you want to capture without getting buried in domain details.
textYou are about to complete a task. Before executing, expose your complete reasoning process: 1. What phases will you work through? 2. What conditions must be met before moving between phases? 3. What verification steps will you perform? 4. How will you handle errors or ambiguity? 5. What does "done" look like? Task: [YOUR REPRESENTATIVE TASK] Do not execute yet. Only describe your intended approach.
Fable will return a detailed plan. That plan is the raw material for your skill. What’s often missed: asking for the approach before execution is the whole trick. Once the model starts doing the work, the reasoning becomes implied and harder to extract cleanly.
Then convert the plan into a portable skill:
textConvert your approach into a reusable SKILL.md with these sections: - Phases (numbered, with clear entry/exit criteria) - Phase Gates (explicit conditions for progression) - Verification Checks (specific tests, not vague quality statements) - Error Recovery (concrete actions for common failure modes) - Completion Criteria (measurable, not subjective) The skill should be model-agnostic - assume the executing model needs explicit guidance.
That last line matters more than it looks. Fable can get away with terse instructions because it fills in gaps with strong implicit reasoning. Opus, Sonnet, and Haiku typically need explicit scaffolding. In most cases, it’s better for the skill to over-specify than to assume capability.

The Fable to Opus Skill Bridge approach splits skills into two layers. Global workflow skills capture general planning habits - how to do code review, how to structure a refactor, how to investigate a bug. Project-specific skills capture local conventions - this repo uses Prettier, tests live in __tests__, deploy requires approval.
yaml# global-skills/code-review.yaml name: Code Review Workflow applies_to: any_codebase phases: - understand_context - analyze_changes - verify_quality - synthesize_feedback # project-skills/acme-api.yaml name: ACME API Conventions applies_to: acme-api conventions: testing: Jest with 80% coverage minimum formatting: Prettier with project config commits: Conventional commits required deployment: Requires CODEOWNER approval
These two layers age at different speeds. Your code review workflow can stay stable for years. Your project conventions will change whenever dependencies, tooling, or policies change. Splitting them means you can update one without churning the other.
Tip
Keep global skills in a shared repository. Keep project skills in each project's .claude/ directory. This prevents drift and makes onboarding new repositories straightforward.
Simple skills are fine for linear tasks. Once work gets large, parallelism starts to matter. The Maestro approach documents fan-out, verify, and synthesize patterns.
python# orchestrator.py import asyncio from typing import List from claude_client import ClaudeClient async def parallel_analysis(files: List[str], skill: str) -> dict: """Fan out analysis to parallel subagents, then synthesize.""" client = ClaudeClient(model="claude-sonnet") # Fan-out phase: spawn subagent per file tasks = [ client.complete( system=skill, prompt=f"Analyze this file:\n\n{read_file(f)}" ) for f in files ] results = await asyncio.gather(*tasks) # Verify phase: fresh context catches groupthink verification = await client.complete( system="You are a skeptical reviewer. Find flaws in this analysis.", prompt=f"Analysis results:\n\n{format_results(results)}" ) # Synthesize phase: combine verified results synthesis = await client.complete( system=skill, prompt=f""" Original analyses: {results} Verification critique: {verification} Synthesize a final report that addresses the critique. """ ) return synthesis
The verification step uses a fresh context with a refute-by-default prompt. That keeps the synthesizer from rubber-stamping whatever the parallel agents said. A reviewer that starts skeptical tends to catch mistakes that a continuation of the same context would glide past.
asyncio.gather runs file analyses at the same time, which can cut wall-clock time a lot on big change sets.

Long workflows will hit context limits. File-based handoffs solve that by writing intermediate state to disk, then loading only what the next phase actually needs.
python# handoff.py import json from pathlib import Path def save_phase_output(phase: str, data: dict, session_id: str): """Persist phase output for next agent.""" output_dir = Path(f".claude/sessions/{session_id}") output_dir.mkdir(parents=True, exist_ok=True) (output_dir / f"{phase}.json").write_text( json.dumps(data, indent=2) ) def load_phase_context(phases: list[str], session_id: str) -> str: """Load only the phases needed for current work.""" output_dir = Path(f".claude/sessions/{session_id}") context_parts = [] for phase in phases: phase_file = output_dir / f"{phase}.json" if phase_file.exists: data = json.loads(phase_file.read_text) context_parts.append(f"## {phase.upper} OUTPUT\n{json.dumps(data, indent=2)}") return "\n\n".join(context_parts)
The skill then spells out which prior phases each new phase should pull in:
yamlphases: understand: outputs: [file_list, dependency_graph, change_summary] analyze: requires: [understand] outputs: [findings, risk_assessment] verify: requires: [analyze] # doesn't need understand outputs: [verification_results] synthesize: requires: [analyze, verify] # skips understand outputs: [final_report]
Selective loading keeps each phase focused. The synthesize phase doesn’t need the raw file list from understand - it needs the findings and verification results. Smaller context usually means clearer reasoning and lower cost.
A Reddit discussion on prompt distillation drew sharp criticism for vague instructions like “make no mistakes” and “be intelligent.” Those aren’t testable. They’re wishful thinking dressed up as engineering.
Skills that hold up include validation you can actually measure:
yaml# BAD: Untestable verification: - Ensure high quality - Make no mistakes - Be thorough # GOOD: Testable verification: - All functions have docstrings (check: grep -L '"""' *.py) - Test coverage exceeds 80% (check: pytest --cov --cov-fail-under=80) - No type errors (check: mypy --strict) - Linter passes (check: ruff check.)
The Claude Fable 5 Clone repository packages 12 evaluation cases with its skill definitions. Each case includes an input, expected behavior, and pass/fail criteria. That turns “does it feel right” into “does it pass the tests.”
python## eval_cases/code_review_01.py EVAL_CASE = { "name": "Catches missing error handling", "input": """ def fetch_user(id): response = requests.get(f"/users/{id}") return response.json """, "expected_findings": [ "missing_error_handling", "no_timeout_specified" ], "pass_criteria": lambda findings: all( expected in findings for expected in ["missing_error_handling", "no_timeout_specified"] ) }
Run your skill against evaluation cases before deploying. Run them again after any skill change. That’s how regressions get caught early, and how you prove the skill is doing real work.
Warning
Process transfer is not capability transfer. A well-structured skill helps Sonnet work more systematically, but it won't give Sonnet Fable-level reasoning. Set expectations accordingly.

With Anthropic's promotion ending July 19, teams need to be strategic about Fable usage. The approach that tends to work: use Fable for skill extraction and improvement, then run the resulting skills on cheaper models.
| Task Type | Model | Rationale |
|---|---|---|
| Skill extraction | Fable 5 | Need full reasoning visibility |
| Skill refinement | Fable 5 | Improving phase gates and verification |
| Routine execution | Sonnet/Opus | Skill provides the structure |
| High-volume tasks | Haiku | With explicit scaffolding |
| Verification passes | Fresh Sonnet | Skeptical review needs clean context |
Think of the skill as a force multiplier. Capture Fable’s reasoning once, and it can guide hundreds of Sonnet runs. The upfront extraction effort keeps paying dividends.
For teams building on Claude Code, skills plug directly into the agent workflow. See our Claude Code Best Practices 2026 + CLAUDE.md Guide for configuration patterns that pair well with skill-based workflows.
Copying outputs instead of process. If your skill says “write code like this example,” you captured an artifact, not a workflow. Skills should define how to approach problems, not what a specific solution looks like.
Skipping the verification phase. Fable’s internal verification won’t show up unless you ask for it. Don’t skip the “what does done look like” question in the extraction prompt.
Over-fitting to one task. A skill pulled from one complex task often bakes in domain details that won’t generalize. Extract from 3-5 representative tasks, then keep what stays consistent.
Assuming model equivalence. A skill that works with terse instructions on Fable can fall apart on Sonnet. Test on your target model before you roll it out.
text## Testing skill portability for model in [claude-fable-5, claude-opus, claude-sonnet, claude-haiku]: results = run_eval_suite(skill, model) print(f"{model}: {results.pass_rate}%") # Typical output: ## claude-fable-5: 100% ## claude-opus: 95% ## claude-sonnet: 87% ## claude-haiku: 72%
That Haiku number might be fine for high-volume, low-stakes work. It’s probably not fine for production code review. The eval suite makes those thresholds obvious.
Over time, extracted skills turn into a library. Structure matters, because future-you (and the rest of your team) will need to find things quickly.
text.claude/ ├── skills/ │ ├── global/ │ │ ├── code-review.yaml │ │ ├── refactoring.yaml │ │ ├── bug-investigation.yaml │ │ └── documentation.yaml │ └── project/ │ └── conventions.yaml ├── evals/ │ ├── code-review/ │ │ ├── case_01.py │ │ ├── case_02.py │ │ └── case_03.py │ └── refactoring/ │ └── case_01.py └── sessions/ └── [session_id]/ ├── understand.json ├── analyze.json └── verify.json
Version control the skills. Review changes to skills the same way you review code changes. A broken skill can do more damage than a broken function because it affects every task that depends on it.
Important
Treat skill modifications as breaking changes until proven otherwise. Run the full eval suite before merging any skill update.
Start here (your first step)
Pick one repetitive task you do weekly. Open a fresh Fable session and use the extraction prompt to capture its approach.
Quick wins (immediate impact)
Deep dive (for those who want more)
The Fable Method isn’t about cloning a model’s intelligence. It’s about capturing an observable process and making it portable. Extracted skills transfer the systematic approach - phases, gates, verification, error recovery - to models that won’t reliably infer those patterns on their own.
Teams getting the most value from Fable aren’t running it on every task. They use it where it matters: extract once, execute many times on cheaper models, and refine whenever the eval suite shows drift. With the promotion window closed, that’s also the approach that tends to make financial sense.
Start with one workflow. Extract it cleanly. Validate it with real checks. Then scale from there.