From 5e8fda4c644137266e300d213787341751e53682 Mon Sep 17 00:00:00 2001 From: Vincent Koc Date: Sun, 26 Apr 2026 00:21:15 -0700 Subject: [PATCH] docs(memory-config): rewrite with CardGroup overview links, Steps for auto-detect, AccordionGroup for provider configs and QMD subsections --- docs/reference/memory-config.md | 454 ++++++++++++++++---------------- 1 file changed, 224 insertions(+), 230 deletions(-) diff --git a/docs/reference/memory-config.md b/docs/reference/memory-config.md index 087dd970241..6b865379692 100644 --- a/docs/reference/memory-config.md +++ b/docs/reference/memory-config.md @@ -1,6 +1,7 @@ --- summary: "All configuration knobs for memory search, embedding providers, QMD, hybrid search, and multimodal indexing" title: "Memory configuration reference" +sidebarTitle: "Memory config" read_when: - You want to configure memory search providers or embedding models - You want to set up the QMD backend @@ -8,28 +9,38 @@ read_when: - You want to enable multimodal memory indexing --- -This page lists every configuration knob for OpenClaw memory search. For -conceptual overviews, see: +This page lists every configuration knob for OpenClaw memory search. For conceptual overviews, see: -- [Memory Overview](/concepts/memory) -- how memory works -- [Builtin Engine](/concepts/memory-builtin) -- default SQLite backend -- [QMD Engine](/concepts/memory-qmd) -- local-first sidecar -- [Memory Search](/concepts/memory-search) -- search pipeline and tuning -- [Active Memory](/concepts/active-memory) -- enabling the memory sub-agent for interactive sessions + + + How memory works. + + + Default SQLite backend. + + + Local-first sidecar. + + + Search pipeline and tuning. + + + Memory sub-agent for interactive sessions. + + -All memory search settings live under `agents.defaults.memorySearch` in -`openclaw.json` unless noted otherwise. +All memory search settings live under `agents.defaults.memorySearch` in `openclaw.json` unless noted otherwise. -If you are looking for the **active memory** feature toggle and sub-agent config, -that lives under `plugins.entries.active-memory` instead of `memorySearch`. + +If you are looking for the **active memory** feature toggle and sub-agent config, that lives under `plugins.entries.active-memory` instead of `memorySearch`. Active memory uses a two-gate model: 1. the plugin must be enabled and target the current agent id 2. the request must be an eligible interactive persistent chat session -See [Active Memory](/concepts/active-memory) for the activation model, -plugin-owned config, transcript persistence, and safe rollout pattern. +See [Active Memory](/concepts/active-memory) for the activation model, plugin-owned config, transcript persistence, and safe rollout pattern. + --- @@ -46,20 +57,35 @@ plugin-owned config, transcript persistence, and safe rollout pattern. When `provider` is not set, OpenClaw selects the first available: -1. `local` -- if `memorySearch.local.modelPath` is configured and the file exists. -2. `github-copilot` -- if a GitHub Copilot token can be resolved (env var or auth profile). -3. `openai` -- if an OpenAI key can be resolved. -4. `gemini` -- if a Gemini key can be resolved. -5. `voyage` -- if a Voyage key can be resolved. -6. `mistral` -- if a Mistral key can be resolved. -7. `bedrock` -- if the AWS SDK credential chain resolves (instance role, access keys, profile, SSO, web identity, or shared config). + + + Selected if `memorySearch.local.modelPath` is configured and the file exists. + + + Selected if a GitHub Copilot token can be resolved (env var or auth profile). + + + Selected if an OpenAI key can be resolved. + + + Selected if a Gemini key can be resolved. + + + Selected if a Voyage key can be resolved. + + + Selected if a Mistral key can be resolved. + + + Selected if the AWS SDK credential chain resolves (instance role, access keys, profile, SSO, web identity, or shared config). + + `ollama` is supported but not auto-detected (set it explicitly). ### API key resolution -Remote embeddings require an API key. Bedrock uses the AWS SDK default -credential chain instead (instance roles, SSO, access keys). +Remote embeddings require an API key. Bedrock uses the AWS SDK default credential chain instead (instance roles, SSO, access keys). | Provider | Env var | Config key | | -------------- | -------------------------------------------------- | --------------------------------- | @@ -71,8 +97,9 @@ credential chain instead (instance roles, SSO, access keys). | OpenAI | `OPENAI_API_KEY` | `models.providers.openai.apiKey` | | Voyage | `VOYAGE_API_KEY` | `models.providers.voyage.apiKey` | -Codex OAuth covers chat/completions only and does not satisfy embedding -requests. + +Codex OAuth covers chat/completions only and does not satisfy embedding requests. + --- @@ -80,11 +107,15 @@ requests. For custom OpenAI-compatible endpoints or overriding provider defaults: -| Key | Type | Description | -| ---------------- | -------- | -------------------------------------------------- | -| `remote.baseUrl` | `string` | Custom API base URL | -| `remote.apiKey` | `string` | Override API key | -| `remote.headers` | `object` | Extra HTTP headers (merged with provider defaults) | + + Custom API base URL. + + + Override API key. + + + Extra HTTP headers (merged with provider defaults). + ```json5 { @@ -105,130 +136,113 @@ For custom OpenAI-compatible endpoints or overriding provider defaults: --- -## Gemini-specific config +## Provider-specific config -| Key | Type | Default | Description | -| ---------------------- | -------- | ---------------------- | ------------------------------------------ | -| `model` | `string` | `gemini-embedding-001` | Also supports `gemini-embedding-2-preview` | -| `outputDimensionality` | `number` | `3072` | For Embedding 2: 768, 1536, or 3072 | + + + | Key | Type | Default | Description | + | ---------------------- | -------- | ---------------------- | ------------------------------------------ | + | `model` | `string` | `gemini-embedding-001` | Also supports `gemini-embedding-2-preview` | + | `outputDimensionality` | `number` | `3072` | For Embedding 2: 768, 1536, or 3072 | - -Changing model or `outputDimensionality` triggers an automatic full reindex. - + + Changing model or `outputDimensionality` triggers an automatic full reindex. + ---- + + + Bedrock uses the AWS SDK default credential chain — no API keys needed. If OpenClaw runs on EC2 with a Bedrock-enabled instance role, just set the provider and model: -## Bedrock embedding config - -Bedrock uses the AWS SDK default credential chain -- no API keys needed. -If OpenClaw runs on EC2 with a Bedrock-enabled instance role, just set the -provider and model: - -```json5 -{ - agents: { - defaults: { - memorySearch: { - provider: "bedrock", - model: "amazon.titan-embed-text-v2:0", + ```json5 + { + agents: { + defaults: { + memorySearch: { + provider: "bedrock", + model: "amazon.titan-embed-text-v2:0", + }, + }, }, - }, - }, -} -``` + } + ``` -| Key | Type | Default | Description | -| ---------------------- | -------- | ------------------------------ | ------------------------------- | -| `model` | `string` | `amazon.titan-embed-text-v2:0` | Any Bedrock embedding model ID | -| `outputDimensionality` | `number` | model default | For Titan V2: 256, 512, or 1024 | + | Key | Type | Default | Description | + | ---------------------- | -------- | ------------------------------ | ------------------------------- | + | `model` | `string` | `amazon.titan-embed-text-v2:0` | Any Bedrock embedding model ID | + | `outputDimensionality` | `number` | model default | For Titan V2: 256, 512, or 1024 | -### Supported models + **Supported models** (with family detection and dimension defaults): -The following models are supported (with family detection and dimension -defaults): + | Model ID | Provider | Default Dims | Configurable Dims | + | ------------------------------------------ | ---------- | ------------ | -------------------- | + | `amazon.titan-embed-text-v2:0` | Amazon | 1024 | 256, 512, 1024 | + | `amazon.titan-embed-text-v1` | Amazon | 1536 | -- | + | `amazon.titan-embed-g1-text-02` | Amazon | 1536 | -- | + | `amazon.titan-embed-image-v1` | Amazon | 1024 | -- | + | `amazon.nova-2-multimodal-embeddings-v1:0` | Amazon | 1024 | 256, 384, 1024, 3072 | + | `cohere.embed-english-v3` | Cohere | 1024 | -- | + | `cohere.embed-multilingual-v3` | Cohere | 1024 | -- | + | `cohere.embed-v4:0` | Cohere | 1536 | 256-1536 | + | `twelvelabs.marengo-embed-3-0-v1:0` | TwelveLabs | 512 | -- | + | `twelvelabs.marengo-embed-2-7-v1:0` | TwelveLabs | 1024 | -- | -| Model ID | Provider | Default Dims | Configurable Dims | -| ------------------------------------------ | ---------- | ------------ | -------------------- | -| `amazon.titan-embed-text-v2:0` | Amazon | 1024 | 256, 512, 1024 | -| `amazon.titan-embed-text-v1` | Amazon | 1536 | -- | -| `amazon.titan-embed-g1-text-02` | Amazon | 1536 | -- | -| `amazon.titan-embed-image-v1` | Amazon | 1024 | -- | -| `amazon.nova-2-multimodal-embeddings-v1:0` | Amazon | 1024 | 256, 384, 1024, 3072 | -| `cohere.embed-english-v3` | Cohere | 1024 | -- | -| `cohere.embed-multilingual-v3` | Cohere | 1024 | -- | -| `cohere.embed-v4:0` | Cohere | 1536 | 256-1536 | -| `twelvelabs.marengo-embed-3-0-v1:0` | TwelveLabs | 512 | -- | -| `twelvelabs.marengo-embed-2-7-v1:0` | TwelveLabs | 1024 | -- | + Throughput-suffixed variants (e.g., `amazon.titan-embed-text-v1:2:8k`) inherit the base model's configuration. -Throughput-suffixed variants (e.g., `amazon.titan-embed-text-v1:2:8k`) inherit -the base model's configuration. + **Authentication:** Bedrock auth uses the standard AWS SDK credential resolution order: -### Authentication + 1. Environment variables (`AWS_ACCESS_KEY_ID` + `AWS_SECRET_ACCESS_KEY`) + 2. SSO token cache + 3. Web identity token credentials + 4. Shared credentials and config files + 5. ECS or EC2 metadata credentials -Bedrock auth uses the standard AWS SDK credential resolution order: + Region is resolved from `AWS_REGION`, `AWS_DEFAULT_REGION`, the `amazon-bedrock` provider `baseUrl`, or defaults to `us-east-1`. -1. Environment variables (`AWS_ACCESS_KEY_ID` + `AWS_SECRET_ACCESS_KEY`) -2. SSO token cache -3. Web identity token credentials -4. Shared credentials and config files -5. ECS or EC2 metadata credentials + **IAM permissions:** the IAM role or user needs: -Region is resolved from `AWS_REGION`, `AWS_DEFAULT_REGION`, the -`amazon-bedrock` provider `baseUrl`, or defaults to `us-east-1`. + ```json + { + "Effect": "Allow", + "Action": "bedrock:InvokeModel", + "Resource": "*" + } + ``` -### IAM permissions + For least-privilege, scope `InvokeModel` to the specific model: -The IAM role or user needs: + ``` + arn:aws:bedrock:*::foundation-model/amazon.titan-embed-text-v2:0 + ``` -```json -{ - "Effect": "Allow", - "Action": "bedrock:InvokeModel", - "Resource": "*" -} -``` + + + | Key | Type | Default | Description | + | --------------------- | ------------------ | ---------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | + | `local.modelPath` | `string` | auto-downloaded | Path to GGUF model file | + | `local.modelCacheDir` | `string` | node-llama-cpp default | Cache dir for downloaded models | + | `local.contextSize` | `number \| "auto"` | `4096` | Context window size for the embedding context. 4096 covers typical chunks (128–512 tokens) while bounding non-weight VRAM. Lower to 1024–2048 on constrained hosts. `"auto"` uses the model's trained maximum — not recommended for 8B+ models (Qwen3-Embedding-8B: 40 960 tokens → ~32 GB VRAM vs ~8.8 GB at 4096). | -For least-privilege, scope `InvokeModel` to the specific model: + Default model: `embeddinggemma-300m-qat-Q8_0.gguf` (~0.6 GB, auto-downloaded). Requires native build: `pnpm approve-builds` then `pnpm rebuild node-llama-cpp`. -``` -arn:aws:bedrock:*::foundation-model/amazon.titan-embed-text-v2:0 -``` + Use the standalone CLI to verify the same provider path the Gateway uses: ---- + ```bash + openclaw memory status --deep --agent main + openclaw memory index --force --agent main + ``` -## Local embedding config + If `provider` is `auto`, `local` is selected only when `local.modelPath` points to an existing local file. `hf:` and HTTP(S) model references can still be used explicitly with `provider: "local"`, but they do not make `auto` select local before the model is available on disk. -| Key | Type | Default | Description | -| --------------------- | ------------------ | ---------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `local.modelPath` | `string` | auto-downloaded | Path to GGUF model file | -| `local.modelCacheDir` | `string` | node-llama-cpp default | Cache dir for downloaded models | -| `local.contextSize` | `number \| "auto"` | `4096` | Context window size for the embedding context. 4096 covers typical chunks (128–512 tokens) while bounding non-weight VRAM. Lower to 1024–2048 on constrained hosts. `"auto"` uses the model's trained maximum — not recommended for 8B+ models (Qwen3-Embedding-8B: 40 960 tokens → ~32 GB VRAM vs ~8.8 GB at 4096). | - -Default model: `embeddinggemma-300m-qat-Q8_0.gguf` (~0.6 GB, auto-downloaded). -Requires native build: `pnpm approve-builds` then `pnpm rebuild node-llama-cpp`. - -Use the standalone CLI to verify the same provider path the Gateway uses: - -```bash -openclaw memory status --deep --agent main -openclaw memory index --force --agent main -``` - -If `provider` is `auto`, `local` is selected only when `local.modelPath` points -to an existing local file. `hf:` and HTTP(S) model references can still be used -explicitly with `provider: "local"`, but they do not make `auto` select local -before the model is available on disk. + + ### Inline embedding timeout -| Key | Type | Default | Description | -| ----------------------------------- | -------- | ---------------- | ------------------------------------------------------------------------ | -| `sync.embeddingBatchTimeoutSeconds` | `number` | provider default | Override the timeout for inline embedding batches during memory indexing | + + Override the timeout for inline embedding batches during memory indexing. -Unset uses the provider default: 600 seconds for local/self-hosted providers -such as `local`, `ollama`, and `lmstudio`, and 120 seconds for hosted providers. - -Increase this when local CPU-bound embedding batches are healthy but slow. +Unset uses the provider default: 600 seconds for local/self-hosted providers such as `local`, `ollama`, and `lmstudio`, and 120 seconds for hosted providers. Increase this when local CPU-bound embedding batches are healthy but slow. + --- @@ -243,21 +257,23 @@ All under `memorySearch.query.hybrid`: | `textWeight` | `number` | `0.3` | Weight for BM25 scores (0-1) | | `candidateMultiplier` | `number` | `4` | Candidate pool size multiplier | -### MMR (diversity) + + + | Key | Type | Default | Description | + | ------------- | --------- | ------- | ------------------------------------ | + | `mmr.enabled` | `boolean` | `false` | Enable MMR re-ranking | + | `mmr.lambda` | `number` | `0.7` | 0 = max diversity, 1 = max relevance | + + + | Key | Type | Default | Description | + | ---------------------------- | --------- | ------- | ------------------------- | + | `temporalDecay.enabled` | `boolean` | `false` | Enable recency boost | + | `temporalDecay.halfLifeDays` | `number` | `30` | Score halves every N days | -| Key | Type | Default | Description | -| ------------- | --------- | ------- | ------------------------------------ | -| `mmr.enabled` | `boolean` | `false` | Enable MMR re-ranking | -| `mmr.lambda` | `number` | `0.7` | 0 = max diversity, 1 = max relevance | + Evergreen files (`MEMORY.md`, non-dated files in `memory/`) are never decayed. -### Temporal decay (recency) - -| Key | Type | Default | Description | -| ---------------------------- | --------- | ------- | ------------------------- | -| `temporalDecay.enabled` | `boolean` | `false` | Enable recency boost | -| `temporalDecay.halfLifeDays` | `number` | `30` | Score halves every N days | - -Evergreen files (`MEMORY.md`, non-dated files in `memory/`) are never decayed. + + ### Full example @@ -300,19 +316,9 @@ Evergreen files (`MEMORY.md`, non-dated files in `memory/`) are never decayed. } ``` -Paths can be absolute or workspace-relative. Directories are scanned -recursively for `.md` files. Symlink handling depends on the active backend: -the builtin engine ignores symlinks, while QMD follows the underlying QMD -scanner behavior. +Paths can be absolute or workspace-relative. Directories are scanned recursively for `.md` files. Symlink handling depends on the active backend: the builtin engine ignores symlinks, while QMD follows the underlying QMD scanner behavior. -For agent-scoped cross-agent transcript search, use -`agents.list[].memorySearch.qmd.extraCollections` instead of `memory.qmd.paths`. -Those extra collections follow the same `{ path, name, pattern? }` shape, but -they are merged per agent and can preserve explicit shared names when the path -points outside the current workspace. -If the same resolved path appears in both `memory.qmd.paths` and -`memorySearch.qmd.extraCollections`, QMD keeps the first entry and skips the -duplicate. +For agent-scoped cross-agent transcript search, use `agents.list[].memorySearch.qmd.extraCollections` instead of `memory.qmd.paths`. Those extra collections follow the same `{ path, name, pattern? }` shape, but they are merged per agent and can preserve explicit shared names when the path points outside the current workspace. If the same resolved path appears in both `memory.qmd.paths` and `memorySearch.qmd.extraCollections`, QMD keeps the first entry and skips the duplicate. --- @@ -326,11 +332,11 @@ Index images and audio alongside Markdown using Gemini Embedding 2: | `multimodal.modalities` | `string[]` | -- | `["image"]`, `["audio"]`, or `["all"]` | | `multimodal.maxFileBytes` | `number` | `10000000` | Max file size for indexing | -Only applies to files in `extraPaths`. Default memory roots stay Markdown-only. -Requires `gemini-embedding-2-preview`. `fallback` must be `"none"`. + +Only applies to files in `extraPaths`. Default memory roots stay Markdown-only. Requires `gemini-embedding-2-preview`. `fallback` must be `"none"`. + -Supported formats: `.jpg`, `.jpeg`, `.png`, `.webp`, `.gif`, `.heic`, `.heif` -(images); `.mp3`, `.wav`, `.ogg`, `.opus`, `.m4a`, `.aac`, `.flac` (audio). +Supported formats: `.jpg`, `.jpeg`, `.png`, `.webp`, `.gif`, `.heic`, `.heif` (images); `.mp3`, `.wav`, `.ogg`, `.opus`, `.m4a`, `.aac`, `.flac` (audio). --- @@ -355,12 +361,9 @@ Prevents re-embedding unchanged text during reindex or transcript updates. | `remote.batch.pollIntervalMs` | `number` | -- | Poll interval | | `remote.batch.timeoutMinutes` | `number` | -- | Batch timeout | -Available for `openai`, `gemini`, and `voyage`. OpenAI batch is typically -fastest and cheapest for large backfills. +Available for `openai`, `gemini`, and `voyage`. OpenAI batch is typically fastest and cheapest for large backfills. -This is separate from `sync.embeddingBatchTimeoutSeconds`, which controls inline -embedding calls used by local/self-hosted providers and hosted providers when -provider batch APIs are not active. +This is separate from `sync.embeddingBatchTimeoutSeconds`, which controls inline embedding calls used by local/self-hosted providers and hosted providers when provider batch APIs are not active. --- @@ -375,9 +378,9 @@ Index session transcripts and surface them via `memory_search`: | `sync.sessions.deltaBytes` | `number` | `100000` | Byte threshold for reindex | | `sync.sessions.deltaMessages` | `number` | `50` | Message threshold for reindex | -Session indexing is opt-in and runs asynchronously. Results can be slightly -stale. Session logs live on disk, so treat filesystem access as the trust -boundary. + +Session indexing is opt-in and runs asynchronously. Results can be slightly stale. Session logs live on disk, so treat filesystem access as the trust boundary. + --- @@ -388,8 +391,7 @@ boundary. | `store.vector.enabled` | `boolean` | `true` | Use sqlite-vec for vector queries | | `store.vector.extensionPath` | `string` | bundled | Override sqlite-vec path | -When sqlite-vec is unavailable, OpenClaw falls back to in-process cosine -similarity automatically. +When sqlite-vec is unavailable, OpenClaw falls back to in-process cosine similarity automatically. --- @@ -404,8 +406,7 @@ similarity automatically. ## QMD backend config -Set `memory.backend = "qmd"` to enable. All QMD settings live under -`memory.qmd`: +Set `memory.backend = "qmd"` to enable. All QMD settings live under `memory.qmd`: | Key | Type | Default | Description | | ------------------------ | --------- | -------- | -------------------------------------------- | @@ -417,70 +418,65 @@ Set `memory.backend = "qmd"` to enable. All QMD settings live under | `sessions.retentionDays` | `number` | -- | Transcript retention | | `sessions.exportDir` | `string` | -- | Export directory | -OpenClaw prefers the current QMD collection and MCP query shapes, but keeps -older QMD releases working by falling back to legacy `--mask` collection flags -and older MCP tool names when needed. +OpenClaw prefers the current QMD collection and MCP query shapes, but keeps older QMD releases working by falling back to legacy `--mask` collection flags and older MCP tool names when needed. -QMD model overrides stay on the QMD side, not OpenClaw config. If you need to -override QMD's models globally, set environment variables such as -`QMD_EMBED_MODEL`, `QMD_RERANK_MODEL`, and `QMD_GENERATE_MODEL` in the gateway -runtime environment. + +QMD model overrides stay on the QMD side, not OpenClaw config. If you need to override QMD's models globally, set environment variables such as `QMD_EMBED_MODEL`, `QMD_RERANK_MODEL`, and `QMD_GENERATE_MODEL` in the gateway runtime environment. + -### Update schedule + + + | Key | Type | Default | Description | + | ------------------------- | --------- | ------- | ------------------------------------- | + | `update.interval` | `string` | `5m` | Refresh interval | + | `update.debounceMs` | `number` | `15000` | Debounce file changes | + | `update.onBoot` | `boolean` | `true` | Refresh on startup | + | `update.waitForBootSync` | `boolean` | `false` | Block startup until refresh completes | + | `update.embedInterval` | `string` | -- | Separate embed cadence | + | `update.commandTimeoutMs` | `number` | -- | Timeout for QMD commands | + | `update.updateTimeoutMs` | `number` | -- | Timeout for QMD update operations | + | `update.embedTimeoutMs` | `number` | -- | Timeout for QMD embed operations | + + + | Key | Type | Default | Description | + | ------------------------- | -------- | ------- | -------------------------- | + | `limits.maxResults` | `number` | `6` | Max search results | + | `limits.maxSnippetChars` | `number` | -- | Clamp snippet length | + | `limits.maxInjectedChars` | `number` | -- | Clamp total injected chars | + | `limits.timeoutMs` | `number` | `4000` | Search timeout | + + + Controls which sessions can receive QMD search results. Same schema as [`session.sendPolicy`](/gateway/config-agents#session): -| Key | Type | Default | Description | -| ------------------------- | --------- | ------- | ------------------------------------- | -| `update.interval` | `string` | `5m` | Refresh interval | -| `update.debounceMs` | `number` | `15000` | Debounce file changes | -| `update.onBoot` | `boolean` | `true` | Refresh on startup | -| `update.waitForBootSync` | `boolean` | `false` | Block startup until refresh completes | -| `update.embedInterval` | `string` | -- | Separate embed cadence | -| `update.commandTimeoutMs` | `number` | -- | Timeout for QMD commands | -| `update.updateTimeoutMs` | `number` | -- | Timeout for QMD update operations | -| `update.embedTimeoutMs` | `number` | -- | Timeout for QMD embed operations | - -### Limits - -| Key | Type | Default | Description | -| ------------------------- | -------- | ------- | -------------------------- | -| `limits.maxResults` | `number` | `6` | Max search results | -| `limits.maxSnippetChars` | `number` | -- | Clamp snippet length | -| `limits.maxInjectedChars` | `number` | -- | Clamp total injected chars | -| `limits.timeoutMs` | `number` | `4000` | Search timeout | - -### Scope - -Controls which sessions can receive QMD search results. Same schema as -[`session.sendPolicy`](/gateway/config-agents#session): - -```json5 -{ - memory: { - qmd: { - scope: { - default: "deny", - rules: [{ action: "allow", match: { chatType: "direct" } }], + ```json5 + { + memory: { + qmd: { + scope: { + default: "deny", + rules: [{ action: "allow", match: { chatType: "direct" } }], + }, + }, }, - }, - }, -} -``` + } + ``` -The shipped default allows direct and channel sessions, while still denying -groups. + The shipped default allows direct and channel sessions, while still denying groups. -Default is DM-only. `match.keyPrefix` matches the normalized session key; -`match.rawKeyPrefix` matches the raw key including `agent::`. + Default is DM-only. `match.keyPrefix` matches the normalized session key; `match.rawKeyPrefix` matches the raw key including `agent::`. -### Citations + + + `memory.citations` applies to all backends: -`memory.citations` applies to all backends: + | Value | Behavior | + | ---------------- | --------------------------------------------------- | + | `auto` (default) | Include `Source: ` footer in snippets | + | `on` | Always include footer | + | `off` | Omit footer (path still passed to agent internally) | -| Value | Behavior | -| ---------------- | --------------------------------------------------- | -| `auto` (default) | Include `Source: ` footer in snippets | -| `on` | Always include footer | -| `off` | Omit footer (path still passed to agent internally) | + + ### Full QMD example @@ -507,11 +503,9 @@ Default is DM-only. `match.keyPrefix` matches the normalized session key; ## Dreaming -Dreaming is configured under `plugins.entries.memory-core.config.dreaming`, -not under `agents.defaults.memorySearch`. +Dreaming is configured under `plugins.entries.memory-core.config.dreaming`, not under `agents.defaults.memorySearch`. -Dreaming runs as one scheduled sweep and uses internal light/deep/REM phases as -an implementation detail. +Dreaming runs as one scheduled sweep and uses internal light/deep/REM phases as an implementation detail. For conceptual behavior and slash commands, see [Dreaming](/concepts/dreaming). @@ -541,14 +535,14 @@ For conceptual behavior and slash commands, see [Dreaming](/concepts/dreaming). } ``` -Notes: - + - Dreaming writes machine state to `memory/.dreams/`. - Dreaming writes human-readable narrative output to `DREAMS.md` (or existing `dreams.md`). - The light/deep/REM phase policy and thresholds are internal behavior, not user-facing config. + ## Related +- [Configuration reference](/gateway/configuration-reference) - [Memory overview](/concepts/memory) - [Memory search](/concepts/memory-search) -- [Configuration reference](/gateway/configuration-reference)