Session Checkpointing and Recovery
Qwen Code supports session checkpointing, allowing you to save conversation state and resume sessions later. This is essential for long-running tasks, recovery from errors, and maintaining context across multiple work sessions.Overview
Checkpointing provides:- Session Persistence: Save conversation history and state
- Resume Capability: Continue sessions after interruption
- Chat Compression: Compact long conversations while preserving context
- Token Optimization: Reduce token usage in resumed sessions
- UI Telemetry: Restore metrics and statistics on resume
Session Storage
Session Directory
Sessions are stored in:Conversation Format
Frompackages/core/src/core/logger.ts, conversations are stored as JSONL:
Checkpoint Operations
Creating Checkpoints
Frompackages/core/src/core/logger.ts:328:
logger.ts:286):
Loading Checkpoints
Fromlogger.ts:344:
Deleting Checkpoints
Fromlogger.ts:377:
Checking Checkpoint Existence
Fromlogger.ts:426:
Session Resume
Command Line Usage
Resume Process
Frompackages/core/src/services/sessionService.ts:581:
Session Data Structure
Frompackages/core/src/services/chatRecordingService.ts:102:
Chat Compression
Compression Triggers
Frompackages/core/src/config/config.ts, chat compression activates based on:
Compression Process
Frompackages/core/src/core/prompts.ts:356:
Compression Benefits
- Token Reduction: 50-80% reduction in prompt tokens
- Cost Savings: Lower API costs for long sessions
- Performance: Faster response times with smaller context
- Context Retention: Important information preserved
Compression Example
Before compression (10,000 tokens):UI Telemetry Persistence
Recording Telemetry
Frompackages/core/src/services/chatRecordingService.ts:414:
Replaying Telemetry
FromsessionService.ts:648:
- Token counts (prompt, cached, completion)
- Request counts
- Model usage statistics
- Timing information
Git Integration
Checkpointing can integrate with Git for version control. Frompackages/core/src/services/gitService.ts:32:
gitService.ts:110:
SDK Integration
TypeScript SDK
Frompackages/sdk-typescript/src/types/types.ts:37:
packages/sdk-typescript/src/query/createQuery.ts:46:
Process Transport
Frompackages/sdk-typescript/src/transport/ProcessTransport.ts:263:
--resume to the CLI process.
Best Practices
When to Create Checkpoints
-
Before Major Changes:
-
After Milestones:
-
Before Risky Operations:
Session Naming
Use descriptive session IDs:Checkpoint Tags
Use clear, meaningful tags:Troubleshooting
Session Not Found
Problem:Error: Session <id> not found
Solution:
Checkpoint Load Failed
Problem: Checkpoint returns empty array Causes:- Checkpoint file doesn’t exist
- Invalid JSON format
- File corruption
Git Initialization Failed
Problem: Checkpointing fails with Git errors Solution:Token Count Mismatch
Problem: Resumed session shows incorrect token counts Solution: Token counts are restored from compression checkpoints or last usage metadata. If incorrect:Advanced Topics
Custom Checkpoint Storage
Checkpoint Migration
Programmatic Resume
Source Code References
- Logger (checkpoints):
packages/core/src/core/logger.ts:286-430 - Session service:
packages/core/src/services/sessionService.ts:581-680 - Chat recording:
packages/core/src/services/chatRecordingService.ts:33,102,414 - Git integration:
packages/core/src/services/gitService.ts:32,110 - SDK types:
packages/sdk-typescript/src/types/types.ts:37-45 - Compression prompts:
packages/core/src/core/prompts.ts:356
