{"slug": "fable-is-gone-but-the-loop-isn-t", "title": "Fable is gone but the loop isn't", "summary": "A new open-source tool called Bean replaces fixed-step task execution with a recursive convergence loop for large tasks in Claude Code and Codex. It uses a claim ledger and compiler to investigate, record evidence, revise beliefs, and loop until the answer converges, then delivers the result.", "body_md": "**A recursive convergence loop for large tasks.**\n\nA skill for Claude Code and Codex that runs a task the way the Fable model worked: investigate, record what you learn as evidence, let a compiler tell you what's still weak or contradictory, revise the beliefs that don't hold, and loop until the answer converges — then deliver.\n\nbean replaces \"do these N phases\" with \"keep going until there's nothing decisive left to learn.\" It runs on a **runtime** — a claim ledger plus a compiler that scores convergence — and uses that signal to decide its own next move.\n\n**Investigate the most decisive open front**— the compiler's signal (unresolved conflict, weakest-evidence claim, coverage gap) picks the target, not a fixed plan.** Record evidence in a ledger**— typed claims at honest evidence tiers (`stated`\n\n→`production`\n\n). The ledger is bean's memory across rounds — its \"own notes.\"**Compile**— a check that can fail at the whole-task level: conflicts, gaps, single-source topics, weak evidence, and undischarged risks.**Revise beliefs**— when new evidence overturns an earlier claim, supersede it (\"kill the incorrect belief\") rather than letting the contradiction stand.**Loop until converged**— stop when there are no unresolved conflicts, the evidence bar is met, and a full round adds nothing new. High-stakes work gets an independent cross-model**Codex blindspot** check before declaring done.**Continuous orchestration**— every round re-surveys the available skills/connectors and spins up subagents for whatever the compiler flagged next.** Verbose by default**— each round surfaces the ledger, the compiler signal, the next move, and any belief it revised, so you can watch the answer converge.\n\n**Step 1** — Add the marketplace (one-time):\n\n```\nclaude plugin marketplace add https://github.com/grainulation/bean.git\n```\n\n**Step 2** — Install:\n\n```\nclaude plugin install bean\n```\n\nInside Claude Code, use\n\n`/plugin`\n\ninstead of`claude plugin`\n\n.\n\n**Requirements:** Claude Code with Node.js >= 20.\n\nPinning & updates.bean installs into your agent's context, so treat it like any third-party plugin: prefer a tagged release over a moving branch (pin a`--ref`\n\n, e.g.`--ref v1.1.2`\n\n) and re-review on update. bean runs locally with no network surface by default; the only optional outbound path is the grainulator/wheat remote dashboard, which stays off unless you wire it in.\n\n**Codex**\n\n```\ncodex plugin marketplace add grainulation/bean --ref main\ncodex plugin add bean@bean\n```\n\nOn the Codex side bean is invoked explicitly as `/bean`\n\n(`allow_implicit_invocation: false`\n\n).\n\n**Alternative: clone directly**\n\n```\ngit clone https://github.com/grainulation/bean.git\ncd bean && ./install.sh\n/bean <your task>\n/bean quiet <your task>   # run every step, report tersely (failures still surfaced)\n```\n\nbean also triggers on phrases like \"do this thoroughly\", \"be systematic\", or \"deep work\nmode\", and when a task objectively spans multiple files, sources, or sessions. For a\ntrivial one-pass task it stays out of the way. See [ EXAMPLE.md](/grainulation/bean/blob/main/EXAMPLE.md) for a worked\nbefore/after.\n\nFrame once, then iterate until the compiler signal goes green:\n\n| Step | What happens |\n|---|---|\nFrame (once) |\nState the goal; seed the ledger with known constraints. Does the task earn the loop? |\n1. Survey |\nRe-assess available skills/subagents/connectors this round; read real data. |\n2. Investigate |\nAttack the most decisive open front the compiler flagged; fan out subagents. |\n3. Record |\nWrite findings as typed claims at honest evidence tiers into the ledger. |\n4. Compile |\nScore convergence: conflicts, gaps, single-source, weak evidence, undischarged risks. |\n5. Revise beliefs |\nSupersede claims that new evidence overturns; resolve conflicts. |\n6. Converged? |\nNo unresolved conflicts + evidence bar met + a dry round → deliver. Else loop to 1. |\n\nbean runs on a claim ledger + a compiler. It **ships its own compiler — bean-check** — a\nzero-dependency Node CLI built from the\n\n[Bran](https://github.com/grainulation/grainulator)core that scores convergence and\n\n**exits nonzero until it is reached**(conflicts, undischarged risks, load-bearing claims below the evidence bar, dry-round, budget). That is the default control plane and runs anywhere Node does.\n\n**is an optional richer backend; where neither can run, bean falls back to a hand-checked**\n\n[grainulator/wheat](https://github.com/grainulation/grainulator)`bean-stalk.md`\n\nledger. With grainulator connected, bean also taps the wider stack,\ndegrading gracefully when a piece is absent:— the ledger + compiler; record claims and gate convergence on[wheat](https://github.com/grainulation/grainulator)`wheat compile`\n\n.**grainulator**— dispatch autoresearch subagents for investigation rounds.** deepwiki**— corroborate external claims against real repositories.** silo + connectors**— the canonical read surface for grounding claims in real data.** farmer**— route the Codex blindspot review through the dashboard.\n\nDetails: [ skills/bean/references/grainulation.md](/grainulation/bean/blob/main/skills/bean/references/grainulation.md).\n\n**Lean.** Markdown, JSON, and one zero-dependency CLI (`bean-check`\n\n). No servers, no network, no telemetry, no runtime dependencies (TypeScript is a CI-only devDependency).**A real gate.**`bean-check`\n\nmakes convergence falsifiable — it exits nonzero until the loop honestly converges; grainulator/wheat is an optional richer backend.**Verbose by default.** Show the ledger, the compiler signal, and the belief revisions — watch the answer converge.\n\nSee [ CONTRIBUTING.md](/grainulation/bean/blob/main/CONTRIBUTING.md). Run\n\n`npm run format`\n\nand `npm test`\n\nbefore a PR.[MIT](/grainulation/bean/blob/main/LICENSE) © grainulation contributors.", "url": "https://wpnews.pro/news/fable-is-gone-but-the-loop-isn-t", "canonical_source": "https://github.com/grainulation/bean", "published_at": "2026-06-17 04:29:39+00:00", "updated_at": "2026-06-17 04:52:50.341112+00:00", "lang": "en", "topics": ["developer-tools", "ai-agents", "large-language-models", "ai-tools"], "entities": ["Bean", "Claude Code", "Codex", "grainulation", "Fable"], "alternates": {"html": "https://wpnews.pro/news/fable-is-gone-but-the-loop-isn-t", "markdown": "https://wpnews.pro/news/fable-is-gone-but-the-loop-isn-t.md", "text": "https://wpnews.pro/news/fable-is-gone-but-the-loop-isn-t.txt", "jsonld": "https://wpnews.pro/news/fable-is-gone-but-the-loop-isn-t.jsonld"}}