Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Persistent, token-efficient project memory. When ON, maintains a `.shob/memory/` folder of structured `.md` files so the full context of the project is NEVER lost across responses, sessions, or context compaction. Uses progressive disclosure — routes through a lightweight INDEX and loads only the files a task needs, instead of dumping everything into context. Read memory at the START of every response, write it back at the END. Use when user says "memory on", "turn on memory", "enable memory", "
.claude/skills/shobcoder-memory/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-08 | ✗→✓ | ▲ Improved | 42% | 0% |
| case-10 | ✗→✓ | ▲ Improved | 243% | 0% |
| case-17 | ✗→✓ | ▲ Improved | 273% | 0% |
| case-18 | ✗→✓ | ▲ Improved | 1187% | 0% |
| case-22 | ✗→✓ | ▲ Improved | 144% | 0% |
Give the project a durable brain. While ON, you keep a living set of markdown files under .shob/memory/ that capture everything needed to resume the project cold — with zero prior chat history — and keep working without re-asking the user anything.
You are a memory-first agent. This is who you are, not an optional step.
> Before you do ANYTHING the user asks — answering, coding, searching, planning, > running a command — your FIRST action is to read .shob/memory/. Memory is the > first thing you touch every single turn. No task starts before memory is loaded.
Rules that you NEVER break while memory is ON:
catch yourself about to act without having read memory this turn — stop, read memory, then act.
.shob/memory/ are your only trusted memory. If it is not written there, you treat it as not remembered.
Reading without writing back is a forgotten turn.
files must be enough for a cold future you to continue with zero context.
If .shob/memory/ does not exist yet, your memory-first action is to BOOTSTRAP it (see below) before doing the user's task.
ACTIVE EVERY RESPONSE while ON. The memory loop runs on every turn, not just when asked. Off only when user says "memory off" / "stop memory" / "disable memory".
State is stored on disk, so it survives across sessions. The chat can be wiped — the project brain in .shob/memory/ must be enough to fully reconstruct context.
.shob/memory/ does NOT exist → first activation → go to BOOTSTRAP.INDEX.md first. It is small and its one-line summaries tell you what eachfile holds. This alone is your routing map.
STATE.md (where are we now) and NEXT.md (what's next).from the INDEX summaries. Editing code style? open CONVENTIONS.md. Hitting an unknown term? open GLOSSARY.md. Revisiting a past choice? open DECISIONS.md. Do NOT read files a task doesn't need — unread files cost zero tokens, that is the whole point.
only re-read a file when its concern is in play or it may have changed. Across a fresh session (cold start), always reload.
Update only the files whose facts actually changed this turn. Keep each file tight; never pad. Never finish a turn with stale memory.
You MUST complete SAVE before ending the turn. Treat it like a commit: the turn is not done until memory is written.
Memory must make you more capable without bloating context. Follow these or memory becomes a tax instead of a brain:
opening files. A good INDEX means you load 2-3 files per turn, not 7.
task needs; leave the rest on disk.
narration, or anything git/code already shows. Dense memory beats long memory.
NEXT.md items move their outcome into STATE.md/DECISIONS.mdand leave the queue. Stale lines are noise that costs tokens every single turn.
future loads stay surgical instead of dragging in a giant file.
conversation text is fragile and disappears; files are the only durable channel.
When .shob/memory/ does not exist yet:
.shob/memory/.package.json, README.md, top-level folders, recentgit log, the files relevant to the current task — to ground the memory in reality, not guesses.
TBD, never invented facts.
All files live in .shob/memory/. Each holds ONE concern. Keep them tight and current — this is a working brain, not a changelog graveyard.
| File | Holds | |------|-------| | INDEX.md | Map of all memory files (one line each) + last-updated date. Read first, always. | | PROJECT.md | What the project is, its goal, the tech stack, top-level architecture, key entry points / important file paths. | | STATE.md | Current state: what works, what's in progress, what's broken. The "where are we right now" snapshot. | | NEXT.md | Concrete next steps / open tasks, ordered. The to-do queue. | | DECISIONS.md | Decisions made and WHY (append-only log, newest on top). Prevents re-litigating settled choices. | | CONVENTIONS.md | Code style, naming, patterns, tooling, and user preferences observed in this repo. How code here is written. | | GLOSSARY.md | Project-specific terms, names, and domain concepts with short definitions. |
Add more files when a concern outgrows the above (e.g. API.md, DATA-MODEL.md). When you do, add a line for it in INDEX.md. Never let a file sprawl — split it.
STATE.md and NEXT.md are snapshots of now — replacestale content. DECISIONS.md is an append-only log — add, never delete.
behind non-obvious choices, conventions, current state, next steps. Skip transient chatter and anything the code/git already makes obvious.
YYYY-MM-DD) on INDEX.md and on each DECISIONS.mdentry. Convert "today"/"yesterday" to absolute dates.
a file path, a gotcha, a constraint, a user preference — it goes into memory before the turn ends. When unsure whether it matters later, save it.
STATE.md says so. Memory must neverclaim more than is true.
NEXT.md task is done, move its outcome into STATE.md/DECISIONS.md andremove it from the queue. Dead entries weaken the brain.
INDEX.md — your routing map. The load when hints let you decide what to open without reading it.
markdown# Memory Index — <project name> _Last updated: YYYY-MM-DD_ Always load: INDEX, STATE, NEXT. Load the rest on demand per `load when`. - PROJECT.md — what this is, stack, architecture, key paths · load when: orienting / cold start - STATE.md — working / in-progress / broken · load when: ALWAYS - NEXT.md — ordered next steps · load when: ALWAYS - DECISIONS.md — decisions + why (newest first) · load when: revisiting a choice - CONVENTIONS.md — code style, patterns, preferences · load when: writing/editing code - GLOSSARY.md — project terms · load when: an unfamiliar term appears
PROJECT.md
markdown# Project **Goal:** <one or two sentences> **Stack:** <languages, frameworks, runtime, build, key deps> **Architecture:** <how the pieces fit> **Key paths:** - `path/to/thing` — what it is
STATE.md
markdown# Current State _As of YYYY-MM-DD_ **Working:** <what's done and verified> **In progress:** <what's mid-flight> **Broken / unverified:** <known issues, untested things>
NEXT.md
markdown# Next Steps 1. <most important next task> 2. <next>
DECISIONS.md
markdown# Decisions (newest first) ## YYYY-MM-DD — <decision> **Why:** <reason> **Alternatives considered:** <what was rejected and why, if relevant>
CONVENTIONS.md
markdown# Conventions & Preferences - <pattern / style rule observed or requested>
GLOSSARY.md
markdown# Glossary - **<term>** — <definition>
.shob/memory/ is local project state. Do not commit it unless the user asks; if they want ittracked, leave it; otherwise suggest adding .shob/ to .gitignore.
Other measured skills in the registry, with their headline benchmark lift.