Atlas / MCP servers / rex-codebase / fable-mode

fable-modeBLOCK

mcp/rex-codebase/fable-mode

Open-source MCP control plane for AI coding agents: mechanical time-locks, evidence-gated proof receipts, red-team remediation, and persistent engineering memory.

Verdict
BLOCK
Grade
D
Trust score
68 /100
Exposed tools
—
Transport
stdio
License
MIT
Stars
24
01

Overview

From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.

Agents that think before they write.

Fable Mode is an open-source control plane for AI coding agents.

It makes an agent deliberate, produce evidence, and survive adversarial review before it earns permission to write to your workspace. The gates are mechanical, not prompt advice: no timer, no proof, no write access.

Demo

KERR // ORRERY

One self-contained HTML file. Raw WebGL, zero libraries, zero external assets, and zero build step.

https://github.com/user-attachments/assets/8287bbfe-e3ee-4dcf-ba0f-f9ff22ae79bd

7 renders rejected before final · 2 bugs caught · 10/10 red-team probes passed

Fable Mode overview

https://github.com/user-attachments/assets/27f4f8a2-b1bb-4398-a08c-bc9fd93d69d7

Quick start

A session starts locked. Confidence does not unlock it.

  1. Install the MCP server using one of the options below.
  2. Add the optional Agent Skill if you want the full workflow.
  3. Ask your agent to use Fable Mode for a concrete coding task and choose a time budget.

A new session starts with execution locked:

{
"action": "crea
Read from source at commit a2fcfacc4b9cOBSERVED · 2026-10-09
02

Connect

Built from this server's own package name, version and transport as found in its source — not copied from anyone's documentation, so it cannot drift against a page we do not control. Replace the environment placeholders with a token scoped to the least it needs.

claude-code (pypi)
claude mcp add fable-engine -- uvx fable-engine==1.3.9
03

Trust audit

BLOCKgrade D · trust 68/100 Do not install this without reading the findings. The audit found something that could harm you or your machine.

LayerWhat it checksResult
L0Provenance & inventoryPASS
L1Static analysis of the codeFAIL
L2Instruction surface (what it tells the agent)PASS
L3Class-specific surfacePASS
L4Behavioural (sandbox)SKIPPED

What the source does

Filesystem
declared (2 observation(s))
Network
declared (6 observation(s))
Shell
declared (2 observation(s))
Dependencies
pinned
Secrets in source
none-found

Findings (18)

HIGHCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
fable_v2/coder_fleet/sandbox_executor.py:267
exec(compile(str(init.get("source", "")), "<fable-sandbox-target>", "exec"), namespace)
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
HIGHCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
run_tests.py:83
issues.append(f"{path}:{node.lineno}: Prohibited call to eval()")
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
HIGHNetwork egress · net.metadata_ip · CWE-200, CWE-319
fable_engine/scrapers/base.py:51
if str(ip) == "169.254.169.254":
Why it matters. cloud metadata endpoint: the classic SSRF credential grab
LOWInventory / provenance · inv.hidden_file · CWE-1104
.coderabbit.yaml
.coderabbit.yaml
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWInsecure crypto · crypto.weak_hash · CWE-327, CWE-338
fable_compressor.py:239
data = f"Thread-{thread_id} iteration {j}: payload content {hashlib.md5(f'{thread_id}-{j}'.encode()).hexdigest()}"
LOWFilesystem / path · fs.system_paths · CWE-22, CWE-59
tests/test_packaging_runtime.py:50
os.symlink("/etc/passwd", source / "fable_mode" / "__init__.py")
LOWNetwork egress · net.metadata_ip · CWE-200, CWE-319
tests/test_scrapers.py:55
"http://169.254.169.254/latest/meta-data/",
Why it matters. cloud metadata endpoint: the classic SSRF credential grab
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
tests/test_scrapers.py:46
"http://127.0.0.1/secret",
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
tests/test_scrapers.py:47
"http://127.0.0.255/",
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
tests/test_scrapers.py:52
"http://10.0.0.1/internal",
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
tests/test_scrapers.py:53
"http://172.16.0.1/status",
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
tests/test_scrapers.py:54
"http://192.168.1.1/router",
LOWNetwork egress · net.tls_off · CWE-200, CWE-319
tests/test_server_protocol.py:32
self.assertEqual(store.get_bytes(ref, verify=False), b"trusted")
Why it matters. certificate verification is disabled
Fix. leave verification on
LOWObfuscation / stealth · obf.decode_call · CWE-506, CWE-94
fable_v2/runtime.py:908
run._attestation_secret = bytes.fromhex(secret)
LOWObfuscation / stealth · obf.decode_call · CWE-506, CWE-94
tests/test_requested_regressions.py:83
self.assertNotEqual(restored._red_team_receipt_key, bytes.fromhex("11" * 32))
LOWInventory / provenance · mcp.no_tools_extracted · CWE-1104
server.json
Why it matters. the tool list is enumerated at runtime by tools/list, not declared in source
Fix. the page says so rather than showing an empty table
INFOInventory / provenance · inv.oversize · CWE-1104
assets/launch-film.mp4
assets/launch-film.mp4
Why it matters. 2110714 bytes not read
INFOPrompt injection · prompt.authority_framing · CWE-94, CWE-1427
skills/fable-mode/references/cognitive-protocol.md:64
During the time-lock window (Phases 1, 2, and 3), the agent holds full privileges to interact with the environment and author artifacts:

Gates applied: no_behavioural_pass.

Audited 2026-10-09 · audit v0.4.1 · source sha a2fcfacc4b9cfull audit observations/trust-audit/mcp-server/rex-codebase__fable-mode.json · Report an issue / request a re-scan
04

Audit history

Every audit this server has had. A grade with a past is a grade somebody is still checking.

DateSourceVerdictGradeScoreChange
2026-10-09a2fcfacc4b9cBLOCKD68first audit
05

Questions

What is the fable-mode MCP server?

Open-source MCP control plane for AI coding agents: mechanical time-locks, evidence-gated proof receipts, red-team remediation, and persistent engineering memory.

Is fable-mode safe to connect to an agent?

No — not without reading the findings first. The audit graded it D (68/100) and found 3 critical or high issues in the source. Each one is listed on this page with the file and line it is on.

What credentials does fable-mode need?

It reads FABLE_BROKER_WRITE_TOKEN_DIGEST, FABLE_BROKER_WRITE_TOKEN_DIGEST_FILE, FABLE_FORCE_UNLOCK_TOKEN and FABLE_TEST_SECRET from the environment. Give it a token scoped to the least it needs — an agent that can be talked into calling a tool can be talked into calling it with your credentials.

How does fable-mode run?

It speaks stdio, so it runs as a local process your client starts. It is published on PyPI as fable-engine.

How current is this page?

The grade is for one exact copy of the source (a2fcfacc4b9c), read on 2026-10-09. The repository is watched and re-audited when it changes.

Advertisement