Technical reference
Довідник із налаштування пам’яті
Ця сторінка перелічує всі параметри конфігурації для пошуку в пам’яті OpenClaw. Концептуальні огляди дивіться тут:
Як працює пам’ять.
Типовий бекенд SQLite.
Локальний насамперед sidecar.
Конвеєр пошуку та налаштування.
Під-агент пам’яті для інтерактивних сеансів.
Усі налаштування пошуку в пам’яті розташовані в agents.defaults.memorySearch у openclaw.json, якщо не зазначено інше.
Вибір провайдера
| Ключ | Тип | Типове значення | Опис |
|---|---|---|---|
provider |
string |
"openai" |
Ідентифікатор адаптера embeddings, як-от bedrock, deepinfra, gemini, github-copilot, local, mistral, ollama, openai, openai-compatible або voyage; також може бути налаштованим models.providers.<id>, чий api вказує на адаптер memory embeddings або OpenAI-сумісний API моделі |
model |
string |
типове для провайдера | Назва моделі embeddings |
fallback |
string |
"none" |
Ідентифікатор резервного адаптера, коли основний не спрацьовує |
enabled |
boolean |
true |
Увімкнути або вимкнути пошук у пам’яті |
Коли provider не задано, OpenClaw використовує embeddings OpenAI. Задайте provider
явно, щоб використовувати Gemini, Voyage, Mistral, DeepInfra, Bedrock, GitHub Copilot,
Ollama, локальну модель GGUF або OpenAI-сумісну кінцеву точку /v1/embeddings.
Застарілі конфігурації, у яких досі вказано provider: "auto", розв’язуються як openai.
Коли provider не задано, присутній застарілий provider: "auto" або
provider: "none" навмисно вибирає режим лише FTS, пригадування з пам’яті все одно може
використовувати лексичне ранжування FTS, коли embeddings недоступні.
Явні нелокальні провайдери завершуються закрито. Якщо ви задаєте memorySearch.provider як
конкретного провайдера з віддаленою підтримкою, наприклад OpenAI, Gemini, Voyage, Mistral,
Bedrock, GitHub Copilot, DeepInfra, Ollama, LM Studio або OpenAI-сумісного
власного провайдера, і цей провайдер недоступний під час виконання, memory_search
повертає результат недоступності замість тихого використання пригадування лише FTS. Виправте
конфігурацію провайдера/автентифікації, перейдіть на доступного провайдера або задайте
provider: "none", якщо хочете навмисне пригадування лише FTS.
Власні ідентифікатори провайдерів
memorySearch.provider може вказувати на власний запис models.providers.<id> для memory-specific provider adapters, як-от ollama, або для OpenAI-сумісних API моделей, як-от openai-responses / openai-completions. OpenClaw розв’язує власника api цього провайдера для адаптера embeddings, зберігаючи власний ідентифікатор провайдера для обробки кінцевої точки, автентифікації та префіксів моделей. Це дає змогу конфігураціям із кількома GPU або кількома хостами виділяти memory embeddings для конкретної локальної кінцевої точки:
{ models: { providers: { "ollama-5080": { api: "ollama", baseUrl: "http://gpu-box.local:11435", apiKey: "ollama-local", models: [{ id: "qwen3-embedding:0.6b" }], }, }, }, agents: { defaults: { memorySearch: { provider: "ollama-5080", model: "qwen3-embedding:0.6b", }, }, },}Розв’язання ключа API
Віддалені embeddings потребують ключа API. Bedrock натомість використовує типовий ланцюжок облікових даних AWS SDK (ролі екземплярів, SSO, ключі доступу).
| Провайдер | Змінна середовища | Ключ конфігурації |
|---|---|---|
| Bedrock | Ланцюжок облікових даних AWS | Ключ API не потрібен |
| DeepInfra | DEEPINFRA_API_KEY |
models.providers.deepinfra.apiKey |
| Gemini | GEMINI_API_KEY |
models.providers.google.apiKey |
| GitHub Copilot | COPILOT_GITHUB_TOKEN, GH_TOKEN, GITHUB_TOKEN |
Профіль автентифікації через вхід із пристрою |
| Mistral | MISTRAL_API_KEY |
models.providers.mistral.apiKey |
| Ollama | OLLAMA_API_KEY (заповнювач) |
-- |
| OpenAI | OPENAI_API_KEY |
models.providers.openai.apiKey |
| Voyage | VOYAGE_API_KEY |
models.providers.voyage.apiKey |
Конфігурація віддаленої кінцевої точки
Використовуйте provider: "openai-compatible" для загального OpenAI-сумісного
сервера /v1/embeddings, який не має успадковувати глобальні облікові дані чату OpenAI.
remote.baseUrlstringВласний базовий URL API.
remote.apiKeystringПеревизначити ключ API.
remote.headersobjectДодаткові HTTP-заголовки (об’єднуються з типовими значеннями провайдера).
{ agents: { defaults: { memorySearch: { provider: "openai-compatible", model: "text-embedding-3-small", remote: { baseUrl: "https://api.example.com/v1/", apiKey: "YOUR_KEY", }, }, }, },}Конфігурація для окремих провайдерів
Gemini
| Ключ | Тип | Типове значення | Опис |
|---|---|---|---|
model |
string |
gemini-embedding-001 |
Також підтримує gemini-embedding-2-preview |
outputDimensionality |
number |
3072 |
Для Embedding 2: 768, 1536 або 3072 |
OpenAI-сумісні типи введення
OpenAI-сумісні кінцеві точки embeddings можуть увімкнути специфічні для провайдера поля запиту input_type. Це корисно для асиметричних моделей embeddings, які потребують різних міток для embeddings запиту й документа.
| Ключ | Тип | Типове значення | Опис |
|---|---|---|---|
inputType |
string |
не задано | Спільний input_type для embeddings запиту й документа |
queryInputType |
string |
не задано | input_type під час запиту; перевизначає inputType |
documentInputType |
string |
не задано | input_type індексу/документа; перевизначає inputType |
{ agents: { defaults: { memorySearch: { provider: "openai-compatible", remote: { baseUrl: "https://embeddings.example/v1", apiKey: "${EMBEDDINGS_API_KEY}", }, model: "asymmetric-embedder", queryInputType: "query", documentInputType: "passage", }, }, },}Зміна цих значень впливає на ідентичність кешу embeddings для пакетного індексування провайдера, і після неї слід переіндексувати пам’ять, коли upstream-модель по-різному обробляє мітки.
Bedrock
Конфігурація embeddings Bedrock
Bedrock використовує типовий ланцюжок облікових даних AWS SDK — ключі API не потрібні. Якщо OpenClaw працює на EC2 з роллю екземпляра, для якої ввімкнено Bedrock, просто задайте провайдера й модель:
{ agents: { defaults: { memorySearch: { provider: "bedrock", model: "amazon.titan-embed-text-v2:0", }, }, },}| Ключ | Тип | Типове значення | Опис |
|---|---|---|---|
model |
string |
amazon.titan-embed-text-v2:0 |
Будь-який ідентифікатор моделі embeddings Bedrock |
outputDimensionality |
number |
типове для моделі | Для Titan V2: 256, 512 або 1024 |
Підтримувані моделі (з визначенням сімейства та типовими розмірностями):
| ID моделі | Постачальник | Типова розмірність | Налаштовувана розмірність |
|---|---|---|---|
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 | -- |
Варіанти із суфіксом пропускної здатності (наприклад, amazon.titan-embed-text-v1:2:8k) успадковують конфігурацію базової моделі.
Автентифікація: автентифікація Bedrock використовує стандартний порядок визначення облікових даних AWS SDK:
- Змінні середовища (
AWS_ACCESS_KEY_ID+AWS_SECRET_ACCESS_KEY) - Кеш токенів SSO
- Облікові дані токена веб-ідентичності
- Спільні файли облікових даних і конфігурації
- Облікові дані метаданих ECS або EC2
Регіон визначається з AWS_REGION, AWS_DEFAULT_REGION, baseUrl постачальника amazon-bedrock або за замовчуванням має значення us-east-1.
Дозволи IAM: ролі або користувачу IAM потрібні:
{ "Effect": "Allow", "Action": "bedrock:InvokeModel", "Resource": "*"}Для мінімальних привілеїв обмежте область InvokeModel конкретною моделлю:
arn:aws:bedrock:*::foundation-model/amazon.titan-embed-text-v2:0Local (GGUF + llama.cpp)
| Ключ | Тип | Типове значення | Опис |
|---|---|---|---|
local.modelPath |
string |
автоматично завантажується | Шлях до файлу моделі GGUF |
local.modelCacheDir |
string |
типове значення node-llama-cpp | Каталог кешу для завантажених моделей |
local.contextSize |
number | "auto" |
4096 |
Розмір контекстного вікна для контексту embedding. 4096 покриває типові фрагменти (128–512 токенів), обмежуючи VRAM, не зайняту вагами. Зменште до 1024–2048 на хостах з обмеженими ресурсами. "auto" використовує навчений максимум моделі — не рекомендовано для моделей 8B+ (Qwen3-Embedding-8B: 40 960 токенів → ~32 ГБ VRAM проти ~8,8 ГБ при 4096). |
Спершу встановіть офіційного постачальника llama.cpp: openclaw plugins install @openclaw/llama-cpp-provider.
Типова модель: embeddinggemma-300m-qat-Q8_0.gguf (~0,6 ГБ, автоматично завантажується). Вихідні checkout-и все ще потребують схвалення нативного складання: pnpm approve-builds, потім pnpm rebuild node-llama-cpp.
Використовуйте автономний CLI, щоб перевірити той самий шлях постачальника, який використовує Gateway:
openclaw memory status --deep --agent mainopenclaw memory index --force --agent mainЯвно задайте provider: "local" для локальних GGUF embeddings. Посилання на моделі hf: і HTTP(S) підтримуються для явних локальних конфігурацій, але вони не змінюють типового постачальника.
Тайм-аут inline embedding
sync.embeddingBatchTimeoutSecondsnumberПеревизначає тайм-аут для inline-пакетів embedding під час індексування пам’яті.
Якщо не задано, використовується типове значення постачальника: 600 секунд для локальних/самостійно розміщених постачальників, як-от local, ollama і lmstudio, та 120 секунд для розміщених постачальників. Збільште це значення, коли локальні CPU-bound пакети embedding працюють справно, але повільно.
Конфігурація гібридного пошуку
Усе в memorySearch.query.hybrid:
| Ключ | Тип | Типове значення | Опис |
|---|---|---|---|
enabled |
boolean |
true |
Увімкнути гібридний пошук BM25 + векторний |
vectorWeight |
number |
0.7 |
Вага для векторних оцінок (0-1) |
textWeight |
number |
0.3 |
Вага для оцінок BM25 (0-1) |
candidateMultiplier |
number |
4 |
Множник розміру пулу кандидатів |
MMR (diversity)
| Ключ | Тип | Типове значення | Опис |
|---|---|---|---|
mmr.enabled |
boolean |
false |
Увімкнути повторне ранжування MMR |
mmr.lambda |
number |
0.7 |
0 = максимальна різноманітність, 1 = максимальна релевантність |
Temporal decay (recency)
| Ключ | Тип | Типове значення | Опис |
|---|---|---|---|
temporalDecay.enabled |
boolean |
false |
Увімкнути підсилення за новизною |
temporalDecay.halfLifeDays |
number |
30 |
Оцінка зменшується вдвічі кожні N днів |
Вічнозелені файли (MEMORY.md, файли без дат у memory/) ніколи не знецінюються.
Повний приклад
{ agents: { defaults: { memorySearch: { query: { hybrid: { vectorWeight: 0.7, textWeight: 0.3, mmr: { enabled: true, lambda: 0.7 }, temporalDecay: { enabled: true, halfLifeDays: 30 }, }, }, }, }, },}Додаткові шляхи пам’яті
| Ключ | Тип | Опис |
|---|---|---|
extraPaths |
string[] |
Додаткові каталоги або файли для індексування |
{ agents: { defaults: { memorySearch: { extraPaths: ["../team-docs", "/srv/shared-notes"], }, }, },}Шляхи можуть бути абсолютними або відносними до робочого простору. Каталоги рекурсивно скануються на файли .md. Обробка симлінків залежить від активного бекенда: вбудований рушій ігнорує симлінки, а QMD дотримується поведінки базового сканера QMD.
Для пошуку транскриптів між агентами в межах агента використовуйте agents.list[].memorySearch.qmd.extraCollections замість memory.qmd.paths. Ці додаткові колекції мають ту саму форму { path, name, pattern? }, але об’єднуються для кожного агента й можуть зберігати явні спільні назви, коли шлях вказує за межі поточного робочого простору. Якщо той самий розв’язаний шлях з’являється і в memory.qmd.paths, і в memorySearch.qmd.extraCollections, QMD зберігає перший запис і пропускає дублікат.
Мультимодальна пам’ять (Gemini)
Індексуйте зображення та аудіо разом із Markdown за допомогою Gemini Embedding 2:
| Ключ | Тип | Типово | Опис |
|---|---|---|---|
multimodal.enabled |
boolean |
false |
Увімкнути мультимодальне індексування |
multimodal.modalities |
string[] |
-- | ["image"], ["audio"] або ["all"] |
multimodal.maxFileBytes |
number |
10000000 |
Максимальний розмір файлу для індексу |
Підтримувані формати: .jpg, .jpeg, .png, .webp, .gif, .heic, .heif (зображення); .mp3, .wav, .ogg, .opus, .m4a, .aac, .flac (аудіо).
Кеш embedding
| Ключ | Тип | Типово | Опис |
|---|---|---|---|
cache.enabled |
boolean |
true |
Кешувати embedding чанків у SQLite |
cache.maxEntries |
number |
50000 |
Максимум кешованих embedding |
Запобігає повторному embedding незміненого тексту під час повторного індексування або оновлень транскриптів.
Пакетне індексування
| Ключ | Тип | Типово | Опис |
|---|---|---|---|
remote.nonBatchConcurrency |
number |
4 |
Паралельні inline embedding |
remote.batch.enabled |
boolean |
false |
Увімкнути API пакетного embedding |
remote.batch.concurrency |
number |
2 |
Паралельні пакетні завдання |
remote.batch.wait |
boolean |
true |
Чекати завершення пакета |
remote.batch.pollIntervalMs |
number |
-- | Інтервал опитування |
remote.batch.timeoutMinutes |
number |
-- | Тайм-аут пакета |
Доступно для openai, gemini і voyage. Пакетний режим OpenAI зазвичай найшвидший і найдешевший для великих зворотних заповнень.
remote.nonBatchConcurrency керує inline-викликами embedding, які використовують локальні/самостійно розміщені провайдери та хостингові провайдери, коли пакетні API провайдера не активні. Для непакетного індексування Ollama типово використовує 1, щоб не перевантажувати менші локальні хости; встановіть більше значення на більших машинах.
Це окремо від sync.embeddingBatchTimeoutSeconds, який керує тайм-аутом для inline-викликів embedding.
Пошук у пам’яті сесій (експериментально)
Індексуйте транскрипти сесій і показуйте їх через memory_search:
| Ключ | Тип | Типово | Опис |
|---|---|---|---|
experimental.sessionMemory |
boolean |
false |
Увімкнути індексування сесій |
sources |
string[] |
["memory"] |
Додайте "sessions", щоб включити транскрипти |
sync.sessions.deltaBytes |
number |
100000 |
Порогове значення байтів для повторного індексу |
sync.sessions.deltaMessages |
number |
50 |
Порогове значення повідомлень для повторного індексу |
Збіги в транскриптах сеансів також підпорядковуються
tools.sessions.visibility. Типова видимість
tree відкриває лише поточний сеанс і сеанси, які він породив. Щоб
пригадати непов’язаний сеанс того самого агента, надісланий через Gateway, з іншого
сеансу, наприклад приватного повідомлення, навмисно розширте видимість до agent (або до all лише
коли також потрібне пригадування між агентами й політика взаємодії агентів це дозволяє).
Наведені нижче приклади розміщують ці налаштування в agents.defaults. Ви також можете
застосувати еквівалентні налаштування memorySearch у перевизначенні для окремого агента, коли лише один
агент має індексувати й шукати транскрипти сеансів.
Для пригадування з Gateway до приватного повідомлення для того самого агента:
Вбудований бекенд
{ agents: { defaults: { memorySearch: { experimental: { sessionMemory: true }, sources: ["memory", "sessions"], }, }, }, tools: { sessions: { visibility: "agent" }, },}Бекенд QMD
{ agents: { defaults: { memorySearch: { experimental: { sessionMemory: true }, sources: ["memory", "sessions"], }, }, }, memory: { backend: "qmd", qmd: { sessions: { enabled: true }, }, }, tools: { sessions: { visibility: "agent" }, },}Під час використання QMD agents.defaults.memorySearch.experimental.sessionMemory і
sources: ["sessions"] самі по собі не експортують транскрипти в QMD. Також установіть
memory.qmd.sessions.enabled: true.
Прискорення векторів SQLite (sqlite-vec)
| Ключ | Тип | Типове значення | Опис |
|---|---|---|---|
store.vector.enabled |
boolean |
true |
Використовувати sqlite-vec для векторних запитів |
store.vector.extensionPath |
string |
у комплекті | Перевизначити шлях sqlite-vec |
Коли sqlite-vec недоступний, OpenClaw автоматично повертається до обчислення косинусної подібності всередині процесу.
Сховище індексів
Вбудовані індекси пам’яті зберігаються в SQLite-базі даних OpenClaw кожного агента за шляхом
agents/<agentId>/agent/openclaw-agent.sqlite.
| Ключ | Тип | Типове значення | Опис |
|---|---|---|---|
store.fts.tokenizer |
string |
unicode61 |
Токенізатор FTS5 (unicode61 або trigram) |
Конфігурація бекенда QMD
Установіть memory.backend = "qmd", щоб увімкнути. Усі налаштування QMD розміщуються в memory.qmd:
| Ключ | Тип | Типове значення | Опис |
|---|---|---|---|
command |
string |
qmd |
Шлях до виконуваного файла QMD; задайте абсолютний шлях, коли PATH сервісу відрізняється від вашої оболонки |
searchMode |
string |
search |
Команда пошуку: search, vsearch, query |
rerank |
boolean |
-- | Установіть false з searchMode: "query" і QMD 2.1+, щоб пропустити повторне ранжування QMD |
includeDefaultMemory |
boolean |
true |
Автоматично індексувати MEMORY.md + memory/**/*.md |
paths[] |
array |
-- | Додаткові шляхи: { name, path, pattern? } |
sessions.enabled |
boolean |
false |
Експортувати транскрипти сеансів у QMD |
sessions.retentionDays |
number |
-- | Термін зберігання транскриптів |
sessions.exportDir |
string |
-- | Каталог експорту |
searchMode: "search" є лише лексичним/BM25. OpenClaw не запускає перевірки готовності семантичних векторів або обслуговування вбудовувань QMD для цього режиму, зокрема під час memory status --deep; vsearch і query надалі потребують готовності векторів і вбудовувань QMD.
rerank: false змінює лише режим QMD query і потребує QMD 2.1 або новішої версії. У прямому режимі CLI OpenClaw передає --no-rerank; у режимі MCP на базі mcporter він передає rerank: false до уніфікованого інструмента запитів QMD. Залиште це незаданим, щоб використовувати типову поведінку повторного ранжування запитів QMD.
OpenClaw віддає перевагу поточним формам колекцій QMD і запитів MCP, але зберігає роботу зі старішими випусками QMD, за потреби пробуючи сумісні прапорці шаблонів колекцій і старіші назви інструментів MCP. Коли QMD оголошує підтримку кількох фільтрів колекцій, колекції з того самого джерела шукаються одним процесом QMD; старіші збірки QMD зберігають сумісний шлях для кожної колекції. Те саме джерело означає, що сталі колекції пам’яті групуються разом, тоді як колекції транскриптів сеансів залишаються окремою групою, щоб диверсифікація джерел усе ще мала обидва входи.
Графік оновлень
| Ключ | Тип | Типове значення | Опис |
|---|---|---|---|
update.interval |
string |
5m |
Інтервал оновлення |
update.debounceMs |
number |
15000 |
Debounce змін файлів |
update.onBoot |
boolean |
true |
Оновлювати, коли відкривається довготривалий менеджер QMD; задайте false, щоб пропустити негайне оновлення під час завантаження |
update.startup |
string |
off |
Необов’язкова ініціалізація QMD під час запуску Gateway: off, idle або immediate |
update.startupDelayMs |
number |
120000 |
Затримка перед запуском оновлення startup: "idle" |
update.waitForBootSync |
boolean |
false |
Блокувати відкриття менеджера, доки не завершиться його початкове оновлення |
update.embedInterval |
string |
-- | Окрема частота embed |
update.commandTimeoutMs |
number |
-- | Таймаут для команд QMD |
update.updateTimeoutMs |
number |
-- | Таймаут для операцій оновлення QMD |
update.embedTimeoutMs |
number |
-- | Таймаут для операцій embed QMD |
Ліміти
| Ключ | Тип | Типове значення | Опис |
|---|---|---|---|
limits.maxResults |
number |
6 |
Максимум результатів пошуку |
limits.maxSnippetChars |
number |
-- | Обмежити довжину фрагмента |
limits.maxInjectedChars |
number |
-- | Обмежити загальну кількість вставлених символів |
limits.timeoutMs |
number |
4000 |
Таймаут пошуку |
Область дії
Керує тим, які сеанси можуть отримувати результати пошуку QMD. Та сама схема, що й session.sendPolicy:
{ memory: { qmd: { scope: { default: "deny", rules: [{ action: "allow", match: { chatType: "direct" } }], }, }, },}Типове значення, що постачається, дозволяє прямі та канальні сеанси, водночас усе ще забороняючи групи.
Типове значення — лише DM. match.keyPrefix зіставляється з нормалізованим ключем сеансу; match.rawKeyPrefix зіставляється з сирим ключем, включно з agent:<id>:.
Цитування
memory.citations застосовується до всіх бекендів:
| Значення | Поведінка |
|---|---|
auto (типово) |
Додавати футер Source: <path#line> у фрагменти |
on |
Завжди додавати футер |
off |
Не додавати футер (шлях усе одно передається агенту внутрішньо) |
Коли ініціалізацію QMD під час запуску Gateway увімкнено, OpenClaw запускає QMD лише для придатних агентів. Якщо update.onBoot має значення true і не налаштовано обслуговування за інтервалом/embed, запуск використовує одноразовий менеджер для оновлення під час завантаження та закриває його. Якщо налаштовано інтервал оновлення або embed, запуск відкриває довготривалий менеджер QMD, щоб він міг володіти watcher і таймерами інтервалів; update.onBoot: false пропускає лише негайне оновлення під час завантаження.
Повний приклад QMD
{ memory: { backend: "qmd", citations: "auto", qmd: { includeDefaultMemory: true, update: { interval: "5m", debounceMs: 15000 }, limits: { maxResults: 6, timeoutMs: 4000 }, scope: { default: "deny", rules: [{ action: "allow", match: { chatType: "direct" } }], }, paths: [{ name: "docs", path: "~/notes", pattern: "**/*.md" }], }, },}Dreaming
Dreaming налаштовується в plugins.entries.memory-core.config.dreaming, а не в agents.defaults.memorySearch.
Dreaming виконується як один запланований прохід і використовує внутрішні фази light/deep/REM як деталь реалізації.
Концептуальну поведінку та slash-команди див. у Dreaming.
Налаштування користувача
| Ключ | Тип | Типове значення | Опис |
|---|---|---|---|
enabled |
boolean |
false |
Повністю ввімкнути або вимкнути Dreaming |
frequency |
string |
0 3 * * * |
Необов’язкова cadence Cron для повного проходу Dreaming |
model |
string |
типова модель | Необов’язкове перевизначення моделі субагента Dream Diary |
phases.deep.maxPromotedSnippetTokens |
number |
160 |
Максимальна оцінена кількість токенів, що зберігаються з кожного короткотермінового фрагмента recall, просунутого в MEMORY.md; метадані походження залишаються видимими |
Приклад
{ plugins: { entries: { "memory-core": { subagent: { allowModelOverride: true, allowedModels: ["anthropic/claude-sonnet-4-6"], }, config: { dreaming: { enabled: true, frequency: "0 3 * * *", model: "anthropic/claude-sonnet-4-6", }, }, }, }, },}