Skip to main content

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:
Each session directory contains:

Conversation Format

From packages/core/src/core/logger.ts, conversations are stored as JSONL:

Checkpoint Operations

Creating Checkpoints

From packages/core/src/core/logger.ts:328:
Checkpoint Path Encoding (from logger.ts:286):
Tags are URL-encoded to handle special characters:

Loading Checkpoints

From logger.ts:344:

Deleting Checkpoints

From logger.ts:377:

Checking Checkpoint Existence

From logger.ts:426:

Session Resume

Command Line Usage

Resume Process

From packages/core/src/services/sessionService.ts:581:

Session Data Structure

From packages/core/src/services/chatRecordingService.ts:102:

Chat Compression

Compression Triggers

From packages/core/src/config/config.ts, chat compression activates based on:
When prompt tokens exceed 70% of model’s context window, compression is triggered.

Compression Process

From packages/core/src/core/prompts.ts:356:

Compression Benefits

  1. Token Reduction: 50-80% reduction in prompt tokens
  2. Cost Savings: Lower API costs for long sessions
  3. Performance: Faster response times with smaller context
  4. Context Retention: Important information preserved

Compression Example

Before compression (10,000 tokens):
After compression (2,500 tokens):

UI Telemetry Persistence

Recording Telemetry

From packages/core/src/services/chatRecordingService.ts:414:

Replaying Telemetry

From sessionService.ts:648:
This restores:
  • Token counts (prompt, cached, completion)
  • Request counts
  • Model usage statistics
  • Timing information

Git Integration

Checkpointing can integrate with Git for version control. From packages/core/src/services/gitService.ts:32:
From gitService.ts:110:
Each checkpoint can create a Git commit:

SDK Integration

TypeScript SDK

From packages/sdk-typescript/src/types/types.ts:37:
Usage:
From packages/sdk-typescript/src/query/createQuery.ts:46:

Process Transport

From packages/sdk-typescript/src/transport/ProcessTransport.ts:263:
The SDK automatically passes --resume to the CLI process.

Best Practices

When to Create Checkpoints

  1. Before Major Changes:
  2. After Milestones:
  3. 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:
  1. Checkpoint file doesn’t exist
  2. Invalid JSON format
  3. File corruption
Solution:

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