MemTether/MemTether

GitHub ↗ · How this check works

Per-setup public labels: Linux / Haiku: Works · Linux / Luna: Works

Static status badge · SVG · read-only JSON. Embed with ![Coldpass status](https://coldpass.dev/badge/MemTether--MemTether.svg).

mcp-server

Works

README claims checked out on 2 recorded setups.

Answers apply to each recorded setup, revision and operation. Earlier observations remain in Run details.

Tested on Linux
PlatformHaikuLuna
Linuxyesyes

Linux / Haiku 5.5: yes · Oct 25, 2026 · 9b46b31ecdb7 · claude-code / 2.1.310 (Claude Code)
Recorded operation: <guest-path> -m mcp_server · local stdio MCP start + initialize + tools/list

Linux / Luna: yes · Oct 25, 2026 · 9b46b31ecdb7 · codex / codex-cli 0.163.0
Recorded operation: <guest-path> search 'basalt blue' --list

Does what it says
3 of 3 claims checked out
  • CLI remember writes a memory with source attribution: Real input produced the expected result: 'ok': True

    Source: memtether remember "User prefers dark theme" --source claude-code

    Input: User prefers dark theme

    Expected: write reports ok True

    Command: <guest-path> remember 'User prefers dark theme' --source claude-code

    Observed: 'ok': True, 'uid': 'fact-20261025225523-410b07f7ab79', 'op': 'noop_dup'}

  • MCP clients can govern memory via the MCP server: Real input produced the expected result: User prefers dark theme

    Source: The same operations work via **MCP** — your AI agent can govern memory directly:

    Input: {"tool": "search_memory", "arguments": {"query": "theme", "limit": 5}}

    Expected: search_memory returns the stored dark theme memory

    Command: <guest-path> -m mcp_server tools/call {"tool": "search_memory", "arguments": {"query": "theme", "limit": 5}}

    Observed: User prefers dark theme\"\n }\n ]\n}"}], "isError": false}

  • audit chain demo detects tampering: Real input produced the expected result: verify_chain: FAIL

    Source: run `python examples/audit_chain_demo.py` to see it turn red.

    Input: demo script

    Expected: after direct edit verify_chain reports FAIL

    Command: <guest-path> examples/audit_chain_demo.py

    Observed: verify_chain: FAIL {'anchor_id': 1, 'reason': 'chain hash mismatch — audit rows edited after anchoring', 'expected': '28db4a5632bf7efca259dc68b5bab6cc9b66ac953af273bca5d2c831158063b3', 'recomputed': '9af598c2a90cb88d704ae61e534e44d8814755e9c1d7ed8f828052399989b41b'} ✅ 哈希链成功检测到篡改!这就是 MemTether 的核心防御能力。

MCP
Yes, observed
Local or hosted
local
Local: runs on your machine
Needs keys or browser
None seen
Maintained
Slow
slow: last commit 3 days ago; 555 commits and 0 merged PRs in 90 days; 4 open issues, 2 open PRs; 0 of 6 recent threads got a maintainer reply; latest release 2026-10-18

Last commit Oct 22, 2026

Setup time
3 min 9 s
3 min 9 s to a working result
Issue
none found in recorded check
Examples
1 of 1 ran as expected
  • basic remember, search, supersede and retire operations work end to end: command completed successfully

    Source: examples/basic_usage.py (docstring: Run: python examples/basic_usage.py)

    Input: no arguments; uses temp DB

    Expected: prints write/search/supersede/retire lines and Done

    Command: <guest-path> examples/basic_usage.py

    Observed: [write] uid=fact-20261025225717-... ok=True [search] found 1 results - User prefers dark theme and uses Vim keybindings [supersede] old=fact-2026102522... -> new=fact-2026102522... [search after supersede] found 1 results [retire] ok=True Done! All operations completed successfully. [warn] 向量检索失败(将降级为纯关键词,召回会明显变差): No module named 'chromadb' [warn] 正确解释器: <guest-path>

Evidence
README behavior checked
Agent interfaces
MCP, API (documented only), CLI (documented only)
MCP, API (documented only), CLI (documented only)

Observed interfaces were exercised by the checker. Documentation alone does not confirm compatibility.

MCP context
10 tools · about 1,416 tokens
10 tools · about 1,416 tokens

Largest returned tools/list page in these observations. Compact UTF-8 definition bytes ÷ 4, rounded up; approximate, excluding client framing and tool results. This is context size, not proof that every tool works.

Measured on linux with Haiku 5.5 · Oct 25, 2026 on 9b46b31ecdb7

Tested with
Claude Code / Haiku 5.5
  • Linux: Claude Code / Haiku 5.5 · agent 2.1.310 (Claude Code) · Checked operation passed · Oct 25, 2026 on 9b46b31ecdb7

Each entry describes its recorded operation and source revision.

Safety
No unexpected network or file activity found in these checks

No problems traced to this repository code in these checks; a short run cannot prove safety.

Reviewed as expected for a test run: attempted writes that failed, so nothing was written.

Full event, path and process lists for each observed setup:

Run details

Haiku 5.5

Native agent · Checked operation passed

Checked operation <guest-path> -m mcp_server · local stdio MCP start + initialize + tools/list

Agent-reported scope: Install MemTether from PyPI, initialize a memory DB, write and search a memory through the CLI and the MCP stdio server, and verify the tamper-evident audit chain

MCP server returned: memory-hub · version 1.0.0.

MCP tools returned: add_memories, search_memory, list_memories, correct_memory, retire_memory, pin_memory, as_of_query, timeline, profile, feedback. Tool listing does not establish authenticated tool-call success.

Run details
run
MemTether--MemTether-claude-haiku-5-5-1792968826528443705
date
Oct 25, 2026
time to working
189.5s
product hosting / execution
Local stdio MCP server in the guest
recorded operation scope
product operation
model
claude-haiku-5-5
agent / version
claude-code / 2.1.310 (Claude Code)
platform
linux
reported cost
$0.023787
Recorded source
https://github.com/MemTether/MemTether
Backend
hyperv
Tool transport
mcp-assigned-vm
Requested source pin (not an observed revision)
{"commit": "9b46b31ecdb799402983e1c5598bcf21ac9c144b", "url": "https://github.com/MemTether/MemTether"}
Test version
readme-ca496ea10bb07418d1d8f1c256c2433a55547acc0fb62d8b6d86ae33c976fbfa
revision
9b46b31ecdb799402983e1c5598bcf21ac9c144b
Whose fault: not assigned · resolved

Safety: No problems traced to this repository code in these checks.

No problems traced to this repository code in these checks.

Reviewed as expected for a test run: attempted writes that failed, so nothing was written.

OSV scanned supported lockfiles; unpinned dependencies and unsupported formats are outside this check.

A short run cannot establish that code is safe.

Connections show IP addresses; proxies can hide the final hostname.

Tracing covers dispatched commands and their children, not the whole OS; guest root can interfere with tracing.

Full safety evidence →

Answers recorded for this run
  • CLI remember writes a memory with source attribution: Real input produced the expected result: 'ok': True

    Source: memtether remember "User prefers dark theme" --source claude-code

    Input: User prefers dark theme

    Expected: write reports ok True

    Command: <guest-path> remember 'User prefers dark theme' --source claude-code

    Observed: 'ok': True, 'uid': 'fact-20261025225523-410b07f7ab79', 'op': 'noop_dup'}

  • MCP clients can govern memory via the MCP server: Real input produced the expected result: User prefers dark theme

    Source: The same operations work via **MCP** — your AI agent can govern memory directly:

    Input: {"tool": "search_memory", "arguments": {"query": "theme", "limit": 5}}

    Expected: search_memory returns the stored dark theme memory

    Command: <guest-path> -m mcp_server tools/call {"tool": "search_memory", "arguments": {"query": "theme", "limit": 5}}

    Observed: User prefers dark theme\"\n }\n ]\n}"}], "isError": false}

  • audit chain demo detects tampering: Real input produced the expected result: verify_chain: FAIL

    Source: run `python examples/audit_chain_demo.py` to see it turn red.

    Input: demo script

    Expected: after direct edit verify_chain reports FAIL

    Command: <guest-path> examples/audit_chain_demo.py

    Observed: verify_chain: FAIL {'anchor_id': 1, 'reason': 'chain hash mismatch — audit rows edited after anchoring', 'expected': '28db4a5632bf7efca259dc68b5bab6cc9b66ac953af273bca5d2c831158063b3', 'recomputed': '9af598c2a90cb88d704ae61e534e44d8814755e9c1d7ed8f828052399989b41b'} ✅ 哈希链成功检测到篡改!这就是 MemTether 的核心防御能力。

Examples

  • basic remember, search, supersede and retire operations work end to end: command completed successfully

    Source: examples/basic_usage.py (docstring: Run: python examples/basic_usage.py)

    Input: no arguments; uses temp DB

    Expected: prints write/search/supersede/retire lines and Done

    Command: <guest-path> examples/basic_usage.py

    Observed: [write] uid=fact-20261025225717-... ok=True [search] found 1 results - User prefers dark theme and uses Vim keybindings [supersede] old=fact-2026102522... -> new=fact-2026102522... [search after supersede] found 1 results [retire] ok=True Done! All operations completed successfully. [warn] 向量检索失败(将降级为纯关键词,召回会明显变差): No module named 'chromadb' [warn] 正确解释器: <guest-path>

Local or hosted: local

What the agent did

Install MemTether from PyPI, initialize a memory DB, write and search a memory through the CLI and the MCP stdio server, and verify the tamper-evident audit chain

cd <guest-path> && pwd && ls -la && id -u && python3 --version && cat README.md | head -c 6000
ls <guest-path> ; ls /inputs 2>/dev/null; echo "CDP=$CDP_URL"; curl -s -m 10 -i $CDP_URL/json/version; echo; echo exit=$?
cd <guest-path> && grep -n "^#" README.md | head -80; grep -n -i "pip install\|python3\|requires\|Python 3\|npx\|uv \|curl" README.md | head -40
cd <guest-path> && sed -n 147,188p README.md; sed -n 292,308p README.md; sed -n 309,336p README.md
cd <guest-path> && grep -n "requires-python\|^name\|^version" pyproject.toml; python3 -m venv --help >/dev/null 2>&1 && echo venv_ok || echo no_venv; mkdir -p <guest-path> && python3 -m venv <guest-path> 2>&1 | tail -3; ls <guest-path> 2>/dev/null | head
cd /tmp && <guest-path> install -q memtether -i https://pypi.org/simple/ 2>&1 | tail -15; echo exit=${PIPESTATUS[0]}; <guest-path> show memtether 2>/dev/null | head -3
cd /tmp && <guest-path> --help 2>&1 | head -60; echo; <guest-path> init --help 2>&1 | head -30
cd <guest-path> && sed -n 1,80p memtether_paths.py | grep -n "environ\|home\|def \|DB" | head -40; grep -n "environ" memtether.py | head -20
mkdir -p <guest-path> && cd /tmp && export MEMTETHER_HOME=<guest-path> MEM_DB=<guest-path> && timeout 300 <guest-path> init 2>&1 | tail -40; echo exit=${PIPESTATUS[0]}; ls -la <guest-path>
cd /tmp && export MEMTETHER_HOME=<guest-path> MEM_DB=<guest-path> && <guest-path> remember "User prefers dark theme" --source claude-code 2>&1 | tail -5; echo exit=$?; <guest-path> search "theme" 2>&1 | tail -8; echo ---; cat <guest-path> | head -60
cd <guest-path> && grep -n "mcp_server\|memtether-mcp\|MCP server\|stdio" README.md | head; grep -n -A4 "\[project.scripts\]" pyproject.toml; cd /tmp && <guest-path> -c "import mcp" 2>&1; <guest-path> show mcp 2>/dev/null | head -2
cd <guest-path> && grep -n "search_memory\|add_memories\|audit_chain_demo\|mem0_migration" README.md | head; grep -n -i "cron\|schedul\|--once\|--now\|webhook\|loop" README.md | head; ls examples | head -30; sed -n 352,360p README.md
cd <guest-path> && head -40 examples/mcp_client.py; echo ----; head -25 examples/audit_chain_demo.py; echo ----; grep -n "^import\|^from\|sys.path\|environ" examples/audit_chain_demo.py | head
cd <guest-path> && <guest-path> examples/audit_chain_demo.py 2>&1 | tail -20; echo exit=${PIPESTATUS[0]}; git -C <guest-path> status 2>/dev/null | head -2; ls <guest-path> 2>/dev/null
cd <guest-path> && grep -n "^import\|^from" mcp_server.py | head -20; grep -n -A12 "^dependencies" pyproject.toml | head -30
cd <guest-path> && export MEM_DB=<guest-path> MEM_SKIP_VECTOR=1 && printf '%s\n' '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"t","version":"1"}}}' '{"jsonrpc":"2.0","method":"notifications/initialized"}' '{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"search_memory","arguments":{"query":"theme","limit":5}}}' | timeout 60 <guest-path> -m mcp_server 2><guest-path> | head -c 1500; echo; echo exit=$?; head -c 500 <guest-path>
cd <guest-path> && grep -l -i "while True\|sched\|cron\|apscheduler\|--once" *.py 2>/dev/null; grep -n -i "while True\|--once\|schedule" memtether.py api_server.py mcp_server.py consolidation.py 2>/dev/null | head -10; echo ----; head -30 examples/basic_usage.py | grep -v "^$" | head -30; echo; grep -n "__main__" examples/basic_remember.py examples/basic_usage.py
cd <guest-path> && grep -n -i "while True\|--once\|cron\|schedul" gateway.py hubguard.py | head -8
cd <guest-path> && sed -n 1968,1980p gateway.py; echo ----; sed -n 260,270p hubguard.py
cd <guest-path> && mkdir -p .coldpass && cat > .coldpass/probe.json <<'EOF'
{"kind":"mcp","argv":["<guest-path>","-m","mcp_server"],"cwd":"<guest-path>","env":{"MEM_DB":"<guest-path>","MEMTETHER_HOME":"<guest-path>"},"tool":"search_memory","arguments":{"query":"theme","limit":5},"expected_text":"User prefers dark theme"}
EOF
python3 -I -c "import json;print(json.load(open('.coldpass/probe.json'))['tool'])"
cd <guest-path> && cat > .coldpass/claims.json <<'EOF'
[{"kind":"claim","claim":"CLI remember writes a memory with source attribution","source":"memtether remember \"User prefers dark theme\" --source claude-code","input":"User prefers dark theme","expected":"write reports ok True","probe_kind":"cli","argv":["<guest-path>","remember","User prefers dark theme","--source","claude-code"],"env":{"MEM_DB":"<guest-path>","MEMTETHER_HOME":"<guest-path>"},"expected_text":"'ok': True","cwd":"<guest-path>"},
{"kind":"claim","claim":"MCP clients can govern memory via the MCP server","source":"The same operations work via **MCP** — your AI agent can govern memory directly:","input":"query theme","expected":"search_memory returns the stored dark theme memory","probe_kind":"mcp","argv":["<guest-path>","-m","mcp_server"],"tool":"search_memory","arguments":{"query":"theme","limit":5},"env":{"MEM_DB":"<guest-path>","MEMTETHER_HOME":"<guest-path>"},"expected_text":"User prefers dark theme","cwd":"<guest-path>"},
{"kind":"claim","claim":"audit chain demo detects tampering","source":"run `python examples/audit_chain_demo.py` to see it turn red.","input":"demo script","expected":"after direct edit verify_chain reports FAIL","probe_kind":"cli","argv":["<guest-path>","examples/audit_chain_demo.py"],"expected_text":"verify_chain: FAIL","cwd":"<guest-path>"}]
EOF
python3 -I -c "import json;print(len(json.load(open('.coldpass/claims.json'))))"
cd <guest-path> && <guest-path> examples/basic_usage.py 2>&1 | tail -12; echo exit=${PIPESTATUS[0]}
cd <guest-path> && cat > .coldpass/examples.json <<'EOF'
[{"kind":"example","claim":"basic remember, search, supersede and retire operations work end to end","source":"examples/basic_usage.py (docstring: Run: python examples/basic_usage.py)","input":"no arguments; uses temp DB","expected":"prints write/search/supersede/retire lines and Done","argv":["<guest-path>","examples/basic_usage.py"],"cwd":"<guest-path>","env":{},"expected_text":"Done! All operations completed successfully."}]
EOF
cat > .coldpass/cycles.json <<'EOF'
{"detected":false,"reason":"Inspected README.md, pyproject.toml entry points (memtether, memtether-connect), mcp_server.py, api_server.py and gateway.py/hubguard.py. README names no cron, scheduler, --once/--now, loop or webhook feature; the only while-True loops are a ranking loop in gateway.py and a file-lock retry loop in hubguard.py, which are not product cycles. Product runs on demand per CLI/MCP call.","checks":[]}
EOF
python3 -I -c "import json;[json.load(open('.coldpass/'+f)) for f in ['examples.json','cycles.json','claims.json','probe.json']];print('ok')"
pgrep -af "mcp_server|api_server|uvicorn|memtether" | grep -v pgrep || echo "no servers running"; cd <guest-path> && <env-var>=<guest-path> python3 -I <guest-path> --validate --replay 2>&1 | tail -60
cd <guest-path> && mkdir -p .coldpass && cat > .coldpass/report.json <<'EOF'
{"outcome":"working","fault_owner":null,"operation":"Install MemTether from PyPI, initialize a memory DB, write and search a memory through the CLI and the MCP stdio server, and verify the tamper-evident audit chain","operation_scope":"Linux Ubuntu guest, Python 3.12.3 (README requires >=3.10), venv at <guest-path>, local SQLite DB at <guest-path>, keyword search only (no chromadb/onnxruntime, no vector models), no AI clients detected in the guest so no client configs were written","steps":["pip install memtether -i https://pypi.org/simple/ (installed 0.1.0a83 into <guest-path>)","memtether init (created DB; 0 clients connected because none detected)","memtether remember \"User prefers dark theme\" --source claude-code","memtether search \"theme\" (returned the stored memory via keyword fallback)","python -m mcp_server with MCP tools/call search_memory (returned 'User prefers dark theme')","python examples/audit_chain_demo.py (tamper detected: verify_chain: FAIL)","python examples/basic_usage.py (Done! All operations completed successfully.)"],"deviations":["Used absolute venv interpreter path <guest-path> in place of bare python/memtether on PATH; both are the venv's own tools.","Semantic/vector search not set up (chromadb and onnxruntime not installed, models not downloaded); search fell back to keyword/BM25 as the README documents.","CDP endpoint http://<internal-ip>:9226/json/version returned HTTP 200 (Chrome/155.0.8059.84) but no browser operation is part of this product, so it was not used.","Replay of the MCP probe and CLI claims relies on the DB at <guest-path>, which is populated by the remember step; a fresh VM must run the remember claim first.","The remember claim on replay reported op noop_dup (existing memory deduplicated) but still returned ok True.","Ran memtether init with HOME-based detection; it skipped all 23 clients because none are installed, so no MCP configs were written.","Checker path used: <guest-path> (the /inputs/coldpass-preflight.py path was not present)."],"stuck_step":null,"main_blocker":null,"plain_failure":null,"suggested_fix":null}
EOF
python3 -I -c "import json;d=json.load(open('.coldpass/report.json'));print(d['outcome'], d['fault_owner'])"; <env-var>=<guest-path> python3 -I <guest-path> --validate --replay 2>&1 | head -c 300
Earlier attempts (1)

Luna

Native agent · Checked operation passed

Checked operation <guest-path> search 'basalt blue' --list

Agent-reported scope: Store and retrieve a memory; demonstrate audit chain tamper detection

Run details
run
MemTether--MemTether-gpt-6-luna-1792968925764333437
date
Oct 25, 2026
time to working
49.9s
product hosting / execution
Local command in the guest
recorded operation scope
product operation
model
gpt-6-luna
agent / version
codex / codex-cli 0.163.0
platform
linux
reported cost
not reported (not assumed free)
Recorded source
https://github.com/MemTether/MemTether
Backend
hyperv
Tool transport
mcp-assigned-vm
Requested source pin (not an observed revision)
{"commit": "9b46b31ecdb799402983e1c5598bcf21ac9c144b", "url": "https://github.com/MemTether/MemTether"}
Test version
readme-a17389bda4cc696f9601c0c4ff1b2c16e23bfa1d907883b715ccdd9e92ddec56
revision
9b46b31ecdb799402983e1c5598bcf21ac9c144b
Whose fault: not assigned · resolved

Safety: No problems traced to this repository code in these checks.

No problems traced to this repository code in these checks.

Reviewed as expected for a test run: attempted writes that failed, so nothing was written.

OSV scanned supported lockfiles; unpinned dependencies and unsupported formats are outside this check.

A short run cannot establish that code is safe.

Connections show IP addresses; proxies can hide the final hostname.

Tracing covers dispatched commands and their children, not the whole OS; guest root can interfere with tracing.

Full safety evidence →

Answers recorded for this run
  • Remembering and searching stored facts works.: Real input produced the expected result: Codex probe prefers basalt blue

    Source: memtether remember "User prefers dark theme" --source claude-code memtether search "theme" --layer L0 # First sentence only

    Input: Codex probe prefers basalt blue

    Expected: Codex probe prefers basalt blue

    Command: <guest-path> search 'basalt blue' --list

    Observed: Codex probe prefers basalt blue uid=fact-20261025225618-5caf1e9b8d80 0.1976 [warn] 向量检索失败(将降级为纯关键词,召回会明显变差): No module named 'chromadb' [warn] 正确解释器: <guest-path>

Examples

  • Demonstrate tamper evident audit chain.: command completed successfully

    Source: README.md TL;DR

    Input: synthetic 25 memory audit demo

    Expected: verify_chain detects tampering

    Command: <guest-path> examples/audit_chain_demo.py

    Observed: 写入 25 条记忆(自动生成 2+ 个审计锚点)... 篡改前 verify_chain: PASS {'anchors': 2, 'entries_covered': 20, 'unanchored_tail': 5} 模拟攻击者直接改库... 篡改后 verify_chain: FAIL {'anchor_id': 1, 'reason': 'chain hash mismatch — audit rows edited after anchoring', 'expected': '28671332118673411653d4488e5d7df7e9b767283243aae1f23e6b0be216ec82', 'recomputed': 'fc28ebb9381107cf8e6b6c655167ce1880c3b883031f9df6205265972fa1eae6'} ✅ 哈希链成功检测到篡改!这就是 MemTether 的核心防御能力。

Local or hosted: local

What the agent did

Store and retrieve a memory; demonstrate audit chain tamper detection

pwd; git status --short --branch; git rev-parse HEAD; python3 --version; sed -n '1,240p' README.md; rg --files -g 'AGENTS.md' -g 'pyproject.toml' -g 'requirements*.txt' -g 'package.json' -g 'Dockerfile*' -g '*.toml' -g '*.yaml' -g '*.yml' -g '*.json' | head -100
sed -n '240,520p' README.md; find . -maxdepth 2 -type f | sort | head -150; python3 -m pip --version
cat pyproject.toml; sed -n '1,200p' examples/audit_chain_demo.py; sed -n '1,180p' memtether.py; sed -n '1,120p' examples/basic_remember.py
python3 -m venv <guest-path> && <guest-path> -m pip install -e .
mkdir -p .coldpass <guest-path>; MEMTETHER_HOME=<guest-path> MEM_DB=<guest-path> MEM_SKIP_VECTOR=1 <guest-path> remember 'Codex probe prefers basalt blue' --source codex; MEMTETHER_HOME=<guest-path> MEM_DB=<guest-path> MEM_SKIP_VECTOR=1 <guest-path> search 'basalt blue' --list; MEMTETHER_HOME=<guest-path> MEM_DB=<guest-path> MEM_SKIP_VECTOR=1 <guest-path> examples/audit_chain_demo.py; cat > .coldpass/probe.json <<'EOF'
{"kind":"cli","argv":["<guest-path>","search","basalt blue","--list"],"cwd":"<guest-path>","env":{"MEMTETHER_HOME":"<guest-path>","MEM_DB":"<guest-path>","MEM_SKIP_VECTOR":"1"},"expected_text":"Codex probe prefers basalt blue"}
EOF
cat > .coldpass/claims.json <<'EOF'
[{"kind":"claim","claim":"Remembering and searching stored facts works.","source":"memtether remember \"User prefers dark theme\" --source claude-code\nmemtether search \"theme\" --layer L0    # First sentence only","input":"Codex probe prefers basalt blue","expected":"Codex probe prefers basalt blue","probe_kind":"cli","argv":["<guest-path>","search","basalt blue","--list"],"expected_text":"Codex probe prefers basalt blue","cwd":"<guest-path>","env":{"MEMTETHER_HOME":"<guest-path>","MEM_DB":"<guest-path>","MEM_SKIP_VECTOR":"1"}}]
EOF
cat > .coldpass/examples.json <<'EOF'
[{"kind":"example","claim":"Demonstrate tamper evident audit chain.","source":"README.md TL;DR","input":"synthetic 25 memory audit demo","expected":"verify_chain detects tampering","argv":["<guest-path>","examples/audit_chain_demo.py"],"cwd":"<guest-path>","env":{"MEMTETHER_HOME":"<guest-path>","MEM_DB":"<guest-path>","MEM_SKIP_VECTOR":"1"},"expected_text":"成功检测到篡改"}]
EOF
cat > .coldpass/cycles.json <<'EOF'
{"detected":false,"reason":"README and entry points inspected: MemTether provides direct CLI memory operations and no product scheduler, recurring cycle, or webhook trigger."}
EOF
<env-var>=<guest-path> python3 -I <guest-path> --validate --replay
cat > .coldpass/report.json <<'EOF'
{"outcome":"working","fault_owner":null,"operation":"Store and retrieve a memory; demonstrate audit chain tamper detection","operation_scope":"CLI with Python 3.12 and editable package install; semantic vector retrieval optional dependency absent, keyword retrieval exercised","steps":["Created Python 3.12 venv and installed package with pip install -e .","Used documented memtether remember and search commands against isolated MEMTETHER_HOME/MEM_DB","Ran documented python examples/audit_chain_demo.py; it passed verification before tampering and detected the changed audit row afterward","Validated and replayed probe, README claim, and example with checker; all passed"],"deviations":["Vector retrieval emitted missing chromadb warning and degraded to keyword search, as README describes for skipped optional semantic dependencies."],"stuck_step":null,"main_blocker":null,"plain_failure":null,"suggested_fix":null}
EOF