From scaffolding
CRUD operations for file-based markdown memory entries with deduplication and sync to MCP semantic store. Manages user, feedback, project, and reference memory types.
How this skill is triggered — by the user, by Claude, or both
Slash command
/scaffolding:memoryThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Unified CRUD operations over the scaffolding memory system. Handles file-based
Unified CRUD operations over the scaffolding memory system. Handles file-based
markdown entries under ~/.claude/projects/.../memory/ and synchronises every
write/delete with the MCP semantic vector store when available.
Use this skill when an explicit memory management action is requested: save a
new entry, update or delete an existing one, query/search stored entries, or
rebuild the MEMORY.md index.
| Type | File prefix | Use for |
|---|---|---|
user | user_*.md | Personal preferences, identity, recurring instructions |
feedback | feedback_*.md | Corrections, tone/style adjustments, behavioural feedback |
project | project_*.md | Stack details, environment facts, team conventions |
reference | reference_*.md | External resources, URLs, credentials pointers |
~/.claude/projects/{project-slug}/memory/
├── MEMORY.md ← index (one bullet per entry)
├── user_*.md ← user-type entries
├── feedback_*.md ← feedback-type entries
├── project_*.md ← project-type entries
└── reference_*.md ← reference-type entries
The project slug is the filesystem-safe version of the working directory path
(hyphens replacing /, e.g. -home-komluk-repos).
Every entry file MUST begin with YAML frontmatter followed by the body:
---
name: <kebab-case-slug>
description: "<one-line summary>"
metadata:
node_type: memory
type: <user|feedback|project|reference>
originSessionId: <session-uuid-or-unknown>
---
<Body content — concise markdown. Max ~40 lines per file.>
**Why:** <rationale or context>
**How to apply:** <when/how to use this entry>
Rules:
name must be kebab-case and equal the file slug (after the prefix).description is the single line shown in MEMORY.md.# Memory Index
- [<Title>](<filename>.md) — <one-line description>
One bullet per file, alphabetical order within each type group. The title is
the human-readable name; the description matches the frontmatter description.
*.md files in the memory dir for
entries with the same name or near-identical description. If a match
exists, perform UPDATE instead of creating a new file.type and derive the file slug from the entry name:
<type>_<slug>.md (e.g. feedback_pve-env-confusion.md).MEMORY.md (create the index if absent).mcp__semantic-memory__semantic_store(
content="<description + key facts from body, ≤500 chars>",
agent_name="memory",
content_type="learning",
tags=["<type>", "<slug>", ...],
project_id="scaffold:831a4a3fd343b902"
)
Do NOT store secrets or file-system paths in the vector store.MEMORY.md if the description changed..md file.MEMORY.md.File-based query:
MEMORY.md for keyword match in title or description.Semantic query (if MCP available):
mcp__semantic-memory__semantic_search(
query="<natural-language query>",
project_id="scaffold:831a4a3fd343b902"
)
or
mcp__semantic-memory__semantic_recall(
context="<task context summary>",
project_id="scaffold:831a4a3fd343b902"
)
Return both file-based and semantic results, deduplicating overlaps.
Before every WRITE check:
| Check | Method | Action on match |
|---|---|---|
Exact name match | frontmatter name field | UPDATE existing |
| Near-identical description | string similarity > 80 % | UPDATE existing |
| Same slug | filename match | UPDATE existing |
| Semantic duplicate | MCP semantic_search score > 0.92 | UPDATE existing |
If unsure, prefer UPDATE over creating a duplicate.
If mcp__semantic-memory__* tools are not accessible (MCP server not wired or
returns an error), skip all MCP calls silently. File-based memory is always
sufficient; semantic memory is an optional enhancement layer.
Check by attempting a no-op recall — if it throws, set a local flag
mcp_available = false and proceed without MCP for the remainder of the task.
| Avoid | Instead |
|---|---|
| Storing secrets or tokens | Note that the secret is in Vault/env; link the location |
| Duplicate files for the same topic | Deduplicate before writing; run UPDATE |
| MEMORY.md out of sync with files | Always update index on every write/delete |
| Oversized entry files (>60 lines) | Split into two entries with distinct slugs |
| Storing raw code snippets | Summarise the insight; keep ≤500 chars for MCP |
Using generic slugs (notes, info) | Use descriptive kebab-case slugs |
| Writing to MCP without file write | Always write file first; MCP is the mirror |
name, description, metadataname in frontmatter equals the slug in the filenameMEMORY.md updated (bullet added, modified, or removed)semantic_store called with project_id="scaffold:831a4a3fd343b902"npx claudepluginhub komluk/scaffolding --plugin scaffoldingSaves, recalls, and queries persistent personal notes across Claude Code sessions via demarkus-memory MCP tools on a local versioned markdown store organized by project.
Organizes, extracts, prunes, and verifies Claude Code persistent memory files to keep MEMORY.md under the 200-line truncation limit and topic files up to date with project state.
Stores, recalls, queries, and audits durable project knowledge as file-backed entries and a working notepad that survives conversation compaction.