Now liveThe Skillselion MCP - thousands of ranked skills, loaded into your agent mid-task. No install.Get it →
catlog22 avatar

Compact

  • 104 installs
  • 2.1k repo stars
  • Updated June 18, 2026
  • catlog22/claude-code-workflow

compact is a Claude Code Workflow skill that compresses session working memory into structured recovery text and saves it through the MCP core_memory tool so developers can resume interrupted coding work without re-explo

About

compact is a Claude Code Workflow skill from catlog22/claude-code-workflow that implements the /memory:compact command for session recovery. It analyzes conversation history, detects execution plans from four priority sources (workflow IMPL_PLAN.md, TodoWrite, user-stated, or inferred), and emits a structured markdown snapshot with absolute project paths, modified and reference files, decisions, dependencies, known issues, and pending next steps. The skill saves output via MCP core_memory import or `ccw core-memory import`, returning a CMEM recovery ID for later export. Optional flags include --description, --tags, and --force. Developers reach for compact when a long CCW or Codex session is ending, before context compaction, or when switching tasks and they need durable state that survives a new session without losing the full execution plan verbatim.

  • Captures 13+ recovery fields: Session ID, Project Root, Objective, Execution Plan, Working Files
  • Plan detection from 4 sources: workflow IMPL_PLAN.md, TodoWrite, user-stated, inferred
  • Preserves execution plans verbatim—no summarization of phases, paths, or acceptance criteria
  • Saves via MCP core_memory import; returns CMEM-YYYYMMDD-HHMMSS recovery ID
  • Supports --description, --tags, and --force flags on /memory:compact

Compact by the numbers

  • 104 all-time installs (skills.sh)
  • Ranked #4,219 of 16,546 AI & Agent Building skills by installs in the Skillselion catalog
  • Data as of Aug 5, 2026 (Skillselion catalog sync)
npx skills add https://github.com/catlog22/claude-code-workflow --skill compact

Add your badge

Show developers this skill is listed on Skillselion. Paste this into your README.

Listed on Skillselion
Installs104
repo stars2.1k
Last updatedJune 18, 2026
Repositorycatlog22/claude-code-workflow

How do you preserve Claude Code session context for recovery?

Run compact to snapshot session plans, absolute file paths, and pending tasks into core_memory before ending a Claude Code Workflow session.

Who is it for?

Developers using Claude Code Workflow or Codex who run multi-step implementation sessions and need reliable handoff state before compaction or a new session.

Skip if: Developers who only need Anthropic's built-in /compact without CCW-specific plan capture, absolute paths, or core_memory persistence.

When should I use this skill?

User ends a CCW session, mentions memory:compact, fears losing plan context after compaction, or asks to save session state for recovery.

What you get

Structured session memory markdown, CMEM recovery ID, and importable core_memory record with full execution plan and file paths.

  • Structured session memory markdown
  • CMEM recovery ID
  • Importable core_memory record

By the numbers

  • Structured output includes 13+ recovery fields from Session ID through Notes
  • Execution plan detection uses 4 priority sources: workflow, todo, user-stated, inferred

Files

SKILL.mdMarkdownGitHub ↗

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

FieldPurposeRecovery Value
Session IDWorkflow session identifier (WFS-*)Links memory to specific stateful task execution
Project RootAbsolute path to project directoryEnables correct path resolution in new sessions
ObjectiveUltimate goal of the sessionPrevents losing track of broader feature
Execution PlanComplete plan from any source (verbatim)Preserves full planning context, avoids re-planning
Working FilesActively modified files (absolute paths)Immediately identifies where work was happening
Reference FilesRead-only context files (absolute paths)Eliminates re-exploration for critical context
Last ActionFinal tool output/statusImmediate state awareness (success/failure)
DecisionsArchitectural choices + reasoningPrevents re-litigating settled decisions
ConstraintsUser-imposed limitationsMaintains personalized coding style
DependenciesPackage/environment changesPrevents missing dependency errors
Known IssuesDeferred bugs/edge casesEnsures issues aren't forgotten
Changes MadeCompleted modificationsClear record of what was done
PendingNext stepsImmediate action items
NotesHypotheses, debugging trailsPreserves "train of thought"

5. Execution Flow

Step 1: Analyze Current Session

Extract the following from conversation history:

const 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
}

Step 2: Generate Structured Text

// 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)'}`

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):

# 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:

{
  "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:

  • [ ] Session ID captured if workflow session active (WFS-*)
  • [ ] Project Root is absolute path (e.g., D:\Claude_dms3)
  • [ ] Objective clearly states the "North Star" goal
  • [ ] Execution Plan: COMPLETE plan preserved VERBATIM (no summarization)
  • [ ] Plan Source: Clearly identified (workflow | todo | user-stated | inferred)
  • [ ] Plan Details: ALL phases, tasks, file paths, dependencies, status markers included
  • [ ] All file paths are ABSOLUTE (not relative)
  • [ ] Working Files: 3-8 modified files with roles
  • [ ] Reference Files: Key context files (CLAUDE.md, types, configs)
  • [ ] Last Action captures final state (success/failure)
  • [ ] Decisions include reasoning, not just choices
  • [ ] Known Issues separates deferred from forgotten bugs
  • [ ] Notes preserve debugging hypotheses if any

7. Path Resolution Rules

Project Root Detection

1. Check current working directory from environment 2. Look for project markers: .git/, package.json, .claude/ 3. Use the topmost directory containing these markers

Absolute Path Conversion

// 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"

Reference File Categories

CategoryExamplesPriority
Project Config.claude/CLAUDE.md, package.json, tsconfig.jsonHigh
Type Definitionssrc/types/*.ts, *.d.tsHigh
Related ModulesParent/sibling modules with shared interfacesMedium
Test FilesCorresponding test files for modified codeMedium
DocumentationREADME.md, ARCHITECTURE.mdLow

8. Plan Detection (Priority Order)

Priority 1: Workflow Session (IMPL_PLAN.md)

// 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;
}

Priority 2: TodoWrite (Current Session Todos)

// 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');
}

Priority 3: User-Stated Plan

// 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;
}

Priority 4: Inferred Plan

// 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;
}

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

Related skills

How it compares

Pick compact over generic /compact when you need CCW workflow plan preservation, absolute file paths, and durable core_memory recovery IDs.

FAQ

What does the compact skill save?

compact saves a structured session snapshot—Session ID, absolute Project Root, Objective, verbatim Execution Plan, Working and Reference Files, Decisions, Pending steps, and Notes—via MCP core_memory import, returning a CMEM recovery ID for later export.

How do you restore compact session memory?

After compact saves memory, restore it in a new session by importing the CMEM ID with MCP core_memory export or `ccw core-memory export --id <ID>`. The structured text reloads plans, file paths, and pending work without re-exploration.

This week in AI coding

Five minutes, every Monday - the tools, releases and tactics for developers.

unsubscribe anytime.