The crossmem-loader skill

The CLI knows where your history is. The skill knows what to do about it — when to reach for it, how to let you choose, and how to turn a raw transcript into something worth resuming into.

You do not install it. It ships inside the CLI and lands in ~/.claude/skills/crossmem-loader and ~/.agents/skills/crossmem-loader the moment crossmem is installed — postinstall on npm, first command on Homebrew, go install or a downloaded binary. Any agent that reads SKILL.md picks it up from there, and an upgrade refreshes it.

crossmem install --skills --agents     # force a reinstall
crossmem uninstall --skills --agents   # remove it, and stop it coming back
CROSSMEM_NO_SKILL_INSTALL=1 crossmem … # skip it for this run

A stamp at ~/.config/crossmemcli/skills.stamp records what was installed, so after the first run the check costs one small file read. $CLAUDE_SKILLS_DIR and $AGENTS_SKILLS_DIR relocate the targets.

When your agent reaches for it

The skill's description is written so an agent invokes it before listing or reading files — guessing at prior context wastes exactly the tokens crossmem exists to save.

Resuming

“pick up where I left off”, “where did I leave off”, “catch me up on this folder”, “I hit a usage limit in Codex”, “import my Claude memory”.

Persisting

“save this context”, “write it down”, “commit the context”, “so the next session doesn't re-pay for this”.

Export / import

“dump every conversation”, “training corpus”, “RAG corpus”, “carry conversations to another machine”, “no model names”.

Diagnosing

“crossmem can't see my Devin sessions”, “no sessions found”, “where does it look for X”, “my tool keeps its sessions somewhere else”.

The load flow

The skill's hot path, and the reason it exists as a skill rather than a flag.

  1. List this folder's recent sessions

    crossmem list . --limit 5, or --json to pick programmatically. If the folder is a git worktree, sessions from the repository's other checkouts come too — that is usually where the work being resumed was actually done, and each row's workspace shows which checkout it came from.

  2. Show them, then ask — never auto-load

    A numbered list in agent · recency · summary shape, then a confirm:

    1. claude · 15 hours ago · export conversations as q&a
    2. codex  · 2 days ago   · windows store paths
    
    "There's a claude session from 15 hours ago: export conversations
     as q&a. Load it?"

    The skill waits for a yes, a number, or a summary. lastQuestion is the strongest content signal — it points at unfinished work; firstQuestion is the goal. Recency labels the row; it is not a reason to pick on your behalf. Guessing wrong costs you a whole reconstructed context, which is the one failure this tool is supposed to prevent.

  3. Load the chosen session in full

    crossmem load --session <ref> --full. The skill passes --full explicitly even when your config already sets it, so its behavior never depends on your machine's defaults.

  4. Write the brief — the filtering step

    Ignore the harness boilerplate: CLAUDE.md/AGENTS.md blocks, <system-reminder>, command hooks, previously-pasted bundles, and the agent's own narration about loading crossmem. From the real work left over, synthesize role · decisions (built, chosen, rejected, and why) · current state.

    Weight the tail for current state and open threads, the head for the original goal. Where they conflict the tail wins — it is the later decision. State what is unfinished explicitly; that is what you are resuming into.

  5. Offer to persist it

    If the work continues past this session, crossmem update . writes a committable .crossmem/ so the next session — yours, another tool's, or a teammate's — starts from the brief instead of paying to rebuild it.

When .crossmem/context.md already exists, the skill reads it before running list/load: a curated brief costs one file read where a full load costs a whole transcript. It falls through to the load flow when the brief is missing, stale against what you're describing, or too thin to act on.

What it is told never to do

  • Never invent the elided middle.

    When the bundle's [... middle of the session elided ...] marker plainly hides a decision the tail refers back to, the skill says so and asks, or narrows with --provider — it does not reconstruct the missing reasoning.
  • Never blur guardrails and history.

    crossmem guardrails . prints the repo's authoritative instruction files. Transcripts say what happened; guardrails say what must be. A transcript that contradicts a guardrail loses.
  • Never touch secrets.

    No credential files, *.env, auth databases or vault/ directories — and never echo a secret value into a brief.
  • Never auto-pick a session

    when several are plausible.

What's in the skill

Progressive disclosure — the routing table loads first, and a reference file is read only when that branch is taken.

FileHolds
SKILL.mdrouting table, the load hot path, guardrails vs. history, safety
references/persisting.mdcrossmem update and the committable .crossmem/
references/portability.mdexport/import of qa.jsonl — training, RAG, moving machines
references/troubleshooting.mdscan, config, env overrides, debug logging

Read the skill source →