World Model MCP
Coding agents remain blind to the codebase they operate on. They infer structure late, reduce it to prompts, and ignore it when decisions are made in real time — repeating the same mistakes, hallucinating APIs that don't exist, and forgetting learned constraints the moment context compacts.
World Model MCP is the memory-graph infrastructure that closes that gap. A temporal knowledge graph that validates code changes against learned constraints at the edit boundary, re-injects relevant context after compaction, tracks contradictions with confidence-weighted resolution, adversarially verifies retrievals via an independent Coach LLM, and runs across Claude Code, Cursor, Codex, pi, OpenClaw, Hermes Agent, Continue, GitHub Copilot Chat, Cline, and Windsurf.
Status: v0.14.0 — telemetry sink migration + right-to-erasure. Opt-in anonymous telemetry (off by default) now ships to https://etch.systems/api/telemetry/ingest — unauthenticated, rate-limited server-side by
install_id, source IP stripped from access logs, 8 KB payload ceiling. Previous v0.7.3–v0.13 series shipped an empty PAT stub into every PyPI wheel, so opt-in telemetry silently no-op'd for the entire two-month interval; v0.14 is the first release where it actually works. Newworld-model telemetry --forget-mecommand DELETEs every server-side row for your install_id AND wipes local state, honouring GDPR right-to-erasure regardless of server reachability. Server-side 90-day auto-TTL enforces data-minimisation. Companion hosted service: Etch — cryptographic notary + governance plane for AI agent decisions, built on this OSS memory layer. v0.13.0 (2026-07-12) shipped 30 MCP tools, 27 CLI subcommands, 847 tests, pre-registered SWE-bench Verified repeat-mistake benchmark with a multi-seed replication appendix, a v0.8.1 contradiction-resolution benchmark at 100.0% on theautostrategy, AND a v0.12.12 Coach-Player benchmark at 100.0% across 12 hand-labeled pairs. v0.13.0 (2026-07-12) ships an opt-in tamper-evident audit log: every fact / constraint / event / decision write chains into an append-only log; every 1024 entries a Merkle epoch closes with a hybrid Ed25519 + SLH-DSA-SHA2-128f (FIPS 205) signature so external compliance auditors can independently verify no history rewriting has occurred. Two new MCP tools —prove_entry_inclusionandget_audit_log_head— expose the read-side proof APIs. Enable withWORLD_MODEL_AUDIT_LOG=on. Full threat model, key management, and auditor workflow in docs/AUDIT_LOG.md. Reference verifier ships in Python (this repo) and TypeScript (world-model-mcp-verifier). Ed25519 viacryptography, SLH-DSA viapyspx(pure Python, no C dependencies). Storage overhead ~3 MB per project per year for a median deployment. v0.12.14 (2026-07-11) shipped an FTS5 metacharacter sanitizer inknowledge_graph.py— raw-then-sanitized retry so intentional FTS5 operator syntax (Legacy OR async) that internal callers use still works while user queries containing?,*, and other metacharacters no longer crashquery_factorfind_contradictions. Bug found via the new TypeScript SDK's first integration test on 2026-07-10. Same release shipped a Contributor License Agreement workflow (CLA.md+contributor-assistant/github-action) to preserve future relicensing options — the project stays MIT. v0.12.13 (2026-07-07) adds two follow-ups sourced from prior threads: an OpenAI-compatible Coach backend (WORLD_MODEL_VERIFICATION_BACKEND=openai-compatible— points Coach at OpenRouter / Ollama / vLLM / any OpenAI-shape endpoint without a proxy) and adoctorextension that scans~/.copilot/logs/*.logfor the two silent-failure signatures documented in copilot-cli #4001. v0.12.12 (2026-07-07) shipped Coach-Player adversarial verification (verify_retrievaltool + 12-pair hand-labeled benchmark), a pattern ported from the maintainer's earliery=cproject. v0.12.0 (2026-07-06) was the breadth+depth umbrella release: nine substantive changes across new adapter coverage (Copilot / Cline / Windsurf / Continue --global), consumer wiring for the v0.11.1 content-type schema plus governance schema additions (influence_state/expires_at), and a diagnostic + spec-readiness pass (world-model doctor, MCP 2026-07-28 audit). Adapter roster now covers ten runtimes. v0.11.0 (2026-07-02) is a depth release. v0.10 (2026-07-01) extended the harness-neutral memory story from four runtimes to seven with the OpenClaw / Hermes / Continue adapters; v0.11.0 solves real problems for the users we now have rather than adding more runtimes. Four things ship: (A)autocontradiction-resolution strategy rewrite — folds inconfirmerawareness, per-evidence-type decay, distinct-source-tool counting, and tie-detection; benchmark jumps from 77.1% to 100.0% on the same 105-pair × 19-category dataset. (B) Hermes nativeMemoryProviderplugin — intercepts writes at Hermes' routing layer rather than only surfacing tools, closing the architectural gap the v0.10 MCP adapter could not, motivated by Hermes #47349. (C) content-type routing schema field (rule/fact/procedure) — nullable and additive, enables MemoryProvider implementations to route writes by content shape, not just by tool call. (D) dogfooding case study — publishes what the fact graph captured about the world-model-mcp codebase itself (3 learned constraints with real violation counts, 1 realbug_fixreflection, 608 facts, 600 entities) AND what it did not capture (emptyevents/decisions/sessionstables). Pushing on that anomaly surfaced the actual root cause:setup_commandwrote unquoted$CLAUDE_PROJECT_DIRin every generated hook command, so any user whose project path contains a space silently got zero hook captures. The bug was shipped since v0.7.3; the fix ships in this release with a regression test. Reproducibility contract:python scripts/dogfooding_snapshot.pyregenerates the cited numbers byte-for-byte from the shipped DB. v0.10.1 was a doc-honesty patch (stale Zenodo DOI reference corrected). v0.9.2 shipped the multi-seed replication appendix per pre-registeredSEED_PLAN.md: on the 17-instance subset, load-bearing replication count is 0 of 7, mean paired delta across two seeds is +0.24 per instance with bootstrap 95 percent CI [0.00, 0.47]. The v0.9 +10.2 pts headline reads as a single-trial upper bound; the wedge claims (lifecycle-hook capture, per-fact provenance, per-evidence-type decay, PreToolUse defer) survive the multi-seed update because they are architectural, not empirical. Full appendix and per-instance results inbenchmarks/repeat-mistake/RESULTS.md. v0.9.1 restored the embedded telemetry token after a release-mechanics miss in v0.9.0. v0.9.0 shipped the empirical wedge proof. v0.8.1 expanded the contradiction-resolution benchmark to 105 pairs across 19 categories. v0.8.0 added domain-aware confidence decay with per-evidence-type TTL, per-item provenance fieldssource_toolandconfirmer, slash command write operations, and aconfirmerparameter onresolve_contradiction. Antigravity adapter held pending aTransformCompactionHookin the SDK. v0.7.6 added the/world-modelslash command andstatus-watchTUI widget. v0.7.5 added the Codex CLI adapter. v0.7.0 introduced PostCompact auto-injection, thedeferenforcement tier, confidence-weighted contradiction resolution, and a compaction audit log. Contributions welcome.
mcp-name: io.github.SaravananJaichandar/world-model-mcp
Numbers
| Benchmark | Score | Details |
|---|---|---|
| SWE-bench Verified repeat-mistake | +10.2 pts (67.3% → 77.6% on 49 paired instances) | Pre-registered, Claude Code 2.1.177 headless, Zenodo DOI 10.5281/zenodo.21076824. Within-domain +15.0 pts, cross-domain +6.9 pts with zero regressions. Multi-seed appendix documents single-trial upper bound honestly. |
| Contradiction-resolution | 100.0% on auto strategy |
105 pairs × 19 categories, deterministic (no LLM). Shipped since v0.11.0. |
| Coach-Player verification | 100.0% exact match | 12 hand-labeled pairs (4 grounded, 4 partial, 4 hallucinated). Layer 3 adversarial verification via independent Coach LLM. Shipped since v0.12.12. |
The SWE-bench number is the load-bearing empirical claim. The other two are internal correctness benchmarks for shipped components. Reproducibility scripts in each benchmark directory or the linked repo.
Tamper-evident audit log (v0.13, opt-in)
For compliance-track deployments where the audit trail must be cryptographically verifiable (SOC2, HIPAA, FISMA):
export WORLD_MODEL_AUDIT_LOG=on
world-model # start server as usual
Every fact, constraint, event, and decision write chains into an append-only log. Every 1024 entries (env-tunable), an epoch closes with a Merkle root signed by a hybrid Ed25519 + SLH-DSA-SHA2-128f signature (both FIPS-approved; both required for verification). Compliance auditors call prove_entry_inclusion(row_id) via MCP, load the operator's public keys from <db_path>/keys/public_keys.json, and run the reference verifier locally — no round trip needed for verification.
- Full threat model, key management, auditor workflow: docs/AUDIT_LOG.md
- Reference verifier (Python + TypeScript):
world-model-mcp-verifierrepo - Storage overhead: ~3 MB per project per year for a median deployment
- Non-opt-in path is unchanged: no schema, no keys, no crypto imports if
WORLD_MODEL_AUDIT_LOGis unset
The audit log is deliberately opt-in. If your deployment does not have a cryptographic-audit requirement, leave it off — the log adds storage, one hash per write, and crypto dependencies. None of that is worth paying for if nobody in your stack is going to audit the log.
If world-model-mcp helped you, star the repo or open an issue with what worked or didn't. I read every one and the feedback shapes what ships next.
What It Does
World Model MCP creates a temporal knowledge graph of your codebase that learns from every coding session to:
- Prevent Hallucinations -- Validates API/function references against known entities before use
- Stop Repeated Mistakes -- Learns constraints from corrections, applies them in future sessions
- Reduce Regressions -- Tracks bug fixes and warns when changes touch critical regions
- Survive Compaction -- Re-injects top constraints and recent facts after the agent's context window resets
- Resolve Contradictions -- Picks a winner between conflicting facts using confidence, recency, or source count
Think of it as a long-term memory layer that runs alongside Claude Code, Cursor, Codex, pi, OpenClaw, Hermes Agent, Continue, GitHub Copilot Chat, Cline, Windsurf, or any MCP-aware coding agent.
See it working
Three cloneable starter repos show world-model-mcp wired into a real Python (FastAPI + SQLAlchemy) project across the three highest-adoption MCP runtimes. Each ships 5 seeded constraints, 1 bug-fix reflection, and a WHAT_TO_TRY.md with concrete workflows. Fork one, pip install, and see the memory layer catch a constraint violation on the first edit.
| Starter | Runtime | Config shape | Automatic enforcement |
|---|---|---|---|
| world-model-mcp-claude-code-starter | Claude Code CLI | .mcp.json + .claude/settings.json |
Yes (4 lifecycle hook events) |
| world-model-mcp-cursor-starter | Cursor Editor | .cursor/mcp.json + .cursor/hooks.json |
Yes (3 lifecycle hook events) |
| world-model-mcp-copilot-chat-starter | VS Code + Copilot Chat | .vscode/mcp.json ("servers" key, not "mcpServers") |
No — Copilot Chat lacks lifecycle hooks; memory queryable via MCP tool calls only |
All three point at the same .claude/world-model/ DB path, so installing multiple starters (or all three) on one repo produces a shared fact graph across runtimes.
Hosted companion: Etch
world-model-mcp is the OSS memory + tamper-evident audit layer. Etch (etch.systems) is the hosted companion — cryptographic notary + governance plane for AI agent decisions, built on this OSS core. Same crypto primitives (hybrid Ed25519 + SLH-DSA-SHA2-128f Merkle chain), same audit-log schema, additional hosted-only features: PII scan, secret detection, session narrative overlays, client-answer PDF export, and multi-tenant per-project stores.
You can run world-model-mcp entirely offline. Etch is optional and only used if you opt into the hosted service (signup gated) or opt into anonymous telemetry (off by default, inspectable payload, right-to-erasure supported).
What's new in v0.14.0
- Opt-in telemetry sink migration. Client now POSTs to
https://etch.systems/api/telemetry/ingest. Previous v0.7.3–v0.13 series shipped an empty PAT stub, so opt-in telemetry silently no-op'd for two months — this is the first release where it actually delivers events. Endpoint is unauthenticated (rate-limited server-side byinstall_id), 8 KB payload ceiling, source IP stripped from access logs. Payload schema:event / install_id / version / ts / os_family / python_version / adapters / fields. Everything on that list, nothing off it — enforced by strict server-side whitelist validation. - Daily heartbeat. Once per 24h per opted-in install, the CLI fires a
heartbeatevent carrying the installed-adapter list. Enables an MAU-of-OSS-users number without touching content. world-model telemetry --forget-me(GDPR right-to-erasure). DELETEs every server-side row for your install_id and wipes local telemetry state (install_id + consent + last-heartbeat). Works even when the server is unreachable — local state is wiped regardless, so consent revocation is honored offline.- 90-day server-side auto-TTL. Data minimisation enforced automatically. See docs/PRIVACY_TELEMETRY.md for the full retention + IP-strip + rate-limit spec.
- Dead code removed.
world_model_server/_embedded_token.pyandscripts/embed_token.pydeleted along with six now-obsolete tests. No PAT dance in the release process anymore.
What's new in v0.12.13
- OpenAI-compatible Coach backend.
verify_retrieval(v0.12.12's adversarial verification tool) can now route Coach calls through any OpenAI-shape endpoint — OpenRouter, Ollama, vLLM, LiteLLM, or a self-hosted deployment — without going through a proxy. SetWORLD_MODEL_VERIFICATION_BACKEND=openai-compatibleandWORLD_MODEL_VERIFICATION_BASE_URL=https://openrouter.ai/api/v1(or your endpoint of choice); the Coach client is built viaAsyncOpenAI(base_url=...)and dispatches throughchat.completions.createwith the system prompt in the messages list (OpenAI convention). API key priority: explicitWORLD_MODEL_VERIFICATION_API_KEY→OPENROUTER_API_KEY→OPENAI_API_KEY→ a placeholder for local endpoints that don't authenticate. New optional[openai]extra shipsopenai>=1.0. Backward compat: default backend staysanthropic; existing installs and the v0.12.12 baseline are unaffected. doctorCopilot log-signature scan. Newcheck_copilot_hook_signaturescheck parses~/.copilot/logs/*.logfor the two documented failure modes from copilot-cli #4001: PowerShellParserError(Copilot running bash-shaped commands through PowerShell on Windows) and/.claude/...path resolution (Copilot not exporting$CLAUDE_PROJECT_DIR; hooks run from cwd/). SKIPs gracefully when Copilot isn't installed. Reports the two signature counts separately so users can tell which of the two Copilot-side bugs is affecting them. Does NOT fix them — the fix has to come from Copilot — but separates "my hook wrapper is broken" from "the runtime is running my hook wrong."
What's new in v0.12.12
- Coach-Player adversarial verification (
verify_retrieval). New MCP tool that runs an independent Coach LLM call against a candidate answer plus supplied source facts and returns a confidence band (HIGH / MEDIUM / LOW) with itemized verified + unverified claim lists and per-claim source pointers. Coach lives in its own module (world_model_server/verification.py) with its own prompt — no state shared with extraction or reasoning models. That's the adversarial part: Coach doesn't know how the answer was produced, only what the facts say. Contract: never raises. Every failure mode (no API key, empty answer, no facts, Coach LLM error, malformed Coach response) returns a LOW-confidence result witherrorpopulated. Cheap default:verification_modeldefaults to Haiku 4.5 (~$0.001 per verify call), env-configurable viaWORLD_MODEL_VERIFICATION_MODEL. - 12-pair hand-labeled benchmark (
benchmarks/coach-player/). 4 grounded, 4 partial, 4 hallucinated pairs plus a runner that reports hallucination catch rate, false positive rate, MEDIUM band correctness, and overall exact match. Ship-floor policy: false positive rate ≤10% is enforced (non-zero exit); hallucination catch ≥95% is aspirational at N=12 and gets enforced oncepairs.jsonexpands to ≥30 pairs. Full run costs ~$0.03 at Haiku 4.5 pricing. - Exposed on both MCP + Hermes surfaces. MCP
list_toolsgainsverify_retrieval(27 → 28 tools); Hermes surfaced tool count 7 → 8 with the same tool schema. - Pattern origin. Ported from the maintainer's earlier
y=cproject (Coach-Player adversarial cooperation between a Player synthesizer and a Coach verifier). world-model-mcp is the first MCP server to ship it as a first-class tool with a benchmark harness.
What's new in v0.12.0
world-model doctorcommand (v0.12.1). Eight diagnostic checks including.claude/settings.jsonshell-quoting (the pre-v0.11.0 unquoted-$CLAUDE_PROJECT_DIRbug pattern the dogfooding investigation surfaced), hook script presence,.mcp.jsonregistration, world-model DB directory + staleevents_queue.jsonl, and Claude Code hook-error history filtered bysettings.jsonmtime.--jsonfor machine-readable output;--fixfor safe auto-rewrites. Would have caught the v0.11.0 shell-quoting bug automatically instead of via manual investigation.influence_state+expires_aton Fact (v0.12.2). Two nullable additive fields.influence_state(observed/pending_review/approved/blocked) separates two decisions made at different times: storage is an ingest question (do we keep this fact at all), influence is a per-turn question (do we surface it to the planner right now). Conflating them forces you to re-evaluate storage every time your planning threshold changes; splitting them lets you block a high-confidence fact from influencing a plan without deleting it — the disputed-entity-update-pending-review case that comes up often in graph work. A single trust-score is simpler until the first time you need that separation, which in practice happens fast.expires_atcomplements the continuouslast_decay_aterosion with hard drop-dead timestamps for compliance retention and ephemeral credentials. Migration mirrors the v0.11.1 pattern: NULL-default ALTER, index, no backfill, idempotent.- Universal content-type routing consumers (v0.12.3). Closes the write- and consumer-side loop opened by v0.11.1. That patch added
content_typeto the model and table but never wired a consumer — worse,create_factsilently dropped the field on write. v0.12.3 fixes both:create_factpersists all three v0.11.1/v0.12.2 new fields,query_factshydrates them on read, andquery_factsaccepts acontent_typefilter.get_injection_contextis now routing-aware: rules always inject at PostCompact / UserPromptSubmit / SessionStart under a dedicated "## Rules (always active)" section; facts (or NULL) fill remaining slots; procedures are excluded from auto-injection entirely and reachable only via explicitquery_fact(content_type='procedure'). - GitHub Copilot Chat adapter (v0.12.4,
install-copilot). Merges into.vscode/mcp.jsonper workspace. Copilot Chat uses top-level"servers"(not"mcpServers"like every other adapter world-model ships — silently registers nothing if wrong). Merge semantics: absent → write; existing → preserve other servers; existingworld-model→ skip unless--force; malformed / wrong-shape JSON → refuse and leave the file untouched. install-continue --globalconfig-merge path (v0.12.5). Merges into~/.continue/config.yaml'smcpServersLIST (Continue's schema — distinct from Hermes' mcp_servers-mapping and from Claude Code / Cursor / Copilot / Cline / Windsurf's mcpServers-mapping).ruamel.yamlround-trip preserves comments, blank lines, and key ordering.- Cline adapter (v0.12.6,
install-cline). Merges into~/.cline/mcp.json. Cline uses themcpServersmapping shape — same as Cursor / Claude Code. - Windsurf adapter (v0.12.7,
install-windsurf). Merges into~/.codeium/windsurf/mcp_config.json. SamemcpServersmapping shape as Cline; only the default path differs. - Hermes lifecycle hooks (v0.12.9). Layers the five optional hooks (
sync_turn,on_pre_compress,prefetch,on_session_end,on_memory_write) on top of the v0.11.0 MemoryProvider ABC.on_pre_compressreturns a compact injection bundle that honors the v0.12.3 content-type routing — rules always inject, procedures never do. Best-effort contract: exceptions caught, safe default returned; a broken hook must never crash the Hermes loop. - MCP 2026-07-28 spec readiness scaffolding (v0.12.11). Non-behavior-changing observability + public audit against the MCP 2026-07-28 specification (Release Candidate). Ships
world_model_server.spec_readiness.READINESS_STATE(machine-readable audit matrix locked to five row states),extract_meta/log_meta_if_presentobservability helpers wired intoserver.py:call_tool, anddocs/MCP_2026_SPEC_READINESS.mdpublic audit doc. Backward compatibility with the 2025-03-26 spec preserved unconditionally. - Adapter matrix now covers ten runtimes: Claude Code, Cursor, Codex, Hermes, Continue (per-project +
--global), OpenClaw, pi, GitHub Copilot Chat, Cline, Windsurf. - Deferred per roadmap-gated conditionals: OpenClaw TypeScript plugin (v0.12.8, no adoption signal within 5 days of v0.10) and Antigravity CLI adapter (v0.12.10, SDK still lacks
TransformCompactionHookthrough v1.0.16).
What's new in v0.11.0
-
autocontradiction-resolution strategy rewrite (v0.11.0 A). Folds inconfirmerawareness, per-evidence-type decay, distinct-source-tool counting, and tie-detection. Lifts the v0.8.1 contradiction-resolution benchmark'sautoscore from 77.1% → 100.0% on the same 105-pair × 19-category dataset. Overall benchmark accuracy across four canonical strategies + the decayed strategy rises from 78.2% to 83.7%. Non-auto strategies unchanged. Thekeep_higher_confidence_decayedstrategy is promoted from benchmark-only to a first-class option inpick_winner. Full detail inbenchmarks/contradictions-200/. -
Hermes native
MemoryProviderplugin +install-hermes-providerCLI (v0.11.0 B). Python plugin implementing Hermes'agent/memory_provider.pyABC (initialize,get_tool_schemas,handle_tool_call,get_config_schema,save_config). Intercepts writes at Hermes' routing layer rather than only surfacing tools — the architectural distinction the v0.10 MCP adapter could not close. Motivated by the Hermes #47349 exchange where @TechFlipsi surfaced that adding another MCP-registered store doesn't fix "the agent still defaults to writingMEMORY.md" — only a MemoryProvider does. Ships asworld_model_server/hermes_memory_provider/in the wheel;install-hermes-providercopies the plugin to<hermes_home>/plugins/memory/world-model/. Seven surfaced tools (query_fact,get_constraints,get_injection_context,record_event,record_correction,find_contradictions,resolve_contradiction) — trimmed from the 27 exposed via MCP to keep Hermes' tool namespace focused. Optional Hermes lifecycle hooks (sync_turn,on_pre_compress,prefetch,on_session_end) tracked as v0.12. -
Content-type routing schema field (v0.11.1). Nullable
content_type: Optional[Literal["rule", "fact", "procedure"]]on theFactmodel and the facts table. Additive-only migration; existing rows keep NULL and continue to work. Distinct fromevidence_type(which describes where the fact came from) —content_typedescribes what shape of content the fact carries, so a MemoryProvider can route writes intelligently (rules → always-inject, facts → search-on-demand, procedures → skills store) instead of dumping everything into one destination. Sourced from the Hermes #47349 architectural framing. Consumers (query filters, MemoryProvider write routing) are v0.11.x follow-ups; this ships the schema, tests, and migration only. -
Dogfooding case study (v0.11.2) — surfaced a real shipped bug that was fixed in the same release. Publishes what the fact graph actually captured about the world-model-mcp codebase in
.claude/world-model/: 3 learned constraints with real violation counts (includingcheck-twine-before-tagandtag-before-upload, both derived from real release-mechanics incidents matching the v0.9.1 telemetry-token miss and the v0.10.1 tagging lesson), 1 bug_fix reflection citing a real bug inworld_model_server/knowledge_graph.py:120-135, 608 facts (607 from the seeder + the one bug_fix), 600 entities. Honest about what was NOT captured (emptyevents/decisions/sessionstables). Pushing on that anomaly hard enough surfaced the actual root cause:setup_commandwrote unquoted$CLAUDE_PROJECT_DIRin every generated hook command, so any user whose project path contains a space (macOS defaults like~/Documents/, corporate paths, or the maintainer's ownclaude context graph/world-model-mcp) has been silently failing every hook invocation since v0.7.3 shipped hooks. The fix ships in this release — two-line shell-quoting change insetup_command+ regression test. This is the exact kind of latent bug that dogfooding is supposed to catch, and it did. Reproducibility contract:python scripts/dogfooding_snapshot.py --db-path .claude/world-modelregenerates the committed JSON byte-for-byte, and drift-protection tests fail if the writeup and the snapshot diverge. Seecase-studies/v011-dogfooding/. -
What is unchanged. All v0.10.x code paths: the 27 MCP tools reported by adapters (no new server-side tools in v0.11), the SWE-bench Verified benchmark and its multi-seed appendix, the seven-runtime adapter coverage (Claude Code + Cursor + Codex + pi + OpenClaw + Hermes Agent + Continue), the Zenodo preprint (paper unchanged since v0.9.2; no new Zenodo version). v0.11 is a depth release — better contradiction-resolution intelligence, a second Hermes integration path, a schema axis for future routing work, and honest evidence for the dogfooding claim. Test count grew from 417 (v0.10) to 457 (+21 for the Hermes MemoryProvider plugin, +10 for the content-type schema, +9 for the case-study drift protection).
What's new in v0.10.0
-
Three new adapters in one release: OpenClaw, Hermes Agent, Continue. All three verified end-to-end against real installations of the target runtime:
- OpenClaw —
install-openclawmerges into~/.openclaw/openclaw.json. Verified against OpenClaw2026.6.11 (e085fa1)on macOS:openclaw mcp probe world-modelreports 27 tools discovered. Root cause of the first-attempt "MCP error -32000: Connection closed" surfaced and fixed during E2E: OpenClaw's process spawn does not inherit shell PATH, so--command python3fails while an absolute path works. The CLI now defaultscommandtosys.executable(absolute) and rejects relative--pythonoverrides as a hard error. Documented as an install-time gotcha in the adapter README. - Hermes Agent —
install-hermesmerges into~/.hermes/config.yamlundermcp_servers.world-model. Usesruamel.yamlround-trip mode to preserve every comment and blank line in Hermes' heavily-commented 1327-line reference config. A regression test (test_f2_install_hermes_preserves_comments_and_blank_lines) locks this down after a pre-E2Epyyaml.safe_dumpimplementation stripped ~1170 lines of documentation. Verified against Hermes Agentv0.17.0 (2026.6.19)on macOS:hermes mcp test world-modelreports 27 tools discovered. Hermes' built-in memory (character-capped, no auto-decay per Hermes docs) is complemented additively by world-model-mcp's provenance + decay schema. Requires the[hermes]optional extra (pip install "world-model-mcp[hermes]") soruamel.yamlis available. - Continue —
install-continuewrites a standalone<project>/.continue/mcpServers/world-model.yamlfollowing Continue's documented per-server-file pattern. No config merge needed. CLI-side E2E: the exact stdio spawn Continue would perform returns 27 tools via a livetools/listroundtrip. Last-mile "does Continue's LLM see them in agent mode" verification requires a live VS Code / JetBrains session. Reprioritized after the SpaceX/Cursor acquisition to serve teams standardizing on OSS-neutral coding-agent workflows.
- OpenClaw —
-
Absolute-path posture across all v0.10 adapters. OpenClaw's PATH-spawn issue was caught first, but the same absolute-path default applies to Hermes and Continue as a precaution. Every new install command defaults
commandtosys.executableand rejects relative--pythonoverrides. Users who hand-edit config files are directed to$(which python3)in both READMEs. -
Cross-runtime shared memory. All v0.10 adapters (and every prior adapter) default
WORLD_MODEL_DB_PATHto.claude/world-model— a relative path resolved against the client's working directory. This means a project that runs in multiple clients (e.g., Claude Code + Continue + OpenClaw) shares one SQLite fact graph across all of them. For user-wide shared memory regardless of CWD, override with an absolute--db-path. The differentiator against ClawMem (which does cross-runtime memory with a plain key-value SQLite vault) is depth: per-fact provenance, per-evidence-type decay half-lives, PreToolUse defer enforcement. -
What is unchanged. All v0.9.2 code paths: the 26 base MCP tools (v0.10 adds no new server-side tools; the "27 tools" count reported by adapters includes
resolve_contradictionwhich shipped in v0.8.0), the SWE-bench Verified benchmark, the multi-seed replication appendix, the wedge claims. v0.10 is an adapter-surface release, not a schema-or-benchmark release. Test count grew from 375 (v0.9.2) to 417 with the three new adapter test suites; every baseline test still passes. -
Test breakdown. 375 baseline + 14 OpenClaw + 16 Hermes + 12 Continue = 417 tests. Every adapter's test suite includes: bundled-file validity, dry-run behavior, first-install writes with absolute-path defaults, idempotence (refuse to overwrite without
--force),--forceoverwrite, relative---pythonrejection, parent-directory creation, malformed-config-file handling, and subparser-registration regression coverage.
What's new in v0.9.2
-
Multi-seed replication appendix shipped per
SEED_PLAN.md. The v0.9 paper's primary limitation was single-trial design. v0.9.2 ships the multi-seed test that SEED_PLAN.md (locked 2026-06-25) committed to running. The result is published verbatim per the pre-registered acceptance criteria. -
Honest update to the v0.9 headline. On the 17-instance pre-registered subset, baseline pass rate swung +41 percentage points between seed 1 and seed 2 with no methodology change. Load-bearing replication is 0 of 7 instances. Mean paired delta across both seeds is +0.24 per instance with bootstrap 95 percent CI [0.00, 0.47]. The v0.9 +10.2 pts paired delta should be read as a single-trial upper bound; the replicated effect size is small, possibly nonzero.
-
What is unchanged: all v0.9.1 code, the 26 MCP tools, the 19 CLI subcommands, the 375 tests, the wedge claims at the architectural level (lifecycle-hook capture, per-fact provenance, per-evidence-type decay, PreToolUse defer). Architectural claims do not depend on the empirical effect size and survive the multi-seed update.
-
Documentation diffs:
benchmarks/repeat-mistake/RESULTS.mdadds a "Multi-seed replication appendix (v0.9.2 update)".benchmarks/repeat-mistake/paper.mdadds Appendix A with the same content.benchmarks/repeat-mistake/paper.pdfis regenerated.benchmarks/repeat-mistake/SEED_PLAN.mdadds a status update (the locked plan above is unchanged). Raw seed-2 artifacts (baseline_progress_seed2.jsonl,treatment_progress_seed2_treatment.jsonl, predictions, results, and themulti_seed_summary_seed2.jsonfrommulti_seed_aggregate.py) committed. -
The methodology discipline held. Pre-registration prevented goalpost-moving. The honest update is published per the locked SEED_PLAN.md acceptance criteria. This is what pre-registration is for.
What's new in v0.9.0
-
Repeat-mistake benchmark on SWE-bench Verified — the central wedge proof. 50 SWE-bench Verified tasks across django, sympy, matplotlib, scikit-learn, and sphinx, run as a paired baseline-vs-treatment comparison. Methodology was locked at
benchmarks/repeat-mistake/DESIGN.mdon 2026-06-17 (before the data existed) so the result cannot be accused of goalpost-moving. -
Headline results — Subset 1 (within-domain: django + sympy) baseline 15/20 = 75.0 percent, treatment 18/20 = 90.0 percent, delta +15.0 pts with 4 FAIL to PASS flips and 1 regression. Subset 2 (cross-domain: matplotlib + scikit-learn + sphinx) baseline 18/29 = 62.1 percent, treatment 20/29 = 69.0 percent, delta +6.9 pts with 2 flips and zero regressions. Combined paired result across 49 instances: 33/49 to 38/49, delta +10.2 pts.
-
Cross-domain transfer isolated cleanly — the Subset 2 treatment arm loaded ONLY the 4 Subset 1 constraints (django and sympy directives), holding out the 11 Subset 2 constraints to test whether learning from one repo family generalizes to a different one. Two cross-domain flips with plausible mechanistic explanations grounded in the loaded constraints. Sphinx-9461 is the strongest case: a sympy classmethod constraint transferred to a sphinx classmethod-wrapper unwrapping bug.
-
Honest caveats embedded in RESULTS.md — seven explicit limitations including single-trial design, constraint-failure overlap on Subset 1, the small cross-domain transfer rate, one dropped instance due to an upstream SWE-bench pip flag issue, and judge-model self-reference risk. Stated verbatim rather than hidden in an appendix.
-
Full reproducibility artifacts — every progress JSONL, predictions JSON, results JSONL, classification JSONL, constraints JSON, and harness report JSON committed in
benchmarks/repeat-mistake/. Locked judge prompts infailure_classifier.pyandlearning_hook.py. Total agent cost across both arms was approximately 90 USD on a Claude Code subscription.
What's new in v0.8.1
-
Contradiction-resolution benchmark expansion -- the v0.7.4 24-pair benchmark grew to 105 hand-curated pairs across 19 categories. Six new categories exercise the v0.8.0 schema specifically:
source_tool_corroboration,confirmer_overrides_pending,decay_advantage_session_vs_source,decay_advantage_stale_session,evidence_type_user_correction,settled_beats_higher_confidence. Deterministic runner atbenchmarks/contradictions-200/run.py; full per-strategy + per-category breakdown atbenchmarks/contradictions-200/RESULTS.md. -
Honest framing on the numbers: the new dataset is harder than v0.7.4's 24-pair set because the new categories deliberately test schema awareness (confirmer, evidence_type, decay) rather than raw confidence ranking. Headline numbers:
keep_most_sources99.0%,keep_higher_confidence81.0%,auto77.1%,keep_higher_confidence_decayed90.5% (on the 21 pairs where evidence_type is present), overall 78.2% across all strategies. The original 24-pair v0.7.4 93.5% number is preserved unchanged atbenchmarks/contradictions/and is not invalidated; it tested a different (smaller, easier) corpus. -
The wedge benchmark is v0.9: "does the learning loop measurably reduce repeated coding-agent mistakes on a public task corpus?" The contradiction-resolution work in this release is internal schema-correctness validation. The empirical artifact that maps to the published essay framing — the learning loop is the durable layer — lands in v0.9 with a SWE-bench-style repeat-mistake benchmark.
What's new in v0.8.0
-
Domain-aware confidence decay -- new
world_model_server/decay.pymodule with exponential half-life decay perevidence_type. Half-lives: source_code 365d, test 180d, session 14d, user_correction 730d, bug_fix 365d. Decay applies on read (no background task), so the nextquery_factcall returns the time-corrected confidence. Settled facts (canonicalstatus, or any fact withconfirmer != NULL) never auto-transition. Synthesized facts that decay below 0.2 confidence and corroborated facts that decay below 0.1 confidence auto-supersede on read, surfacing rot to the next compaction injection. -
Per-item provenance fields on facts -- three additive columns (
source_tool TEXT,confirmer TEXT,last_decay_at TIMESTAMP), all N
No comments yet
Be the first to share your take.