Chapter 23. Where Memory Lives When the Session Ends
What a session figured out goes in a file outside the session: for me that is the Codex Claude Memory Vault, a directory in Google Drive that either machine can reach, holding handoffs, decisions, and maps of the estate. An agent reads it top-down before it touches a repo, and writes a dated handoff back on the way out. A session dies with its context window. The commits survive and the deploys survive, but the judgment that produced them evaporates: which fix got tried first and abandoned, why the port moved, what the next step was supposed to be. On an operation with two computers and more than one agent lineage, that judgment has to land somewhere every machine can reach, or each new session opens by re-deriving the last one. The vault is the spine that runs between machines when everything else about a session is gone.
The vault is also where the hierarchy of truth from chapter 6 takes its operational test. A memory system that documents itself is subject to the same drift as any other artifact, and mine has already documented itself wrong.
The two vaults: Codex Claude Memory Vault and Suede-Vault
I run two durable memory homes, one in Google Drive for agent
continuity and one at ~/code/Suede-Vault for company source
of truth, and mixing them up wastes real time.
| Codex Claude Memory Vault | Suede-Vault | |
|---|---|---|
| Where | Google Drive:
.../My Drive/Codex Claude Memory Vault/ |
~/code/Suede-Vault |
| Holds | Handoffs, decisions, estate maps | Brand, master prompts, punchlists, memory mirror, dated session recaps, press, projects |
| Syncs via | Drive streaming mount | git, remote JasonColapietro/suede-vault-backup |
| Job | Agent continuity between sessions and machines | Company source of truth |
The Drive vault is the continuity layer: what an agent reads on the way in and writes on the way out. The Suede-Vault is the Obsidian vault that doubles as the Suede Labs AI source of truth, and it travels as a git repo on the personal account. When I say “second brain,” “Obsidian,” or “SoT,” those three terms resolve to one destination: the Suede-Vault. An agent that treats them as three places goes hunting for two that don’t exist.
The two vaults even number their directories the same way with
different separators. The Drive vault writes 05_handoffs/
with underscores; the Suede-Vault writes 05-Sessions/ with
hyphens. The difference is enough to make a guessed path fail, which
matters more than it sounds like it should, because on this filesystem a
failed lookup does not mean what it means on a local disk.
What a cold agent reads first, in order
An agent starting cold on Suede work reads the vault before it
touches a repo. The read runs top-down: the start-here note, the agent
protocol, the project’s own note, the newest handoff for that project,
and any decisions that handoff links. The written order is
00_START_HERE/00_START_HERE.md, then the vault
AGENTS.md, then
06_agents/Agent_Update_Protocol.md, then the project note
under 03_projects/, then the newest handoff under
05_handoffs/, then any decisions those link under
04_decisions/.
The shape of that order carries the logic. General rules come first
because they apply to whatever the task turns out to be. The project
note narrows to one surface. The newest dated handoff is the
highest-resolution layer and the shortest-lived one, so it reads last
and wins ties on recency. Decisions sit apart from handoffs on purpose:
a handoff claims “this was true at the end of my session,” while a
decision claims durability, and the bar for writing one is higher. The
convention is explicit: a durable decision only gets written under
04_decisions/ once I have confirmed it is a stable rule. An
agent does not promote its own conclusion to a decision.
An agent that skips the bootstrap doesn’t fail loud. It fails the way the redundant fix fails: it spends an hour rediscovering a constraint the last session already wrote down, or it re-proposes something a decision already killed. The cost is invisible inside the session and obvious across ten of them.
Why a hardcoded home path breaks the mirror on the second machine
The canonical vault path as written in my instructions targets a home
directory of /Users/jason. This machine’s home is
/Users/jasoncolapietro. The standing rule is to substitute
the equivalent path, and that one-segment difference has already
produced a real failure.
The Suede-Vault carries a mirror of Claude’s own memory at
04-Memory/claude-memory/MEMORY.md, refreshed by a script.
The script targets a home path spelled -Users-jason. On
this machine the real segment is -Users-jasoncolapietro, so
the script found nothing to mirror and the file stopped refreshing on
2026-07-13. It raised no error. It sat stale for ten days until a
2026-07-23 audit caught it. Nothing about the file looked wrong; it read
as a current memory snapshot that happened to be missing everything
recent.
A memory mirror wired to a hardcoded home path fails without a sound on the second machine, and staleness has no error state. Multi-machine paths are a failure surface, not a detail, and the check is not “does the file exist” but “when did it last change.”
Two Google Drive failures that look like a missing vault
Google Drive is a streaming mount, and it fails in two distinct ways that both look like “the vault is missing.” Each needs its own check, and applying the wrong one wastes the session.
The first is lazy loading. On 2026-05-24, broad scans such as
find -maxdepth 3 did not find the vault subdirectory at
all. Drive does not materialize a subdirectory to a scan until something
pokes it by name. The rule that came out of it:
# Address the exact path. A broad scan proves nothing here.
ls "$VAULT"On a lazy-loading network filesystem, absence from a scan is not evidence of absence. Address the literal path you care about before concluding anything is missing.
The second failure is the daemon being down. On 2026-06-08,
ls on vault directories worked while file content reads
timed out with Operation timed out /
ETIMEDOUT. Directory metadata is cached on disk, so
listings succeed with the Google Drive app not running; the FUSE mount
cannot hydrate file bytes without the daemon. The filesystem was
half-alive: structure present, contents unreachable. The diagnostic:
pgrep -f "Google Drive" # empty means the daemon is down
open -a "Google Drive" # then wait ~15s for streaming to come up
# retry reads with a short backoff; each file hydrates on first readNetwork health proves nothing about the daemon. A clean ping to google with reads still timing out is the signature of this failure, not a refutation of it.
One contradiction in my own records belongs here rather than swept under the prose. The index line for the vault memory states “Reads AND writes verified working without the Drive app installed,” while the body of the same memory records content reads timing out when the app or daemon is not running. App-not-installed and daemon-not-running may be different states with different behavior, but the two statements sit unreconciled in the sources. When they collide in practice, I trust the dated incident over the summary line, which is the same rule this whole chapter runs on.
The handoff write procedure, and the fallback when Drive is down
A handoff that fails to write is worse than no handoff, because the session that wrote it believes the memory exists. The write procedure assumes the filesystem is hostile:
lsthe05_handoffs/path first.- If it succeeds, write to the vault.
- If it returns ENOENT, try once more: Drive may need the poke to materialize the directory.
- If it still fails, drop to the Dropbox fallback at
/Users/jasoncolapietro/Dropbox/My Mac (Jasons-MBP.hsd1.fl.comcast.net)/Downloads/and let the file get synced into the vault when Drive returns.
That fallback path has the machine’s hostname baked into the folder name, Comcast residential, Florida. It is ugly and it works, and Codex handoffs have parked there through Drive outages waiting to be carried home.
Naming carries the rest of the discipline, because two agent lineages
write into the same directory. Claude handoffs are
YYYY-MM-DD-claude-suede-<short-task>.md with no
-handoff suffix; Codex agents write
YYYY-MM-DD-codex-<short-task>-handoff.md. When the
convention was recorded on 2026-05-24, the directory held 2 prior Claude
entries. The date prefix means a bare ls -1 reads as a
timeline, and the agent token means provenance survives without opening
the file. A dated filename is the cheapest metadata system that cannot
drift, because it cannot be edited apart from its content.
Where the vault ranks against git and the live URL
Chapter 6 set the hierarchy: git holds the truth about code, the live
URL holds the truth about deployed behavior, and the current terminal
holds the truth about this session. The vault ranks below all three. It
orients the work; it does not adjudicate it. A handoff that disagrees
with git log is wrong. A project note that disagrees with
the live endpoint is stale. The vault’s word is never the last word, and
2026-07-23 is the day that rule proved itself against the vault I trust
most.
The Suede-Vault, the source of truth itself, documented itself wrong.
Two files inside it,
04-Memory/claude-memory/obsidian_vault.md and
vault_save_infrastructure.md, describe the older setup: a
vault at ~/Documents/Suede-Vault, a Suede-AI
org remote, and vault-save tooling. A 2026-07-05 session
had superseded all three on this machine. The vault lives at
~/code/Suede-Vault, the remote is the personal
suede-vault-backup, and no vault-save or
vault-refresh tooling exists here, nor a
/vault-save slash command. The two files were never updated
to match. As of the audit, the drift is known and not yet
reconciled.
An agent trusting those docs hunts for a directory that does not
exist on this machine and waits on a command that will never run. The
operating rule ignores the vault’s self-description and states the
current reality: on any “second brain” update, write to
~/code/Suede-Vault with plain file edits plus
git add, git commit, git push.
Session updates go in a dated file under 05-Sessions/ and
get linked from the hand-maintained top-level Index.md,
which is the vault’s map. The audit that found the drift is itself filed
that way, at
05-Sessions/2026-07-23-estate-status-and-gaps-second-brain-sync.md,
which means the record of the vault being wrong about itself is stored
by the convention that fixed it.
The general form: dated handoffs beat undated docs. A dated note claims to be true on its date and nothing more, and a reader can weigh it against everything newer. An undated doc claims to be true now, and “now” is when it rots. The two stale vault files carried no expiry and no timestamp a reader would check, so they stayed authoritative-looking for 18 days after the 2026-07-05 session that obsoleted them. The dated session note that corrected them cannot pull the same trick on a future reader; its own filename confesses its age.
That is the whole design, and it is smaller than it sounds. The vault does not need to be right about everything. It needs to make the next session cheaper to start, and honest about when each piece of it was last true. Truth lives in the repos, the live URLs, and the terminal in front of me. The vault’s job is to remember where I left the keys.