Detect stale source context and retain traceable code-chain understanding for AI coding agents.
Code changed, but your AI coding agent still remembers the old call chain? TMF is source-bound code memory that flags stale claims and points back to current source.
Try demo · MCP setup · Evidence

30-second paced replay of real deterministic demo output, with labeled source excerpts—not an agent end-to-end test. Reread is requested, not executed.
Developer preview: enforcement depends on the host, configuration, and intercepted actions—not automatic blocking of all writes. Fresh does not mean correct; general token savings and production readiness are not established.
TMF’s core stale-context protection mechanism has been validated in the covered scenarios. Evaluation across more languages, repositories, and long-running production workflows is ongoing.
TMF is for:
TMF is not:
Fresh means the source binding still matches. Correctness still comes from source and validation.
The repository includes a Java qualification suite: 46/46 qualifiers and 731/731 checks. The historical unreleased audit baseline was 478/478 tests; it is not the current test total. See the version-pinned test verification for historical rc3 and master results, explicit skips, and the intermittent master failure recorded at that time. The rc6 release notes describe Java reflex and receiver-resolution fixes and distinguish source validation from publication evidence. These are source-analysis and regression-test results, not a claim of production readiness or a general Agent outcome. Middleware mechanics are validated, and stale-context safety has positive evidence in the GUAVA M10 pre-read experiment. Broader productivity, speed, token savings, and general bug-prevention claims remain unproven. See the authoritative evidence status before making broader claims.
flowchart TD
A[source code] --> B[TMF derive / warm]
B --> C[source-bound claims]
C --> D[freshness check]
D -->|fresh| E[bounded graph context]
D -->|stale / unknown| F[stop + reread current source]
That is the whole loop: TMF keeps claims bound to source, refuses to reuse stale context, and provides source anchors for rereading; guidance may include extra related or heuristic matches.
The GIF above replays output from scripts/demo_stale_gate.py at commit de0236a57939. It shows deterministic stale-claim omission and source fallback, not an agent obeying the reread signal or completing a task. The 30-second timing is presentation pacing, not a runtime benchmark.
From a source checkout (Python 3.10+ and Git required):
git clone https://github.com/kyle641320/true-memory-fragments.git
cd true-memory-fragments
python3 scripts/demo_stale_gate.py
Already cloned? Run only the final command from the repository root. This demo imports the checkout's source; it is not a standalone PyPI wheel verification, and installing the package alone does not download the demo script.
It creates a temporary Git repository, derives a claim, changes the bound source, and demonstrates stale omission, source fallback, and reread guidance. It needs no model, network, Java parser, or pre-existing .tmf/ store.
Expected markers:
STALE CLAIM BLOCKED: PASS
SOURCE FALLBACK PROVIDED: PASS
REREAD REQUIRED: PASS
The demo stops at the reread requirement; it does not perform the subsequent reread or refresh.
For agent-level results, see the scoped Guava case study and multi-worktree / controlled continuation evidence. For implementation details, see the architecture.
TMF keeps a conservative code-memory graph. Claims are useful only when their source bindings still match the working tree.
claim: A calls B
binding: B.java@hash123
current: B.java@hash999
result: stale_or_unknown → reread B.java before continuing
This is intentionally conservative. Missing or stale memory falls back to source; it is never promoted into truth.
writes, publishes_to)ASYNC_RELATIONS: publishes_to, subscribes_to, publishes_type, listens_type)stop_reason valuesretrieve checks existing claims without mutating or re-deriving the store; refresh_path and warm perform explicit derivation/refresh operations.Release candidate: 0.1.0rc6. Includes Java reflex coverage, conservative typed/inherited receiver resolution, and resolution-dependency freshness. See the rc6 release notes.
For explicit multi-worktree binding and MCP configuration, use the pinned installation and MCP guide.
Install this preview (Python 3.10+):
python -m pip install "true-memory-fragments==0.1.0rc6"
See the rc6 release notes for version scope and validation boundaries.
Java parsing support is optional:
python -m pip install "true-memory-fragments[java]==0.1.0rc6"
Development checkout:
python -m pip install -e .
python -m pip install -e ".[java]" # optional Java support
Runtime dependencies are intentionally small. Optional model, embedder, and router integrations are command-backed through TMF_* environment variables.
Engine installed does not mean reflex armed. MCP registration, a warmed
index, and agent usage rules do not register Claude Code's PreToolUse hook.
After installing rc6 or an updated source checkout, run:
tmf doctor --repo /absolute/path/to/task-repo
Absent or ineffective registration returns nonzero with
reflex NOT armed — operating as opt-in memory. This checks configuration,
not runtime firing. See reflex setup and diagnostics.
Doctor was introduced in rc5; rc6 also detects recognized Java-blind legacy hooks.
Existing reflex deployments must update the whole integration directory, not
just the engine wheel. Install the [java] extra in the hook interpreter,
then run a normal tmf warm --repo /absolute/path/to/task-repo to refresh older
Java derivations. Static doctor success is not proof of host dispatch.
Start with the 30-second stale-gate demo above. Share installation or reproduction feedback in Discussion #1.
For Linux x86_64 / CPython 3.12 source checkouts, the repository includes an offline verifier for Java step0 review:
bash scripts/verify_java_offline.sh
Expected success marker:
JAVA OFFLINE VERIFY: PASS
TMF includes a reflex hook integration that gives AI coding agents a biological-style reflex: when an agent is about to act on code understanding while that code has changed, the supported hook can request a stop and source reread. Enforcement depends on host interception, configuration and coverage.
This is not a code memory cache — it's a reflex arc that intercepts agent tool calls before execution.
fn_hash freshness (source-bound change detection; no fixed latency guarantee)before_tool_call hook / Claude Code PreToolUse harness (supported intercepted actions only)Four git hooks automatically generate function-level invalidation manifests after code changes:
.git/hooks/post-commit — after local commits.git/hooks/post-merge — after git pull.git/hooks/post-checkout — after branch switches.git/hooks/post-rewrite — after rebase/amendThese hooks call integrations/reflex/scripts/git_calibrate.py, which compares baseline_rev → HEAD Python function signature changes and outputs structured invalidation manifests.
The tmf-reflex OpenClaw plugin intercepts agent tool calls:
requireApproval with exact changed function namesintegrations/reflex/scripts/local_warm.py to re-warm that one fileOn new session start, the plugin reads unconsumed invalidation manifests and injects changed / deleted symbols as "pre-alert" context, preventing agents from relying on stale memory.
freshness / derive)Reflex integration code lives in integrations/reflex/. See that directory's README.md and DESIGN.md for:
openclaw-plugin/)git-hooks/)examples/)tests/)Search terms this project is intended to match include AI coding agent memory, stale context prevention, source-aware code memory, code graph for LLM agents, Claude Code memory, and cross-session code understanding. These describe the user problem; they are not claims that every integration is already production-ready.
The repository description and external launch materials should use the same vocabulary, link to a reproducible demo, and distinguish validated mechanics from still-open productivity claims.
MIT
python3 scripts/demo_stale_gate.py (recording: recordings/stale-gate.cast)Source-derived launch command. Check the maintainer’s required arguments and credentials before running:
uvx true-memory-fragmentsMerge this template into ~/Library/Application Support/Claude/claude_desktop_config.json. Keep existing servers. Add any arguments, credentials, and permissions required by the maintainer; this template has not been install-tested.
{
"mcpServers": {
"io-github-kyle641320-true-memory-fragments": {
"command": "uvx",
"args": [
"true-memory-fragments"
]
}
}
}Restart Claude Desktop completely for changes to take effect. Confirm the server appears connected in the client’s tool list, then try a read-only example from its documentation.
Claude Desktop setup referencetrue-memory-fragmentspypiTrue Memory Fragments works with any MCP-compatible client. Copy the config snippet from the Configuration section above and add it to the file shown for your client, then restart the application.
~/Library/Application Support/Claude/claude_desktop_config.jsonRestart Claude Desktop completely for changes to take effect.~/.cursor/mcp.jsonRestart Cursor for changes to take effect..vscode/mcp.jsonReload VS Code window for changes to take effect.~/.codeium/windsurf/mcp_config.jsonRestart Windsurf for changes to take effect..mcp.jsonSave at the project root, then start Claude Code in that project and review the MCP server approval prompt. Keep real credentials out of shared files.