{"slug": "an-anchoring-layer-between-facts-and-ai-memory", "title": "An anchoring layer between facts and AI memory", "summary": "Anchorstate Lab released GMR, a lightweight CLI runtime that binds manual judgments and notes to recomputable observations in a repository, replaying the observation that generated them and warning when the relevant world state changes. The tool, installable via npm or a direct script, supports commands like init, anchor, check, and accept, and is designed to keep notes accountable to facts across refactors and code changes.", "body_md": "Track subjective judgments by anchoring them to recomputable observations in your repository.\n\nGMR is a lightweight runtime for binding notes to facts, replaying the observation that generated them, and warning you when the world moves along a direction you declared.\n\nGMR is a CLI tool that helps you:\n\n- attach a judgment or note to an observable part of a repository\n- keep that judgment bound to a reproducible observation\n- detect when the relevant world state has changed\n- return the notes bound to anchors that moved\n\nIt is not a linter or rule engine. It is a runtime for anchoring notes to observable state and preserving that binding over time.\n\nUse GMR when you want to make a manual judgment accountable:\n\n- a contract should still hold after a refactor\n- a behavioural assumption should still be true after code changes\n- a note should be surfaced again when the thing it depends on moves\n\nGMR keeps the judgment attached to the fact it depends on and reports if that fact changes.\n\nIf the npm packages are published, install the wrapper package:\n\n```\nnpm install -g @zongming_he/gmr\n```\n\nThe npm wrapper will load the matching platform bundle, if available. If your operating system or architecture is not supported by the published bundle, the wrapper prints a fallback message and points you to the direct installation script.\n\nThe repository includes a simple install script for prebuilt releases. If you want a direct binary install without npm:\n\n```\ncurl -fsSL https://raw.githubusercontent.com/Anchorstate-Lab/GMR/main/dist/install.sh | sh\n```\n\nIf you are using a fork or mirror, replace `Anchorstate-Lab/GMR`\n\nwith your repository path.\n\nIf you want to build the CLI yourself from this repository:\n\n```\ncargo install --path domains/coding/cli --locked --root ~/.local\n```\n\nThis installs the assembled `gmr`\n\nCLI built from the current workspace.\n\nGMR works against a project directory, including repositories with no Rust in them.\nRun commands with `--repo <path>`\n\n(default is `.`\n\n).\n\n```\ngmr --repo /path/to/project init\n```\n\nThis creates the local `.anchor/`\n\nlayout, installs the built-in probe bundle,\nand (the first time only) writes a Claude Code skill doc to\n`.claude/skills/gmr/SKILL.md`\n\n— pass `--global`\n\nto write it to\n`~/.claude/skills/gmr/SKILL.md`\n\ninstead. It does not create anchors or notes\nfor you. Safe to rerun; it never overwrites a file that already exists.\n\n```\ngmr --repo /path/to/project anchor src/auth.ts#createSession \\\n  -m \"sessions expire after 30 minutes because ...\"\n```\n\n`anchor`\n\nroutes the coordinate to a probe, a shape and a position, writes a\nnote under `memories/`\n\nwith that memory, opens the anchor, and binds the note\nto it — all in one step. Omit `-m`\n\nand the note is left for you to write,\nreported as `unwritten`\n\nuntil you do. Equivalently, you can hand-write the\nnote yourself with the same frontmatter and run `gmr sync`\n\nto open it:\n\n```\n---\nabout: src/auth.ts#createSession\n---\n\n# Sessions must still be created inside the service boundary\n```\n\nRun `gmr anchor`\n\nwith no coordinate to open whatever the declarations and\nnotes already ask for — what a fresh clone needs, since the journal doesn't\ntravel with the repository.\n\n```\ngmr --repo /path/to/project check --json\n```\n\n`check`\n\nevaluates due anchors and exits 1 if any axis a note asked about\nmoved, handing back the notes bound to what moved. It also flags anchors\nwhose declaration no longer matches their live criteria, and anchors\nstanding on a reading a different probe instrument took — resolve those\n(see `accept --criteria`\n\nand `rebase`\n\nbelow) before trusting a quiet result.\n\n```\ngmr --repo /path/to/project accept src/auth.ts#createSession --why \"...\"\n```\n\nYou looked, and what `check`\n\nshowed is the new baseline; `accept`\n\nclears the\nvector and seals the reason permanently into the journal. If a declaration\nchange is pending too, pass `--baseline`\n\nor `--criteria`\n\nexplicitly — they're\nseparate judgments and don't share one reason.\n\n```\ngmr --repo /path/to/project status --json\n```\n\n`status`\n\nreports every anchor, its axes, and the notes bound to it. Reads only.\n\nThe front door — six verbs `gmr --help`\n\nshows:\n\n`init`\n\n— set up`.anchor/`\n\n, install bundled probes, write the skill doc`anchor`\n\n— watch a coordinate and write the memory that goes with it`status`\n\n— what is being watched, on which axes, with which memories`check`\n\n— did anything move on an axis a memory asked about?`accept`\n\n— take what an anchor now shows as the new baseline, or take a changed declaration's criteria (`--baseline`\n\n/`--criteria`\n\n/`--all --criteria`\n\n)`close`\n\n— retire an anchor permanently\n\nEverything else still works, reachable through `gmr help <name>`\n\n:\n\n`probes list`\n\n/`probes build`\n\n— list or build available probes`sync`\n\n— open anchors declared by notes and align bindings (what`anchor`\n\nwith no coordinate runs)`open`\n\n— create an anchor directly by hand`observe`\n\n/`pass`\n\n/`read`\n\n— evaluate due anchors, return moved notes, or read raw anchor state`reprobe`\n\n/`retransition`\n\n/`reterminal`\n\n/`rebase`\n\n/`restate`\n\n— hand-drive one part of an anchor's criteria; each needs`--why`\n\n, sealed into the journal`bind`\n\n/`reaffirm`\n\n/`cobound`\n\n— manage reference bindings`link`\n\n— record a relationship between references`edges`\n\n— read journal transitions since a point`health`\n\n— inspect anchor liveness`doctor`\n\n— anchors never observed, with no note, unresolvable, or notes with lint problems (`unclaimed`\n\n,`bare-key`\n\n,`long-hand`\n\n,`retired`\n\n)`requeue`\n\n— force an anchor back onto the due queue`export`\n\n/`import`\n\n— snapshot and replay store contents\n\nMost commands support `--repo <path>`\n\nand `--json`\n\n.\n\nIf you are working in this repository and want to build or verify it:\n\n```\ncargo build --release -p coding-anchor\ncargo test --workspace\nsh gate.sh\nsh acceptance.sh\n```\n\n`docs/GMR.md`\n\n— architecture and design source of truth`docs/architect.md`\n\n— repository layering and package responsibilities`CLAUDE.md`\n\n— design decisions and repository norms`memories/`\n\n— repository notes and grounded records\n\n[MIT](/Anchorstate-Lab/GMR/blob/main/LICENSE) © 2026 Zongming-He", "url": "https://wpnews.pro/news/an-anchoring-layer-between-facts-and-ai-memory", "canonical_source": "https://github.com/Anchorstate-Lab/GMR", "published_at": "2026-08-13 22:52:33+00:00", "updated_at": "2026-08-13 23:11:23.907399+00:00", "lang": "en", "topics": ["developer-tools"], "entities": ["Anchorstate Lab", "GMR", "Claude Code"], "alternates": {"html": "https://wpnews.pro/news/an-anchoring-layer-between-facts-and-ai-memory", "markdown": "https://wpnews.pro/news/an-anchoring-layer-between-facts-and-ai-memory.md", "text": "https://wpnews.pro/news/an-anchoring-layer-between-facts-and-ai-memory.txt", "jsonld": "https://wpnews.pro/news/an-anchoring-layer-between-facts-and-ai-memory.jsonld"}}