test-memory — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited test-memory (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Run /test-memory to start a guided testing session. Walk through each phase, execute tests, and track results.
Install memory-mcp from the marketplace:
# Add the marketplace
/plugin marketplace add michael-denyer/memory-mcp
# Install the plugin
/plugin install memory-mcp@michael-denyer/memory-mcpOr install directly:
/plugin install github:michael-denyer/memory-mcp1.1 Remember - Store test memories:
remember("Test: FastAPI with async endpoints", memory_type="project", tags=["test", "tech-stack"])
remember("Test: Always use uv run pytest -v", memory_type="pattern", tags=["test", "commands"])
remember("Test: API rate limit 100 req/min", memory_type="reference", tags=["test", "api"])Record the returned IDs for later tests.
1.2 Recall - Semantic search (use different phrasings):
Verify confidence levels returned.
1.3 Recall Modes - Compare precision vs exploratory:
recall("testing", mode="precision") → fewer, higher-confidencerecall("testing", mode="exploratory") → more results1.4 Recall by Tag:
recall_by_tag("test") → should return all test memories1.5 Forget - Delete one test memory and verify it's gone.
2.1 Manual Promotion:
promote(memory_id) one of the test memorieshot_cache_status() → verify it appears2.2 Manual Demotion:
demote(memory_id)2.3 Pin/Unpin:
pin(memory_id) → pinned_count increasesunpin(memory_id) → pinned_count decreases2.4 Auto-Promotion (optional - requires multiple recalls):
3.1 Create Linked Memories:
remember("Test: Database uses PostgreSQL") → ID: A
remember("Test: pgvector for embeddings") → ID: B
remember("Test: Vector search needs pgvector") → ID: C
link_memories(A, B, "relates_to")
link_memories(B, C, "depends_on")3.2 Traverse Graph:
get_related_memories(B) → should show A and Cget_related_memories(A, direction="outgoing") → should show B3.3 Multi-Hop Recall:
recall("PostgreSQL", expand_relations=true) → should include related memories3.4 Unlink:
unlink_memories(A, B)4.1 Validate:
validate_memory(id, reason="used_correctly")4.2 Invalidate:
invalidate_memory(id, reason="outdated", note="Testing invalidation")4.3 Trust History:
get_trust_history(memory_id) → shows all changes5.1 Create Conflicting Memories:
remember("Test: Timeout is 30 seconds") → ID: X
remember("Test: Timeout is 60 seconds") → ID: Y5.2 Find & Mark:
find_contradictions(X) → should suggest Ymark_contradiction(X, Y)get_contradictions() → pair listed5.3 Resolve:
resolve_contradiction(X, Y, keep_id=X, resolution="supersedes")6.1 Check Sessions:
get_sessions(limit=5)6.2 Episodic Memories:
remember("Test: Debugging auth today", memory_type="episodic")
remember("Test: Found token bug", memory_type="episodic")6.3 Session Topic:
set_session_topic(session_id, "Testing session")6.4 Summarize Session:
summarize_session(session_id) → structured summary with:end_session() to review what will be promoted6.5 End Session (optional - ends current session):
end_session(session_id, promote_top=true)7.1 Log Output:
log_output("import pandas as pd")
log_output("import numpy as np")
log_output("uv run pytest -v")7.2 Run Mining:
run_mining(hours=1)mining_status()7.3 Review Candidates:
review_candidates()7.4 Approve/Reject (if candidates exist):
approve_candidate(id) or reject_candidate(id)8.1 Seed from Text:
seed_from_text("- Item one\n- Item two\n- Item three", memory_type="project")Verify 3 memories created.
8.2 Seed from File (creates temp file):
seed_from_file(file_path, memory_type="reference")8.3 Bootstrap Project:
bootstrap_project(root_path=".", promote_to_hot=false)9.1 Check Status:
predictive_cache_status() → shows if enabled9.2 Access Patterns:
access_patterns(limit=5) → learned patterns9.3 Predict Next (needs existing access history):
predict_next(memory_id) → predicted memories9.4 Warm Cache:
warm_cache(memory_id) → pre-promote predicted10.1 Mark Memory Used:
mark_memory_used(memory_id, feedback="helpful")10.2 Retrieval Stats:
retrieval_quality_stats() → global statsretrieval_quality_stats(memory_id=X) → per-memory11.1 Stats & Observability:
memory_stats()hot_cache_status()metrics_status()11.2 Database Info:
db_info() → schema version, sizeembedding_info() → provider, cache info11.3 Maintenance Operations:
db_maintenance()validate_embeddings()run_cleanup() → comprehensive cleanup11.4 Consolidation:
preview_consolidation() → dry runrun_consolidation(dry_run=true) → previewrun_consolidation(dry_run=false) → actual merge (careful!)11.5 Audit History:
audit_history(limit=10)11.6 Vector Rebuild (use with caution - rebuilds all embeddings):
db_rebuild_vectors(batch_size=100) → re-embed all memories12.1 Hot Cache Resource: Read memory://hot-cache directly (auto-injected to Claude):
hot_cache_status() items12.2 Working Set Resource: Read memory://working-set directly:
12.3 Project Context Resource: Read memory://project-context directly:
13.1 List Memories:
list_memories(limit=5) → paginated browselist_memories(memory_type="pattern") → filteredlist_memories(offset=5, limit=5) → pagination13.2 Recall with Fallback:
recall_with_fallback("query") → tries patterns → project → all13.3 Relationship Stats:
relationship_stats() → knowledge graph overview13.4 Session Details:
get_session(session_id) → specific sessionget_session_memories(session_id) → memories from sessioncross_session_patterns() → patterns across sessions14.1 Invalid IDs:
forget(memory_id=999999) → should return error/not foundpromote(memory_id=-1) → should handle gracefullyget_related_memories(memory_id=0) → should not crash14.2 Recall Edge Cases:
recall("", mode="precision") → empty query handlingrecall("xyz", threshold=0.99) → very high threshold, likely no resultsrecall("test", limit=0) → zero limit edge caserecall("test", limit=1000) → large limit handling14.3 Pagination Boundaries:
list_memories(offset=99999, limit=10) → beyond data rangelist_memories(offset=-1) → negative offsetaudit_history(limit=0) → zero limit14.4 Link/Unlink Errors:
link_memories(id, id, "relates_to") → self-linklink_memories(999, 888, "relates_to") → non-existent IDsunlink_memories(id_a, id_b) → when no link exists14.5 Trust Boundaries:
validate_memory(id, boost=10.0) → extreme boost (should cap at 1.0)invalidate_memory(id, penalty=10.0) → extreme penalty (should floor at 0.0)14.6 Session Errors:
get_session("nonexistent-session-id") → invalid sessionend_session("bad-id") → non-existent session14.7 Mining Edge Cases:
run_mining(hours=0) → zero hoursapprove_candidate(pattern_id=999) → non-existent candidateAfter testing, clean up test data:
forget() all memories tagged with "test"recall_by_tag("test") to find them first16.1 Run Compact: After completing all tests, prompt the user to run /compact to:
Note: /compact is a user-initiated command and cannot be run programmatically by the assistant.
Track results as you go:
| Phase | Test | Status | Notes |
|---|---|---|---|
| 1.1 | Remember | ⬜ | IDs: |
| 1.2 | Recall | ⬜ | |
| 1.3 | Recall Modes | ⬜ | |
| 1.4 | Recall by Tag | ⬜ | |
| 1.5 | Forget | ⬜ | |
| 2.1 | Promotion | ⬜ | |
| 2.2 | Demotion | ⬜ | |
| 2.3 | Pin/Unpin | ⬜ | |
| 3.1 | Link Memories | ⬜ | IDs: A=, B=, C= |
| 3.2 | Get Related | ⬜ | |
| 3.3 | Multi-Hop | ⬜ | |
| 3.4 | Unlink | ⬜ | |
| 4.1 | Validate | ⬜ | |
| 4.2 | Invalidate | ⬜ | |
| 4.3 | Trust History | ⬜ | |
| 5.1 | Contradictions | ⬜ | IDs: X=, Y= |
| 5.2 | Mark/Find | ⬜ | |
| 5.3 | Resolve | ⬜ | |
| 6.1 | Sessions | ⬜ | |
| 6.2 | Episodic | ⬜ | |
| 6.3 | Session Topic | ⬜ | |
| 6.4 | Summarize Session | ⬜ | |
| 7.1 | Log Output | ⬜ | |
| 7.2 | Run Mining | ⬜ | |
| 7.3 | Review | ⬜ | |
| 8.1 | Seed from Text | ⬜ | |
| 8.2 | Seed from File | ⬜ | |
| 8.3 | Bootstrap | ⬜ | |
| 9.1 | Predictive Status | ⬜ | |
| 9.2 | Access Patterns | ⬜ | |
| 9.3 | Predict Next | ⬜ | |
| 9.4 | Warm Cache | ⬜ | |
| 10.1 | Mark Used | ⬜ | |
| 10.2 | Retrieval Stats | ⬜ | |
| 11.1 | Stats | ⬜ | |
| 11.2 | DB Info | ⬜ | |
| 11.3 | Maintenance | ⬜ | |
| 11.4 | Consolidation | ⬜ | |
| 11.5 | Audit | ⬜ | |
| 11.6 | Vector Rebuild | ⬜ | |
| 12.1 | Hot Cache Resource | ⬜ | |
| 12.2 | Working Set Resource | ⬜ | |
| 12.3 | Project Context Resource | ⬜ | |
| 13.1 | List Memories | ⬜ | |
| 13.2 | Recall Fallback | ⬜ | |
| 13.3 | Relationship Stats | ⬜ | |
| 13.4 | Session Details | ⬜ | |
| 14.1 | Invalid IDs | ⬜ | |
| 14.2 | Recall Edge Cases | ⬜ | |
| 14.3 | Pagination Boundaries | ⬜ | |
| 14.4 | Link/Unlink Errors | ⬜ | |
| 14.5 | Trust Boundaries | ⬜ | |
| 14.6 | Session Errors | ⬜ | |
| 14.7 | Mining Edge Cases | ⬜ | |
| 15 | Cleanup | ⬜ | |
| 16.1 | Compact Conversation | ⬜ |
For a 2-minute sanity check:
remember("Smoke test", tags=["smoke"])recall("smoke")promote(id) → hot_cache_status()demote(id) → forget(id)memory_stats()When running this skill:
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.