Skip to content

Commit b317747

Browse files
authored
docs: consolidate moved docs pages
Consolidate moved docs pages, add redirects, and update glossary labels.
1 parent c37871e commit b317747

21 files changed

Lines changed: 413 additions & 1401 deletions

docs/.i18n/glossary.zh-CN.json

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -215,6 +215,50 @@
215215
"source": "Capability Cookbook",
216216
"target": "能力扩展手册"
217217
},
218+
{
219+
"source": "WhatsApp group messages",
220+
"target": "WhatsApp 群组消息"
221+
},
222+
{
223+
"source": "Oracle Cloud",
224+
"target": "Oracle Cloud"
225+
},
226+
{
227+
"source": "Install overview",
228+
"target": "安装概览"
229+
},
230+
{
231+
"source": "VPS hosting",
232+
"target": "VPS 托管"
233+
},
234+
{
235+
"source": "Linux server",
236+
"target": "Linux 服务器"
237+
},
238+
{
239+
"source": "Platforms",
240+
"target": "平台"
241+
},
242+
{
243+
"source": "Adding capabilities (redirect)",
244+
"target": "添加能力(重定向)"
245+
},
246+
{
247+
"source": "Adding capabilities (contributor guide)",
248+
"target": "添加能力(贡献者指南)"
249+
},
250+
{
251+
"source": "Plugin internals",
252+
"target": "插件内部机制"
253+
},
254+
{
255+
"source": "SDK overview",
256+
"target": "SDK 概览"
257+
},
258+
{
259+
"source": "Creating skills",
260+
"target": "创建技能"
261+
},
218262
{
219263
"source": "Setup Wizard Reference",
220264
"target": "设置向导参考"

docs/channels/group-messages.md

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,22 @@
11
---
2-
summary: "Behavior and config for WhatsApp group message handling (mentionPatterns are shared across surfaces)"
2+
summary: "WhatsApp group message handling — activation, allowlists, sessions, and context injection"
33
read_when:
4-
- Changing group message rules or mentions
5-
title: "Group messages"
4+
- Configuring WhatsApp groups specifically
5+
- Changing WhatsApp activation modes (`mention` vs `always`)
6+
- Tuning WhatsApp group session keys or pending-message context
7+
title: "WhatsApp group messages"
8+
sidebarTitle: "WhatsApp groups"
69
---
710

8-
Goal: let Clawd sit in WhatsApp groups, wake up only when pinged, and keep that thread separate from the personal DM session.
11+
For the cross-channel groups model (Discord, iMessage, Matrix, Microsoft Teams, Signal, Slack, Telegram, WhatsApp, Zalo), see [Groups](/channels/groups). This page covers the WhatsApp-specific behavior on top of that model: activation, group allowlists, per-group session keys, and pending-message context injection.
12+
13+
Goal: let OpenClaw sit in WhatsApp groups, wake up only when pinged, and keep that thread separate from the personal DM session.
914

1015
<Note>
11-
`agents.list[].groupChat.mentionPatterns` is also used by Telegram, Discord, Slack, and iMessage. This doc focuses on WhatsApp-specific behavior. For multi-agent setups, set `agents.list[].groupChat.mentionPatterns` per agent, or use `messages.groupChat.mentionPatterns` as a global fallback.
16+
`agents.list[].groupChat.mentionPatterns` is also used by Telegram, Discord, Slack, and iMessage. For multi-agent setups, set it per agent, or use `messages.groupChat.mentionPatterns` as a global fallback.
1217
</Note>
1318

14-
## Current implementation (2025-12-03)
19+
## Behavior
1520

1621
- Activation modes: `mention` (default) or `always`. `mention` requires a ping (real WhatsApp @-mentions via `mentionedJids`, safe regex patterns, or the bot’s E.164 anywhere in the text). `always` wakes the agent on every message but it should reply only when it can add meaningful value; otherwise it returns the exact silent token `NO_REPLY` / `no_reply`. Defaults can be set in config (`channels.whatsapp.groups`) and overridden per group via `/activation`. When `channels.whatsapp.groups` is set, it also acts as a group allowlist (include `"*"` to allow all).
1722
- Group policy: `channels.whatsapp.groupPolicy` controls whether group messages are accepted (`open|disabled|allowlist`). `allowlist` uses `channels.whatsapp.groupAllowFrom` (fallback: explicit `channels.whatsapp.allowFrom`). Default is `allowlist` (blocked until you add senders).

docs/concepts/openclaw-sdk.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ tests and embedded app runtimes.
6363
import { OpenClaw } from "@openclaw/sdk";
6464

6565
const oc = new OpenClaw({
66-
url: "ws://127.0.0.1:14565",
66+
url: "ws://127.0.0.1:18789",
6767
token: process.env.OPENCLAW_GATEWAY_TOKEN,
6868
requestTimeoutMs: 30_000,
6969
});

docs/concepts/system-prompt.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ The prompt is intentionally compact and uses fixed sections:
4747
- **Documentation**: local path to OpenClaw docs (repo or npm package) and when to read them.
4848
- **Workspace Files (injected)**: indicates bootstrap files are included below.
4949
- **Sandbox** (when enabled): indicates sandboxed runtime, sandbox paths, and whether elevated exec is available.
50-
- **Current Date & Time**: user-local time, timezone, and time format.
50+
- **Current Date & Time**: time zone only (cache-stable; the live clock comes from `session_status`).
5151
- **Reply Tags**: optional reply tag syntax for supported providers.
5252
- **Heartbeats**: heartbeat prompt and ack behavior, when heartbeats are enabled for the default agent.
5353
- **Runtime**: host, OS, node, model, repo root (when detected), thinking level (one line).

docs/concepts/timezone.md

Lines changed: 22 additions & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -1,95 +1,47 @@
11
---
2-
summary: "Timezone handling for agents, envelopes, and prompts"
2+
summary: "Where timezones show up in OpenClaw — envelopes, tool payloads, system prompt"
33
read_when:
4-
- You need to understand how timestamps are normalized for the model
5-
- Configuring the user timezone for system prompts
4+
- You want a quick mental model for timezone handling
5+
- You are deciding where to set or override a timezone
66
title: "Timezones"
77
---
88

9-
OpenClaw standardizes timestamps so the model sees a **single reference time**.
9+
OpenClaw standardizes timestamps so the model sees a **single reference time** instead of a mix of provider-local clocks. There are three surfaces where timezones show up, each with its own purpose:
1010

11-
## Message envelopes (local by default)
11+
## Three timezone surfaces
1212

13-
Inbound messages are wrapped in an envelope like:
13+
| Surface | What it shows | Default | Configured via |
14+
| ----------------- | ------------------------------------------------------------------------------------------------------- | ------------------------------------- | ------------------------------------------------------- |
15+
| Message envelopes | Wraps inbound channel messages: `[Signal +1555 2026-01-18 00:19 PST] hello` | Host-local | `agents.defaults.envelopeTimezone` |
16+
| Tool payloads | Channel `readMessages`-style tools return raw provider time + normalized `timestampMs` / `timestampUtc` | UTC fields always present | Not configurable — preserves provider-native timestamps |
17+
| System prompt | A small `Current Date & Time` block with the **time zone only** (no clock value, for cache stability) | Host timezone if `userTimezone` unset | `agents.defaults.userTimezone` |
1418

15-
```
16-
[Provider ... 2026-01-05 16:26 PST] message text
17-
```
19+
The system prompt deliberately omits the live clock to keep prompt caching stable across turns. When the agent needs the current time, it calls `session_status`.
1820

19-
The timestamp in the envelope is **host-local by default**, with minutes precision.
20-
21-
You can override this with:
21+
## Setting the user timezone
2222

2323
```json5
2424
{
2525
agents: {
2626
defaults: {
27-
envelopeTimezone: "local", // "utc" | "local" | "user" | IANA timezone
28-
envelopeTimestamp: "on", // "on" | "off"
29-
envelopeElapsed: "on", // "on" | "off"
27+
userTimezone: "America/Chicago",
3028
},
3129
},
3230
}
3331
```
3432

35-
- `envelopeTimezone: "utc"` uses UTC.
36-
- `envelopeTimezone: "user"` uses `agents.defaults.userTimezone` (falls back to host timezone).
37-
- Use an explicit IANA timezone (e.g., `"Europe/Vienna"`) for a fixed offset.
38-
- `envelopeTimestamp: "off"` removes absolute timestamps from envelope headers.
39-
- `envelopeElapsed: "off"` removes elapsed time suffixes (the `+2m` style).
40-
41-
### Examples
42-
43-
**Local (default):**
44-
45-
```
46-
[Signal Alice +1555 2026-01-18 00:19 PST] hello
47-
```
48-
49-
**Fixed timezone:**
50-
51-
```
52-
[Signal Alice +1555 2026-01-18 06:19 GMT+1] hello
53-
```
54-
55-
**Elapsed time:**
56-
57-
```
58-
[Signal Alice +1555 +2m 2026-01-18T05:19Z] follow-up
59-
```
60-
61-
## Tool payloads (raw provider data + normalized fields)
62-
63-
Tool calls (`channels.discord.readMessages`, `channels.slack.readMessages`, etc.) return **raw provider timestamps**.
64-
We also attach normalized fields for consistency:
65-
66-
- `timestampMs` (UTC epoch milliseconds)
67-
- `timestampUtc` (ISO 8601 UTC string)
68-
69-
Raw provider fields are preserved.
70-
71-
## User timezone for the system prompt
72-
73-
Set `agents.defaults.userTimezone` to tell the model the user's local time zone. If it is
74-
unset, OpenClaw resolves the **host timezone at runtime** (no config write).
75-
76-
```json5
77-
{
78-
agents: { defaults: { userTimezone: "America/Chicago" } },
79-
}
80-
```
81-
82-
The system prompt includes:
33+
If `userTimezone` is unset, OpenClaw resolves the host timezone at runtime (no config write). `agents.defaults.timeFormat` (`auto` | `12` | `24`) controls 12h/24h rendering in envelopes and downstream surfaces, not in the system prompt section.
8334

84-
- `Current Date & Time` section with local time and timezone
85-
- `Time format: 12-hour` or `24-hour`
35+
## When to override
8636

87-
You can control the prompt format with `agents.defaults.timeFormat` (`auto` | `12` | `24`).
37+
- **Use UTC envelopes** (`envelopeTimezone: "utc"`) when you want stable timestamps across hosts in different regions, or when you want UTC-aligned logs to match diagnostics output.
38+
- **Use a fixed IANA zone** (e.g. `"Europe/Vienna"`) when the gateway host is in one zone but the user is in another and you want envelopes to read in the user's zone regardless of host migration.
39+
- **Set `envelopeTimestamp: "off"`** for low-token envelopes when timestamp context is not useful for the conversation.
8840

89-
See [Date & Time](/date-time) for the full behavior and examples.
41+
For the full behavior reference, examples per provider, and elapsed-time formatting, see [Date & Time](/date-time).
9042

9143
## Related
9244

93-
- [Heartbeat](/gateway/heartbeat)active hours use timezone for scheduling
94-
- [Cron Jobs](/automation/cron-jobs)cron expressions use timezone for scheduling
95-
- [Date & Time](/date-time)full date/time behavior and examples
45+
- [Date & Time](/date-time)full envelope/tool/prompt behavior and examples.
46+
- [Heartbeat](/gateway/heartbeat)active hours use timezone for scheduling.
47+
- [Cron Jobs](/automation/cron-jobs)cron expressions use timezone for scheduling.

docs/docs.json

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@
102102
},
103103
{
104104
"source": "/tools/capability-cookbook",
105-
"destination": "/plugins/architecture"
105+
"destination": "/plugins/adding-capabilities"
106106
},
107107
{
108108
"source": "/brave-search",
@@ -1206,6 +1206,7 @@
12061206
"plugins/hooks",
12071207
"plugins/sdk-channel-plugins",
12081208
"plugins/sdk-provider-plugins",
1209+
"plugins/adding-capabilities",
12091210
"plugins/compatibility",
12101211
"plugins/sdk-migration"
12111212
]
@@ -1519,13 +1520,7 @@
15191520
},
15201521
{
15211522
"group": "Networking and discovery",
1522-
"pages": [
1523-
"network",
1524-
"gateway/network-model",
1525-
"gateway/pairing",
1526-
"gateway/discovery",
1527-
"gateway/bonjour"
1528-
]
1523+
"pages": ["network", "gateway/pairing", "gateway/discovery", "gateway/bonjour"]
15291524
}
15301525
]
15311526
},

docs/gateway/config-tools.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,11 +37,11 @@ Local onboarding defaults new local configs to `tools.profile: "coding"` when un
3737
| `group:memory` | `memory_search`, `memory_get` |
3838
| `group:web` | `web_search`, `x_search`, `web_fetch` |
3939
| `group:ui` | `browser`, `canvas` |
40-
| `group:automation` | `cron`, `gateway` |
40+
| `group:automation` | `heartbeat_respond`, `cron`, `gateway` |
4141
| `group:messaging` | `message` |
4242
| `group:nodes` | `nodes` |
43-
| `group:agents` | `agents_list` |
44-
| `group:media` | `image`, `image_generate`, `video_generate`, `tts` |
43+
| `group:agents` | `agents_list`, `update_plan` |
44+
| `group:media` | `image`, `image_generate`, `music_generate`, `video_generate`, `tts` |
4545
| `group:openclaw` | All built-in tools (excludes provider plugins) |
4646

4747
### `tools.allow` / `tools.deny`

docs/gateway/network-model.md

Lines changed: 3 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,12 @@
11
---
2-
summary: "How the Gateway, nodes, and canvas host connect."
2+
summary: "Redirect to /network#core-model"
33
read_when:
44
- You want a concise view of the Gateway networking model
55
title: "Network model"
6+
redirect: /network#core-model
67
---
78

8-
> This content has been merged into [Network](/network#core-model). See that page for the current guide.
9-
10-
Most operations flow through the Gateway (`openclaw gateway`), a single long-running
11-
process that owns channel connections and the WebSocket control plane.
12-
13-
## Core rules
14-
15-
- One Gateway per host is recommended. It is the only process allowed to own the WhatsApp Web session. For rescue bots or strict isolation, run multiple gateways with isolated profiles and ports. See [Multiple gateways](/gateway/multiple-gateways).
16-
- Loopback first: the Gateway WS defaults to `ws://127.0.0.1:18789`. The wizard creates shared-secret auth by default and usually generates a token, even for loopback. For non-loopback access, use a valid gateway auth path: shared-secret token/password auth, or a correctly configured non-loopback `trusted-proxy` deployment. Tailnet/mobile setups usually work best through Tailscale Serve or another `wss://` endpoint instead of raw tailnet `ws://`.
17-
- Nodes connect to the Gateway WS over LAN, tailnet, or SSH as needed. The
18-
legacy TCP bridge has been removed.
19-
- Canvas host is served by the Gateway HTTP server on the **same port** as the Gateway (default `18789`):
20-
- `/__openclaw__/canvas/`
21-
- `/__openclaw__/a2ui/`
22-
When `gateway.auth` is configured and the Gateway binds beyond loopback, these routes are protected by Gateway auth. Node clients use node-scoped capability URLs tied to their active WS session. See [Gateway configuration](/gateway/configuration) (`canvasHost`, `gateway`).
23-
- Remote use is typically SSH tunnel or tailnet VPN. See [Remote access](/gateway/remote) and [Discovery](/gateway/discovery).
9+
This content has been merged into [Network — Core model](/network#core-model).
2410

2511
## Related
2612

docs/gateway/sandbox-vs-tool-policy-vs-elevated.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -92,11 +92,11 @@ Available groups:
9292
- `group:memory`: `memory_search`, `memory_get`
9393
- `group:web`: `web_search`, `x_search`, `web_fetch`
9494
- `group:ui`: `browser`, `canvas`
95-
- `group:automation`: `cron`, `gateway`
95+
- `group:automation`: `heartbeat_respond`, `cron`, `gateway`
9696
- `group:messaging`: `message`
9797
- `group:nodes`: `nodes`
98-
- `group:agents`: `agents_list`
99-
- `group:media`: `image`, `image_generate`, `video_generate`, `tts`
98+
- `group:agents`: `agents_list`, `update_plan`
99+
- `group:media`: `image`, `image_generate`, `music_generate`, `video_generate`, `tts`
100100
- `group:openclaw`: all built-in OpenClaw tools (excludes provider plugins)
101101

102102
## Elevated: exec-only "run on host"

docs/install/digitalocean.md

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,12 @@ read_when:
66
title: "DigitalOcean"
77
---
88

9-
Run a persistent OpenClaw Gateway on a DigitalOcean Droplet.
9+
Run a persistent OpenClaw Gateway on a DigitalOcean Droplet (~$6/month for the 1 GB Basic plan).
10+
11+
DigitalOcean is the simplest paid VPS path. If you prefer cheaper or free options:
12+
13+
- [Hetzner](/install/hetzner) — €3.79/mo, more cores/RAM per dollar.
14+
- [Oracle Cloud](/install/oracle) — Always Free ARM (up to 4 OCPU, 24 GB RAM), but signup can be finicky and ARM-only.
1015

1116
## Prerequisites
1217

@@ -100,6 +105,8 @@ Run a persistent OpenClaw Gateway on a DigitalOcean Droplet.
100105

101106
Then open `https://<magicdns>/` from any device on your tailnet.
102107

108+
Tailscale Serve authenticates Control UI and WebSocket traffic via tailnet identity headers, which assumes the gateway host itself is trusted. HTTP API endpoints follow the gateway's normal auth mode (token/password) regardless. To require explicit shared-secret credentials over Serve, set `gateway.auth.allowTailscale: false` and use `gateway.auth.mode: "token"` or `"password"`.
109+
103110
**Option C: Tailnet bind (no Serve)**
104111

105112
```bash
@@ -112,6 +119,30 @@ Run a persistent OpenClaw Gateway on a DigitalOcean Droplet.
112119
</Step>
113120
</Steps>
114121

122+
## Persistence and backups
123+
124+
OpenClaw state lives under:
125+
126+
- `~/.openclaw/``openclaw.json`, per-agent `auth-profiles.json`, channel/provider state, and session data.
127+
- `~/.openclaw/workspace/` — the agent workspace (SOUL.md, memory, artifacts).
128+
129+
These survive Droplet reboots. To take a portable snapshot:
130+
131+
```bash
132+
openclaw backup create
133+
```
134+
135+
DigitalOcean snapshots back the whole Droplet up; `openclaw backup create` is portable across hosts.
136+
137+
## 1 GB RAM tips
138+
139+
The $6 Droplet only has 1 GB RAM. To keep things smooth:
140+
141+
- Make sure the swap step above is in `/etc/fstab` so it survives reboots.
142+
- Prefer API-based models (Claude, GPT) over local ones — local LLM inference does not fit in 1 GB.
143+
- Set `agents.defaults.model.primary` to a smaller model if you hit OOMs on large prompts.
144+
- Monitor with `free -h` and `htop`.
145+
115146
## Troubleshooting
116147

117148
**Gateway will not start** -- Run `openclaw doctor --non-interactive` and check logs with `journalctl --user -u openclaw-gateway.service -n 50`.

0 commit comments

Comments
 (0)