dump — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited dump (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.
Write the current session's non-derivable state to the project's auto-memory directory so a future session can resume cleanly. Idempotent: can run mid-session, at a natural checkpoint, or at end-of-session.
git log, current code, or AGENTS.md / PROJECT.md do not belong in memory.~/.mindfunnel/AGENTS.md (reached via ~/.claude/CLAUDE.md); the per-project ./AGENTS.md is a small project-scoped stub owned by the project — don't treat them as the same file.date -I if uncertain.ledger.jsonl (Step 5b); the narrative stays in Markdown. Never double-log one as the other — cross-reference.Use the auto-memory directory Claude Code names in its system prompt. Without one, derive it: ~/.claude/projects/<slug>/memory/, where <slug> is the repository root — shared by its subdirectories and worktrees; $PWD outside git — with every non-alphanumeric character replaced by -. An autoMemoryDirectory setting or CLAUDE_CODE_PROJECT_DIR_NAME overrides the derivation.
bash -c 'g=$(git rev-parse --path-format=absolute --git-common-dir 2>/dev/null) && r=$(dirname "$g") || r=$PWD; echo ~/.claude/projects/$(printf %s "$r" | sed "s/[^A-Za-z0-9]/-/g")/memory'The directory is usually already created by Claude Code. If not, create it before writing.
Confirm AGENTS.md and PROJECT.md exist in the project root (set up by /mf:prime; a regular file or a symlink both count). If either is missing:
/mf:prime from the project root.Read <memory_dir>/MEMORY.md (the index) and the most recently modified files:
ls -lt <memory_dir>/*.md 2>/dev/null | head -10Decide for each signal you want to log: does it belong in an existing file (preferred) or a new file (rare)?
Identify, in priority order:
Skip anything derivable from git log, the current code, or the primed config files.
Every memory file has YAML frontmatter with name, description, type. The four types:
Filename convention: <type>_<topic>.md (e.g. project_state.md, feedback_offline_vs_online.md, reference_wandb.md); a large results dossier of type project may be named results_<topic>.md.
Alongside the narrative Markdown, append atomic claims / decisions / learnings to the append-only ledger. This is where trust and provenance live, so a future session can tell a measured result from an inferred guess — and check whether it has since gone stale.
The full schema, trust ladder, and semantics are in ${CLAUDE_PLUGIN_ROOT}/references/ledger.md — read it if you have not this session. In short, each line is one JSON object:
{
"id": "<unique>",
"ts": "<ISO-8601 UTC>",
"kind": "claim|decision|learning",
"status": "guaranteed|observed|given|user-inferred|agent-inferred|opinion",
"text": "<one sentence>",
"sources": ["<path>", "<path@sha>", "<run-id>"],
"supersedes": "<id?>",
"key": "<optional>"
}Rules:
supersedes names the old id.guaranteed > observed > given > user-inferred > agent-inferred; opinion for a taste call with no truth claim. Do not inflate an inference to observed.path@<sha>, with <sha> = git rev-parse HEAD at dump time, when the claim is tied to specific code), run-ids, or URLs in sources. Omit for a bare preference.Append with a shell heredoc (the memory dir from Step 1; timestamp via date -u +%Y-%m-%dT%H:%M:%SZ):
LEDGER="<memory dir from Step 1>/ledger.jsonl"
cat >> "$LEDGER" <<'JSON'
{"id":"20260101-1","ts":"2026-01-01T00:00:00Z","kind":"claim","status":"observed","text":"...","sources":["..."]}
JSONCorrect what has gone stale: when an entry's source changed — including drift a /mf:spinup brief flagged this session — append a corrected entry that supersedes it.
If there are no atomic assertions worth pinning this dump, skip — the ledger is not a log of everything.
Update <memory_dir>/MEMORY.md with one line per entry:
- [Title](file.md) — one-line hook, under ~150 characters.MEMORY.md has no frontmatter — it's an index, not a memory. For any file you updated or created, re-word its hook if the content shifted substantively.
Before writing: for any file you're about to modify, read it first to preserve load-bearing context. Duplication is a smell — if the same fact appears in two files, pick one canonical home and cross-reference.
If the session surfaced a general guideline or preference worth propagating to every future session on any project, propose an edit to one of the user-global files:
~/.mindfunnel/SOUL.md — user traits, collaboration style, communication preferences.~/.mindfunnel/AGENTS.md — general, agent-neutral engineering guidelines. This is the maintainer's user-global AGENTS.md, auto-loaded via ~/.claude/CLAUDE.md and ~/.codex/AGENTS.md. It is not the per-project ./AGENTS.md (which is a small project-scoped stub owned by the project).~/.mindfunnel/USER.md — per-machine user preferences: shell, Python defaults, formatter paths, multi-agent hook bridges.Guardrails:
./AGENTS.md or to the symlink aliases (~/.claude/CLAUDE.md, ~/.codex/AGENTS.md). The user-global content has one canonical home.If in doubt, skip. User-global file churn creates noise.
End with a concise summary:
Memory dir: <path>
Updated:
- <file> — <one-line reason>
Created:
- <file> — <one-line reason>
Index (MEMORY.md): refreshed | unchanged
Ledger (ledger.jsonl): +N entries | unchanged
Proposed SOUL.md / AGENTS.md / USER.md edits: none | <one-line summary, pending approval>If nothing was worth logging, say "no new signal; memory is current" and do nothing.
User says: "Log everything, the sweep results just came in."
Actions:
MEMORY.md exists; read it.project_state.md and results_*.md files.project_state.md with the new "where we are + next action".results_<experiment>_<date>.md if the sweep is a major dossier; otherwise append to an existing results file.MEMORY.md one-liner for each touched file.Result: One report block listing what was updated, memory ready for the next session.
User says: "Dump before I close."
Actions:
User says: "Log everything. That lesson about always verifying memory claims before citing them is something I want to keep."
Actions:
project_state.md and any results_*.md as usual.~/.mindfunnel/AGENTS.md under "Handling Existing Code" or "Autonomy and Asking".Symptom: Files land at an unexpected location, or Claude Code complains about an unknown memory dir.
Cause: An autoMemoryDirectory setting or CLAUDE_CODE_PROJECT_DIR_NAME moved the directory, or Step 1's derivation missed a case (a git submodule, git older than 2.31).
Solution: Check with ls ~/.claude/projects/ — the current project's dir should appear. If absent, Claude Code hasn't indexed this project yet; create the dir manually with mkdir -p ~/.claude/projects/<slug>/memory and Claude Code will adopt it.
Symptom: Two memory files disagree on a number or decision.
Cause: A previous dump duplicated content instead of cross-referencing.
Solution: Pick the newer or more specific statement as canonical. Edit the other file to cross-reference the canonical one (See [results_foo.md](results_foo.md) for current numbers.). Note the consolidation in the final dump report.
Symptom: git log of the memory dir shows many small updates, many of them trivial.
Cause: The empty-dump guard is being skipped.
Solution: Skip the dump when the conversation contains only tool noise / small Q&A. Say "no new signal; memory is current" and do nothing. Memory is not a commit log.
Symptom: The user said "no" to a proposed general-guideline edit.
Cause: The insight wasn't actually general, or was contradicted by other contexts.
Solution: Accept the rejection, do not re-propose in the same session, and move the insight into a *project-level `feedback_.md`** instead if it's still useful at the project scope.
project_state.md under a "Next actions" section, tied to a concrete command or decision.~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.