#Active memory Questions
173 messages ยท Page 1 of 1 (latest)
Yes, you can.
Also, what youโre describing does not sound like Active Memory itself. Active Memory runs before a reply for eligible chats, it is not supposed to poll your provider every 30s. Periodic calls are more likely heartbeat/background automation.
Two separate things you can make local:
{
agents: {
defaults: {
model: { primary: "ollama/gemma4" }, // optional, main agent local too
memorySearch: {
provider: "ollama", // or "local" / "lmstudio"
},
heartbeat: {
every: "0m", // disable, or slow it down
},
},
},
plugins: {
entries: {
"active-memory": {
enabled: true,
config: {
agents: ["main"],
model: "ollama/gemma4" // optional, otherwise it inherits session/agent model
},
},
},
},
}
Quick breakdown:
plugins.entries.active-memory.config.model= the Active Memory sub-agent modelagents.defaults.memorySearch.provider= the memory embeddings/search backend- local memory search options:
local,ollama,lmstudio
One important doc-backed note:
- heartbeat default is 30m, not 30s, and itโs configurable via
agents.defaults.heartbeat.every
Docs:
- https://docs.openclaw.ai/concepts/active-memory
- https://docs.openclaw.ai/reference/memory-config
- https://docs.openclaw.ai/providers/ollama
- https://docs.openclaw.ai/gateway/heartbeat
If you paste these, I can tell you exactly whatโs generating the requests:
openclaw --version
openclaw status
and your active-memory, memorySearch, and heartbeat config blocks.
can you jsut give me the lines to paste so that you can get the output you need
Yep, paste these in your terminal and send the output here.
openclaw --version
openclaw status
openclaw config get agents.defaults.model --json
openclaw config get agents.defaults.memorySearch --json
openclaw config get agents.defaults.heartbeat --json
openclaw config get agents.list --json
openclaw config get 'plugins.entries["active-memory"]' --json
If any command says the path is missing, paste that too.
Please redact any obvious API keys/tokens before posting.
this is a huge output. its broken into 6 pieces. wait until i say "im done" to respond
totaluser@Total-Hardware:~$ openclaw --version
openclaw status
openclaw config get agents.defaults.model --json
openclaw config get agents.defaults.memorySearch --json
openclaw config get agents.defaults.heartbeat --json
openclaw config get agents.list --json
openclaw config get 'plugins.entries["active-memory"]' --json
OpenClaw 2026.4.12 (1c0672b)
๐ฆ OpenClaw 2026.4.12 (1c0672b)
One CLI to rule them all, and one more restart because you changed the port.
โ
โ
โ
โ
OpenClaw status
Overview
โโโโโโโโโโโโโโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Item โ Value โ
โโโโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ OS โ linux 6.17.0-19-generic (x64) ยท node 25.6.1 โ
โ Dashboard โ http://127.0.0.1:18789/ โ
โ Tailscale โ serve ยท [REDACTED].ts.net ยท https:// โ
โ โ [REDACTED].ts.net โ
โ Channel โ stable (default) โ
โ Update โ pnpm ยท up to date ยท npm latest 2026.4.12 โ
โ Gateway โ local ยท ws://127.0.0.1:18789 (local loopback) ยท โ
โ โ reachable 140ms ยท auth token ยท Total-Hardware (192. โ
โ โ 168.4.98) app 2026.4.12 linux 6.17.0-19-generic โ
โ Gateway self โ Total-Hardware (192.168.4.98) app 2026.4.12 linux 6. โ
โ โ 17.0-19-generic โ
โ Gateway service โ systemd installed ยท enabled ยท running (pid 2122670, โ
โ โ state active) โ
โ Node service โ systemd not installed โ
Got it, Iโll wait for the rest.
โ Agents โ 8 ยท 1 bootstrap file present ยท sessions 399 ยท โ
โ โ default main active 9m ago โ
โ Memory โ 1125 files ยท 1125 chunks ยท sources memory, sessions โ
โ โ ยท plugin memory-core ยท vector ready โ
โ Plugin compatibility โ none โ
โ Probes โ skipped (use --deep) โ
โ Events โ none โ
โ Tasks โ 0 active ยท 0 queued ยท 0 running ยท 8 issues ยท audit 4 โ
โ โ errors ยท 48 warn ยท 63 tracked โ
โ Heartbeat โ 15m (main), 15m (alfred), disabled (cipher), 15m โ
โ โ (forge), disabled (rush), 15m (scout), 15m โ
โ โ (sentinel), 15m (vital) โ
โ Sessions โ 399 active ยท default MiniMax-M2.7 (200k ctx) ยท 8 โ
โ โ stores โ
โโโโโโโโโโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
Task maintenance: openclaw tasks maintenance --apply
Security audit
Summary: 13 critical ยท 7 warn ยท 2 info
CRITICAL Exec security=full is configured
Full exec trust is enabled for: main, forge, scout, vital, sentinel, alfred, rush, cipher. Open channel access was also detected at: - channels.discord.accountโฆ
Fix: Prefer tools.exec.security="allowlist" with ask prompts, and reserve "full" for tightly scoped break-glass agents only.
CRITICAL Open channels can reach exec-enabled agents
Open DM/group access detected at: - channels.discord.accounts.cipher.groupPolicy - channels.discord.accounts.default.groupPolicy - channels.discord.accounts.foโฆ
Fix: Tighten dmPolicy/groupPolicy to pairing or allowlist, or disable exec for agents reachable from shared/public channels.
Got it, keep going.
Sessions
โ Key โ Kind โ Age โ Model โ Tokens โ
โ agent:sc โ direct โ 1m ago โ MiniMax-M2.5 โ 69k/205k (33%) โ
โ out:main โ โ โ โ โ
โ agent:se โ direct โ 2m ago โ MiniMax-M2.7 โ 149k/205k (73%) โ
โ ntinel:m โ โ โ โ โ
โ ain โ โ โ โ โ
โ agent:sc โ direct โ 3m ago โ MiniMax-M2.7 โ 78k/200k (39%) ยท ๐๏ธ 10% cached โ
โ out:cron โ โ โ โ โ
โ :scout- โ โ โ โ โ
โ poll-new โ โ โ โ โ
โ agent:sc โ direct โ 3m ago โ MiniMax-M2.7 โ 78k/200k (39%) ยท ๐๏ธ 10% cached โ
โ out:cron โ โ โ โ โ
โ :scout- โ โ โ โ โ
โ poll- โ โ โ โ โ
โ newโฆ โ โ โ โ โ
โ agent:al โ direct โ 8m ago โ MiniMax-M2.7 โ 49k/200k (25%) โ
โ fred:mai โ โ โ โ โ
โ n โ โ โ โ โ
โ agent:vi โ direct โ 8m ago โ MiniMax-M2.7 โ 115k/205k (56%) ยท ๐๏ธ 15% cached โ
โ tal:main โ โ โ โ โ
โ agent:fo โ direct โ 9m ago โ MiniMax-M2.7 โ 29k/200k (14%) ยท ๐๏ธ 47% cached โ
โ rge:main โ โ โ โ โ
โ agent:ma โ direct โ 9m ago โ MiniMax-M2.7 โ 79k/200k (40%) ยท ๐๏ธ 3% cached โ
โ in:main โ โ โ โ โ
๐
CRITICAL Open groupPolicy with elevated tools enabled
Found groupPolicy="open" at: - channels.telegram.groupPolicy - channels.telegram.accounts.default.groupPolicy - channels.telegram.accounts.forge.groupPolicy - โฆ
Fix: Set groupPolicy="allowlist" and keep elevated allowlists extremely tight.
CRITICAL Open groupPolicy with runtime/filesystem tools exposed
Found groupPolicy="open" at: - channels.telegram.groupPolicy - channels.telegram.accounts.default.groupPolicy - channels.telegram.accounts.forge.groupPolicy - โฆ
Fix: For open groups, prefer tools.profile="messaging" (or deny group:runtime/group:fs), set tools.fs.workspaceOnly=true, and use agents.defaults.sandbox.mode="all" for exposed agents.
CRITICAL Discord security warning
Discord guilds: groupPolicy="open" allows any channel not explicitly denied to trigger (mention-gated). Set channels.discord.groupPolicy="allowlist" and configโฆ
CRITICAL Discord security warning
Discord guilds: groupPolicy="open" allows any channel not explicitly denied to trigger (mention-gated). Set channels.discord.groupPolicy="allowlist" and configโฆ
โฆ +14 more
Full report: openclaw security audit
Deep probe: openclaw security audit --deep
Channels
โโโโโโโโโโโโฌโโโโโโโโโโฌโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Channel โ Enabled โ State โ Detail โ
โโโโโโโโโโโโผโโโโโโโโโโผโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ Discord โ ON โ OK โ token configร4 ([REDACTED] ยท len 72) ยท โ
โ โ โ โ accounts 4/5 โ
โ Telegram โ ON โ OK โ token configร2 ([REDACTED] ยท len 46) ยท โ
โ โ โ โ accounts 2/2 โ
โโโโโโโโโโโโดโโโโโโโโโโดโโโโโโโโโดโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
this is actually secyion 3 not 4 my bad the last one is section 4
No worries, Iโm following. Send section 4 when ready.
โ agent:fo โ direct โ 9m ago โ MiniMax-M2.7 โ 61k/200k (30%) โ
โ rge:cron โ โ โ โ โ
โ :forge- โ โ โ โ โ
โ poll- โ โ โ โ โ
โ newโฆ โ โ โ โ โ
โโโโโโโโโโโโดโโโโโโโโโดโโโโโโโโโโดโโโโโโโโโโโโโโโดโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
FAQ: https://docs.openclaw.ai/faq
Troubleshooting: https://docs.openclaw.ai/troubleshooting
Next steps:
Need to share? openclaw status --all
Need to debug live? openclaw logs --follow
Need to test channels? openclaw status --deep
{
"primary": "minimax-portal/MiniMax-M2.7",
"fallbacks": [
"minimax/MiniMax-M2.7",
"minimax-portal/MiniMax-M2.5"
]
}
{
"enabled": true,
"experimental": {
"sessionMemory": true
}
}
{
"every": "15m",
"includeReasoning": true,
"directPolicy": "allow",
"suppressToolErrorWarnings": true
}
[
{
"id": "main",
"memorySearch": {
"qmd": {
"extraCollections": [
{
"path": "/home/totaluser/.openclaw/shared/health_research",
"name": "health-research"
}
]
}
},
"heartbeat": {},
"subagents": {
"allowAgents": [
"forge",
"scout",
"vital",
"sentinel",
"alfred"
]
}
},
{
"id": "forge",
"name": "Forge",
"workspace": "/home/totaluser/.openclaw/forge",
"agentDir": "/home/totaluser/.openclaw/agents/forge/agent",
"heartbeat": {}
},
no i meant the third seciton i sent you is actualy section 4 and then 4th one i sent is actually 3rd this on is 5
{
"id": "scout",
"name": "Scout",
"workspace": "/home/totaluser/.openclaw/scout",
"agentDir": "/home/totaluser/.openclaw/agents/scout/agent",
"memorySearch": {
"qmd": {
"extraCollections": [
{
"path": "/home/totaluser/.openclaw/shared/health_research",
"name": "health-research"
}
]
}
},
"heartbeat": {}
},
{
"id": "vital",
"name": "vital",
"workspace": "/home/totaluser/.openclaw/vital",
"agentDir": "/home/totaluser/.openclaw/agents/vital/agent",
"memorySearch": {
"qmd": {
"extraCollections": [
{
"path": "/home/totaluser/.openclaw/shared/health_research",
"name": "health-research"
}
]
}
},
"heartbeat": {}
},
{
"id": "sentinel",
"name": "sentinel",
"workspace": "/home/totaluser/.openclaw/sentinel",
"agentDir": "/home/totaluser/.openclaw/agents/sentinel/agent",
"heartbeat": {}
},
{
"id": "alfred",
"name": "Alfred",
"workspace": "/home/totaluser/.openclaw/alfred",
"agentDir": "/home/totaluser/.openclaw/agents/alfred/agent",
"heartbeat": {
"every": "15m",
"target": "telegram",
"accountId": "forge"
}
},
{
"id": "rush",
"name": "rush",
"workspace": "/home/totaluser/.openclaw/rush",
"agentDir": "/home/totaluser/.openclaw/agents/rush/agent",
"memorySearch": {
"qmd": {
"extraCollections": [
{
"path": "yr-knowledge"
}
]
}
}
},
{
"id": "cipher",
"name": "Cipher",
"workspace": "/home/totaluser/.openclaw/cipher",
"agentDir": "/home/totaluser/.openclaw/agents/cipher/agent"
}
]
Config path not found: plugins.entries["active-memory"]
totaluser@Total-Hardware:~$
im done
All good, Iโve got section 5. Send the last one, then Iโll sort it out.
Good news, this is not Active Memory.
The giveaway is:
Config path not found: plugins.entries["active-memory"]
So the Active Memory plugin is not configured at all on this install.
What your output does show instead:
memorySearchis enabled- 6 agents have heartbeat enabled at 15m
- you have cron-style sessions like
scout-poll-new/forge-poll-new
So the background provider traffic is much more likely heartbeat and/or cron, not Active Memory. Also, the config you pasted says 15m, not 30s.
If you want to move this local, use these:
# assuming Ollama is running locally
openclaw config set models.providers.ollama.apiKey "ollama-local"
openclaw config set agents.defaults.model.primary "ollama/<your-local-model>"
openclaw config set agents.defaults.memorySearch.provider "ollama"
openclaw gateway restart
If you want to stop the periodic turns first:
openclaw config set agents.defaults.heartbeat.every "0m"
openclaw gateway restart
One important nuance:
agents.defaults.model.primary= the main model used by normal agent turns, including heartbeat/cron if they inherit defaultsagents.defaults.memorySearch.provider= the memory embeddings backend
Right now your memorySearch.provider is unset, so OpenClaw will auto-detect, which can mean a remote embedding provider if you have an API key configured.
If you want, paste just this next and I can tell you whether cron is the other half of the story:
openclaw cron list
Docs:
Config path not found: plugins.entries["active-memory"]
how can i set up active memory?
Yep. Easiest way is to add the plugin config, restart, then test it.
First, find your config file:
openclaw config file
Then add this block to openclaw.json:
{
plugins: {
entries: {
"active-memory": {
enabled: true,
config: {
enabled: true,
agents: ["main"],
allowedChatTypes: ["direct", "channel"], // add "group" too if you want
model: "ollama/<your-local-model>", // optional, omit to inherit the session model
queryMode: "recent",
promptStyle: "balanced",
timeoutMs: 15000,
maxSummaryChars: 220,
persistTranscripts: false,
logging: true
}
}
}
},
agents: {
defaults: {
memorySearch: {
provider: "ollama" // or "local" / "lmstudio"
}
}
}
}
Then restart:
openclaw gateway restart
Then test it in chat:
/active-memory status
/verbose on
/trace on
Two important notes:
- For a Discord thread like this, include
"channel"inallowedChatTypes config.model= Active Memory sub-agent modelmemorySearch.provider= memory embeddings/search backend
Docs:
If you want, I can give you the exact openclaw config set ... commands instead of the JSON block.
can you give me the commands to show my active memory config state right now?
Yep, paste these:
openclaw config get 'plugins.entries["active-memory"]' --json
openclaw config get plugins.slots.memory --json
openclaw config get agents.defaults.memorySearch --json
openclaw config get agents.list --json
What they tell you:
plugins.entries["active-memory"]= whether the Active Memory plugin is configuredplugins.slots.memory= which memory plugin owns the memory slotagents.defaults.memorySearch= memory search / embeddings configagents.list= per-agent overrides that might affect memory behavior
If the first one says:
Config path not found: plugins.entries["active-memory"]
then Active Memory is not configured right now.
If you want, after you paste the output I can translate it into plain English.
Config path not found: plugins.entries["active-memory"]
Config path not found: plugins.slots.memory
{
"enabled": true,
"experimental": {
"sessionMemory": true
}
}
[
{
"id": "main",
"memorySearch": {
"qmd": {
"extraCollections": [
{
"path": "/home/totaluser/.openclaw/shared/health_research",
"name": "health-research"
}
]
}
},
"heartbeat": {},
"subagents": {
"allowAgents": [
"forge",
"scout",
"vital",
"sentinel",
"alfred"
]
}
},
{
"id": "forge",
"name": "Forge",
"workspace": "/home/totaluser/.openclaw/forge",
"agentDir": "/home/totaluser/.openclaw/agents/forge/agent",
"heartbeat": {}
},
{
"id": "scout",
"name": "Scout",
"workspace": "/home/totaluser/.openclaw/scout",
"agentDir": "/home/totaluser/.openclaw/agents/scout/agent",
"memorySearch": {
"qmd": {
"extraCollections": [
{
"path": "/home/totaluser/.openclaw/shared/health_research",
"name": "health-research"
}
]
}
},
"heartbeat": {}
},
{
two halves to the output
"id": "vital",
"name": "vital",
"workspace": "/home/totaluser/.openclaw/vital",
"agentDir": "/home/totaluser/.openclaw/agents/vital/agent",
"memorySearch": {
"qmd": {
"extraCollections": [
{
"path": "/home/totaluser/.openclaw/shared/health_research",
"name": "health-research"
}
]
}
},
"heartbeat": {}
},
{
"id": "sentinel",
"name": "sentinel",
"workspace": "/home/totaluser/.openclaw/sentinel",
"agentDir": "/home/totaluser/.openclaw/agents/sentinel/agent",
"heartbeat": {}
},
{
"id": "alfred",
"name": "Alfred",
"workspace": "/home/totaluser/.openclaw/alfred",
"agentDir": "/home/totaluser/.openclaw/agents/alfred/agent",
"heartbeat": {
"every": "15m",
"target": "telegram",
"accountId": "forge"
}
},
{
"id": "rush",
"name": "rush",
"workspace": "/home/totaluser/.openclaw/rush",
"agentDir": "/home/totaluser/.openclaw/agents/rush/agent",
"memorySearch": {
"qmd": {
"extraCollections": [
{
"path": "yr-knowledge"
}
]
}
}
},
{
"id": "cipher",
"name": "Cipher",
"workspace": "/home/totaluser/.openclaw/cipher",
"agentDir": "/home/totaluser/.openclaw/agents/cipher/agent"
}
]
Got it, send the second half and Iโll interpret both together.
Yep, in plain English, your current state is:
-
Active Memory is not configured
plugins.entries["active-memory"]is missing- so Active Memory is off, not just disabled
-
You do have normal memory search enabled
- this part:
{ "enabled": true, "experimental": { "sessionMemory": true } }means
memorySearchis on, with experimental session memory enabled
-
You do not have an explicit memory plugin slot override
plugins.slots.memorymissing just means there is no explicit override there
-
Several agents have heartbeat enabled
main,forge,scout,vital,sentinel, andalfredall have heartbeat blocks- from your earlier paste, those are inheriting a 15m default in most cases
So right now you have:
- memory search / session memory: ON
- Active Memory plugin: OFF / not configured
- heartbeats: ON for multiple agents
So if you want actual Active Memory, you need to add the plugin config block. Right now you only have memory search.
If you want, I can give you a minimal Active Memory config next, either:
- safe default for direct chats only, or
- works in Discord threads/channels too
can you give tme the config set to set it up
Yep, paste this for a minimal setup that will work in direct chats and channel/thread chats like this one:
openclaw config set 'plugins.entries["active-memory"]' '{
enabled: true,
config: {
enabled: true,
agents: ["main"],
allowedChatTypes: ["direct", "channel"],
queryMode: "recent",
promptStyle: "balanced",
timeoutMs: 15000,
maxSummaryChars: 220,
persistTranscripts: false,
logging: true
}
}'
openclaw gateway restart
If you also want the Active Memory sub-agent itself to use a local Ollama model, run this too:
openclaw config set 'plugins.entries["active-memory"].config.model' "ollama/<your-local-model>"
openclaw config set agents.defaults.memorySearch.provider "ollama"
openclaw gateway restart
Then test it in chat:
/active-memory status
/verbose on
/trace on
If you want, I can also give you the version that enables it for all your agents, not just main.
no dont make it use ollama im fine with my default model
Yep, then just use this one:
openclaw config set 'plugins.entries["active-memory"]' '{
enabled: true,
config: {
enabled: true,
agents: ["main"],
allowedChatTypes: ["direct", "channel"],
queryMode: "recent",
promptStyle: "balanced",
timeoutMs: 15000,
maxSummaryChars: 220,
persistTranscripts: false,
logging: true
}
}'
openclaw gateway restart
That will let Active Memory use your existing default model.
After restart, test with:
/active-memory status
/verbose on
/trace on
If you want it on for more than just main, I can give you that version too.
im getting this still
Config warnings โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ
โ โ
โ - plugins.entries."active-memory": plugin not found: "active-memory" โ
โ (stale config entry ignored; remove it from plugins config)
also what commands can check if i have qmd enabled as backed memory for my system
Ah, that warning changes things.
plugin not found: "active-memory" means your gateway does not have that plugin available, so the config entry is being ignored. So right now this is not a config typo, itโs a missing plugin/build mismatch problem.
Iโd check that with:
openclaw plugins list
openclaw plugins inspect active-memory
If inspect says it canโt find it, then your current install simply doesnโt have that plugin loaded.
For QMD backend checks, these are the useful commands:
openclaw config get memory.backend --json
openclaw config get memory.qmd --json
openclaw memory status
openclaw memory status --deep
How to read them:
memory.backend = "qmd"โ QMD is the backend- missing
memory.backendor anything else โ youโre on the builtin backend, not QMD memory.qmdshows QMD-specific configmemory status --deepis the best live check that memory is actually healthy
One nuance:
- the
memorySearch.qmd.extraCollectionsyou pasted earlier does not by itself prove QMD is the active backend - the real switch is
memory.backend: "qmd"
If you paste the output of those 4 commands, I can tell you exactly whether QMD is actually active.
๐ฆ OpenClaw 2026.4.12 (1c0672b)
One CLI to rule them all, and one more restart because you changed the port.
โ
โ Config warnings โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ
โ โ
โ - plugins.entries."active-memory": plugin not found: "active-memory" โ
โ (stale config entry ignored; remove it from plugins config) โ
โ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ
Active Memory
id: active-memory
Proactively surfaces relevant memory before eligible conversational replies.
Status: loaded
Format: openclaw
Source: ~/.npm-global/lib/node_modules/openclaw/dist/extensions/active-memory/index.js
Origin: bundled
Version: 2026.4.12
Shape: non-capability
Capability mode: none
Legacy before_agent_start: no
Typed hooks:
before_prompt_build
Commands:
active-memory
totaluser@Total-Hardware:~$
Ah, thatโs useful. So the plugin does exist. That means the warning is probably a stale config / plugin-registry bug on your build, not โthe plugin is missing.โ
For QMD backend specifically, these are the right checks:
openclaw config get memory.backend --json
openclaw config get memory.qmd --json
openclaw memory status
openclaw memory status --deep
How to read them:
memory.backend = "qmd"โ QMD is your backend- missing
memory.backendor a different value โ QMD is not the active backend memory.qmdshows QMD-specific settingsopenclaw memory status --deepis the best live health check
And for the weird Active Memory warning, Iโd check these next:
openclaw config get plugins.entries --json
openclaw plugins list --enabled
Iโm especially looking for whether the config entry got written strangely, or whether 2026.4.12 is just being inconsistent about bundled plugin validation.
If you paste those 2 QMD outputs plus plugins.entries, I can tell you exactly what state youโre in.
4 sections to this output
totaluser@Total-Hardware:~$ openclaw config get plugins.entries --json
openclaw plugins list --enabled
{
"brave": {
"enabled": true,
"config": {
"webSearch": {
"apiKey": "[REDACTED]"
}
}
},
"minimax": {
"enabled": true,
"config": {}
},
"active-memory": {
"enabled": true,
"config": {
"agents": ["main", "forge", "rush", "scout", "vital"],
"allowedChatTypes": ["direct", "channel"],
"queryMode": "recent",
"promptStyle": "balanced",
"timeoutMs": 15000,
"maxSummaryChars": 220,
"logging": true
}
},
"lossless-claw": {
"enabled": true,
"config": {}
},
""active-memory"": {
"enabled": true,
"config": {
"enabled": true,
"agents": ["main"],
"allowedChatTypes": ["direct", "channel"],
"queryMode": "recent",
"promptStyle": "balanced",
"timeoutMs": 15000,
"maxSummaryChars": 220,
"persistTranscripts": false,
"logging": true
}
},
"discord": { "config": {} },
"memory-core": { "config": {} },
"telegram": { "config": {} }
}
Config warnings:
- plugins.entries."active-memory": plugin not found: "active-memory" (stale config entry ignored; remove it from plugins config)
Plugins (51/51 loaded)
Source roots:
stock: /home/totaluser/.npm-global/lib/node_modules/openclaw/dist/extensions
global: /home/totaluser/.openclaw/extensions
Active Memory | active-memory | openclaw | loaded | stock | 2026.4.12
Amazon Bedrock | amazon-bedrock | openclaw | loaded | stock | 2026.4.12
Amazon Bedrock Mantle | amazon-bedrock-mantle | openclaw | loaded | stock | 2026.4.12
Anthropic | anthropic | openclaw | loaded | stock | 2026.4.12
Anthropic Vertex | anthropic-vertex | openclaw | loaded | stock | 2026.4.12
Arcee | arcee | openclaw | loaded | stock | 2026.4.12
Brave | brave | openclaw | loaded | stock | 2026.4.12
BytePlus | byteplus | openclaw | loaded | stock | 2026.4.12
Chutes | chutes | openclaw | loaded | stock | 2026.4.12
Cloudflare AI Gateway | cloudflare-ai-gateway | openclaw | loaded | stock | 2026.4.12
Codex | codex | openclaw | loaded | stock | 2026.4.12
ComfyUI | comfy | openclaw | loaded | stock | 2026.4.12
Copilot Proxy | copilot-proxy | openclaw | loaded | stock | 2026.4.12
DeepSeek | deepseek | openclaw | loaded | stock | 2026.4.12
Discord | discord | openclaw | loaded | stock | 2026.4.12
fal | fal | openclaw | loaded | stock | 2026.4.12
Fireworks | fireworks | openclaw | loaded | stock | 2026.4.12
GitHub Copilot | github-copilot | openclaw | loaded | stock | 2026.4.12
Google | google | openclaw | loaded | stock | 2026.4.12
Hugging Face | huggingface | openclaw | loaded | stock | 2026.4.12
Yep, that already shows the bug, but send the other 3 sections and Iโll give you the clean fix in one shot.
Kilo Gateway | kilocode | openclaw | loaded | stock | 2026.4.12
Kimi | kimi | openclaw | loaded | stock | 2026.4.12
LiteLLM | litellm | openclaw | loaded | stock | 2026.4.12
LM Studio | lmstudio | openclaw | loaded | stock | 2026.4.12
Memory Core | memory-core | openclaw | loaded | stock | 2026.4.12
Microsoft Foundry | microsoft-foundry | openclaw | loaded | stock | 2026.4.12
MiniMax | minimax | openclaw | loaded | stock | 2026.4.12
Mistral | mistral | openclaw | loaded | stock | 2026.4.12
Moonshot | moonshot | openclaw | loaded | stock | 2026.4.12
NVIDIA | nvidia | openclaw | loaded | stock | 2026.4.12
Ollama | ollama | openclaw | loaded | stock | 2026.4.12
OpenAI | openai | openclaw | loaded | stock | 2026.4.12
OpenCode | opencode | openclaw | loaded | stock | 2026.4.12
OpenCode Go | opencode-go | openclaw | loaded | stock | 2026.4.12
OpenRouter | openrouter | openclaw | loaded | stock | 2026.4.12
Qianfan | qianfan | openclaw | loaded | stock | 2026.4.12
Qwen | qwen | openclaw | loaded | stock | 2026.4.12
SGLang | sglang | openclaw | loaded | stock | 2026.4.12
StepFun | stepfun | openclaw | loaded | stock | 2026.4.12
Synthetic | synthetic | openclaw | loaded | stock | 2026.4.12
Telegram | telegram | openclaw | loaded | stock | 2026.4.12
Together | together | openclaw | loaded | stock | 2026.4.12
Venice | venice | openclaw | loaded | stock | 2026.4.12
Vercel AI Gateway | vercel-ai-gateway | openclaw | loaded | stock | 2026.4.12
vLLM | vllm | openclaw | loaded | stock | 2026.4.12
Volcengine | volcengine | openclaw | loaded | stock | 2026.4.12
Vydra | vydra | openclaw | loaded | stock | 2026.4.12
xAI | xai | openclaw | loaded | stock | 2026.4.12
Xiaomi | xiaomi | openclaw | loaded | stock | 2026.4.12
Z.AI | zai | openclaw | loaded | stock | 2026.4.12
Lossless Claw | lossless-claw | openclaw | loaded | global | 0.8.2
done
Got it, keep going. The first section already shows the stale extra key, and this confirms the real plugin is loaded. Send the remaining 2.
Perfect, one more section and I can give you the exact cleanup commands.
Yep, found it.
You currently have two entries:
active-memoryโ correct\"active-memory\"โ bad stale key
That bad second one is exactly whatโs causing the warning.
Use this to remove the broken entry:
openclaw config unset 'plugins.entries["\"active-memory\""]'
openclaw gateway restart
Then verify:
openclaw config get plugins.entries --json
openclaw plugins inspect active-memory
After cleanup, you should only have the normal key:
"active-memory": { ... }
and not this one:
"\"active-memory\"": { ... }
So the good news is, Active Memory is actually already configured. The warning is just from that extra bogus entry.
If config unset fails, fallback is:
openclaw config file
then manually delete the block named:
"\"active-memory\""
One more important thing, since this was your original concern:
Active Memory is not the thing doing periodic timed calls. It runs before eligible replies. Your periodic traffic is still much more likely from heartbeat and/or cron.
If you want, next I can give you the exact commands to check whether QMD is your active memory backend.
i got this
totaluser@Total-Hardware:~$ openclaw config unset 'plugins.entries[""active-memory""]'
openclaw gateway restart
Config warnings:\n- plugins.entries."active-memory": plugin not found: "active-memory" (stale config entry ignored; remove it from plugins config)
๐ฆ OpenClaw 2026.4.12 (1c0672b)
I'm the reason your shell history looks like a hacker-movie montage.
Config path not found: plugins.entries[""active-memory""]
Config warnings:\n- plugins.entries."active-memory": plugin not found: "active-memory" (stale config entry ignored; remove it from plugins config)
๐ฆ OpenClaw 2026.4.12 (1c0672b)
If it's repetitive, I'll automate it; if it's hard, I'll bring jokes and a rollback plan.
โ
โ Config warnings โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ
โ โ
โ - plugins.entries."active-memory": plugin not found: "active-memory" โ
โ (stale config entry ignored; remove it from plugins config) โ
โ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ
Config warnings:\n- plugins.entries."active-memory": plugin not found: "active-memory" (stale config entry ignored; remove it from plugins config)
Restarted systemd service: openclaw-gateway.service
totaluser@Total-Hardware:~$
Yeah, that means the CLI path parser is choking on the malformed key. Easiest fix is manual.
Run:
openclaw config file
In that file, find and delete the whole block whose key is exactly:
"\"active-memory\"": {
...
}
Leave the normal one alone:
"active-memory": {
...
}
Then restart and verify:
openclaw gateway restart
openclaw config get plugins.entries --json
After that, the warning should be gone.
So at this point:
- your real
active-memoryconfig is fine
- the problem is just that one malformed duplicate entry
If you want, paste the plugins.entries section after cleanup and Iโll sanity-check it.
this is what my agent told me eariler
ound the issue. The active-memory plugin is enabled and hitting MiniMax every ~30 seconds for all agents (main, forge, rush, scout, vital). MiniMax keeps returning 529 overload errors, and each query times out after 15 seconds.
Here are your options:
- Increase timeout (quick fix โ gives MiniMax more time per query):
openclaw config set plugins.entries.active-memory.config.timeoutMs 30000
Then restart gateway. This just makes each query wait longer before giving up.
- Reduce which agents use active-memory (reduce load โ fewer queries):
openclaw config set plugins.entries.active-memory.config.agents '["main"]'
This limits active-memory to only your main session, removing it from Forge/Scout/Vital/Rush.
- Disable active-memory entirely (most reliable fix while MiniMax is unstable):
openclaw config set plugins.entries.active-memory.enabled false
Then restart. This stops all active-memory queries entirely until MiniMax stabilizes.
- Check if there's a rate limit โ active-memory is querying MiniMax constantly on every message. If MiniMax has a rate limit, we're probably hitting it and getting 529s back.
Which would you prefer โ increase timeout, reduce agents, or disable it?
Iโd only trust part of that diagnosis.
What looks right:
- Active Memory is enabled
- itโs enabled for 5 agents
timeoutMsis 15000
What I wouldnโt trust yet is the โevery 30 secondsโ part. Active Memory is supposed to run before eligible replies, not as a simple timer loop.
Also, if MiniMax is returning 529 overload, I would not start by increasing timeout. That usually just makes the failures slower.
My recommendation:
Best first move, reduce it to main only
openclaw config set 'plugins.entries["active-memory"].config.agents' '["main"]'
openclaw gateway restart
If that still causes trouble, disable it completely:
openclaw config set 'plugins.entries["active-memory"].enabled' false
openclaw gateway restart
I would not do this first:
openclaw config set 'plugins.entries["active-memory"].config.timeoutMs' 30000
because it increases wait time without reducing load.
So my actual recommendation is:
- limit Active Memory to
main - test
- if still overloaded, disable it
If you want, I can give you one small command to confirm whether the 529s are really coming from Active Memory vs heartbeat/cron.
yeah lets try to figure out what the 529s are from
Yep. Start with this and paste the matches:
openclaw logs | grep -E -n -C 3 '529|active-memory|heartbeat|cron|overload|timeout'
If that doesnโt show enough, do the live version and wait for the next failure:
openclaw logs --follow | grep -E --line-buffered '529|active-memory|heartbeat|cron|overload|timeout'
What Iโm looking for is whether the 529 lines are next to:
active-memoryheartbeatcron
Paste the first chunk you get and Iโll decode it.
multiple sections
39- [lcm] bootstrap: done session=48155618 bootstrapped=false importedMessages=0 reason=already bootstrapped duration=5ms
40- [lcm] assemble: falling back to live context conversation=5 contextItems=93 liveMessages=104 duration=3ms
41- [lcm] ingestBatch: session queue acquired queuedAhead=0 wait=0ms session=48155618 messages=4
42: [lcm] afterTurn: pruned 4 heartbeat ack messages for conversation=5 session=48155618
43- [lcm] Reusing shared engine init for db=/home/totaluser/.openclaw/lcm.db
44- [lcm] bootstrap: session queue acquired queuedAhead=0 wait=0ms session=18f3c582
45- [lcm] bootstrap: checkpoint hit conversation=6 session=18f3c582 existingCount=557 duration=2ms
46- [lcm] bootstrap: done session=18f3c582 bootstrapped=false importedMessages=0 reason=already bootstrapped duration=3ms
47- [lcm] assemble: done conversation=6 session=18f3c582 contextItems=157 hasSummaryItems=true inputMessages=1243 outputMessages=156 tokenBudget=200000 estimatedTokens=59362 duration=49ms
48: cron: pruned 1 expired cron run session(s)
49- [lcm] ingestBatch: session queue acquired queuedAhead=0 wait=0ms session=18f3c582 messages=4
50: [lcm] afterTurn: pruned 4 heartbeat ack messages for conversation=6 session=18f3c582
51- [lcm] Reusing shared engine init for db=/home/totaluser/.openclaw/lcm.db
52- [lcm] bootstrap: session queue acquired queuedAhead=0 wait=0ms session=fdcb89d9
53- [lcm] bootstrap: checkpoint hit conversation=7 session=fdcb89d9 existingCount=303 duration=2ms
56- [lcm] ingestBatch: session queue acquired queuedAhead=0 wait=0ms session=fdcb89d9 messages=4
57- [lcm] incremental compaction decision: conversation=7 cacheState=hot activityBand=low triggerLeafChunkTokens=40000 rawTokensOutsideTail=18819 threshold=40000 shouldCompact=false reason=below-leaf-trigger
58- [lcm] afterTurn: done conversation=7 session=fdcb89d9 newMessages=4 dedupedMessages=4 ingestedMessages=4 duration=64ms
59: heartbeat: using explicit accountId=forge target=telegram channel=none
60- [lcm] Reusing shared engine init for db=/home/totaluser/.openclaw/lcm.db
61- [lcm] bootstrap: session queue acquired queuedAhead=0 wait=0ms session=ff826a3b
62- [lcm] bootstrap: checkpoint hit conversation=8 session=ff826a3b existingCount=211 duration=1ms
63- [lcm] bootstrap: done session=ff826a3b bootstrapped=false importedMessages=0 reason=already bootstrapped duration=2ms
64- [lcm] assemble: falling back to live context conversation=8 contextItems=210 liveMessages=289 duration=1ms
65- [lcm] ingestBatch: session queue acquired queuedAhead=0 wait=0ms session=ff826a3b messages=2
66: WARN [lcm] afterTurn: heartbeat pruning failed: database disk image is malformed
67- [lcm] incremental compaction decision: conversation=8 cacheState=cold activityBand=low triggerLeafChunkTokens=20000 rawTokensOutsideTail=21392 threshold=20000 shouldCompact=true reason=cold-cache-catchup
68- [lcm] compactLeafAsync start: conversation=8 session=ff826a3b leafChunkTokens=40000 maxPasses=2 allowCondensedPasses=true
69- [lcm] afterTurn: done conversation=8 session=ff826a3b newMessages=2 dedupedMessages=2 ingestedMessages=2 duration=48ms
Got it, send the next chunk. So far this points more at heartbeat/cron activity than Active Memory.
91- ERROR: JSON5 parse failed: SyntaxError: JSON5: invalid end of input at 531:1
92- ERROR path: .npm-global/lib/node_modules/openclaw/dist/subsystem-CSBs8ZPt.js:161
93- ERROR Run openclaw doctor to repair, or fix the keys above manually.
94: cron: pruned 1 expired cron run session(s)
95: cron: pruned 1 expired cron run session(s)
96: config change detected; evaluating reload (tools.web.search.apiKey, plugins.entries."active-memory")
97: WARN config change requires gateway restart (plugins.entries."active-memory")
98- signal SIGUSR1 received
99- received SIGUSR1; restarting
100- gmail watcher stopped
126- canvas host mounted at http://127.0.0.1:18789/__openclaw__/canvas/
127- health-monitor started (interval: 300s, startup-grace: 60s, channel-connect-grace: 120s)
128- agent model: minimax-portal/MiniMax-M2.7
129: ready (4 plugins: active-memory, discord, lossless-claw, telegram; 7.5s)
130- log file: /tmp/openclaw/openclaw-2026-04-14.log
131- WARN security warning: dangerous config flags enabled: gateway.controlUi.allowInsecureAuth=true
132- WARN tailscale serve failed: Access denied: serve config denied
165- canvas host mounted at http://127.0.0.1:18789/__openclaw__/canvas/
166- health-monitor started (interval: 300s, startup-grace: 60s, channel-connect-grace: 120s)
167- agent model: minimax-portal/MiniMax-M2.7
168: ready (4 plugins: active-memory, discord, lossless-claw, telegram; 6.9s)
169- log file: /tmp/openclaw/openclaw-2026-04-14.log
170- WARN security warning: dangerous config flags enabled: gateway.controlUi.allowInsecureAuth=true
171- WARN tailscale serve failed: Access denied: serve config denied
Nice, this is getting clearer. Still looks like heartbeat is definitely active, and thereโs also an LCM DB issue (database disk image is malformed). Send the next chunk.
181- [discord] [rush] delaying provider startup 20s to reduce Discord startup rate limits
182- [discord] [total] delaying provider startup 30s to reduce Discord startup rate limits
183- [lcm] Reusing shared engine init for db=/home/totaluser/.openclaw/lcm.db
184: heartbeat: started intervalMs=900000
185: cron: started enabled=true jobs=13
186- [discord] [cipher] Discord Message Content Intent is limited; bots under 100 servers can use it without verification.
187- [discord] [cipher] starting provider (@Cipher)
188- [telegram] [default] starting provider (@Total_Oversight_Bot)
223- discord: 254 commands exceeds limit; removing per-skill commands and keeping /skill.
224- WARN discord: truncating native command description (command:lossless) from 121 to 100
225- discord client initialized as [REDACTED] (Total); awaiting gateway readiness
226: WARN embedded run agent end:
event=embedded_run_agent_end
isError=true
error="The AI service is temporarily overloaded. Please try again in a moment."
failoverReason=overloaded
model=MiniMax-M2.7
provider=minimax-portal
httpCode=529
providerErrorType=overloaded_error
providerErrorMessage="The server cluster is currently under high load. Please retry after a short wait and thank you for your patience. (2064) (529)"
Oof, okay, this shows a second problem too: your config file was briefly malformed (JSON5 parse failed), which explains some of the weirdness around that bad Active Memory key. Send the last chunk.
ok im done
Okay, weโve got the important part now.
What the logs actually prove
- The 529s are real provider overloads from MiniMax portal
- The failing event is a generic embedded agent run
- Heartbeat is 15m, not 30s:
heartbeat: started intervalMs=900000 - Cron is enabled with 13 jobs
- So the logs do not prove Active Memory is the 30s source
My read
Your load is more likely coming from a mix of:
- cron jobs (
jobs=13) - heartbeats
- multi-agent background runs
- with Active Memory adding extra calls on eligible replies
So I would not blame Active Memory alone from this evidence.
Best next step
First, reduce Active Memory load anyway, since itโs cheap to test:
openclaw config set 'plugins.entries["active-memory"].config.agents' '["main"]'
openclaw gateway restart
Then check the bigger likely culprit:
openclaw cron list
If you want to be aggressive and reduce background traffic further, also slow/disable heartbeat:
openclaw config set agents.defaults.heartbeat.every "0m"
openclaw gateway restart
Separate issue I would not ignore
You also have:
database disk image is malformedJSON5 parse failed
Those are separate problems and worth fixing with:
openclaw doctor
So, short version:
- 529s are real
- they are not proven to be from Active Memory specifically
- heartbeat is definitely not 30s
- cron is a strong suspect
Paste openclaw cron list next and Iโll help you identify which jobs are likely hammering the provider.
Thanks, I think weโve got it.
Bottom line
- The 529s are real MiniMax overloads
- The logs do not prove Active Memory is the source
- Your earlier โevery 30s per agentโ theory is not supported by the logs
- Heartbeat is 15m, not 30s
- You also have 13 cron jobs, which is a much stronger background-load suspect
- Active Memory is enabled, but itโs extra load on replies, not a simple timer loop
Also found
- a bad duplicate config key:
\"active-memory\" - a config parse problem happened at one point
lcm.dbshowsdatabase disk image is malformed
What Iโd do next, in order
- Reduce Active Memory to just
main
openclaw config set 'plugins.entries["active-memory"].config.agents' '["main"]'
openclaw gateway restart
-
Inspect cron jobs
openclaw cron list -
If overloads keep happening, disable heartbeat temporarily
openclaw config set agents.defaults.heartbeat.every "0m" openclaw gateway restart -
Run doctor, because you have unrelated state issues too
openclaw doctor
If you want, next I can help you go line-by-line through openclaw cron list and figure out which jobs are worth disabling first.
can i offload active memory and some other stuff to local models? and have the same performance?
Yes, you can offload some of it locally.
But same performance? Honestly, no, not usually.
Good candidates to move local
- memory embeddings / search
- QMD
- heartbeat
- Active Memory (sometimes)
Bad candidates if you want cloud-like behavior
- your main chat agent
- tool-heavy flows
- anything where you care a lot about reasoning reliability
The practical answer
A hybrid setup is usually the sweet spot:
- keep the main agent on cloud
- move memory search / embeddings local
- optionally move heartbeat local
- maybe move Active Memory local if youโre okay with some quality drop
Why Iโm saying โnot the sameโ
Local can be better for:
- cost
- privacy
- sometimes latency
But usually worse for:
- reasoning quality
- consistency
- tool calling reliability
Useful config knobs
- Active Memory model
plugins.entries["active-memory"].config.model - Memory search / embeddings backend
(agents.defaults.memorySearch.providerlocal,ollama,lmstudio) - Heartbeat model
agents.defaults.heartbeat.model
My recommendation
If you want the lowest-risk win:
- move memorySearch local first
- then try heartbeat local
- only then try Active Memory local
- keep the main agent cloud
If you want, I can give you a hybrid config snippet for exactly that setup.
yeah lets do the hybrid one. the local models i have are qwen3:14b and llama3.2:3b
Nice, Iโd use qwen3:14b for the hybrid setup.
I would not use llama3.2:3b for Active Memory if you want decent recall quality. Itโs okay for very cheap background stuff, but pretty likely to feel worse.
Hybrid setup Iโd recommend
- Main agent replies: keep on your current cloud model
- Active Memory: move to local
ollama/qwen3:14b - Heartbeat: move to local
ollama/qwen3:14b - memorySearch embeddings: leave alone for now
Reason Iโm leaving memorySearch alone:
- your local models are chat models
- memory search wants an embedding backend
- thatโs a separate thing
Commands
openclaw config set models.providers.ollama.apiKey "ollama-local"
openclaw config set 'plugins.entries["active-memory"].config.model' "ollama/qwen3:14b"
openclaw config set 'plugins.entries["active-memory"].config.agents' '["main"]'
openclaw config set agents.defaults.heartbeat.model "ollama/qwen3:14b"
openclaw gateway restart
What this gives you
- main conversations stay high quality
- Active Memory stops hitting your cloud provider
- heartbeats stop hitting your cloud provider
- lower background cost/load
What I would test after
/active-memory status
and:
openclaw status
Optional phase 2 later
If you want, after this works, I can help you move memory search local too, but thatโs a separate embedding/QMD decision. Iโd do it in a second step, not all at once.
you keep giving me config setups that add in that messed up active memory plugin error
Youโre right. Sorry, that oneโs on me.
For this plugin, stop using openclaw config set for now. On your machine itโs what keeps creating the bogus key and re-triggering the warning.
Do it manually instead
Open the config file:
openclaw config file
1) Remove the bad entry
Delete this whole block if it exists:
"\"active-memory\"": {
...
}
2) Keep only the real Active Memory block
Make sure the real one looks like this:
"active-memory": {
"enabled": true,
"config": {
"agents": ["main"],
"allowedChatTypes": ["direct", "channel"],
"model": "ollama/qwen3:14b",
"queryMode": "recent",
"promptStyle": "balanced",
"timeoutMs": 15000,
"maxSummaryChars": 220,
"logging": true
}
}
3) Add/update Ollama + heartbeat manually too
Somewhere in your config, make sure you also have:
models: {
providers: {
ollama: {
apiKey: "ollama-local"
}
}
},
agents: {
defaults: {
heartbeat: {
model: "ollama/qwen3:14b"
}
}
}
4) Restart
openclaw gateway restart
So, short version:
- donโt use
config setforactive-memoryright now - edit the file directly
- keep only
active-memory, delete\"active-memory\"
If you want, paste just your plugins.entries.active-memory, models.providers.ollama, and agents.defaults.heartbeat sections after editing, and Iโll sanity-check them before you restart.
totaluser@Total-Hardware:~$ openclaw config validate
Invalid config at /home/totaluser/.openclaw/openclaw.json:\n- models.providers.ollama.baseUrl: Invalid input: expected string, received undefined
- models.providers.ollama.models: Invalid input: expected array, received undefined
๐ฆ OpenClaw 2026.4.12 (1c0672b)
Your terminal just grew clawsโtype something and let the bot pinch the busywork.
Config invalid at ~/.openclaw/openclaw.json:
ร models.providers.ollama.baseUrl: Invalid input: expected string, received undefined
ร models.providers.ollama.models: Invalid input: expected array, received undefined
Run openclaw doctor to repair, or fix the keys above manually.
Yep, that one is my fault too. I had you create a partial explicit Ollama provider block, and OpenClaw expects that block to be complete.
What that error means
If models.providers.ollama exists in config, OpenClaw expects things like:
baseUrlmodels
So a tiny block with only apiKey is invalid.
Safest fix
- Open your config file:
openclaw config file
- Delete the entire
models.providers.ollamablock you added manually.
- Then set up Ollama the supported way:
openclaw config --section model
and choose Ollama there.
That wizard path is much safer than hand-writing the provider block.
After that
Keep your manual Active Memory block, but let the wizard handle Ollama.
Then you can set:
plugins.entries["active-memory"].config.model = "ollama/qwen3:14b"agents.defaults.heartbeat.model = "ollama/qwen3:14b"
So the immediate fix is
- remove the partial
models.providers.ollama - use the model wizard instead of manual Ollama config
Docs: https://docs.openclaw.ai/providers/ollama
If you want, paste just your current models section and Iโll tell you exactly what to delete before you rerun openclaw config --section model.
ok i added ollama
Nice. Next Iโd do this:
1) Verify Ollama is wired in cleanly
openclaw config validate
openclaw models list --provider ollama
2) If that looks good, edit your config file manually
openclaw config file
Set your real Active Memory block to use local Ollama:
"active-memory": {
"enabled": true,
"config": {
"agents": ["main"],
"allowedChatTypes": ["direct", "channel"],
"model": "ollama/qwen3:14b",
"queryMode": "recent",
"promptStyle": "balanced",
"timeoutMs": 15000,
"maxSummaryChars": 220,
"logging": true
}
}
And set heartbeat to local too:
agents: {
defaults: {
heartbeat: {
model: "ollama/qwen3:14b"
}
}
}
3) Restart
openclaw gateway restart
4) Quick sanity checks
openclaw status
and in chat:
/active-memory status
If you want, paste openclaw config validate and openclaw models list --provider ollama first, and Iโll sanity-check before you edit anything else.
here are logs from the most recent crash. it will come in sections ill be done when i say "im done"
Apr 13 23:34:12 [active-memory] agent=forge session=agent:forge:main start timeoutMs=15000 queryChars=2105
Apr 13 23:34:28 [agent/embedded] embedded run failover decision: runId=active-memory-mny8xgqy stage=assistant decision=surface_error reason=timeout provider=minimax-portal/MiniMax-M2.7
Apr 13 23:34:28 [active-memory] agent=forge session=agent:forge:main done status=timeout elapsedMs=16015 summaryChars=0
Apr 13 23:43:33 [active-memory] agent=forge session=agent:forge:main start timeoutMs=15000 queryChars=2208
Apr 13 23:43:51 [discord] 254 commands exceeds limit; removing per-skill commands and keeping /skill.
Apr 13 23:43:51 [agent/embedded] embedded run failover decision: runId=active-memory-mny99i91 stage=assistant decision=surface_error reason=timeout provider=minimax-portal/MiniMax-M2.7
Apr 13 23:43:51 [active-memory] agent=forge session=agent:forge:main done status=timeout elapsedMs=17888 summaryChars=0
Apr 13 23:43:57 [agent/embedded] embedded run agent end: isError=true model=MiniMax-M2.7 provider=minimax-portal error="The AI service is temporarily overloaded." httpCode=529
Apr 13 23:44:05 [agent/embedded] embedded run agent end: isError=true model=MiniMax-M2.7 provider=minimax-portal error="The AI service is temporarily overloaded." httpCode=529
Apr 13 23:44:15 [agent/embedded] embedded run agent end: isError=true model=MiniMax-M2.7 provider=minimax-portal error="The AI service is temporarily overloaded." httpCode=529
Apr 13 23:44:28 [agent/embedded] embedded run agent end: isError=true model=MiniMax-M2.7 provider=minimax-portal error="The AI service is temporarily overloaded." httpCode=529
Apr 13 23:44:28 [agent/embedded] auth profile failure state updated: provider=minimax-portal reason=overloaded window=cooldown reused=false
Apr 13 23:44:28 [agent/embedded] embedded run failover decision: runId=48c7c493 stage=assistant decision=fallback_model reason=overloaded provider=minimax-portal/MiniMax-M2.7
Apr 13 23:44:28 [diagnostic] lane task error: lane=main durationMs=58024 error="FailoverError: The AI service is temporarily overloaded."
Apr 13 23:44:28 [diagnostic] lane task error: lane=session:agent:forge:main durationMs=58025 error="FailoverError: The AI service is temporarily overloaded."
Apr 13 23:44:28 [model-fallback/decision] decision=candidate_failed requested=minimax-portal/MiniMax-M2.7 reason=overloaded next=minimax/MiniMax-M2.7
Apr 13 23:44:32 [active-memory] agent=forge session=agent:forge:main start timeoutMs=15000 queryChars=2208
Apr 13 23:44:48 [agent/embedded] embedded run failover decision: runId=active-memory-mny9arik stage=assistant decision=surface_error reason=timeout provider=minimax/MiniMax-M2.7
Apr 13 23:44:48 [active-memory] agent=forge session=agent:forge:main done status=timeout elapsedMs=15836 summaryChars=0
Apr 13 23:46:15 systemd: Stopping openclaw-gateway.service
Apr 13 23:46:15 [gateway] signal SIGTERM received
Apr 13 23:46:15 [gateway] received SIGTERM; shutting down
Apr 13 23:46:15 [gmail-watcher] gmail watcher stopped
Apr 13 23:46:15 [ws] webchat disconnected code=1006 reason=n/a
Apr 13 23:46:16 systemd: Stopped openclaw-gateway.service
Apr 13 23:46:16 systemd: Consumed 35min 34.843s CPU time, 4.7G memory peak, 243.6M memory swap peak
Apr 13 23:46:16 systemd: Started openclaw-gateway.service
Apr 13 23:46:19 [gateway] loading configurationโฆ
Apr 13 23:46:19 [gateway] resolving authenticationโฆ
Apr 13 23:46:19 [gateway] starting...
Apr 13 23:46:26 [gateway] starting HTTP server...
Apr 13 23:46:27 [health-monitor] started (interval: 300s, startup-grace: 60s, channel-connect-grace: 120s)
Apr 13 23:46:27 [gateway] agent model: minimax-portal/MiniMax-M2.7
Apr 13 23:46:27 [gateway] ready (4 plugins: active-memory, discord, lossless-claw, telegram; 7.7s)
im done
Got it, Iโll wait for the rest. This chunk does directly tie at least some failures to Active Memory on forge timing out against MiniMax.
Got it. This is even stronger evidence that Active Memory on forge is definitely one of the failing paths. Send the next chunk when ready.
Okay, we finally have the smoking gun.
What these logs confirm
-
Active Memory is definitely one of the failing paths
agent=forge ... status=timeout- itโs timing out around 15-18s
-
MiniMax is also genuinely overloaded
httpCode=529- failover is trying to move from
minimax-portaltominimax
-
This does not look like a mysterious hard crash
- systemd stops and restarts the gateway cleanly
- the main issue is provider overload + Active Memory timeouts
My read
So the real picture is:
- yes, Active Memory on
forgeis contributing to the problem - yes, MiniMax overload is also real
- no, this still doesnโt look like a simple โevery 30s timerโ issue
What I would do now
Since you already wanted a hybrid setup, Iโd make these changes manually in the config file, not with config set:
"active-memory": {
"enabled": true,
"config": {
"agents": ["main"],
"allowedChatTypes": ["direct", "channel"],
"model": "ollama/qwen3:14b",
"queryMode": "message",
"promptStyle": "balanced",
"timeoutMs": 15000,
"maxSummaryChars": 220,
"logging": true
}
}
And:
agents: {
defaults: {
heartbeat: {
model: "ollama/qwen3:14b"
}
}
}
Why these changes
agents: ["main"]removesforge/rush/scout/vitalfrom Active Memory loadmodel: "ollama/qwen3:14b"moves Active Memory off MiniMaxqueryMode: "message"shrinks the Active Memory prompt, so it should be faster and cheaper thanrecent
One nuance
If qwen3:14b is too slow locally, then bump:
timeoutMs: 30000
But I would only do that after moving it local.
So the plan Iโd recommend
- clean config
- Active Memory only on
main - Active Memory model = local Ollama
queryMode = "message"- restart gateway
If you want, paste your current real active-memory block and Iโll rewrite it exactly how it should look.
when heartbeat model is changed does that mean that the heartbeat instructions are performed by that local model or is it just the sending of the heartbeat that is done? cause what if my heartbeats instructions are complex tasks?
Yes, changing heartbeat.model means the heartbeat turn itself is run by that model.
So:
- it reads the heartbeat prompt
- it reads
HEARTBEAT.md - it decides what to do
- it produces the reply / action
It is not just the delivery/sending step.
So if your heartbeat instructions are complex, that local model is the one trying to carry them out.
Practical rule of thumb
- simple heartbeat stuff like โcheck if anything is urgentโ, โlight status checksโ, โkeep caches warmโ โ local is usually fine
- complex heartbeat stuff like multi-step reasoning, nuanced triage, tool-heavy workflows, or important decisions โ keep it on cloud
My recommendation
If your heartbeat is doing real work, I would not move it local blindly.
Better options:
- keep heartbeat on cloud
- move Active Memory local first
- or simplify heartbeat so the local model only does lightweight checks
If you want, paste your HEARTBEAT.md or describe what your heartbeat actually does, and Iโll tell you whether itโs a good local-model candidate.
shouldnt active memory be on a weaker model that is faster? all its doing it linking data together right? what are the downsoides to having a smaller local model on active memory
Yes, in principle Active Memory is a good place to use a smaller/faster model.
Itโs a bounded pre-reply task, not your full main agent.
But the downside is: bad Active Memory can actively make the main reply worse, because it injects memory context before the main answer.
What a too-small model gets wrong
- false positives: pulls in irrelevant memory when it should return
NONE - false negatives: misses the one memory that actually mattered
- bad summaries: compresses the memory incorrectly
- weak linking: fails to connect current message with older relevant context
- poor preference detection: confuses one-off events with stable preferences
So yes, smaller is reasonable, butโฆ
The safer speed wins usually come from:
- fewer agents
- smaller query scope
- then a smaller model
Thatโs why I suggested:
agents: ["main"]queryMode: "message"
Those two changes reduce load without hurting quality as much as dropping to a tiny model.
For your two local models
If I had to choose:
- qwen3:14b = reasonable for Active Memory
- llama3.2:3b = likely too small unless youโre okay with noticeably worse recall quality
My recommendation
Use a mid-sized fast model for Active Memory, not the tiniest one you have.
So:
- yes, weaker than your main model makes sense
- no, I would not go all the way down to a tiny 3B model unless youโre just experimenting
If you want, I can give you a โfast but safeโ Active Memory config tuned for qwen3:14b.
what is querymode mssage vs recent doing?
queryMode controls how much chat history Active Memory sees before it decides what memory to inject.
message
Active Memory sees just the current message.
Good:
- fastest
- cheapest
- least likely to get distracted by nearby chat
- better for weaker/local models
Tradeoff:
- can miss context if the current message is vague
Example:
โwhat was that place again?โ
In message, that may be too little context.
recent
Active Memory sees the current message plus a short window of recent turns.
Good:
- better continuity
- better when the user is referring to something mentioned a few messages ago
- more likely to connect follow-up questions correctly
Tradeoff:
- slower
- more tokens
- more chance of โcontext bleedโ or noisy recall
Practical rule
- use
messageif you want speed and cleaner recall - use
recentif your conversations are follow-up heavy and context matters a lot
For your setup, especially if you move Active Memory local, Iโd lean toward:
queryMode: "message"
Itโs usually the safer/faster choice for a smaller local model.
how can i check whats going on with qmd like the activity of qwen?
Yep, these are the best checks for QMD activity:
1) See if QMD is actually the backend
openclaw config get memory.backend --json
openclaw config get memory.qmd --json
If memory.backend says "qmd", QMD is active.
2) Get live memory/QMD status
openclaw memory status --deep --verbose
Thatโs the best single command for:
- whether memory is healthy
- whether QMD is being used
- embedding/provider/model details
- indexing/search issues
3) Force a verbose index run
openclaw memory index --agent main --verbose
That will usually show the most useful โwhat is QMD doing right now?โ detail.
4) Watch logs for QMD / memory activity
openclaw logs --follow | grep -E --line-buffered 'qmd|memory|embed|rerank|qwen'
Thatโs the easiest way to watch:
- QMD indexing
- embedding runs
- reranking/query activity
- whether Qwen-backed local pieces are doing work
5) If you want to inspect the raw QMD home
QMD data lives under:
~/.openclaw/agents/<agentId>/qmd/
So for main, usually:
ls -R ~/.openclaw/agents/main/qmd
If you paste openclaw memory status --deep --verbose, I can tell you exactly whether QMD and Qwen are actually active or not.
sorry i meant active memory. qmd doesnt have an agent attached to it right?
Right, QMD is not an agent.
Think of it like this:
- Active Memory = a blocking memory sub-agent
- QMD = a memory backend / search sidecar
So:
- Active Memory is the thing that runs before a reply
- QMD is just one possible backend that Active Memory can query through
memory_search
More precise version
QMD is per-agent in storage/layout, but it is not itself an agent.
So if Active Memory runs for forge, it uses forgeโs memory setup, and that setup might use QMD underneath.
Easy mental model
- agent = โthe thinkerโ
- active-memory = โthe pre-reply recall helperโ
- qmd = โthe local search engine / indexโ
If you want to watch Active Memory activity specifically, this is the better log filter:
openclaw logs --follow | grep -E --line-buffered 'active-memory|memory_search|memory_get|embedded run'
If you want, I can also give you a quick diagram of how main agent โ active memory โ qmd/memory_search fits together.
totaluser@Total-Hardware:~$ openclaw logs --follow | grep -E --line-buffered 'active-memory|memory_search|memory_get|embedded run'
2026-04-14T16:58:38.578Z info plugins {"subsystem":"plugins"} active-memory: agent=main session=agent:main:main start timeoutMs=15000 queryChars=1060
2026-04-14T16:58:45.678Z info {"plugin":"lossless-claw"} [lcm] assemble: conversation lookup missed session=active-memory-mnyv8i2b-b82a8cc8 sessionKey=agent:โฆd2f1 duration=0ms
2026-04-14T16:58:46.273Z info {"plugin":"lossless-claw"} [lcm] ingestBatch: session queue acquired queueKey=agent:โฆd2f1 queuedAhead=0 wait=0ms session=active-memory-mnyv8i2b-b82a8cc8 sessionKey=agent:โฆd2f1 messages=2
2026-04-14T16:58:46.277Z warn {"plugin":"lossless-claw"} [lcm] afterTurn: bootstrap checkpoint refresh failed for session=active-memory-mnyv8i2b-b82a8cc8 sessionKey=agent:โฆ2f1: ENOENT: no such file or directory, stat '/tmp/openclaw/openclaw-active-memory-7jemeb/session.jsonl'
2026-04-14T16:58:46.279Z info {"plugin":"lossless-claw"} [lcm] afterTurn: done conversation=142 session=active-memory-mnyv8i2b-b82a8cc8 sessionKey=agent:โฆd2f1 newMessages=2 dedupedMessages=2 ingestedMessages=2 duration=6ms
2026-04-14T16:58:46.368Z info plugins {"subsystem":"plugins"} active-memory: agent=main session=agent:main:main done status=ok elapsedMs=7789 summaryChars=42
2026-04-14T17:00:12.114Z info plugins {"subsystem":"plugins"} active-memory: agent=main session=agent:main:main start timeoutMs=15000 queryChars=1049
2026-04-14T17:00:19.191Z info {"plugin":"lossless-claw"} [lcm] assemble: conversation lookup missed session=active-memory-mnyvai8j-6cdd7e3a sessionKey=agent:โฆ2f20 duration=0ms
2026-04-14T17:00:19.426Z info {"plugin":"lossless-claw"} [lcm] ingestBatch: session queue acquired queueKey=agent:โฆ2f20 queuedAhead=0 wait=0ms session=active-memory-mnyvai8j-6cdd7e3a sessionKey=agent:โฆ2f20 messages=2
2026-04-14T17:00:19.429Z warn {"plugin":"lossless-claw"} [lcm] afterTurn: bootstrap checkpoint refresh failed for
part 1/2
session=active-memory-mnyvai8j-6cdd7e3a sessionKey=agent:โฆf20: ENOENT: no such file or directory, stat '/tmp/openclaw/openclaw-active-memory-S00zT4/session.jsonl'
2026-04-14T17:00:19.431Z info {"plugin":"lossless-claw"} [lcm] afterTurn: done conversation=143 session=active-memory-mnyvai8j-6cdd7e3a sessionKey=agent:โฆ2f20 newMessages=2 dedupedMessages=2 ingestedMessages=2 duration=5ms
2026-04-14T17:00:19.520Z info plugins {"subsystem":"plugins"} active-memory: agent=main session=agent:main:main done status=ok elapsedMs=7406 summaryChars=42
2026-04-14T17:14:55.676Z info plugins {"subsystem":"plugins"} active-memory: agent=rush session=agent:rush:main start timeoutMs=15000 queryChars=1204
2026-04-14T17:15:02.911Z info {"plugin":"lossless-claw"} [lcm] assemble: conversation lookup missed session=active-memory-mnyvtfzx-f9c94fe6 sessionKey=agent:โฆc312 duration=0ms
2026-04-14T17:15:03.132Z info {"plugin":"lossless-claw"} [lcm] ingestBatch: session queue acquired queueKey=agent:โฆc312 queuedAhead=0 wait=0ms session=active-memory-mnyvtfzx-f9c94fe6 sessionKey=agent:โฆc312 messages=2
2026-04-14T17:15:03.135Z warn {"plugin":"lossless-claw"} [lcm] afterTurn: bootstrap checkpoint refresh failed for session=active-memory-mnyvtfzx-f9c94fe6 sessionKey=agent:โฆ312: ENOENT: no such file or directory, stat '/tmp/openclaw/openclaw-active-memory-asK06K/session.jsonl'
2026-04-14T17:15:03.137Z info {"plugin":"lossless-claw"} [lcm] afterTurn: done conversation=144 session=active-memory-mnyvtfzx-f9c94fe6 sessionKey=agent:โฆc312 newMessages=2 dedupedMessages=2 ingestedMessages=2 duration=5ms
2026-04-14T17:15:03.156Z info plugins {"subsystem":"plugins"} active-memory: agent=rush session=agent:rush:main done status=ok elapsedMs=7481 summaryChars=42
Log tail truncated (increase --max-bytes).
what do these logs tell you
Got it, send part 2. So far this shows Active Memory on main is actually completing successfully in about 7 to 8 seconds, which is a lot healthier than the earlier forge timeouts.
These logs are actually pretty reassuring.
What they tell us
-
Active Memory is working now
agent=main ... done status=ok elapsedMs=7406agent=rush ... done status=ok elapsedMs=7481
So for those runs, Active Memory completed successfully in about 7.4 to 7.8 seconds.
-
It is not behaving like a fixed 30s timer
- runs happened at
16:58,17:00, then17:14 - that looks like triggered session activity, not a rigid polling loop
- runs happened at
-
The prompt/query size is smaller than the earlier failing runs
- earlier forge failures were around
queryChars=2105-2208 - now youโre seeing
queryChars=1060-1204
- earlier forge failures were around
That strongly suggests the newer config is lighter, which is good.
-
The
ENOENTwarnings look like temp-file cleanup noise- itโs trying to stat a temp Active Memory session file under
/tmp/openclaw/... - then the run still finishes
status=ok
So that warning looks more like a lossless-claw/temp-session bookkeeping issue than an Active Memory failure.
- itโs trying to stat a temp Active Memory session file under
-
summaryChars=42means it actually returned a small memory summary- not a timeout
- not
NONE - it found something and injected it
My conclusion
Right now:
- Active Memory itself looks healthy on
mainandrush - the earlier bad behavior was likely a mix of:
- bigger query size
- more agents enabled
- MiniMax overload at that time
The only weird thing left
This part:
bootstrap checkpoint refresh failed ... ENOENT ... /tmp/openclaw/openclaw-active-memory-.../session.jsonl
does not look like the cause of your provider crashes. It looks like a cleanup/checkpoint mismatch around temporary Active Memory sessions.
If that keeps happening a lot, itโs probably worth a GitHub issue with those exact lines.
So overall: your current Active Memory config looks much healthier than before.
lets go into that weird thing. what do you mean.
Yeah, the weird thing I meant is this part:
bootstrap checkpoint refresh failed ... ENOENT: no such file or directory ... /tmp/openclaw/openclaw-active-memory-.../session.jsonl
What that means
ENOENT just means:
โI tried to look at this file, but it was already gone.โ
Why thatโs happening here
Active Memory uses a temporary sub-session/transcript by default.
Per the docs, those blocking memory sub-agent transcripts are temporary and deleted after the run completes unless you turn on:
persistTranscripts: true
So the likely sequence is:
- Active Memory starts a temp session
- it finishes successfully
- the temp
session.jsonlgets cleaned up lossless-clawtries to refresh/checkpoint that temp session afterward- it canโt find the file anymore, so it logs
ENOENT
Why I called it โweird but probably harmlessโ
Because right after the warning, the run still ends with:
done status=ok
So:
- Active Memory itself did not fail
- the warning is more like post-run bookkeeping looking for a file that was already cleaned up
What it is probably not
It is probably not:
- the cause of the 529 overloads
- the reason Active Memory timed out earlier
- a sign that memory search itself is broken
If you want to debug it further
Temporarily enable transcript persistence:
persistTranscripts: true
That keeps the Active Memory transcripts on disk instead of deleting them right away, which makes this kind of thing easier to inspect.
So the short version is:
Active Memory creates a temp transcript, deletes it, and another plugin seems to still be trying to touch it afterward. Thatโs why I called it a cleanup/checkpoint mismatch.
so i dont have to worry about that
Probably not as an urgent problem, no.
Based on what you showed:
- Active Memory still finished with
status=ok - the warning looks like temp-file cleanup noise
- it doesnโt look like the cause of your 529s
So Iโd treat it as:
- not urgent
- worth noting
- only worth digging deeper if:
- Active Memory starts actually failing again
- you see a lot more of those warnings
- or lossless-claw starts misbehaving in other ways
So, short answer: I wouldnโt worry about that one right now.
wahts the command to check what my heartbeat model is?
Yep:
openclaw config get agents.defaults.heartbeat.model --json
openclaw config get agents.list --json
How to read it:
agents.defaults.heartbeat.model= global heartbeat modelagents.list= check for any per-agentheartbeat.modeloverrides
If agents.defaults.heartbeat.model says path not found, that usually means heartbeat is just using the agentโs normal model instead of a separate one.
totaluser@Total-Hardware:~$ openclaw config get agents.defaults.heartbeat.model --json
openclaw config get agents.list --json
"ollama/qwen3:14b"
[
{
"id": "main",
"memorySearch": {
"qmd": {
"extraCollections": [
{
"path": "/home/totaluser/.openclaw/shared/health_research",
"name": "health-research"
}
]
}
},
"heartbeat": {},
"subagents": {
"allowAgents": [
"forge",
"scout",
"vital",
"sentinel",
"alfred"
]
}
},
{
"id": "forge",
"name": "Forge",
"workspace": "/home/totaluser/.openclaw/forge",
"agentDir": "/home/totaluser/.openclaw/agents/forge/agent",
"heartbeat": {}
},
{
"id": "scout",
"name": "Scout",
"workspace": "/home/totaluser/.openclaw/scout",
"agentDir": "/home/totaluser/.openclaw/agents/scout/agent",
"memorySearch": {
"qmd": {
"extraCollections": [
{
"path": "/home/totaluser/.openclaw/shared/health_research",
"name": "health-research"
}
]
}
},
"heartbeat": {}
},
{
two parts 1/2
"id": "vital",
"name": "vital",
"workspace": "/home/totaluser/.openclaw/vital",
"agentDir": "/home/totaluser/.openclaw/agents/vital/agent",
"memorySearch": {
"qmd": {
"extraCollections": [
{
"path": "/home/totaluser/.openclaw/shared/health_research",
"name": "health-research"
}
]
}
},
"heartbeat": {}
},
{
"id": "sentinel",
"name": "sentinel",
"workspace": "/home/totaluser/.openclaw/sentinel",
"agentDir": "/home/totaluser/.openclaw/agents/sentinel/agent",
"heartbeat": {}
},
{
"id": "alfred",
"name": "Alfred",
"workspace": "/home/totaluser/.openclaw/alfred",
"agentDir": "/home/totaluser/.openclaw/agents/alfred/agent",
"heartbeat": {
"every": "15m",
"target": "telegram",
"accountId": "forge"
}
},
{
"id": "rush",
"name": "rush",
"workspace": "/home/totaluser/.openclaw/rush",
"agentDir": "/home/totaluser/.openclaw/agents/rush/agent",
"memorySearch": {
"qmd": {
"extraCollections": [
{
"path": "yr-knowledge"
}
]
}
}
},
{
"id": "cipher",
"name": "Cipher",
"workspace": "/home/totaluser/.openclaw/cipher",
"agentDir": "/home/totaluser/.openclaw/agents/cipher/agent"
}
]
totaluser@Total-Hardware:~$
Yep, send part 2. So far that means your default heartbeat model is definitely ollama/qwen3:14b.
Yep, that confirms it.
Your default heartbeat model is:
ollama/qwen3:14b
And from the agents.list output, I donโt see any per-agent heartbeat.model overrides, so the heartbeat-enabled agents are inheriting that default.
So effectively:
mainโ heartbeat usesollama/qwen3:14bforgeโ heartbeat usesollama/qwen3:14bscoutโ heartbeat usesollama/qwen3:14bvitalโ heartbeat usesollama/qwen3:14bsentinelโ heartbeat usesollama/qwen3:14balfredโ also usesollama/qwen3:14bfor heartbeat, but with its own target/account settings
So yes, your heartbeat logic is currently being run by the local Ollama Qwen model.
can we revert to the system default cloud model
Yep.
To make heartbeat go back to the normal inherited cloud model, unset the heartbeat-specific override:
openclaw config unset agents.defaults.heartbeat.model
openclaw gateway restart
Then verify:
openclaw config get agents.defaults.heartbeat.model --json
If it says path not found, heartbeat is back to inheriting the regular agent model again.
can we disable mains heartbeat, set vitals to every 6 hours, sentinel to hourly, set scout to hourly, disable rush, forge to hourly, cipher hourly, alfred every 15 minutes.
Yep. Based on the agents.list order you pasted, this should do it:
openclaw config set agents.defaults.heartbeat.every "0m"
openclaw config set agents.list[1].heartbeat.every "1h" # forge
openclaw config set agents.list[2].heartbeat.every "1h" # scout
openclaw config set agents.list[3].heartbeat.every "6h" # vital
openclaw config set agents.list[4].heartbeat.every "1h" # sentinel
openclaw config set agents.list[5].heartbeat.every "15m" # alfred
openclaw config set agents.list[7].heartbeat.every "1h" # cipher
openclaw gateway restart
What that does:
- main disabled (inherits default
0m)
- forge hourly
- scout hourly
- vital every 6 hours
- sentinel hourly
- alfred every 15 minutes
- rush disabled (no heartbeat block)
- cipher hourly
If you want to double-check after:
openclaw status
openclaw config get agents.list --json
If you want, I can also turn that into a single clean JSON snippet instead of a bunch of commands.
how do i check the fallback chain
If you mean the model fallback chain, these are the useful checks:
openclaw config get agents.defaults.model --json
openclaw config get agents.list --json
That shows:
- the default primary model
- the configured fallback list
- any per-agent model overrides
If you want to see the live failover behavior in logs too:
openclaw logs | grep -E -n -C 2 'failover decision|model-fallback|candidate_failed|overloaded'