| name | compact |
| description | Compact current session memory into structured text for session recovery. Supports custom descriptions and tagging. |
| argument-hint | [--description="..."] [--tags=<tag1,tag2>] [--force] |
Memory Compact Command (/memory:compact)
1. Overview
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:
- Session Recovery First: Capture everything needed to resume work seamlessly
- Minimize Re-exploration: Include file paths, decisions, and state to avoid redundant analysis
- Preserve Train of Thought: Keep notes and hypotheses for complex debugging
- Actionable State: Record last action result and known issues
2. Parameters
--description: Custom session description (optional)
- Example: "completed core-memory module"
- Example: "debugging JWT refresh - suspected memory leak"
--tags: Comma-separated tags for categorization (optional)
--force: Skip confirmation, save directly
3. Structured Output Format
## 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]
4. Field Definitions
| 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" |
5. Execution Flow
Step 1: Analyze Current Session
Extract the following from conversation history:
const sessionAnalysis = {
sessionId: "",
projectRoot: "",
objective: "",
executionPlan: {
source: "workflow" | "todo" | "user-stated" | "inferred",
content: ""
},
workingFiles: [],
referenceFiles: [],
lastAction: "",
decisions: [],
constraints: [],
dependencies: [],
knownIssues: [],
changesMade: [],
pending: [],
notes: ""
}
Step 2: Generate Structured Text
const generateExecutionPlan = (plan) => {
const sourceLabels = {
'workflow': 'workflow (IMPL_PLAN.md)',
'todo': 'todo (TodoWrite)',
'user-stated': 'user-stated',
'inferred': 'inferred'
};
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
## Dependencies
## Known Issues
## Changes Made
## Pending
## Notes
`
Step 3: Import to Core Memory via MCP
Use the MCP core_memory tool to save the structured text:
mcp__ccw-tools__core_memory({
operation: "import",
text: structuredText
})
Or via CLI (pipe structured text to import):
echo "$structuredText" | ccw core-memory import
ccw core-memory import --file /path/to/session-memory.md
Response Format:
{
"operation": "import",
"id": "CMEM-YYYYMMDD-HHMMSS",
"message": "Created memory: CMEM-YYYYMMDD-HHMMSS"
}
Step 4: Report Recovery ID
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>) โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
6. Quality Checklist
Before generating:
7. Path Resolution Rules
Project Root Detection
- Check current working directory from environment
- Look for project markers:
.git/, package.json, .claude/
- Use the topmost directory containing these markers
Absolute Path Conversion
const toAbsolutePath = (relativePath, projectRoot) => {
if (path.isAbsolute(relativePath)) return relativePath;
return path.join(projectRoot, relativePath);
};
Reference File Categories
| 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 |
8. Plan Detection (Priority Order)
Priority 1: Workflow Session (IMPL_PLAN.md)
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;
}
Priority 2: TodoWrite (Current Session Todos)
const todos = extractTodosFromConversation();
if (todos.length > 0) {
sessionAnalysis.executionPlan.source = "todo";
sessionAnalysis.executionPlan.content = todos.map(t =>
`- [${t.status === 'completed' ? 'x' : t.status === 'in_progress' ? '>' : ' '}] ${t.content}`
).join('\n');
}
Priority 3: User-Stated Plan
const userPlan = extractUserStatedPlan();
if (userPlan) {
sessionAnalysis.executionPlan.source = "user-stated";
sessionAnalysis.executionPlan.content = userPlan;
}
Priority 4: Inferred Plan
const inferredPlan = inferPlanFromDiscussion();
if (inferredPlan) {
sessionAnalysis.executionPlan.source = "inferred";
sessionAnalysis.executionPlan.content = inferredPlan;
}
9. Notes
- Timing: Execute at task completion or before context switch
- Frequency: Once per independent task or milestone
- Recovery: New session can immediately continue with full context
- Knowledge Graph: Entity relationships auto-extracted for visualization
- Absolute Paths: Critical for cross-session recovery on different machines