Fabric + Fable 5: Get Through Your Reading Pile
Pipe any article, video transcript, or document into a prebuilt Fabric pattern and have Fable 5 summarize, extract, or analyze it in one line.
Run this workflow
CI-verified, 4/4 fixtures passing.
Build this with your agent
One copy-paste hands Claude Code, Codex, or Cursor the full recipe, steps included, nothing to fetch.
Intended Use
Anyone drowning in a daily reading firehose: Fabric ships a library of prompt patterns (summarize, extract_wisdom, analyze_claims...) you pipe text into. CI verifies the deterministic spine: the chosen pattern exists and the setup names claude-fable-5 as the default model, no key. Fable actually reading and summarizing is fenced.
Not for
- Anyone allergic to the terminal (Fabric is a CLI, though the commands are short)
- Expecting CI to verify the summary quality; that's the fenced model step
The Stack
Tested Against
fabric-ai@latestclaude-fable-5Side effects & data flow
- Network
- none, local only
- Writes
- ./patterns/, ./fabric.env, ./checkfabric.mjs
- Credentials
- none required
Prerequisites
- Homebrew (brew install fabric-ai), then fabric --setup
- An Anthropic API key (Claude API) for claude-fable-5
Steps
- 1
Install Fabric and choose Fable as the default model
brew install fabric-ai, then fabric --setup (choose Anthropic, paste your key). Since Fable is new you may re-run fabric --setup so it picks up claude-fable-5. Then: cat article.txt | fabric --pattern summarize --model claude-fable-5.
- 2
What CI checks: the pattern exists and the setup names Fable
CI confirms the chosen pattern (summarize) exists as a pattern directory and the Fabric config names claude-fable-5 as the default model. That's the deterministic precondition, no key. The reading and summarizing are fenced.
mkdir -p patterns/summarize cat > patterns/summarize/system.md <<'EOF' # IDENTITY and PURPOSE You summarize the input content into a clear, structured set of bullet points. EOF cat > fabric.env <<'EOF' DEFAULT_VENDOR=Anthropic DEFAULT_MODEL=claude-fable-5 EOF cat > checkfabric.mjs <<'EOF' import { existsSync, readFileSync } from 'node:fs'; let ok = true; function check(label, cond){ console.log(label + ': ' + (cond ? 'yes' : 'NO')); if(!cond) ok=false; } check('summarize pattern exists', existsSync('patterns/summarize/system.md')); const env = existsSync('fabric.env') ? readFileSync('fabric.env', 'utf8') : ''; check('default model is claude-fable-5', env.includes('DEFAULT_MODEL=claude-fable-5')); if(!ok){ console.log('fabric config check FAILED'); process.exit(1); } console.log('fabric config check OK: summarize pattern + claude-fable-5'); EOF node checkfabric.mjs - 3
Pipe in your reading (the model step, not checked by CI)
Pipe any text into a pattern and Fable does the analysis. That runs the model, so CI never claims it. The badge covers the pattern and the model name, not the output.
Eval, 4 fixtures
Last passed: verified todaypattern-existscontainstimeout 30s · max $0Expected:
summarize pattern exists: yesnames-fablecontainstimeout 30s · max $0Expected:
default model is claude-fable-5: yescheck-okcontainstimeout 30s · max $0Expected:
fabric config check OK: summarize pattern + claude-fable-5clean-exitexit_codetimeout 30s · max $0Expected:
0
Results
~41,400 stars; turns 'I'll read this later' into a five-second command.
Did this work for you?
Our CI checks the setup runs. You tell us if the whole thing worked. Tell us straight.
Liked this workflow?
Get new verified workflows in WebAfterAI, three issues a week (Tue, Thu, Sat).