Repository navigation
Verified Memory 0.4.0
Verified Memory 0.4.0
Behavior change: editing the pack while it is in use now stops serving
Until 0.3.0, the server kept answering from the snapshot it verified at startup, even
after the pack folder changed on disk. In 0.4.0, if anything in the pack folder changes
while the server or plugin is running, both tools stop answering and return:
verified-memory: pack files changed on disk since startup, so the verified snapshot no longer matches them; restart to verify the pack again
This covers an edited file (even one whose modification time was put back), an added or
removed file, and a file or the whole folder replaced. The refusal is latched: once a change
is seen, the tools keep refusing even if the file is removed again or the folder is put
back, until the process restarts and verifies the pack again. To update a pack, replace it and
then restart Claude Desktop, the MCP client or the OpenClaw plugin. The check reads file
metadata on each request; there are no watchers and nothing is re-read or written.
This applies with every configuration, including one that sets none of the new options.
Recommended setup: pin the signer
For signed packs, pin the key that signs them. Then a trusted-keys file that someone else
rewrote cannot vouch for their pack.
-
Sign each pack with
sign-pack, raising--sequenceevery time you publish:node tools/sign-pack.mjs --pack my-pack --key ~/.ssh/verified-memory-pack --expires 90d --sequence 1 --out my-pack-signedIt prints the line to pin, for example
--trusted-fingerprint SHA256:…. -
Start the server with that fingerprint, a minimum sequence and strict mode:
verified-memory-mcp --pack /absolute/path/to/my-pack-signed \ --trusted-fingerprint SHA256:… --min-sequence 1 --strict
Claude Desktop add-on: paste the fingerprint into Pinned signer fingerprint, set
Minimum pack sequence, and turn on Strict. No trusted keys file is needed.
OpenClaw:"trustedFingerprints": ["SHA256:…"], "minSequence": 1, "strict": true. -
When you install a newer pack, raise the minimum sequence to its number.
Why: in red-team round 4, an attacker bot on a shared machine that could rewrite the
trusted keys file added its own key and re-signed a poisoned pack, and 0.3.0 served it as
verified. With a pin, that pack is refused: pack is signed by SHA256:…, which is not a pinned signer fingerprint.
New
- Pinned signers:
--trusted-fingerprint(repeatable, or comma-separated) /
trustedFingerprints. When set, only a pinned key is accepted, whatever
--trusted-keyssays, and an unsigned pack is refused. - Revocation:
--revoked-keys FILE/revokedKeys, oneSHA256:…per line. A revoked
signer is always refused, even when pinned or trusted, and the error names it. - Rollback protection:
PACK.jsonmay carry a signed integersequence.
--min-sequence N/minSequencerefuses a missing or lower sequence. You set and raise
N; the server keeps no state and writes nothing. (versionstays the format version.) - Order of checks, each refusal one specific error: files and checksums → signature
valid → revoked → pinned → trusted keys → sequence → expiry (under--strict). - Claude Desktop add-on: new optional settings Pinned signer fingerprint, Revoked
keys file, Minimum pack sequence and Strict. All default to off. sign-pack --sequence N, and it prints the--trusted-fingerprintline.- Pack maker: Check a signed pack accepts pinned fingerprints, revoked fingerprints
and a minimum sequence, and reaches the same verdict as the server.
Compatibility
- Apart from stop-on-change, configurations without the new options behave as in
0.3.0, with the same decisions and the sameverificationfields. A pack'ssequence, if
present, is reported inverification.freshness.sequence. - Packs with a
sequenceneed 0.4.0 or later; 0.3.0 hosts refuse the extra key. Packs
without one load on 0.3.0 as before. - Node: MCP server
>=22.0.0(tested on 22.0.0, 22.23.3, 24 and 25); OpenClaw plugin
>=24.16.0 <25 || >=26.1.0(tested on 24.22.0 and 26.12.0). CI runs every suite on
macOS and Windows.
Limits
- A signature shows who signed, not that the content is true.
- Change detection uses file metadata (listing, size, modification and change time,
device and inode). An administrator who can reset the clock or the filesystem can defeat it. - Revocation and the minimum sequence are only as current as your configuration. There
is no network, so nothing updates them for you. - Nothing here protects a host whose own configuration (MCP client config, Claude Desktop
settings, OpenClaw config or the revoked keys file) an attacker can write.
Downloads
verified-memory-0.4.0.mcpb, SHA-256576070d87208cee58482ab8f2dd04c6773f82b968952872fb12bcc004c251129. It is not code-signed, so
Claude Desktop shows its "not verified by Anthropic" warning for add-ons installed from a file.- npm:
@python1/verified-memory-mcp@0.4.0. OpenClaw plugin:@python1/verified-memory@0.4.0on ClawHub, not npm.