What it does
Creates a named snapshot of current memory state, optionally including specific memories. Use at project milestones, before risky changes, or when you want a labeled restore point. Checkpoints are immutable and can be listed and reviewed later. Supports two modes:create (capture a snapshot) and list (retrieve past checkpoints).
Parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| mode | string | No | ”create” | Checkpoint mode: create (save snapshot) or list (retrieve checkpoints). |
| label | string | Conditional | — | Checkpoint name/title. Required when mode="create". Should be descriptive: “Implemented vector search”, “Before auth refactor”, etc. |
| description | string | No | — | Longer description of what this checkpoint captures or why it’s significant. |
| memoryIds | array | No | — | Array of specific memory IDs to include in checkpoint. If omitted, includes all memories in the scope (channel/session). |
| sessionId | string | No | — | Scope checkpoint to a specific session. Used in list mode to filter checkpoints. |
| semanticSummary | string | No | — | AI-generated or manual semantic summary of the checkpoint’s significance. |
| tags | array | No | — | Array of tag strings for organizing checkpoints (e.g., ["release", "v0.8", "production"]). |
| limit | number | No | 20 | In list mode: maximum number of checkpoints to return. Range: 1-100. |
| createdBy | string | No | — | Identifier for who created this checkpoint: gerald or andy. |
| channel | string | No | — | Scope checkpoint to a specific channel. Used in both create and list modes. |
Returns (Create mode)
Returns (List mode)
checkpointId— Unique identifier for the checkpointlabel— Human-readable namecreatedAt— Unix milliseconds when checkpoint was createdmemoryCount— Number of memories included in the checkpointtags— Optional tags for filtering and organization
Examples
Basic usage
Advanced usage
When to use this vs alternatives
crystal_checkpoint— When you want to save a named snapshot of memory state at a milestonecrystal_capture— When you want to save a single memory immediatelycrystal_recent— When you need to see recent conversation messages, not checkpoint history
Error handling
| Error | Cause | Resolution |
|---|---|---|
| ”Invalid arguments” | args is not an object | Pass a valid object |
| ”mode must be create or list” | Invalid mode value | Use either "create" or "list" |
| ”label is required for create mode” | label missing when mode=“create” | Provide a non-empty label string |
| ”limit must be a number” | limit is provided but not numeric | Omit or provide a number in range 1-100 |
| ”memoryIds must be array of ids” | memoryIds is not an array | Provide an array of strings (can be empty) |
| “channel must be a string” | channel is not a string | Provide a string or omit |
| API connection error | Convex endpoint unavailable | Retry; check CONVEX_URL environment variable |
Notes
- Checkpoints are immutable — once created, they cannot be modified
- Labels should be descriptive and action-oriented (✅ “Implemented vector search” vs ❌ “checkpoint 42”)
- Tags are lightweight and support filtering checkpoints by theme or project
- Scoping by session, channel, or explicit memoryIds lets you create focused checkpoints
- List mode supports pagination via
limitparameter - Checkpoints are useful before risky changes (auth refactors, migrations, schema changes)
- Use descriptions to explain WHY a checkpoint was created or what state it represents
- The
createdByfield helps track who made each checkpoint (useful in multi-user contexts like Gerald and Andy)
