The Memory Crystal OpenClaw plugin supports several configuration options defined in openclaw.plugin.json. You set these in your OpenClaw config under the plugin’s config block.
Setting plugin options
In ~/.openclaw/openclaw.json, add a config object under the crystal-memory plugin entry:
{
"plugins": {
"entries": {
"crystal-memory": {
"enabled": true,
"config": {
"apiKey": "your-api-key-here",
"defaultRecallMode": "project",
"defaultRecallLimit": 10,
"channelScope": "your-team"
}
}
}
}
}
Never edit ~/.openclaw/openclaw.json while OpenClaw is running. Apply changes outside the runtime, validate with jq empty ~/.openclaw/openclaw.json, then restart the gateway.
Options reference
| Option | Type | Default | Description |
|---|
apiKey | string | — | Your Memory Crystal API key. Equivalent to the MEMORY_CRYSTAL_API_KEY environment variable. |
convexUrl | string | https://your-deployment.convex.site | Your Convex backend URL. Override this for self-hosted deployments. |
defaultRecallMode | string | general | Default recall mode for this agent. See recall modes below. |
defaultRecallLimit | number | 8 | Number of memories returned per recall query. Range: 1–20. |
channelScope | string | — | Namespace prefix for isolating memory by tenant, client, or agent. See channel scoping below. |
localSummaryInjection | boolean | true | When enabled, relevant summaries from the local store are injected into the context window based on the current query. |
localSummaryMaxTokens | number | 2000 | Maximum tokens to spend on injected local summaries. Range: 0–8000. |
Recall modes
The defaultRecallMode option controls which memory stores and categories are prioritized during recall. The plugin selects the best mode automatically in most cases, but you can set a default that matches your agent’s primary use.
| Mode | Best for |
|---|
general | Open-ended queries across all memory (default) |
decision | Pre-change safety checks — surfaces decisions, lessons, and rules |
project | Active feature work — pulls goals, workflows, and dependencies |
people | Ownership and relationship context |
workflow | Procedures, runbooks, and how-to memory |
conversation | Recent session continuity |
Channel scoping
channelScope adds a namespace prefix to all memory operations for this plugin instance. When set, all API calls are namespaced as {channelScope}:{peerId}.
This is useful when:
- Multi-tenant applications — isolate one customer’s memories from another’s
- Multiple agent lanes — run separate agents with their own memory spaces
- Client isolation — keep per-client context from bleeding across engagements
For example, setting channelScope to "coach" means all memories for this agent are stored and retrieved under the coach: namespace.
{
"config": {
"channelScope": "coach"
}
}
You can also override the channel scope at runtime using the crystal_set_scope tool without changing the config.