AI & Computingarticle2026-08-02

MemForge: Portable, agent-neutral persistent memory format for AI coding agents (v0.10.0)

Open access0 citations

Abstract

MemForge v0.10.0: portable, agent-neutral persistent memory format for coding agents. This deposit anchors the v0.10.0 ship state (reference-CLI package 0.10.0; spec snapshot spec/VERSION 0.8.0, unchanged from v0.9.2). The bundle ships the spec snapshot plus the full reference-CLI artifacts (CHANGELOG, README, license, examples/). What v0.10.0 ships v0.10.0 supplies the pre-write half of the write-boundary gate that v0.9.0 described but did not deliver, and closes the gap the two halves left between them. v0.9.0 added the memory-validate operation and named a Claude Code PreToolUse shim as the pre-write half of that gate. The shim was never written, and the check it would have called was parse-only, so the pre-write half did not exist in either sense. The gap those two facts leave is specific. A frontmatter block can be entirely valid YAML and still be missing a field no tool can derive. A parse gate cannot see it, because the block parses. A backfill cannot repair it, because the missing field is a semantic classification and guessing one is worse than leaving it absent. The only component that detects it is the audit, which runs after the fact. Files in that state accumulate with nothing objecting. New primitive validate_required_fields: required-field conformance, kept separate from validate_frontmatter rather than added as a strict mode of it. That function's contract is parse-only and its docstring commits to treating missing fields as a soft concern; adapters and the git pre-commit path depend on that, so widening it would have been a breaking change wearing the costume of a flag. Two field sets ship. The default is the non-derivable three (name, description, type); the full v0.4 set is available for audit and CI. The narrow default is the design, not a shortcut: uid, tier, tags, owner, status and created are synthesized later by the backfill, so a write gate denying on them would reject the first save of every memory. A gate that fires on what a tool will fix is a gate people switch off, and a gate people switch off protects nothing. The Claude Code PreToolUse write-boundary gate now ships in the adapter. It denies a malformed memory write before the bytes reach disk and names the offending field. On an edit it validates the reconstructed file rather than the replacement string alone, because an edit that removes a required field is only visible once the substitution is applied to what is already on disk. The gate is fail-open on every error path, unconditionally: an unimportable package, an unreadable file, an unexpected payload. Something standing in front of every editor write must never wedge the editor. That posture is also why it carries more tests than a fail-closed gate would, including one that shadows the package with a deliberately broken install. A fail-closed gate announces its own breakage on the next call; a fail-open one goes quietly permissive and nothing reports it. memory-frontmatter-backfill now hoists an existing nested metadata type to the required top-level key. Lossless, since the value is already in the file and nothing is guessed, and additive, since the metadata block is left intact. It still refuses to invent a type where none exists. Release-rigor framing No spec change. The field in question has been required since v0.4.0. This release makes the tooling enforce and repair what the spec already stated, which is why the package version moves and the spec version does not. Additive and backward-compatible. No existing well-formed folder breaks. The pre-ship review included a threat-model pass over the new code surface. Two findings were fixed in the same commit: an environment override that disarmed the gate silently now announces itself, on the reasoning that precedence is correct but silence is not, and an unbounded read is now size-capped so a single pathological file cannot turn a hook standing in front of every write into a memory-exhaustion vector. One finding was refuted with evidence rather than accepted. Path traversal and symlink escape were raised against the scope check; both were verified not to apply, because the check resolves each side before comparing, so a relative escape or a symlink pointing outside a root lands out of scope and is never read. The reviewer raised it because the bundle it received had been truncated and it could not see the source. Confirmed by probe rather than by re-reading the code. The test suite caught a defect the author did not: a new helper shadowed an existing one of the same name and broke three passing tests. 605 tests pass, 26 new. Reference implementation (PyPI package ildan-memforge==0.10.0) The gate, the primitive and the backfill hoist are all exercised end to end: the shipped package is installed, the adapter hook is registered against it, and a deliberately malformed write is denied at the boundary with the offending field named. Bundle contents SPEC.md (spec_version 0.8.0) VERSION taxonomy.yaml v0.10.0-known-limitations.md (living-doc snapshot at v0.10.0) CHANGELOG.md (full history through v0.10.0) README.md LICENSE (Apache-2.0) examples/ drop-in scripts (git hooks, watcher scripts, recall synonyms example, WebSocket scaffold) Bundle SHA-256 (v0.10.0-bundle.zip): 85048574294c81245e4720ff44bd54328619d1e057919ba9bd312f5e1d659f87 Defensive-publication context This is one of three timestamped anchors for the MemForge spec text and reference tooling (Channel 1: Software Heritage SWHID; Channel 2: this Zenodo deposit; Channel 3: GitHub release tags). The concept DOI 10.5281/zenodo.20113963 always resolves to the latest archived version. This version mints a fresh Zenodo version under that concept record. Software Heritage identifiers for this release: release: swh:1:rel:f5bba489d2473fb21aee3030b03fc5f45962a5ab revision: swh:1:rev:2ca7df16b3e424cedf61d8a5ffcbdf36779a5c28 Install pip install ildan-memforge Source code plus spec history https://github.com/ildan-ai/memforge https://github.com/ildan-ai/memforge/releases/tag/v0.10.0 License: Apache-2.0

// Source

View paper (DOI)Open access versionOpenAlexZenodo (CERN European Organization for Nuclear Research)Published 2026-08-02

Authors: Mike Hiltz

Institutions: Fidal