diff --git a/docs/.generated/config-baseline.sha256 b/docs/.generated/config-baseline.sha256
index 6a4c29aa9b4..2d88569e5a2 100644
--- a/docs/.generated/config-baseline.sha256
+++ b/docs/.generated/config-baseline.sha256
@@ -1,4 +1,4 @@
-2f2463daef1ea612d58e6bf0148d928d884a331053ad1063f9d18b0f753f51a1 config-baseline.json
-b95cc4a3b15e688afa58cf700dac425af4e50fd092209e75903e73d5d2988717 config-baseline.core.json
-a2a949a99f5cc5960d4d7ae0159b6b48c4d6b1f813be67cda196457ab2f88034 config-baseline.channel.json
+32a931b67bea0dda37c35a303e3de95e49b1bdbba10acaebfdb880c61b4e8342 config-baseline.json
+6d477ca3b60982b770e85929ab8393a7923a6b31ce99f3b7c7dba13cdd4f9180 config-baseline.core.json
+07005d122bda68081d530ae5cd455ffbc0817f7fb94bd462c4f25edc94a0546c config-baseline.channel.json
fffe0e74eab92a88c3c57952a70bc932438ce3a7f5f9982688437f2cdaee0bcb config-baseline.plugin.json
diff --git a/docs/.generated/plugin-sdk-api-baseline.sha256 b/docs/.generated/plugin-sdk-api-baseline.sha256
index 3a9b8726e5f..af404ea12e9 100644
--- a/docs/.generated/plugin-sdk-api-baseline.sha256
+++ b/docs/.generated/plugin-sdk-api-baseline.sha256
@@ -1,2 +1,2 @@
-dfdecb3918124ec7926ffe17220e498ffeef2fc7a7edfea528cc5a7f284cb8ef plugin-sdk-api-baseline.json
-079c31016f34256af290f80f3e16d6f8154eb13513d36547ba41d3241d60e0e4 plugin-sdk-api-baseline.jsonl
+5f5db635a11240bee5e6eec95d13ff5ab388f3a5477c2f17fd762b5ed5b3dbae plugin-sdk-api-baseline.json
+463c3bc12bf78ec6fc9350909fb3076967d276944da14343015f0dfae6ea48ed plugin-sdk-api-baseline.jsonl
diff --git a/docs/concepts/dreaming.md b/docs/concepts/dreaming.md
index 3d8d7d1b1fa..2edef2c4d5f 100644
--- a/docs/concepts/dreaming.md
+++ b/docs/concepts/dreaming.md
@@ -237,6 +237,10 @@ When enabled, the Gateway **Dreams** tab shows:
- a distinct grounded Scene lane for staged historical replay entries
- an expandable Dream Diary reader backed by `doctor.memory.dreamDiary`
+## Dreaming never runs: status shows blocked
+
+If `openclaw memory status` reports `Dreaming status: blocked`, the managed cron exists but the default agent heartbeat is not firing. Check that heartbeat is enabled for the default agent and that its target is not `none`, then run `openclaw memory status --deep` again after the next heartbeat interval.
+
## Related
- [Memory](/concepts/memory)
diff --git a/docs/gateway/config-channels.md b/docs/gateway/config-channels.md
index 66af032501e..c1add66c488 100644
--- a/docs/gateway/config-channels.md
+++ b/docs/gateway/config-channels.md
@@ -217,7 +217,7 @@ WhatsApp runs through the gateway's web channel (Baileys Web). It starts automat
- Optional `channels.telegram.defaultAccount` overrides default account selection when it matches a configured account id.
- In multi-account setups (2+ account ids), set an explicit default (`channels.telegram.defaultAccount` or `channels.telegram.accounts.default`) to avoid fallback routing; `openclaw doctor` warns when this is missing or invalid.
- `configWrites: false` blocks Telegram-initiated config writes (supergroup ID migrations, `/config set|unset`).
-- Top-level `bindings[]` entries with `type: "acp"` configure persistent ACP bindings for forum topics (use canonical `chatId:topic:topicId` in `match.peer.id`). Field semantics are shared in [ACP Agents](/tools/acp-agents#channel-specific-settings).
+- Top-level `bindings[]` entries with `type: "acp"` configure persistent ACP bindings for forum topics (use canonical `chatId:topic:topicId` in `match.peer.id`). Field semantics are shared in [ACP Agents](/tools/acp-agents#persistent-channel-bindings).
- Telegram stream previews use `sendMessage` + `editMessageText` (works in direct and group chats).
- Retry policy: see [Retry policy](/concepts/retry).
@@ -339,7 +339,7 @@ WhatsApp runs through the gateway's web channel (Baileys Web). It starts automat
- `maxAgeHours`: Discord override for hard max age in hours (`0` disables)
- `spawnSessions`: switch for `sessions_spawn({ thread: true })` and ACP thread-spawn auto thread creation/binding (default: `true`)
- `defaultSpawnContext`: native subagent context for thread-bound spawns (`"fork"` by default)
-- Top-level `bindings[]` entries with `type: "acp"` configure persistent ACP bindings for channels and threads (use channel/thread id in `match.peer.id`). Field semantics are shared in [ACP Agents](/tools/acp-agents#channel-specific-settings).
+- Top-level `bindings[]` entries with `type: "acp"` configure persistent ACP bindings for channels and threads (use channel/thread id in `match.peer.id`). Field semantics are shared in [ACP Agents](/tools/acp-agents#persistent-channel-bindings).
- `channels.discord.ui.components.accentColor` sets the accent color for Discord components v2 containers.
- `channels.discord.voice` enables Discord voice channel conversations and optional auto-join + LLM + TTS overrides. Text-only Discord configs leave voice off by default; set `channels.discord.voice.enabled=true` to opt in.
- `channels.discord.voice.model` optionally overrides the LLM model used for Discord voice channel responses.
@@ -594,7 +594,7 @@ BlueBubbles is the recommended iMessage path (plugin-backed, configured under `c
- Core key paths covered here: `channels.bluebubbles`, `channels.bluebubbles.dmPolicy`.
- Optional `channels.bluebubbles.defaultAccount` overrides default account selection when it matches a configured account id.
-- Top-level `bindings[]` entries with `type: "acp"` can bind BlueBubbles conversations to persistent ACP sessions. Use a BlueBubbles handle or target string (`chat_id:*`, `chat_guid:*`, `chat_identifier:*`) in `match.peer.id`. Shared field semantics: [ACP Agents](/tools/acp-agents#channel-specific-settings).
+- Top-level `bindings[]` entries with `type: "acp"` can bind BlueBubbles conversations to persistent ACP sessions. Use a BlueBubbles handle or target string (`chat_id:*`, `chat_guid:*`, `chat_identifier:*`) in `match.peer.id`. Shared field semantics: [ACP Agents](/tools/acp-agents#persistent-channel-bindings).
- Full BlueBubbles channel configuration is documented in [BlueBubbles](/channels/bluebubbles).
### iMessage
@@ -631,7 +631,7 @@ OpenClaw spawns `imsg rpc` (JSON-RPC over stdio). No daemon or port required.
- `attachmentRoots` and `remoteAttachmentRoots` restrict inbound attachment paths (default: `/Users/*/Library/Messages/Attachments`).
- SCP uses strict host-key checking, so ensure the relay host key already exists in `~/.ssh/known_hosts`.
- `channels.imessage.configWrites`: allow or deny iMessage-initiated config writes.
-- Top-level `bindings[]` entries with `type: "acp"` can bind iMessage conversations to persistent ACP sessions. Use a normalized handle or explicit chat target (`chat_id:*`, `chat_guid:*`, `chat_identifier:*`) in `match.peer.id`. Shared field semantics: [ACP Agents](/tools/acp-agents#channel-specific-settings).
+- Top-level `bindings[]` entries with `type: "acp"` can bind iMessage conversations to persistent ACP sessions. Use a normalized handle or explicit chat target (`chat_id:*`, `chat_guid:*`, `chat_identifier:*`) in `match.peer.id`. Shared field semantics: [ACP Agents](/tools/acp-agents#persistent-channel-bindings).
diff --git a/docs/gateway/configuration-reference.md b/docs/gateway/configuration-reference.md
index a1d2bf420f3..52e95d5d04b 100644
--- a/docs/gateway/configuration-reference.md
+++ b/docs/gateway/configuration-reference.md
@@ -223,6 +223,17 @@ See [Plugins](/tools/plugin).
---
+## Commitments
+
+`commitments` controls inferred follow-up memory: OpenClaw can detect check-ins from conversation turns and deliver them through heartbeat runs.
+
+- `commitments.enabled`: enable hidden LLM extraction, storage, and heartbeat delivery for inferred follow-up commitments. Default: `false`.
+- `commitments.maxPerDay`: maximum inferred follow-up commitments delivered per agent session in a rolling day. Default: `3`.
+
+See [Inferred commitments](/concepts/commitments).
+
+---
+
## Browser
```json5
diff --git a/docs/help/faq-first-run.md b/docs/help/faq-first-run.md
index b39624f6dee..1dc95afef79 100644
--- a/docs/help/faq-first-run.md
+++ b/docs/help/faq-first-run.md
@@ -58,7 +58,7 @@ and troubleshooting see the main [FAQ](/help/faq).
Other useful CLI checks: `openclaw status --all`, `openclaw logs --follow`,
`openclaw gateway status`, `openclaw health --verbose`.
- Quick debug loop: [First 60 seconds if something is broken](#first-60-seconds-if-something-is-broken).
+ Quick debug loop: [First 60 seconds if something is broken](/help/faq#first-60-seconds-if-something-is-broken).
Install docs: [Install](/install), [Installer flags](/install/installer), [Updating](/install/updating).
@@ -226,7 +226,7 @@ and troubleshooting see the main [FAQ](/help/faq).
up **memory + bootstrap files**, but **not** session history or auth. Those live
under `~/.openclaw/` (for example `~/.openclaw/agents//sessions/`).
- Related: [Migrating](/install/migrating), [Where things live on disk](#where-things-live-on-disk),
+ Related: [Migrating](/install/migrating), [Where things live on disk](/help/faq#where-things-live-on-disk),
[Agent workspace](/concepts/agent-workspace), [Doctor](/gateway/doctor),
[Remote mode](/gateway/remote).
@@ -796,7 +796,7 @@ and troubleshooting see the main [FAQ](/help/faq).
curl -fsSL https://openclaw.ai/install.sh | bash -s -- --install-method npm
```
- Backup tips: see [Backup strategy](#where-things-live-on-disk).
+ Backup tips: see [Backup strategy](/help/faq#where-things-live-on-disk).
diff --git a/docs/help/faq.md b/docs/help/faq.md
index 52419b68fc7..10a61a11253 100644
--- a/docs/help/faq.md
+++ b/docs/help/faq.md
@@ -1874,7 +1874,7 @@ lives on the [Models FAQ](/help/faq-models).
to **inherit**. Also confirm you are not using a bot profile with `verboseDefault` set
to `on` in config.
- Docs: [Thinking and verbose](/tools/thinking), [Security](/gateway/security#reasoning-verbose-output-in-groups).
+ Docs: [Thinking and verbose](/tools/thinking), [Security](/gateway/security/index#reasoning-and-verbose-output-in-groups).
diff --git a/docs/plugins/plugin-inventory.md b/docs/plugins/plugin-inventory.md
index 26c2df783c1..3b988d22b57 100644
--- a/docs/plugins/plugin-inventory.md
+++ b/docs/plugins/plugin-inventory.md
@@ -48,7 +48,6 @@ dependencies are available.
| [deepgram](/plugins/reference/deepgram) | Adds media understanding provider support. Adds realtime transcription provider support. | `@openclaw/deepgram-provider`
included in OpenClaw | contracts: mediaUnderstandingProviders, realtimeTranscriptionProviders |
| [deepinfra](/plugins/reference/deepinfra) | Adds DeepInfra model provider support to OpenClaw. | `@openclaw/deepinfra-provider`
included in OpenClaw | providers: deepinfra; contracts: imageGenerationProviders, mediaUnderstandingProviders, memoryEmbeddingProviders, speechProviders, videoGenerationProviders |
| [deepseek](/plugins/reference/deepseek) | Adds DeepSeek model provider support to OpenClaw. | `@openclaw/deepseek-provider`
included in OpenClaw | providers: deepseek |
-| [discord](/plugins/reference/discord) | Adds the Discord channel surface for sending and receiving OpenClaw messages. | `@openclaw/discord`
included in OpenClaw | channels: discord |
| [document-extract](/plugins/reference/document-extract) | Extract text and fallback page images from local document attachments. | `@openclaw/document-extract-plugin`
included in OpenClaw | contracts: documentExtractors |
| [duckduckgo](/plugins/reference/duckduckgo) | Adds web search provider support. | `@openclaw/duckduckgo-plugin`
included in OpenClaw | contracts: webSearchProviders |
| [elevenlabs](/plugins/reference/elevenlabs) | Adds media understanding provider support. Adds realtime transcription provider support. Adds text-to-speech provider support. | `@openclaw/elevenlabs-speech`
included in OpenClaw | contracts: mediaUnderstandingProviders, realtimeTranscriptionProviders, speechProviders |
@@ -128,6 +127,7 @@ dependencies are available.
| [diagnostics-otel](/plugins/reference/diagnostics-otel) | OpenClaw diagnostics OpenTelemetry exporter. | `@openclaw/diagnostics-otel`
ClawHub: `clawhub:@openclaw/diagnostics-otel`; npm | plugin |
| [diagnostics-prometheus](/plugins/reference/diagnostics-prometheus) | OpenClaw diagnostics Prometheus exporter. | `@openclaw/diagnostics-prometheus`
ClawHub: `clawhub:@openclaw/diagnostics-prometheus`; npm | plugin |
| [diffs](/plugins/reference/diffs) | Read-only diff viewer and file renderer for agents. | `@openclaw/diffs`
ClawHub + npm | contracts: tools; skills |
+| [discord](/plugins/reference/discord) | Adds the Discord channel surface for sending and receiving OpenClaw messages. | `@openclaw/discord`
ClawHub + npm | channels: discord |
| [feishu](/plugins/reference/feishu) | Adds the Feishu channel surface for sending and receiving OpenClaw messages. | `@openclaw/feishu`
ClawHub + npm | channels: feishu; contracts: tools; skills |
| [google-meet](/plugins/reference/google-meet) | Join Google Meet calls through Chrome or Twilio transports. | `@openclaw/google-meet`
ClawHub + npm | contracts: tools |
| [googlechat](/plugins/reference/googlechat) | Adds the Google Chat channel surface for sending and receiving OpenClaw messages. | `@openclaw/googlechat`
ClawHub + npm | channels: googlechat |
diff --git a/docs/plugins/reference.md b/docs/plugins/reference.md
index fdb51d3edc0..b8e02cccbb0 100644
--- a/docs/plugins/reference.md
+++ b/docs/plugins/reference.md
@@ -42,7 +42,7 @@ pnpm plugins:inventory:gen
| [diagnostics-otel](/plugins/reference/diagnostics-otel) | OpenClaw diagnostics OpenTelemetry exporter. | `@openclaw/diagnostics-otel`
ClawHub: `clawhub:@openclaw/diagnostics-otel`; npm | plugin |
| [diagnostics-prometheus](/plugins/reference/diagnostics-prometheus) | OpenClaw diagnostics Prometheus exporter. | `@openclaw/diagnostics-prometheus`
ClawHub: `clawhub:@openclaw/diagnostics-prometheus`; npm | plugin |
| [diffs](/plugins/reference/diffs) | Read-only diff viewer and file renderer for agents. | `@openclaw/diffs`
ClawHub + npm | contracts: tools; skills |
-| [discord](/plugins/reference/discord) | Adds the Discord channel surface for sending and receiving OpenClaw messages. | `@openclaw/discord`
included in OpenClaw | channels: discord |
+| [discord](/plugins/reference/discord) | Adds the Discord channel surface for sending and receiving OpenClaw messages. | `@openclaw/discord`
ClawHub + npm | channels: discord |
| [document-extract](/plugins/reference/document-extract) | Extract text and fallback page images from local document attachments. | `@openclaw/document-extract-plugin`
included in OpenClaw | contracts: documentExtractors |
| [duckduckgo](/plugins/reference/duckduckgo) | Adds web search provider support. | `@openclaw/duckduckgo-plugin`
included in OpenClaw | contracts: webSearchProviders |
| [elevenlabs](/plugins/reference/elevenlabs) | Adds media understanding provider support. Adds realtime transcription provider support. Adds text-to-speech provider support. | `@openclaw/elevenlabs-speech`
included in OpenClaw | contracts: mediaUnderstandingProviders, realtimeTranscriptionProviders, speechProviders |
diff --git a/docs/plugins/reference/discord.md b/docs/plugins/reference/discord.md
index b9ab08828ad..89f1ea4e637 100644
--- a/docs/plugins/reference/discord.md
+++ b/docs/plugins/reference/discord.md
@@ -12,7 +12,7 @@ Adds the Discord channel surface for sending and receiving OpenClaw messages.
## Distribution
- Package: `@openclaw/discord`
-- Install route: included in OpenClaw
+- Install route: ClawHub + npm
## Surface
diff --git a/docs/plugins/sdk-provider-plugins.md b/docs/plugins/sdk-provider-plugins.md
index b68efa2e9d2..cfe7cb2099c 100644
--- a/docs/plugins/sdk-provider-plugins.md
+++ b/docs/plugins/sdk-provider-plugins.md
@@ -29,6 +29,8 @@ API key auth, and dynamic model resolution.
+ ### Step 1: Package and manifest
+
```json package.json
{
@@ -481,6 +483,8 @@ API key auth, and dynamic model resolution.
+ ### Step 5: Add extra capabilities
+
A provider plugin can register speech, realtime transcription, realtime
voice, media understanding, image generation, video generation, web fetch,
and web search alongside text inference. OpenClaw classifies this as a
@@ -683,6 +687,8 @@ API key auth, and dynamic model resolution.
+ ### Step 6: Test
+
```typescript src/provider.test.ts
import { describe, it, expect } from "vitest";
// Export your provider config object from index.ts or a dedicated file
diff --git a/docs/reference/memory-config.md b/docs/reference/memory-config.md
index 64b40368fe1..0a289238768 100644
--- a/docs/reference/memory-config.md
+++ b/docs/reference/memory-config.md
@@ -213,6 +213,8 @@ For custom OpenAI-compatible endpoints or overriding provider defaults:
+ ### Bedrock embedding config
+
Bedrock uses the AWS SDK default credential chain — no API keys needed. If OpenClaw runs on EC2 with a Bedrock-enabled instance role, just set the provider and model:
```json5
diff --git a/docs/tools/exec.md b/docs/tools/exec.md
index 6d449f69754..ef6985901e7 100644
--- a/docs/tools/exec.md
+++ b/docs/tools/exec.md
@@ -101,7 +101,7 @@ Notes:
- `tools.exec.host` (default: `auto`; resolves to `sandbox` when sandbox runtime is active, `gateway` otherwise)
- `tools.exec.security` (default: `deny` for sandbox, `full` for gateway + node when unset)
- `tools.exec.ask` (default: `off`)
-- No-approval host exec is the default for gateway + node. If you want approvals/allowlist behavior, tighten both `tools.exec.*` and the host `~/.openclaw/exec-approvals.json`; see [Exec approvals](/tools/exec-approvals#no-approval-yolo-mode).
+- No-approval host exec is the default for gateway + node. If you want approvals/allowlist behavior, tighten both `tools.exec.*` and the host `~/.openclaw/exec-approvals.json`; see [Exec approvals](/tools/exec-approvals#yolo-mode-no-approval).
- YOLO comes from the host-policy defaults (`security=full`, `ask=off`), not from `host=auto`. If you want to force gateway or node routing, set `tools.exec.host` or use `/exec host=...`.
- In `security=full` plus `ask=off` mode, host exec follows the configured policy directly; there is no extra heuristic command-obfuscation prefilter or script-preflight rejection layer.
- `tools.exec.node` (default: unset)
diff --git a/docs/tools/tts.md b/docs/tools/tts.md
index 45c66429793..78bfc10bb6d 100644
--- a/docs/tools/tts.md
+++ b/docs/tools/tts.md
@@ -852,11 +852,14 @@ OpenAI and ElevenLabs output formats are fixed per channel as listed above.
+ ### Inworld primary
+
Env: `INWORLD_API_KEY`.
Default `https://api.inworld.ai`.
Default `inworld-tts-1.5-max`. Also: `inworld-tts-1.5-mini`, `inworld-tts-1-max`, `inworld-tts-1`.
Default `Sarah`.
Sampling temperature `0..2`.
+