agentleFS
IlyaGorskyIlyaGorsky/memory-toolkit/skills/memory-setup/SKILL.md

memory-setup

Skill13 starsChanged 11 days agoMITView on GitHub

Initialize or upgrade project memory for memory-toolkit. Works with existing auto-memory.

4 other projects use a version of this.

Adopted by

Most recently taken up by

The file

Show its rules and text

We split this skill into the rules it gives an agent

30 rules. 0 are common, 15 are distinctive, and 15 are very specific to this project.

  • 0

    Common

    Most of the 4 edited versions we read keep these.

  • 15

    Distinctive

    This author's own choices. Worth a look.

  • 15

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Distinctive:

    Check what already exists:

    line 20
  2. Very specific:

    If --fresh argument or no $MEM_DIR:

    line 39
  3. Very specific:

    Ask: "What are the main workstreams in this project?" → create workstreams.json

    line 57
  4. Distinctive:

    Ask sequentially, accept short answers, skip empty:

    line 59
  5. Very specific:

    Write as markdown with Section: headers, not a single paragraph.

    line 65
  6. Very specific:

    Ask: "What language do you prefer for documentation and rules?

    line 66
  7. Very specific:

    Ask: "Key links (Jira, Figma, Slack, docs)?" → create reference/links.md

    line 67
  8. Distinctive:

    Create MEMORY.md from template (see Step 4)

    line 68
  9. Distinctive:

    Backup MEMORY.md: before any changes:

    line 76
  10. Distinctive:

    Read existing MEMORY.md — understand current structure

    line 81
  11. Distinctive:

    Wait for user confirmation before making changes.

    line 116
  12. Very specific:

    Use $MEM as an absolute path when writing the API block into MEMORY.md.

    line 128
  13. Distinctive:

    Read current MEMORY.md. Ensure the structure follows this order:

    line 132
  14. Distinctive:

    Do NOT remove or rewrite existing content in MEMORY.md.

    line 179
  15. Distinctive:

    Ask: "Based on these files, I see topics like {X, Y, Z}.

    line 189
  16. Very specific:

    After creating workstreams.json, add a Workstreams section to MEMORY.md so they are visible in the index:

    line 193
  17. Very specific:

    If profile/user-role.md exists (or was just created), ensure MEMORY.md has a ## Profile section indexing it:

    line 204
  18. Very specific:

    Place it right after the ## Rules block — profile is high-signal context, agent should see it early.

    line 211
  19. Very specific:

    If path B (upgrade) and profile/user-role.md does NOT exist, run the same interview as Step 2A point 4.

    line 215
  20. Very specific:

    Only if user agrees. For each .md file with frontmatter type:

    line 219
  21. Distinctive:

    After moving files — update paths in MEMORY.md index.

    line 228
  22. Very specific:

    If memory-schema.json is missing in $MEM_DIR:

    line 233
  23. Very specific:

    Only switch to Exclusive if user explicitly requests it.

    line 298
  24. Very specific:

    If user wants to trim — identify entries that can be removed (old, superseded, redundant) and propose which to cut.

    line 300
  25. Distinctive:

    Always backup MEMORY.md before modifying it

    line 306
  26. Distinctive:

    Never overwrite or delete existing files

    line 307
  27. Distinctive:

    Always show proposed changes before applying

    line 308
  28. Distinctive:

    If MEMORY.md is already >150 lines, warn about the 200-line limit and suggest trimming

    line 310
  29. Distinctive:

    If user says "just do it" — apply all changes without individual confirmations

    line 311
  30. Very specific:

    If --fresh flag — skip detection, create everything from scratch

    line 312

“Common” is measured: kept by at least 6 in 10 of the 4 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

/memory-setup — Initialize or upgrade project memory

Detects existing memory, adds what's missing, doesn't overwrite anything.


Step 1: Find memory directory

MEM_DIR=$(node "${CLAUDE_PLUGIN_ROOT}/scripts/memory.js" dir)   # the folder CC auto-memory uses; printed even if missing

Check what already exists:

echo "=== Memory dir: $MEM_DIR ==="
[ -d "$MEM_DIR" ] && echo "DIR: exists" || echo "DIR: missing"
[ -f "$MEM_DIR/MEMORY.md" ] && echo "MEMORY.md: exists" || echo "MEMORY.md: missing"
[ -f "$MEM_DIR/workstreams.json" ] && echo "workstreams.json: exists" || echo "workstreams.json: missing"
ls "$MEM_DIR"/*.md 2>/dev/null | wc -l | xargs -I{} echo "MD files: {}"
ls -d "$MEM_DIR"/*/ 2>/dev/null | wc -l | xargs -I{} echo "Subdirs: {}"

Report findings to the user before making any changes.


Step 2: Branch by state

A) No memory dir at all → fresh setup

If --fresh argument or no $MEM_DIR:

Before creating anything, show the user what will be set up:

Fresh memory setup for this project:
  Dir: {MEM_DIR}
  Will create: MEMORY.md, workstreams.json, memory-schema.json
  Subdirs: feedback/, decisions/, profile/, reference/, notes/, workstreams/
  Will ask: workstreams, role, language, key links

Proceed? (yes/skip)

Wait for confirmation before creating any files.

  1. mkdir -p "$MEM_DIR"
  2. memory.js stays in the plugin — never copy it into $MEM_DIR
  3. Ask: "What are the main workstreams in this project?" → create workstreams.json
  4. Profile interview → create profile/user-role.md (frontmatter type: user). Ask sequentially, accept short answers, skip empty:

    • Role: "What's your role and team?" (job title, company, team size)
    • Initiative: "What's the broader initiative or goal you're driving here?"
    • Communication style: "Anything about how you like to work? (pacing, directness, things that annoy you)"
    • Domain terminology: "Any project-specific terms I should know? (e.g. портфель instead of sprint, custom SP units)"

    Write as markdown with **Section:** headers, not a single paragraph. This profile gets auto-loaded via MEMORY.md and shapes how the agent communicates with you.

  5. Ask: "What language do you prefer for documentation and rules? (e.g. English, Russian)" → create profile/language.md
  6. Ask: "Key links (Jira, Figma, Slack, docs)?" → create reference/links.md
  7. Create MEMORY.md from template (see Step 4)
  8. Copy memory-schema.json: cp "${CLAUDE_PLUGIN_ROOT}/scripts/lib/memory-schema.default.json" "$MEM_DIR/memory-schema.json"
  9. Create subdirectories: mkdir -p "$MEM_DIR"/{feedback,decisions,profile,reference,notes,workstreams}

B) Existing MEMORY.md → upgrade in place

This is the common path for users with Claude Code auto-memory.

  1. Backup MEMORY.md before any changes:
    cp "$MEM_DIR/MEMORY.md" "$MEM_DIR/MEMORY.md.backup.$(date +%Y%m%d-%H%M%S)"
    Tell the user: "Backed up MEMORY.md to MEMORY.md.backup.{timestamp}"
  2. Read existing MEMORY.md — understand current structure
  3. Copy memory.js if missing
  4. Analyze existing .md files — detect types from frontmatter
  5. Propose changes (don't apply yet)

Step 3: Upgrade checklist (for path B)

Show the user what will be added/changed:

## Memory setup for {project}

Found: {N} memory files, MEMORY.md ({lines} lines)

Proposed changes:
  [ ] Backup MEMORY.md → MEMORY.md.backup.{timestamp}
  [ ] Ensure memory.js accessible (plugin or manual copy)
  [ ] Add API block to MEMORY.md
  [ ] Add Rules block to MEMORY.md  
  [ ] Add Session lifecycle block to MEMORY.md
  [ ] Create workstreams.json from existing files
  [ ] Create memory-schema.json (weighted eviction config)
  [ ] Create subdirectories (feedback/, decisions/, etc.)
  [ ] Move files to subdirectories by type
  [ ] Profile interview → profile/user-role.md (if missing)

Already in place:
  [x] MEMORY.md exists
  [x] {list what's already there}

Proceed? (or pick specific items)

Wait for user confirmation before making changes.


Step 4: Apply changes

4a: Resolve memory.js path

MEM="${CLAUDE_PLUGIN_ROOT}/scripts/memory.js"

Use $MEM as an absolute path when writing the API block into MEMORY.md.

4b: Update MEMORY.md

Read current MEMORY.md. Ensure the structure follows this order:

  1. Heading (first line)
  2. API block (lines 3-6) — always near the top
  3. Rules block (lines 8-30) — always before index entries
  4. Index entries — the rest of the file

This order matters: Claude Code truncates MEMORY.md after 200 lines. By keeping API and Rules at the top, they survive truncation even if auto-memory adds many index entries.

API block (add if missing, right after heading — one compact line, use the absolute $MEM path resolved in 4a):

## API
`node {absolute path to memory.js} --dir={MEM_DIR} <command>`

Rules block (add if missing, after API and before index entries).

## Rules

### Save
- Decision with reasoning → memory file with **Why:** and **How to apply:**
- User corrects you or confirms non-obvious choice → feedback memory
- Something surprising or counter-intuitive → note + memory
- Convert relative dates to absolute: "Thursday" → "2026-04-10"

### Don't save
- What git log already knows (commits, who changed what)
- What the code already shows (patterns, architecture)
- What CLAUDE.md already says
- Ephemeral task state (use TodoWrite)

### Format
- MEMORY.md = index only, max 200 lines. Details in separate .md files
- Each .md file has frontmatter: name, description, type (feedback/project/user/reference)
- workstreams.json = source of truth for workstream aliases
- Use --brief for quick overviews, full output only when needed

### Session lifecycle
- Start of work → /session-start or /session-continue
- Ideas for later → /park (don't lose the thought)
- After big block of work → /reflect
- Before compact: save key decisions + update handoff
- Long session + topic changed → suggest /session-end
- End of work → /session-end (handoff for next session)

Do NOT remove or rewrite existing content in MEMORY.md. Only add new blocks.

4c: Create workstreams.json

Scan existing files for patterns — group by frontmatter type or directory:

node "${CLAUDE_PLUGIN_ROOT}/scripts/memory.js" --dir="$MEM_DIR" list

Ask: "Based on these files, I see topics like {X, Y, Z}. Want me to create workstreams for them?"

4d: Add workstreams to MEMORY.md index

After creating workstreams.json, add a Workstreams section to MEMORY.md so they are visible in the index:

## Workstreams
- **{name}** — keywords: {keywords}

This ensures agents see workstreams without running memory.js workstreams.

4d-bis: Profile section in MEMORY.md

If profile/user-role.md exists (or was just created), ensure MEMORY.md has a ## Profile section indexing it:

## Profile
- [User role](profile/user-role.md) — {one-line description from frontmatter}

Place it right after the ## Rules block — profile is high-signal context, agent should see it early.

4d-ter: Profile interview for upgrade path

If path B (upgrade) and profile/user-role.md does NOT exist, run the same interview as Step 2A point 4. Skip if user declines.

4e: Create subdirectories and move files

Only if user agrees. For each .md file with frontmatter type:

type: feedback  → feedback/
type: project   → decisions/ or notes/ (by content)
type: user      → profile/
type: reference → reference/

After moving files — update paths in MEMORY.md index.

4f: Create memory-schema.json

If memory-schema.json is missing in $MEM_DIR:

if [ -f "${CLAUDE_PLUGIN_ROOT}/scripts/lib/memory-schema.default.json" ]; then
  cp "${CLAUDE_PLUGIN_ROOT}/scripts/lib/memory-schema.default.json" "$MEM_DIR/memory-schema.json"
  echo "Created memory-schema.json (weighted eviction config)"
fi

This file controls section protection and eviction weights for memory.js reindex. Never overwrite if it already exists — user may have customized it.

4g: Verify

node "${CLAUDE_PLUGIN_ROOT}/scripts/memory.js" --dir="$MEM_DIR" list
node "${CLAUDE_PLUGIN_ROOT}/scripts/memory.js" --dir="$MEM_DIR" workstreams

Step 5: Summary

## Setup complete

Memory: $MEM_DIR
Files: {N} ({moved} organized into subdirectories)
Workstreams: {list}
MEMORY.md: updated ({added blocks})

Ready to use:
  /session-start    — begin a session
  /memory search    — search memory
  /memory workstream <name> — load workstream context

Step 6: Mode selection (optional)

Explain the two modes and let the user choose. Default is Collaborative — no action required.

## Memory mode

memory-toolkit works alongside Claude Code's built-in auto-memory.
Two modes available:

1. Collaborative (default, already active)
   CC auto-memory captures facts automatically.
   memory-toolkit organizes them into workstreams, lifecycle, handoffs.
   Both write to MEMORY.md — they complement each other.

2. Exclusive (opt-in)
   Only memory-toolkit manages memory. No auto-writes from CC.
   Full control over format. Requires manual discipline.
   Add to settings.json: { "autoMemoryEnabled": false }

Your MEMORY.md is currently {N} lines (limit: 200).
{If >150: ⚠ Consider trimming — run /memory workstreams to see what's there.}

Stay in Collaborative mode? (press Enter to skip, or type "exclusive" to opt in)

Only switch to Exclusive if user explicitly requests it. Warn: "Auto-memory will no longer write to MEMORY.md — memory-toolkit handles everything."

If user wants to trim — identify entries that can be removed (old, superseded, redundant) and propose which to cut. Move to memory-backup/ rather than deleting.


Rules

  • Always backup MEMORY.md before modifying it
  • Never overwrite or delete existing files
  • Always show proposed changes before applying
  • Preserve all existing MEMORY.md content
  • If MEMORY.md is already >150 lines, warn about the 200-line limit and suggest trimming
  • If user says "just do it" — apply all changes without individual confirmations
  • If --fresh flag — skip detection, create everything from scratch

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.