Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Use when the user asks to "remember project context", review saved findings, initialize runtime memory, archive stale work, reconcile notes, or erase a subject; manages authorized HOT/WARM/COLD working memory across all disciplines while preserving registry event ownership and privacy controls. Not for changing canonical registry facts - route those through the owning registry. 项目记忆/跨会话
.claude/skills/aiskillstore-memory-management/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-04 | ✗→✓ | ▲ Improved | 359% | 0% |
| case-01 | ✗→✓ | ▲ Improved | 150% | 0% |
| case-02 | ✗→✓ | ▲ Improved | 137% | 0% |
| case-07 | ✗→✓ | ▲ Improved | 308% | 0% |
| case-08 | ✗→✓ | ▲ Improved | 190% | 0% |
Guide Claude Code to intentionally capture, store, and use context, decisions, and preferences across sessions, enabling true "memory" that survives context resets and improves over time.
Automatically activates when you mention:
Without intentional memory:
With intentional memory:
Track signal, not noise:
User should always know what's stored:
.claude/memory/)/show-memory)Only capture what adds value:
Never store sensitive data:
Examples:
Storage location: .claude/memory/{skill-name}/preferences.json
Example:
json{ "naming": { "convention": "camelCase", "learned_from": "user_correction", "correction_count": 2, "examples": [ "userId (not user_id)", "createdAt (not created_at)" ], "confidence": "high", "last_updated": "2025-01-15T10:30:00Z" } }
Examples:
Storage location: .claude/memory/project/decisions.json
Example:
json{ "decisions": [ { "id": "auth-jwt-2025-01-15", "date": "2025-01-15", "decision": "Use JWT authentication instead of sessions", "rationale": "Need stateless auth for mobile apps", "alternatives_considered": [ "Session-based auth (rejected: not stateless)", "OAuth only (rejected: need custom auth flow)" ], "impact": "Requires database migration for refresh tokens", "files_affected": [ "lib/supabase/auth.ts", "app/api/auth/**/*.ts" ] } ] }
Examples:
Storage location: .claude/memory/{skill-name}/corrections.json
Example:
json{ "corrections": [ { "pattern": "Import style", "count": 3, "first_seen": "2025-01-10T09:00:00Z", "last_seen": "2025-01-15T14:30:00Z", "examples": [ "import { Component } from 'lib' ✓", "import Component from 'lib' ✗" ], "action": "Always use named imports", "confidence": "high" } ] }
Examples:
Storage location: .claude/memory/project/knowledge.json
Example:
json{ "tech_stack": { "frontend": "Next.js 14, React 19, shadcn/ui, Tailwind", "backend": "Supabase Edge Functions, PostgreSQL", "deployment": "Vercel (frontend), Supabase (backend)", "last_verified": "2025-01-15" }, "structure": { "components": "app/components/", "pages": "app/(routes)/", "api": "app/api/", "supabase_functions": "supabase/functions/" } }
Capture immediately when:
Capture after confirmation when:
Don't capture:
.claude/memory/
├── project/
│ ├── knowledge.json # Tech stack, structure
│ ├── decisions.json # Architectural decisions
│ └── context.json # Current feature context
├── {skill-name}/
│ ├── preferences.json # User preferences for this skill
│ ├── corrections.json # User corrections tracked
│ └── learned_patterns.json # Patterns learned over time
└── .gitignore # Don't commit sensitive memoryUse JSON with clear structure:
json{ "version": "1.0", "created": "2025-01-15T10:00:00Z", "last_updated": "2025-01-15T14:30:00Z", "data": { // Actual content } }
typescriptinterface MemoryEntry { version: string; created: string; // ISO timestamp last_updated: string; // ISO timestamp expires?: string; // Optional expiry confidence: 'low' | 'medium' | 'high'; source: 'user_stated' | 'user_correction' | 'inferred'; data: Record<string, any>; }
Include:
Example Template:
markdown## Decision: [Short Title] **Date**: 2025-01-15 **Context**: [What problem were we solving?] **Decision**: [What we decided to do] **Rationale**: - [Key reason 1] - [Key reason 2] **Alternatives Considered**: - **Option A**: [Why rejected] - **Option B**: [Why rejected] **Impact**: - Files: [List of affected files] - Breaking: [Yes/No - details] - Migration: [What needs to change] **Trade-offs**: - ✅ Pro: [Benefit] - ❌ Con: [Drawback]
Always log:
Optional logging:
Don't log:
User corrections happen when:
typescriptinterface Correction { pattern: string; // What's being corrected count: number; // How many times first_seen: string; // ISO timestamp last_seen: string; // ISO timestamp examples: string[]; // Examples of correct/incorrect action: string; // What to do instead threshold: number; // Apply after N corrections confidence: 'low' | 'medium' | 'high'; }
After threshold corrections (typically 2-3):
markdown## First Correction User: "Use named imports, not default" Action: Note correction, don't apply yet ## Second Correction (same pattern) User: "Again, please use named imports" Action: Log pattern, apply going forward Notify: "📚 Learned: Always use named imports" ## Future Usage Claude automatically uses named imports User can reset with: /clear-memory import-style
In Memory (.claude/memory/):
In Code/Config:
Rule of Thumb: If it can be in code, put it in code. Memory is for what code can't capture.
Memory should refresh when:
typescriptfunction isStale(memory: MemoryEntry, maxAge: string): boolean { const age = Date.now() - new Date(memory.last_updated).getTime(); const maxAgeMs = parseAge(maxAge); // "7 days", "30 days" return age > maxAgeMs; }
Automatic Refresh:
Manual Refresh:
bash/refresh-memory # Refresh all /refresh-memory [skill] # Refresh specific skill /clear-memory [skill] # Clear and start fresh
Provide these commands to users:
bash# View memory /show-memory # Show all memory /show-memory [skill] # Show specific skill memory # Clear memory /clear-memory [skill] # Clear specific skill /clear-all-memory # Clear everything (confirm first) # Refresh memory /refresh-memory # Refresh all memory /refresh-memory [skill] # Refresh specific skill # Export/backup /export-memory # Export for backup /import-memory [file] # Restore from backup
Memory management stores preferences and patterns. Context persistence stores current task state.
Example:
Memory management stores approved decisions. Plan approval handles future decisions requiring approval.
Example:
First Correction:
User: "Please use named imports instead of default"
Claude: ✓ Fixed import style
Action: Log correction in memory (count: 1)Second Correction (same pattern):
User: "Again, use named imports"
Claude: ✓ Fixed import style
Action: Mark as learned pattern (count: 2)
Notify: "📚 Learned preference: Always use named imports"
Storage: .claude/memory/project/preferences.jsonFuture Usage:
Claude automatically uses named imports
User sees: "✓ Using your preferred import style (named imports)"User Can Reset:
User: /clear-memory import-style
Claude: ✓ Cleared import style preference✅ Safe:
❌ Never Store:
Transparency:
Control:
Memory management enables Claude Code to:
Key principle: Be selective, transparent, intentional, and respectful of user privacy.
Storage: .claude/memory/ directory with JSON files
Commands: /show-memory, /clear-memory, /refresh-memory
Use this skill to make Claude Code feel like it truly "remembers" your project!
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-04 | fail→pass | 11,704 | 10,681 | -9% | 1 | 1 | 0% | 1,039 | 4,769 | +359% | 0 | 0 | — |
case-01 | fail→pass | 12,755 | 11,335 | -11% | 1 | 1 | 0% | 2,273 | 5,684 | +150% | 0 | 0 | — |
case-02 | fail→pass | 8,697 | 5,260 | -40% | 1 | 1 | 0% | 2,055 | 4,871 | +137% | 0 | 0 | — |
case-03 | fail→fail | 8,344 | 4,910 | -41% | 1 | 1 | 0% | 1,630 | 4,801 | +195% | 0 | 0 | — |
case-05 | fail→fail | 9,386 | 8,497 | -9% | 1 | 1 | 0% | 1,059 | 5,364 | +407% | 0 | 0 | — |
case-06 | fail→fail | 7,220 | 5,698 | -21% | 1 | 1 | 0% | 1,411 | 4,952 | +251% | 0 | 0 | — |
case-07 | fail→pass | 7,954 | 7,978 | +0% | 1 | 1 | 0% | 1,294 | 5,281 | +308% | 0 | 0 | — |
case-08 | fail→pass | 10,254 | 8,404 | -18% | 1 | 1 | 0% | 1,792 | 5,196 | +190% | 0 | 0 | — |
case-09 | pass→pass | 12,643 | 6,786 | -46% | 1 | 1 | 0% | 1,998 | 5,003 | +150% | 0 | 0 | — |
case-10 | fail→pass | 11,367 | 6,447 | -43% | 1 | 1 | 0% | 1,940 | 4,915 | +153% | 0 | 0 | — |
case-11 | fail→pass | 3,837 | 1,853 | -52% | 1 | 1 | 0% | 579 | 4,016 | +594% | 0 | 0 | — |
case-12 | fail→pass | 13,452 | 1,711 | -87% | 1 | 1 | 0% | 2,362 | 3,959 | +68% | 0 | 0 | — |
case-13 | fail→pass | 15,376 | 2,006 | -87% | 1 | 1 | 0% | 2,474 | 3,998 | +62% | 0 | 0 | — |
case-14 | fail→pass | 9,715 | 8,881 | -9% | 1 | 1 | 0% | 1,726 | 5,500 | +219% | 0 | 0 | — |
case-15 | fail→pass | 6,558 | 4,795 | -27% | 1 | 1 | 0% | 1,363 | 4,693 | +244% | 0 | 0 | — |
case-16 | pass→pass | 14,718 | 20,675 | +40% | 1 | 1 | 0% | 2,444 | 6,369 | +161% | 0 | 0 | — |
case-17 | pass→pass | 7,794 | 16,519 | +112% | 1 | 1 | 0% | 1,305 | 4,635 | +255% | 0 | 0 | — |
case-18 | pass→pass | 4,888 | 6,036 | +23% | 1 | 1 | 0% | 758 | 4,810 | +535% | 0 | 0 | — |
case-19 | pass→pass | 8,547 | 7,331 | -14% | 1 | 1 | 0% | 1,452 | 5,011 | +245% | 0 | 0 | — |
case-20 | fail→pass | 16,780 | 7,358 | -56% | 1 | 1 | 0% | 3,431 | 5,339 | +56% | 0 | 0 | — |
case-21 | pass→pass | 10,440 | 11,734 | +12% | 1 | 1 | 0% | 2,072 | 6,306 | +204% | 0 | 0 | — |
case-22 | fail→pass | 8,324 | 2,152 | -74% | 1 | 1 | 0% | 1,495 | 4,066 | +172% | 0 | 0 | — |
case-23 | pass→pass | 6,773 | 5,677 | -16% | 1 | 1 | 0% | 1,163 | 4,718 | +306% | 0 | 0 | — |
case-24 | pass→pass | 9,491 | 3,097 | -67% | 1 | 1 | 0% | 1,490 | 4,311 | +189% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 24 cases were attempted. The headline lift of +54 percentage points is the difference between those two pass rates over the 24 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
| Model | Method | Date | Lift |
|---|---|---|---|
| gemini-3.6-flash | verified | 8/21/2026 | +50% |
Other measured skills in the registry, with their headline benchmark lift.