FABULA
Make coding runs finish with passing project tests and a replayable receipt, not just a model's claim.
- Source repo
- sergezuber/FABULA-LLM-5
- Stars
- ★ 82
- Last updated
- 1mo ago
- License
- MIT
- Primary language
- TypeScript
- FA score
- 67/100 · Some gaps
At a glance
- How it runs
- Works with
- Universal · cross-platformOpenAI API
- Cost
- Free, no paid service needed
- Setup effort
- Medium · a few setup steps
- You'll need
- Typical use
- Individual developers who want a small local model to run project tests after code changes.
- Not a fit if
- Teams that require an aggregate, measured solve rate or outcome guarantee
- Users unwilling to set up Git and a tool-calling model
- Source review
- 67/100 · Some gaps
What does this agent do, and when should you use it?
FABULA is a local-first coding agent designed for one model on one machine, available as a macOS desktop app and as a local server with a web UI on Linux and Windows. Built on a fork of MiMoCode, it supports local models served by LM Studio or MLX, as well as any OpenAI-compatible endpoint. After source edits, the engine checks whether the project's tests ran and passed, sending the model back to work when needed; re-entries are bounded and an unresolved run ends as NOT DONE. A verified run produces a receipt with the patch, base commit, verification command, and result, which can be replayed in a temporary worktree. The project says it has no telemetry, while documenting default connections to GitHub for update notices and models.dev for the model catalogue, plus language-server downloads when needed.
Start FABULA in a project directory, choose a tool-calling model, and describe a coding task. The agent reads project files and uses tools to edit code; in projects with tests, it runs the project's own tests. The engine triggers bounded re-entries when source was edited without verification, the last test run failed, edits did not apply, or tools were used without running tests. With /goal, a judge also reads the recorded trajectory. A successful run creates a Proof-of-Done receipt; fabula receipt verify applies its patch to a temporary worktree at the recorded base commit and reruns the verification command.
- Individual developers who want a small local model to run project tests after code changes.
- Developers using LM Studio or MLX on a macOS machine for coding tasks.
- Engineers who want a local web interface and server on Linux or Windows.
- Maintainers who need colleagues to replay a patch, base commit, and test result.
- Teams connecting an existing model service through an OpenAI-compatible endpoint.
How do you install or deploy this agent?
You need Git and either a model running locally or an OpenAI-compatible endpoint. setup.sh installs the engine, Bun, and four npm packages; optional capabilities such as browser control, SearXNG, Docker, and speech models require additional choices. The macOS desktop app requires Apple Silicon and Xcode Command Line Tools. Linux and Windows support running the local server and web UI; Windows requires Git for Windows first.
git clone https://github.com/sergezuber/FABULA-LLM-5 && cd FABULA-LLM-5
./setup.sh
open FABULA-LLM-5.appLinux install and launch:
git clone https://github.com/sergezuber/FABULA-LLM-5 && cd FABULA-LLM-5
./setup.sh
bin/fabula serve --port 4096Then open http://127.0.0.1:4096.
How do you use this agent?
In LM Studio, load a tool-calling model and start its server; setup points FABULA at the local adapter. Then select the model in FABULA and open a project as the working directory. The README's demo task asks it to fix an export bug that drops rows dated on the end date, and to prove the fix.
Fix the export bug: the nightly export silently drops rows dated exactly on the end date. Prove it.To replay the captured receipt:
cd demo && fabula receipt verifyFor another OpenAI-compatible endpoint, put its key in .env and configure the provider, baseURL, model ID, and context/output limits in fabula.config.json. The model must support tool calling.
What are this agent's strengths and limitations?
- After edits, the engine sends runs back when tests were skipped or failed, with bounded re-entries and an explicit NOT DONE outcome if verification remains unresolved.
- Proof-of-Done receipts record the patch, base commit, and verification command and can be replayed in a temporary worktree.
- Supports local models through LM Studio or MLX and OpenAI-compatible endpoints, with desktop and local web-server modes.
- The README says there is no telemetry and that prompts, files, and chats stay local when only local providers are configured.
- The project has not measured whether the finish guard improves outcomes and publishes no aggregate solve rate; its public SWE-bench Pro result is n=1.
- Installation requires Git and a tool-calling model, with model serving and the local adapter to configure.
- The setup installs the engine, Bun, and npm packages; some capabilities require extra browser, Docker, or speech-model downloads.
- The desktop app is documented for macOS; Linux and Windows use the local server and web UI.
How does this agent compare with similar options?
FABULA is built on MiMoCode, itself an OpenCode fork. The README identifies a comparison against the same model without the harness as an experiment that has not yet been run, so it provides no evidence that FABULA performs better.
Key facts side by side with the most closely related agents.
| Agent | Source review | Form / cost | Stars | Updated | Language | Full support on |
|---|---|---|---|---|---|---|
| FABULA This agent | 67 · Some gaps | Desktop appFree | ★ 82 | 1mo ago | TypeScript | OpenAI API |
| Compartment | 76 · Good | CLIFree | ★ 580 | 15d ago | Python | Codex · Claude Code |
| Recall — Local Project Memory for Claude Code | 66 · Some gaps | Agent plugin / skillFree | ★ 764 | 1mo ago | Python | Claude Code |
| Screenpipe | 49 · Major gaps | Desktop appFreemium | ★ 22k | today | Rust | ChatGPT · Claude Code |
How does FollowAgents rate this agent?
Why each dimension lost points
SECURITY.md acknowledges the power of shell, file, and browser access and describes rules across tools, shell, and code execution, plus SSRF protection, secret redaction, and untrusted-content wrapping. The evidence shown is mostly descriptive, the agent still has broad capabilities, and confirmation, recovery, and dependency-risk handling are not established in enough detail, so scores are restrained. The README lists default network calls and switches, as well as services used only when configured or invoked. Optional capabilities are selectable during setup. Upstream and license boundaries are attributed, but publisher identity and the maintainer update path are limited.
The README describes bounded re-entry, an explicit NOT DONE state, replayable receipts, and separates measured from unmeasured claims. The CI file specifies cross-platform test and build gates. Dependency installation still requires network access and many packages; the supplied evidence does not establish availability safeguards or comprehensive user-facing failure diagnostics. The account tests include concrete transport-error mapping assertions, but cannot independently establish product-wide reliability.
The materials target small-model, single-machine use and describe OpenAI-compatible endpoints, with separate macOS, Linux, and Windows instructions. Capability boundaries and behavior when container isolation is unavailable are relatively specific. Trigger guidance for when to enable particular optional capabilities is incomplete, and differing isolation support (no OS kernel isolation on Windows) limits consistency across environments.
The README organizes purpose, capabilities, installation, privacy, and documentation, and names unmeasured results, the n=1 sample, and upstream code boundaries. Installation steps are concrete, though Windows requires Git for Windows and there are many options and dependencies. Examples and the documentation index are substantial, but FAQ coverage, named maintenance ownership, and update responsibility are limited in the supplied evidence. The MIT license is clear and the vendored engine's additional restrictions are disclosed, though readers must still check the split. A release badge and update notes are present, but the supplied materials do not establish a complete version policy.
Receipts include a diff, base commit, verification command, and result, with a replay command, making outputs reviewable. The README limits the claim to a replayable record rather than a signature and says test quality still requires review. The finish guard has a clear proposed value, but outcome improvement is explicitly unmeasured. Costs are described for optional browser, search, container, and speech features, though the overall setup and dependency burden remains substantial.
Claims point to a receipt specification, evaluation notes, plugin inventory, and public examples. The README distinguishes measured, unmeasured, small A/B, and single-task claims, explicitly identifying outcome improvement as unmeasured. CI and unit tests offer different forms of corroboration, but only a subset of tests and part of the CI file are supplied, so the full set of safety and effectiveness claims cannot be cross-checked here.
- This agent can perform model-directed shell, file, and browser actions; review diffs and keep keys in the gitignored .env.
- This is a static review only. The documentation calls shell path extraction best-effort, and Windows lacks the described OS kernel isolation.
Recent releases
Latest entries from the project's GitHub Releases. Notes are quoted from upstream as written, not rewritten or tested by FollowAgents.
-
Release notes excerpt
Fourteen versions with one subject: a task must not be lost to the harness itself. Every item below was found in the logs of real runs, where work was ended, misreported or quietly thrown away by the machinery that exists to protect it — a compaction that ended the turn in progress, a single refused path that ended the whole job, a failed edit counted as a success, a note-keeping helper that could edit project files, a Stop button that waited for the very thing it was stopping. Each change ships with tests. …View on GitHub ↗ -
Release notes excerpt
This release is one long chain with a single subject: **the harness must not let the agent start finished work over again.** Thirteen versions, each closing one link — the guard that could not reach the message, the log line nobody could read, the counter that reset mid-task, the note that drove the loop, the database connection that answered with the past. Along the way: chats can be deleted all at once, the deploy check now looks at what is RUNNING rather than at what is on disk, and the privacy section was corrected to name both requests the app makes on its own, not one. …View on GitHub ↗ -
Release notes excerpt
This release is one long chain with a single subject: **the harness must not let the agent start finished work over again.** Twelve versions, each closing one link — the guard that could not reach the message, the log line nobody could read, the counter that reset mid-task, the note that drove the loop, the database connection that answered with the past. Along the way: chats can be deleted all at once, and the deploy check now looks at what is RUNNING rather than at what is on disk. What changed 0.275.0 …View on GitHub ↗