Skip to main content
These are the tools that help the AI put something into memory or change memory on purpose.

What this means in practice

This family covers things like:
  • remembering a new fact or lesson manually
  • saving a checkpoint to mark a session milestone
  • editing an existing memory to refine or correct it
  • archiving or forgetting a memory to clean up

crystal_remember — Save a memory

Create a new memory with semantic embedding, vector storage, and optional Obsidian export.

Parameters

Valid enum values from schema

Stores: Categories:

Returns

Examples

Save a decision:
Save a lesson from past experience:
Save a procedural workflow:
Save a goal:
Save information about a person:

Tagging best practices

  • Use lowercase, hyphen-separated tags (e.g., backend-architecture, not BackendArchitecture)
  • Keep tags concise and reusable across memories
  • Avoid redundant tags (don’t tag with both architecture and architectural-decision)
  • Use 2–5 tags per memory for good searchability without noise
  • Group related topics under a common tag prefix (e.g., convex-*, deploy-*)

When to use vs alternatives

Error handling

How it actually works

Key repo surfaces:
  • mcp-server/src/tools/remember.ts — tool definition and input validation
  • convex/crystal/memories.ts — memory creation, embedding, and storage logic
  • convex/crystal/mcp.ts — HTTP endpoint routing
  • mcp-server/src/lib/obsidian.ts — Obsidian vault integration
The flow:
  1. Tool validates all input parameters against the schema and enums
  2. ConvexClient POSTs to /api/mcp/capture
  3. Backend embeds the content using OpenAI’s text-embedding-3-small
  4. Memory is stored in the crystalMemories table with vector index
  5. If OBSIDIAN_VAULT_PATH is set, memory is also exported as markdown
  6. Tool returns the memory ID and Obsidian path (if applicable)

Common mistakes

  • Assuming manual crystal_remember and automatic crystal_capture are the same path (they’re not — one is explicit, one is automatic)
  • Forgetting that checkpoints are a distinct concept from ordinary memories (checkpoints are milestones; memories are facts/lessons)
  • Not setting confidence and valence — the defaults are reasonable, but explicit values help the system prioritize
  • Using vague titles (❌ “decision”) instead of specific ones (✅ “Chose Convex over Supabase”)
  • Storing multiple unrelated facts in one memory instead of breaking them into separate memories

Source of truth

Primary files behind this page:
  • mcp-server/src/tools/remember.ts — tool definition
  • convex/crystal/memories.ts — backend logic
  • convex/schema.ts — valid enum values
  • convex/crystal/mcp.ts
  • convex/crystal/checkpoints.ts

Notes

Shared-mode agent scoping (new in 0.7.15)

When an agent is configured with mode: "shared" in agentScopePolicies, crystal_remember now writes to ${scope}:main-${agentId} so two shared agents under the same scope don’t bleed captures into one bucket. Single-shared-agent installs (the common case) continue to write to ${scope}:main — this change is backward compatible. If you intentionally want captures to merge across shared agents, route them under a single agentId or write to an explicit channel with that effect.