Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Compact current session memory into structured text for session recovery. Supports custom descriptions and tagging.
| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-04 | ✗→✓ | ▲ Improved | 412% | 0% |
| case-07 | ✗→✓ | ▲ Improved | 237% | 0% |
| case-08 | ✗→✓ | ▲ Improved | 557% | 0% |
| case-09 | ✗→✓ | ▲ Improved | 105% | 0% |
| case-10 | ✗→✓ | ▲ Improved | 162% | 0% |
The memory:compact command compresses current session working memory into structured text optimized for session recovery, extracts critical information, and saves it to persistent storage via MCP core_memory tool.
Core Philosophy:
--description: Custom session description (optional)--tags: Comma-separated tags for categorization (optional)--force: Skip confirmation, save directlymarkdown## Session ID [WFS-ID if workflow session active, otherwise (none)] ## Project Root [Absolute path to project root, e.g., D:\Claude_dms3] ## Objective [High-level goal - the "North Star" of this session] ## Execution Plan [CRITICAL: Embed the LATEST plan in its COMPLETE and DETAILED form] ### Source: [workflow | todo | user-stated | inferred] <details> <summary>Full Execution Plan (Click to expand)</summary> [PRESERVE COMPLETE PLAN VERBATIM - DO NOT SUMMARIZE] - ALL phases, tasks, subtasks - ALL file paths (absolute) - ALL dependencies and prerequisites - ALL acceptance criteria - ALL status markers ([x] done, [ ] pending) - ALL notes and context Example: ## Phase 1: Setup - [x] Initialize project structure - Created D:\Claude_dms3\src\core\index.ts - Added dependencies: lodash, zod - [ ] Configure TypeScript - Update tsconfig.json for strict mode ## Phase 2: Implementation - [ ] Implement core API - Target: D:\Claude_dms3\src\api\handler.ts - Dependencies: Phase 1 complete - Acceptance: All tests pass </details> ## Working Files (Modified) [Absolute paths to actively modified files] - D:\Claude_dms3\src\file1.ts (role: main implementation) - D:\Claude_dms3\tests\file1.test.ts (role: unit tests) ## Reference Files (Read-Only) [Absolute paths to context files - NOT modified but essential for understanding] - D:\Claude_dms3\.claude\CLAUDE.md (role: project instructions) - D:\Claude_dms3\src\types\index.ts (role: type definitions) - D:\Claude_dms3\package.json (role: dependencies) ## Last Action [Last significant action and its result/status] ## Decisions - [Decision]: [Reasoning] - [Decision]: [Reasoning] ## Constraints - [User-specified limitation or preference] ## Dependencies - [Added/changed packages or environment requirements] ## Known Issues - [Deferred bug or edge case] ## Changes Made - [Completed modification] ## Pending - [Next step] or (none) ## Notes [Unstructured thoughts, hypotheses, debugging trails]
| Field | Purpose | Recovery Value | |-------|---------|----------------| | Session ID | Workflow session identifier (WFS-) | Links memory to specific stateful task execution | | Project Root | Absolute path to project directory | Enables correct path resolution in new sessions | | Objective | Ultimate goal of the session | Prevents losing track of broader feature | | Execution Plan | Complete plan from any source (verbatim) | Preserves full planning context, avoids re-planning | | Working Files | Actively modified files (absolute paths) | Immediately identifies where work was happening | | Reference Files | Read-only context files (absolute paths) | Eliminates re-exploration for critical context | | Last Action | Final tool output/status | Immediate state awareness (success/failure) | | Decisions | Architectural choices + reasoning | Prevents re-litigating settled decisions | | Constraints | User-imposed limitations | Maintains personalized coding style | | Dependencies | Package/environment changes | Prevents missing dependency errors | | Known Issues | Deferred bugs/edge cases | Ensures issues aren't forgotten | | Changes Made | Completed modifications | Clear record of what was done | | Pending | Next steps | Immediate action items | | Notes | Hypotheses, debugging trails | Preserves "train of thought" |
Extract the following from conversation history:
javascriptconst sessionAnalysis = { sessionId: "", // WFS-* if workflow session active, null otherwise projectRoot: "", // Absolute path: D:\Claude_dms3 objective: "", // High-level goal (1-2 sentences) executionPlan: { source: "workflow" | "todo" | "user-stated" | "inferred", content: "" // Full plan content - ALWAYS preserve COMPLETE and DETAILED form }, workingFiles: [], // {absolutePath, role} - modified files referenceFiles: [], // {absolutePath, role} - read-only context files lastAction: "", // Last significant action + result decisions: [], // {decision, reasoning} constraints: [], // User-specified limitations dependencies: [], // Added/changed packages knownIssues: [], // Deferred bugs changesMade: [], // Completed modifications pending: [], // Next steps notes: "" // Unstructured thoughts }
javascript// Helper: Generate execution plan section const generateExecutionPlan = (plan) => { const sourceLabels = { 'workflow': 'workflow (IMPL_PLAN.md)', 'todo': 'todo (TodoWrite)', 'user-stated': 'user-stated', 'inferred': 'inferred' }; // CRITICAL: Preserve complete plan content verbatim - DO NOT summarize return `### Source: ${sourceLabels[plan.source] || plan.source} <details> <summary>Full Execution Plan (Click to expand)</summary> ${plan.content} </details>`; }; const structuredText = `## Session ID ${sessionAnalysis.sessionId || '(none)'} ## Project Root ${sessionAnalysis.projectRoot} ## Objective ${sessionAnalysis.objective} ## Execution Plan ${generateExecutionPlan(sessionAnalysis.executionPlan)} ## Working Files (Modified) ${sessionAnalysis.workingFiles.map(f => `- ${f.absolutePath} (role: ${f.role})`).join('\n') || '(none)'} ## Reference Files (Read-Only) ${sessionAnalysis.referenceFiles.map(f => `- ${f.absolutePath} (role: ${f.role})`).join('\n') || '(none)'} ## Last Action ${sessionAnalysis.lastAction} ## Decisions ${sessionAnalysis.decisions.map(d => `- ${d.decision}: ${d.reasoning}`).join('\n') || '(none)'} ## Constraints ${sessionAnalysis.constraints.map(c => `- ${c}`).join('\n') || '(none)'} ## Dependencies ${sessionAnalysis.dependencies.map(d => `- ${d}`).join('\n') || '(none)'} ## Known Issues ${sessionAnalysis.knownIssues.map(i => `- ${i}`).join('\n') || '(none)'} ## Changes Made ${sessionAnalysis.changesMade.map(c => `- ${c}`).join('\n') || '(none)'} ## Pending ${sessionAnalysis.pending.length > 0 ? sessionAnalysis.pending.map(p => `- ${p}`).join('\n') : '(none)'} ## Notes ${sessionAnalysis.notes || '(none)'}`
Use the MCP core_memory tool to save the structured text:
javascriptmcp__ccw-tools__core_memory({ operation: "import", text: structuredText })
Or via CLI (pipe structured text to import):
bash# Write structured text to temp file, then import echo "$structuredText" | ccw core-memory import # Or from a file ccw core-memory import --file /path/to/session-memory.md
Response Format:
json{ "operation": "import", "id": "CMEM-YYYYMMDD-HHMMSS", "message": "Created memory: CMEM-YYYYMMDD-HHMMSS" }
After successful import, clearly display the Recovery ID to the user:
╔════════════════════════════════════════════════════════════════════════════╗
║ ✓ Session Memory Saved ║
║ ║
║ Recovery ID: CMEM-YYYYMMDD-HHMMSS ║
║ ║
║ To restore: "Please import memory <ID>" ║
║ (MCP: core_memory export | CLI: ccw core-memory export --id <ID>) ║
╚════════════════════════════════════════════════════════════════════════════╝Before generating:
.git/, package.json, .claude/javascript// Convert relative to absolute const toAbsolutePath = (relativePath, projectRoot) => { if (path.isAbsolute(relativePath)) return relativePath; return path.join(projectRoot, relativePath); }; // Example: "src/api/auth.ts" → "D:\Claude_dms3\src\api\auth.ts"
| Category | Examples | Priority | |----------|----------|----------| | Project Config | .claude/CLAUDE.md, package.json, tsconfig.json | High | | Type Definitions | src/types/*.ts, *.d.ts | High | | Related Modules | Parent/sibling modules with shared interfaces | Medium | | Test Files | Corresponding test files for modified code | Medium | | Documentation | README.md, ARCHITECTURE.md | Low |
javascript// Check for active workflow session const manifest = await mcp__ccw-tools__session_manager({ operation: "list", location: "active" }); if (manifest.sessions?.length > 0) { const session = manifest.sessions[0]; const plan = await mcp__ccw-tools__session_manager({ operation: "read", session_id: session.id, content_type: "plan" }); sessionAnalysis.sessionId = session.id; sessionAnalysis.executionPlan.source = "workflow"; sessionAnalysis.executionPlan.content = plan.content; }
javascript// Extract from conversation - look for TodoWrite tool calls // Preserve COMPLETE todo list with all details const todos = extractTodosFromConversation(); if (todos.length > 0) { sessionAnalysis.executionPlan.source = "todo"; // Format todos with full context - preserve status markers sessionAnalysis.executionPlan.content = todos.map(t => `- [${t.status === 'completed' ? 'x' : t.status === 'in_progress' ? '>' : ' '}] ${t.content}` ).join('\n'); }
javascript// Look for explicit plan statements in user messages: // - "Here's my plan: 1. ... 2. ... 3. ..." // - "I want to: first..., then..., finally..." // - Numbered or bulleted lists describing steps const userPlan = extractUserStatedPlan(); if (userPlan) { sessionAnalysis.executionPlan.source = "user-stated"; sessionAnalysis.executionPlan.content = userPlan; }
javascript// If no explicit plan, infer from: // - Task description and breakdown discussion // - Sequence of actions taken // - Outstanding work mentioned const inferredPlan = inferPlanFromDiscussion(); if (inferredPlan) { sessionAnalysis.executionPlan.source = "inferred"; sessionAnalysis.executionPlan.content = inferredPlan; }
Other measured skills in the registry, with their headline benchmark lift.