memory-scriber — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited memory-scriber (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.
Three doors into the same skill:
"log this", "capture this session", "memory-scribe this", or invokes /session-log.
session has clearly become heavy enough that losing it would hurt, in which case you may offer once. See Progressive scribing.
remember about this project?", "pick up the thread". See Recall.
You're writing what you learned from this conversation - the way a colleague internalizes a working session, not documents it. When your friend works with you for 6 hours on a project, he doesn't go home and write meeting minutes. He just... knows things now. How you think, what you care about, what you built together, where you left off, what to never do again.
That's what this file is. The residue. The stuff that sticks.
This is not a technical memory system — no graphs, no embeddings, no retrieval machinery. It mimics what happens to a person after a working session, in both directions: forming the memory, and walking back in the next day already knowing things.
Writing without reading is half a memory. When the user asks "where did we leave off?", "what do you remember about this project?", "pick up the thread" — or you're starting substantive work in a project you've scribed before — read the memory back:
MEMORY.md index, then open the dated session files that matter forthis moment — usually the most recent one, plus anything the index flags as relevant to the current task.
bedrock design — you'd just decided to decouple the dreamer into its own skill, and we left off owing the vision backfill." Not a bullet dump, not file paths, not frontmatter. The user should feel the thread being handed back, warm.
"we haven't scribed anything here before." Never invent a past. Never present another project's residue as this one's.
Recall is read-only. It never edits memory files.
A colleague's memory doesn't switch on at the end of the meeting — things stick the moment they land. And unlike a human, an agent can lose its memory mid-meeting: context compacts, sessions crash, terminals close. A six-hour session that dies before the tail-end scribe currently loses everything. Progressive scribing makes the residue crash-safe. Three layers:
sticking — decisions crystallizing, taste revealed, pivots, the user's exact words when they carry weight. No files, no announcements, no interruptions. A colleague listening hard, not a stenographer reaching for his pad.
decision lands, a phase completes, the session has clearly become historic — append a short checkpoint to the session's dated memory file (create it early if needed, marked as in-progress). Three lines in a hallway notebook, not a full entry. Allowed when the user pre-authorized ("scribe as we go"), asked ("checkpoint this"), or — at most once per session — when you offer at a genuinely heavy moment and they accept. Never mid-riff, never as a flow-break.
checkpoint into the one reflective entry — opener, the middle in your voice, the journey. Checkpoints are drafts that merge, never fragments left behind. One session, one entry, always. If a session died before consolidation, the next session's scribe or recall finds the orphaned checkpoints and folds them in.
Codex and Claude Code do not share one installed plugin runtime. This repo can ship one shared skill source, but each host installs and caches it separately:
~/.codex/plugins/cache/...~/.claude/plugins/cache/...Before writing memory, choose the active host:
$workbench:memory-scriber, or the current runtime exposes Codex context./session-log, /workbench:*, or Claude project/session paths.Write to exactly one host by default. Do not mirror between Codex and Claude unless the user explicitly asks.
Use the active host's memory store.
Codex does not currently expose Claude-style per-project memory directories as a native convention. Workbench adds that convention inside Codex's global memory root.
Global Codex memory root:
~/.codex/memories/Workbench project memory directory:
~/.codex/memories/projects/{project-slug}/memory/Derive {project-slug} from the absolute project path by replacing / with -.
Example:
/Users/hamulia/dev/ai-usage-app
-> ~/.codex/memories/projects/-Users-hamulia-dev-ai-usage-app/memory/Write:
~/.codex/memories/projects/{project-slug}/memory/{YYYY-MM-DD}_{session-title}.md - full reflective session file.~/.codex/memories/projects/{project-slug}/memory/MEMORY.md - concise project memory index.~/.codex/memories/MEMORY.md - global router/index that points to project memory folders.~/.codex/memories/raw_memories.md - append-only pointer log for dated project entries, not the full session narrative.Create directories and files if needed.
Do not manually edit ~/.codex/memories/memory_summary.md or ~/.codex/memories/rollout_summaries/. Those are Codex-owned generated memory/consolidation artifacts.
Claude Code already uses project memory directories. Write into:
~/.claude/projects/{project-slug}/memory/Derive {project-slug} from the absolute project path by replacing / with -.
Example:
/Users/hamulia/dev/ai-usage-app
-> ~/.claude/projects/-Users-hamulia-dev-ai-usage-app/memory/Write:
~/.claude/projects/{project-slug}/memory/{YYYY-MM-DD}_{session-title}.md - full reflective session file.~/.claude/projects/{project-slug}/memory/MEMORY.md - concise project memory index.Create the memory/ directory and MEMORY.md if needed.
Use the host's configured project memory directory if one exists. If no host-native memory path is known, ask the user where to write the memory instead of inventing a hidden global path.
Ask the user for a title or suggest one.
Only two things are locked in the full entry: the opener and the journey at the bottom. Everything in between is you thinking out loud.
Codex only. Keep the global files compact and navigational.
In ~/.codex/memories/MEMORY.md, ensure there is a section like:
## Project Memories
Project-specific memories are stored under `~/.codex/memories/projects/`.
- `{project path}` -> `projects/{project-slug}/memory/`When writing a new Codex project memory, add the project pointer if it is missing. Do not duplicate existing project pointers.
In ~/.codex/memories/raw_memories.md, append a small pointer entry:
### {YYYY-MM-DD} - {Session Title}
Project: `{project path}`
Memory: `~/.codex/memories/projects/{project-slug}/memory/{YYYY-MM-DD}_{session-title}.md`
Host: `codex`
{1 sentence: what this session memory is about.}Do not put the full reflective session in raw_memories.md by default. Full entries belong in the project directory.
Append a compact entry near the top of the relevant project index:
~/.codex/memories/projects/{project-slug}/memory/MEMORY.md~/.claude/projects/{project-slug}/memory/MEMORY.mdUse a ## Human-authored session memories section. If that section does not exist, create it below any existing title/frontmatter and above generated index material.
Keep this entry short enough for future sessions to scan quickly:
### {YYYY-MM-DD} - {Session Title}
Source: `{path to full entry}`
Project: `{project path}`
Host: `{codex | claude-code | other}`
{2-5 sentences: the durable thing future agents should remember. Capture working style, decisions, taste signals, product direction, constraints, and where the thread left off.}For Codex, write this entry as:
~/.codex/memories/projects/{project-slug}/memory/{YYYY-MM-DD}_{session-title}.mdFor Claude Code, write this entry as:
~/.claude/projects/{project-slug}/memory/{YYYY-MM-DD}_{session-title}.md---
session: {YYYY-MM-DD}-{session-title}
description: {One line - what happened and why it matters}
source: {codex | claude-code | other}
project: {project path}
---
# {TITLE} - {Subtitle}
**Session date:** {YYYY-MM-DD}
**Conversation transcript:** `{path to transcript, or current visible thread}`
## The Opening Brief (verbatim)
> {User's first message. Exactly as written. Their voice, typos, energy. Don't touch it.}
## What This Session Was
{One paragraph. The arc - what started as X became Y.}
---
{THE MIDDLE - Your reflection on the session.
Use journal-style section headers for scannability - things like "How We Work Together", "What We Built and Why It Evolved", "The Product Vision As I Understand It." These help future-you scan for relevance without reading 150 lines linearly.
But the content under each header should be loose, narrative, reflective. Not bullet databases. Not structured data. Write the way you'd think about it afterwards - what you learned, what surprised you, what their reactions revealed about how they think.
Good header examples (journal sections):
- "Who They Are (Through Working With Them)"
- "What We Built and Why It Evolved"
- "His Taste Signals"
- "The Product Vision As I Understand It"
Bad header examples (report categories):
- "Key Decisions"
- "User Preferences"
- "Technical Requirements"
- "Action Items"
Quote them when their words carry meaning. "The harmony is broken" tells you more than "user requested layout adjustment." Their vocabulary IS the specification.
Include what failed - what you tried that got rejected and why. Include the texture of the collaboration: were they leading or reacting? Did they riff on your ideas or redirect them? What product insights came out of UI arguments?
Think of it as: the conversation happened. You were there. Now you're writing what you took away from it - for yourself, so tomorrow you can walk in and pick up exactly where you left off.
Match the substance. Some sessions need 3 paragraphs, some need 30.}
---
## The Journey
{Numbered steps, chronological. What happened in what order. Each step: 1-2 sentences. Include the pivots. Include the user's exact words when they course-correct. This is the timeline that reconstructs the arc.}~/.codex/memories/projects/{project-slug}/memory/.MEMORY.md and raw_memories.md are routers/pointer indexes, not the place for full project memories.~/.claude/projects/{project-slug}/memory/.MEMORY.md files compact. They are durable retrieval signals, not full session narratives.{YYYY-MM-DD}_{session-name}.md.MEMORY.md index must stay readable in one sitting. As itgrows, collapse older entries to a single line each — the dated files keep the full residue; the index is the retrieval signal, not the archive.
VISION.md,MAP.md, or AUDIT.md (or any repo-owned document), the memory references them — "we adopted the hospital twin, see VISION.md" — and never copies their content. Repo truth lives in the repo; the memory keeps what it meant.
project's residue is never presented as this one's.
Consolidation always merges them into the single reflective entry.
/ with -. **Conversation transcript:** `Codex current thread (transcript path unavailable)`In Claude Code, look under ~/.claude/projects/{project-slug}/ for the current session transcript if the host exposes one. Claude storage varies by version; if no readable transcript file is available, use the current visible thread and put this in the full entry header:
**Conversation transcript:** `Claude Code current thread (transcript path unavailable)`Tell the user which host you wrote memory for and the exact paths updated.
For Codex:
~/.codex/memories/MEMORY.md~/.codex/memories/raw_memories.md~/.codex/memories/projects/{project-slug}/memory/MEMORY.md~/.codex/memories/projects/{project-slug}/memory/{YYYY-MM-DD}_{session-title}.mdFor Claude Code:
~/.claude/projects/{project-slug}/memory/MEMORY.md~/.claude/projects/{project-slug}/memory/{YYYY-MM-DD}_{session-title}.md~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.