docs: absorb maintainer docs sweep

Co-authored-by: Bob Du <i@bobdu.cc>
Co-authored-by: alitariksahin <alitariksah@gmail.com>
Co-authored-by: Jefsky <hwj3344@hotmail.com>
Co-authored-by: Musaab Hasan <m9.3b@Hotmail.com>
Co-authored-by: Intern Dev <dev@wukongai.io>
Co-authored-by: majin.nathan <majin.nathan@bytedance.com>
This commit is contained in:
Peter Steinberger
2026-05-22 20:29:03 +01:00
parent d946a02a13
commit e0fda55cf7
22 changed files with 430 additions and 182 deletions
+1
View File
@@ -6,6 +6,7 @@ Docs: https://docs.openclaw.ai
### Changes
- Docs: consolidate GLM under Z.AI, add the Upstash Box install guide and Gateway exposure runbook, clarify MEDIA directives, Copilot and Voyage setup, config path quoting, real behavior proof, and memory-file write guidance. Thanks @BobDu, @alitariksahin, @Jefsky, @musaabhasan, @OmerZeyveli, @leno23, @WuKongAI-CMU, @luoyanglang, and @majin1102.
- Docs: clarify media provider credentials, Codex/OpenClaw code-mode boundaries, Slack and Telegram ack reactions, Feishu dynamic agents, secrets plaintext boundaries, memory guidance, and Chinese glossary terms. Thanks @nielskaspers, @cosmopolitan033, @drclaw-iq, @alexgduarte, @zccyman, @chengoak, and @cassthebandit.
- Packaging: exclude documentation images and assets from the npm tarball, reducing published package size without affecting runtime docs search or CLI behavior. Thanks @SebTardif.
- Agents/subagents: limit default sub-agent bootstrap context to `AGENTS.md` and `TOOLS.md`, keeping persona, identity, user, memory, heartbeat, and setup files out of delegated workers by default. (#85283) Thanks @100yenadmin.
+4 -3
View File
@@ -133,7 +133,8 @@ Models config + CLI: [Models](https://docs.openclaw.ai/concepts/models). Auth pr
OpenClaw connects to real messaging surfaces. Treat inbound DMs as **untrusted input**.
Full security guide: [Security](https://docs.openclaw.ai/gateway/security)
Full security guide: [Security](https://docs.openclaw.ai/gateway/security).
Before remote exposure, use the [Gateway exposure runbook](https://docs.openclaw.ai/gateway/security/exposure-runbook).
Default behavior on Telegram/WhatsApp/Signal/iMessage/Microsoft Teams/Discord/Google Chat/Slack:
@@ -159,7 +160,7 @@ Run `openclaw doctor` to surface risky/misconfigured DM policies.
- Default: tools run on the host for the `main` session, so the agent has full access when it is just you.
- Group/channel safety: set `agents.defaults.sandbox.mode: "non-main"` to run non-`main` sessions inside sandboxes. Docker is the default sandbox backend; SSH and OpenShell backends are also available.
- Typical sandbox default: allow `bash`, `process`, `read`, `write`, `edit`, `sessions_list`, `sessions_history`, `sessions_send`, `sessions_spawn`; deny `browser`, `canvas`, `nodes`, `cron`, `discord`, `gateway`.
- Before exposing anything remotely, read [Security](https://docs.openclaw.ai/gateway/security), [Sandboxing](https://docs.openclaw.ai/gateway/sandboxing), and [Configuration](https://docs.openclaw.ai/gateway/configuration).
- Before exposing anything remotely, read [Security](https://docs.openclaw.ai/gateway/security), [Gateway exposure runbook](https://docs.openclaw.ai/gateway/security/exposure-runbook), [Sandboxing](https://docs.openclaw.ai/gateway/sandboxing), and [Configuration](https://docs.openclaw.ai/gateway/configuration).
## Operator quick refs
@@ -173,7 +174,7 @@ Run `openclaw doctor` to surface risky/misconfigured DM policies.
- New here: [Getting started](https://docs.openclaw.ai/start/getting-started), [Onboarding](https://docs.openclaw.ai/start/wizard), [Updating](https://docs.openclaw.ai/install/updating)
- Channel setup: [Channels index](https://docs.openclaw.ai/channels), [WhatsApp](https://docs.openclaw.ai/channels/whatsapp), [Telegram](https://docs.openclaw.ai/channels/telegram), [Discord](https://docs.openclaw.ai/channels/discord), [Slack](https://docs.openclaw.ai/channels/slack)
- Apps + nodes: [macOS](https://docs.openclaw.ai/platforms/macos), [iOS](https://docs.openclaw.ai/platforms/ios), [Android](https://docs.openclaw.ai/platforms/android), [Nodes](https://docs.openclaw.ai/nodes)
- Config + security: [Configuration](https://docs.openclaw.ai/gateway/configuration), [Security](https://docs.openclaw.ai/gateway/security), [Sandboxing](https://docs.openclaw.ai/gateway/sandboxing)
- Config + security: [Configuration](https://docs.openclaw.ai/gateway/configuration), [Security](https://docs.openclaw.ai/gateway/security), [Exposure runbook](https://docs.openclaw.ai/gateway/security/exposure-runbook), [Sandboxing](https://docs.openclaw.ai/gateway/sandboxing)
- Remote + web: [Gateway](https://docs.openclaw.ai/gateway), [Remote access](https://docs.openclaw.ai/gateway/remote), [Tailscale](https://docs.openclaw.ai/gateway/tailscale), [Web surfaces](https://docs.openclaw.ai/web)
- Tools + automation: [Tools](https://docs.openclaw.ai/tools), [Skills](https://docs.openclaw.ai/tools/skills), [Cron jobs](https://docs.openclaw.ai/automation/cron-jobs), [Webhooks](https://docs.openclaw.ai/automation/webhook), [Gmail Pub/Sub](https://docs.openclaw.ai/automation/gmail-pubsub)
- Internals: [Architecture](https://docs.openclaw.ai/concepts/architecture), [Agent](https://docs.openclaw.ai/concepts/agent), [Session model](https://docs.openclaw.ai/concepts/session), [Gateway protocol](https://docs.openclaw.ai/reference/rpc)
+8
View File
@@ -1022,5 +1022,13 @@
{
"source": "Per-user agent isolation",
"target": "每用户 Agent 隔离"
},
{
"source": "Gateway exposure runbook",
"target": "Gateway 暴露运行手册"
},
{
"source": "Z.AI (GLM)",
"target": "Z.AI (GLM)"
}
]
-1
View File
@@ -260,7 +260,6 @@
"zh-CN/providers/claude-max-api-proxy",
"zh-CN/providers/deepgram",
"zh-CN/providers/github-copilot",
"zh-CN/providers/glm",
"zh-CN/providers/moonshot",
"zh-CN/providers/minimax",
"zh-CN/providers/opencode",
+28
View File
@@ -45,6 +45,34 @@ GitHub may mark superseded jobs as `cancelled` when a newer push lands on the sa
The `ci-timings-summary` job uploads a compact `ci-timings-summary` artifact for each non-draft CI run. It records wall time, queue time, slowest jobs, and failed jobs for the current run, so CI health checks do not need to scrape the full Actions payload repeatedly.
## Real behavior proof
External contributor PRs run a `Real behavior proof` gate from
`.github/workflows/real-behavior-proof.yml`. The workflow checks out the trusted
base commit and evaluates the PR body only; it does not execute code from the
contributor branch.
The gate applies to PR authors who are not repository owners, members,
collaborators, or bots. It passes when the PR body contains a
`Real behavior proof` section with filled values for:
- `Behavior or issue addressed`
- `Real environment tested`
- `Exact steps or command run after this patch`
- `Evidence after fix`
- `Observed result after fix`
- `What was not tested`
The evidence must show the changed behavior after the patch in a real OpenClaw
setup. Screenshots, recordings, terminal captures, console output, copied live
output, redacted runtime logs, and linked artifacts all count. Unit tests, mocks,
snapshots, lint, typechecks, and CI results are useful supporting verification,
but they do not satisfy this gate by themselves.
When the check fails, update the PR body instead of pushing another code commit.
Maintainers can apply `proof: override` only when the proof gate should not
apply to that PR.
## Scope and routing
Scope logic lives in `scripts/ci-changed-scope.mjs` and is covered by unit tests in `src/scripts/ci-changed-scope.test.ts`. Manual dispatch skips changed-scope detection and makes the preflight manifest act as if every scoped area changed.
+1 -1
View File
@@ -177,7 +177,7 @@ Anthropic staff told us OpenClaw-style Claude CLI usage is allowed again, so Ope
### Other subscription-style hosted options
<CardGroup cols={3}>
<Card title="GLM models" href="/providers/glm">
<Card title="Z.AI (GLM)" href="/providers/zai">
Z.AI Coding Plan or general API endpoints.
</Card>
<Card title="MiniMax" href="/providers/minimax">
+1 -1
View File
@@ -95,7 +95,7 @@ plan](https://support.anthropic.com/en/articles/11845131-using-claude-code-with-
If you want other subscription-style options in OpenClaw, see [OpenAI
Codex](/providers/openai), [Qwen Cloud Coding
Plan](/providers/qwen), [MiniMax Coding Plan](/providers/minimax),
and [Z.AI / GLM Coding Plan](/providers/glm).
and [Z.AI / GLM Coding Plan](/providers/zai).
</Warning>
OpenClaw also exposes Anthropic setup-token as a supported token-auth path, but it now prefers Claude CLI reuse and `claude -p` when available.
+8 -3
View File
@@ -226,12 +226,16 @@
},
{
"source": "/glm",
"destination": "/providers/glm"
"destination": "/providers/zai"
},
{
"source": "/zai",
"destination": "/providers/zai"
},
{
"source": "/providers/glm",
"destination": "/providers/zai"
},
{
"source": "/message",
"destination": "/cli/message"
@@ -1040,7 +1044,8 @@
"install/oracle",
"install/railway",
"install/raspberry-pi",
"install/render"
"install/render",
"install/upstash"
]
},
{
@@ -1381,7 +1386,6 @@
"providers/fal",
"providers/fireworks",
"providers/github-copilot",
"providers/glm",
"providers/google",
"providers/gradium",
"providers/groq",
@@ -1529,6 +1533,7 @@
"group": "Security and sandboxing",
"pages": [
"gateway/security/index",
"gateway/security/exposure-runbook",
"gateway/security/secure-file-operations",
"gateway/security/audit-checks",
"gateway/operator-scopes",
+212
View File
@@ -0,0 +1,212 @@
---
summary: "Pre-flight and rollback checklist before exposing an OpenClaw Gateway beyond loopback"
title: "Gateway exposure runbook"
sidebarTitle: "Exposure runbook"
read_when:
- Exposing the Gateway over LAN, tailnet, Tailscale Serve, Funnel, or a reverse proxy
- Reviewing a deployment before allowing real messaging users
- Rolling back a risky remote access or DM configuration
---
<Warning>
Expose the Gateway only after you can explain who can reach it, how they are
authenticated, which agents they can trigger, and which tools those agents can
use. When in doubt, return to loopback-only access and re-run the audit.
</Warning>
This runbook turns the broader [Security](/gateway/security) guidance into an
operator checklist for remote access and messaging exposure.
## Choose the exposure pattern
Prefer the narrowest pattern that satisfies the workflow.
| Pattern | Recommended when | Required controls |
| -------------------------- | ----------------------------------------------- | --------------------------------------------------------------------------------------------------- |
| Loopback + SSH tunnel | Personal use, admin access, debugging | Keep `gateway.bind: "loopback"` and tunnel `127.0.0.1:18789` |
| Loopback + Tailscale Serve | Personal tailnet access to Control UI/WebSocket | Keep Gateway loopback-only; rely on Tailscale identity headers only for supported surfaces |
| Tailnet/LAN bind | Dedicated private network with known devices | Gateway auth, firewall allowlist, no public port-forward |
| Trusted reverse proxy | Organization SSO/OIDC in front of Gateway | `trusted-proxy` auth, strict `trustedProxies`, header overwrite/strip rules, explicit allowed users |
| Public internet | Rare, high-risk deployments | Identity-aware proxy, TLS, rate limits, strict allowlists, sandboxed non-main sessions |
Avoid direct public port-forwarding to the Gateway. If you need public access,
put an identity-aware proxy in front of it and make the proxy the only network
path to the Gateway.
## Pre-flight inventory
Record these before changing bind, proxy, Tailscale, or channel policy:
- Gateway host, OS user, and state directory.
- Gateway URL and bind mode.
- Auth mode, token/password source, or trusted proxy identity source.
- All enabled channels and whether they accept DMs, groups, or webhooks.
- Agents reachable from non-local senders.
- Tool profile, sandbox mode, and elevated tool policy for each reachable agent.
- External credentials available to those agents.
- Backup location for `~/.openclaw/openclaw.json` and credentials.
If more than one person can message the bot, treat this as shared delegated tool
authority, not as per-user host isolation.
## Baseline checks
Run these before opening access:
```bash
openclaw doctor
openclaw security audit
openclaw security audit --deep
openclaw health
```
Resolve critical findings first. Warnings may be acceptable only when they are
intentional and documented for the deployment.
For remote CLI validation, pass credentials explicitly:
```bash
openclaw gateway probe --url ws://127.0.0.1:18789 --token "$OPENCLAW_GATEWAY_TOKEN"
```
Do not assume local config credentials apply to an explicit remote URL.
## Minimum safe baseline
Use this shape as the starting point for exposed deployments:
```json5
{
gateway: {
bind: "loopback",
auth: {
mode: "token",
token: "replace-with-a-long-random-token",
},
},
session: {
dmScope: "per-channel-peer",
},
agents: {
defaults: {
sandbox: { mode: "non-main" },
},
},
tools: {
profile: "messaging",
exec: { security: "deny", ask: "always" },
elevated: { enabled: false },
},
}
```
Then widen one control at a time. For example, add a specific channel allowlist
before enabling write-capable tools, or enable a reverse proxy before accepting
remote Control UI traffic.
The strict `exec.security: "deny"` baseline blocks all exec calls, including
benign diagnostics. If diagnostics or low-risk commands are required, relax this
only after choosing the specific senders, agents, commands, and approval mode
that match your threat model.
## DM and group exposure
Messaging channels are untrusted input surfaces. Before allowing DMs or groups:
- Prefer `dmPolicy: "pairing"` or strict `allowFrom` lists.
- Avoid `dmPolicy: "open"` unless every sender is trusted.
- Do not combine `"*"` allowlists with broad tool access.
- Require mentions in groups unless the room is tightly controlled.
- Use `session.dmScope: "per-channel-peer"` when multiple people can DM the bot.
- Route shared channels to agents with minimal tools and no personal credentials.
Pairing approves the sender to trigger the bot. It does not make that sender a
separate host security boundary.
## Reverse proxy checks
For identity-aware proxies:
- The proxy must authenticate users before forwarding to the Gateway.
- Direct access to the Gateway port must be blocked by firewall or network policy.
- `gateway.trustedProxies` must contain only the proxy source IPs.
- The proxy must strip or overwrite client-supplied identity and forwarding headers.
- `gateway.auth.trustedProxy.allowUsers` should list expected users when the proxy serves more than one audience.
- Same-host loopback proxy mode should use `allowLoopback` only when local processes are trusted and the proxy owns the identity headers.
Run `openclaw security audit --deep` after proxy changes. Trusted-proxy findings
are intentionally high-signal because the proxy becomes the authentication
boundary.
## Tool and sandbox review
Before exposing an agent to remote senders:
- Confirm which sessions run on host versus sandbox.
- Deny or require approval for host exec.
- Keep elevated tools disabled unless a specific, trusted sender needs them.
- Avoid browser, canvas, node, cron, gateway, and session-spawn tools for open or semi-open messaging surfaces.
- Keep bind mounts narrow and avoid credential, home, Docker socket, and system paths.
- Use separate gateways, OS users, or hosts for materially different trust boundaries.
If remote users are not fully trusted, isolation must come from separate
deployments, not only from prompts or session labels.
## Post-change validation
After each exposure change:
1. Re-run `openclaw security audit --deep`.
2. Test a successful authorized connection.
3. Test that an unauthorized sender or browser session is denied.
4. Confirm logs redact secrets.
5. Confirm DM/group routing reaches only the intended agent.
6. Confirm high-impact tools ask for approval or are denied.
7. Document the accepted residual warnings.
Do not proceed to the next exposure change until the current one is understood.
## Rollback plan
If the Gateway may be overexposed:
```json5
{
gateway: {
bind: "loopback",
},
channels: {
whatsapp: { dmPolicy: "disabled" },
telegram: { dmPolicy: "disabled" },
discord: { dmPolicy: "disabled" },
slack: { dmPolicy: "disabled" },
},
tools: {
exec: { security: "deny", ask: "always" },
elevated: { enabled: false },
},
}
```
Then:
1. Stop public forwarding, Tailscale Funnel, or reverse proxy routes.
2. Rotate Gateway tokens/passwords and affected integration credentials.
3. Remove `"*"` and unexpected senders from allowlists.
4. Review recent audit logs, run history, tool calls, and config changes.
5. Re-run `openclaw security audit --deep`.
6. Re-enable access with the narrowest pattern that satisfies the workflow.
## Review checklist
- Gateway remains loopback-only unless there is a documented reason.
- Non-loopback access has auth, firewalling, and no public direct route.
- Trusted-proxy deployments have strict proxy IPs and header controls.
- DMs use pairing or allowlists, not open access by default.
- Groups require mentions or explicit allowlists.
- Shared channels do not reach personal credentials.
- Non-main sessions run in sandbox mode.
- Host exec and elevated tools are denied or approval-gated.
- Logs redact secrets.
- Critical audit findings are resolved.
- Rollback steps are tested and documented.
+4
View File
@@ -25,6 +25,10 @@ OpenClaw security guidance assumes a **personal assistant** deployment: one trus
This page explains hardening **within that model**. It does not claim hostile multi-tenant isolation on one shared gateway.
Before changing remote access, DM policy, reverse proxy, or public exposure,
use the [Gateway exposure runbook](/gateway/security/exposure-runbook) as a
pre-flight and rollback checklist.
## Quick check: `openclaw security audit`
See also: [Formal Verification (Security Models)](/security/formal-verification)
+2 -2
View File
@@ -534,7 +534,7 @@ and troubleshooting see the main [FAQ](/help/faq).
Docs: [Anthropic](/providers/anthropic), [OpenAI](/providers/openai),
[Qwen Cloud](/providers/qwen),
[MiniMax](/providers/minimax), [GLM Models](/providers/glm),
[MiniMax](/providers/minimax), [Z.AI (GLM)](/providers/zai),
[Local models](/gateway/local-models), [Models](/concepts/models).
</Accordion>
@@ -561,7 +561,7 @@ and troubleshooting see the main [FAQ](/help/faq).
safer, more predictable choice. If you want other subscription-style hosted
options in OpenClaw, see [OpenAI](/providers/openai), [Qwen / Model
Cloud](/providers/qwen), [MiniMax](/providers/minimax), and [GLM
Models](/providers/glm).
Models](/providers/zai).
</Accordion>
+96
View File
@@ -0,0 +1,96 @@
---
summary: "Host OpenClaw on Upstash Box with keep-alive and SSH tunnel access"
read_when:
- Deploying OpenClaw to Upstash Box
- You want a managed Linux environment for OpenClaw with SSH-tunneled dashboard access
title: "Upstash Box"
---
Run a persistent OpenClaw Gateway on Upstash Box, a managed Linux environment
with keep-alive lifecycle support.
Use an SSH tunnel for dashboard access. Do not expose the Gateway port directly
to the public internet.
## Prerequisites
- Upstash account
- Keep-alive Upstash Box
- SSH client on your local machine
## Create a Box
Create a keep-alive Box in the Upstash Console. Note the Box ID, such as
`right-flamingo-14486`, and your Box API key.
Upstash maintains its current OpenClaw Box walkthrough at
[OpenClaw Setup](https://upstash.com/docs/box/guides/openclaw-setup).
## Connect with an SSH tunnel
Forward the OpenClaw dashboard port to your local machine. Use your Box API key
as the SSH password when prompted:
```bash
ssh -o ServerAliveInterval=15 -o ServerAliveCountMax=3 -L 18789:127.0.0.1:18789 <box-id>@us-east-1.box.upstash.com
```
The keepalive options reduce idle tunnel drops during onboarding.
## Install OpenClaw
Inside the Box:
```bash
sudo npm install -g openclaw
```
## Run onboarding
```bash
openclaw onboard --install-daemon
```
Follow the prompts. Copy the dashboard URL and token when onboarding finishes.
## Start the Gateway
Configure the Gateway for the Box network and start it in the background:
```bash
openclaw config set gateway.bind lan
nohup openclaw gateway > gateway.log 2>&1 &
```
With the SSH tunnel active, open the dashboard URL locally:
```text
http://127.0.0.1:18789/#token=<your-token>
```
## Auto-restart
Set this command as the Box init script so the Gateway restarts when the Box
starts:
```bash
nohup openclaw gateway > gateway.log 2>&1 &
```
## Troubleshooting
If SSH freezes during onboarding, reconnect with a clean SSH config and
keepalives:
```bash
ssh -F /dev/null -o ControlMaster=no -o ServerAliveInterval=15 -o ServerAliveCountMax=3 -L 18789:127.0.0.1:18789 <box-id>@us-east-1.box.upstash.com
```
This bypasses stale local `~/.ssh/config` settings and keeps the tunnel active
through idle network periods.
## Related
- [Remote access](/gateway/remote)
- [Gateway security](/gateway/security)
- [Updating OpenClaw](/install/updating)
+1 -1
View File
@@ -121,7 +121,7 @@ Anthropic's current public docs:
`anthropic/*` and put the execution backend in provider/model runtime policy.
<Tip>
If you want the clearest billing path, use an Anthropic API key instead. OpenClaw also supports subscription-style options from [OpenAI Codex](/providers/openai), [Qwen Cloud](/providers/qwen), [MiniMax](/providers/minimax), and [Z.AI / GLM](/providers/glm).
If you want the clearest billing path, use an Anthropic API key instead. OpenClaw also supports subscription-style options from [OpenAI Codex](/providers/openai), [Qwen Cloud](/providers/qwen), [MiniMax](/providers/minimax), and [Z.AI / GLM](/providers/zai).
</Tip>
</Tab>
-137
View File
@@ -1,137 +0,0 @@
---
summary: "GLM model family overview and how to use it in OpenClaw"
read_when:
- You want GLM models in OpenClaw
- You need the model naming convention and setup
title: "GLM (Zhipu)"
---
GLM is a model family (not a company) available through the [Z.AI](https://z.ai) platform. In OpenClaw, GLM models are accessed through the bundled `zai` provider with refs like `zai/glm-5.1`.
| Property | Value |
| ------------------- | --------------------------------------------------------------------------- |
| Provider id | `zai` |
| Plugin | bundled, `enabledByDefault: true` |
| Auth env vars | `ZAI_API_KEY` or `Z_AI_API_KEY` |
| Onboarding choices | `zai-api-key`, `zai-coding-global`, `zai-coding-cn`, `zai-global`, `zai-cn` |
| API | OpenAI-compatible |
| Default base URL | `https://api.z.ai/api/paas/v4` |
| Suggested default | `zai/glm-5.1` |
| Default image model | `zai/glm-4.6v` |
## Getting started
<Steps>
<Step title="Choose an auth route and run onboarding">
Pick the onboarding choice that matches your Z.AI plan and region. The generic `zai-api-key` choice auto-detects the matching endpoint from the key shape; use the explicit regional choices when you want to force a specific Coding Plan or general API surface.
| Auth choice | Best for |
| ------------------- | --------------------------------------------------- |
| `zai-api-key` | Generic API key with endpoint auto-detection |
| `zai-coding-global` | Coding Plan users (global) |
| `zai-coding-cn` | Coding Plan users (China region) |
| `zai-global` | General API (global) |
| `zai-cn` | General API (China region) |
<CodeGroup>
```bash Auto-detect
openclaw onboard --auth-choice zai-api-key
```
```bash Coding Plan (global)
openclaw onboard --auth-choice zai-coding-global
```
```bash Coding Plan (China)
openclaw onboard --auth-choice zai-coding-cn
```
```bash General API (global)
openclaw onboard --auth-choice zai-global
```
```bash General API (China)
openclaw onboard --auth-choice zai-cn
```
</CodeGroup>
</Step>
<Step title="Set GLM as the default model">
```bash
openclaw config set agents.defaults.model.primary "zai/glm-5.1"
```
</Step>
<Step title="Verify models are available">
```bash
openclaw models list --provider zai
```
</Step>
</Steps>
## Config example
```json5
{
env: { ZAI_API_KEY: "sk-..." },
agents: { defaults: { model: { primary: "zai/glm-5.1" } } },
}
```
<Tip>
`zai-api-key` lets OpenClaw detect the matching Z.AI endpoint from the key shape and apply the correct base URL automatically. Use the explicit regional choices when you want to pin a specific Coding Plan or general API surface.
</Tip>
## Built-in catalog
The bundled `zai` provider seeds 13 GLM model refs. All entries support reasoning unless marked otherwise; `glm-5v-turbo` and `glm-4.6v` accept image input as well as text.
| Model ref | Notes |
| -------------------- | -------------------------------------------------- |
| `zai/glm-5.1` | Default model. Reasoning, text only, 202k context. |
| `zai/glm-5` | Reasoning, text only, 202k context. |
| `zai/glm-5-turbo` | Reasoning, text only, 202k context. |
| `zai/glm-5v-turbo` | Reasoning, text + image, 202k context. |
| `zai/glm-4.7` | Reasoning, text only, 204k context. |
| `zai/glm-4.7-flash` | Reasoning, text only, 200k context. |
| `zai/glm-4.7-flashx` | Reasoning, text only. |
| `zai/glm-4.6` | Reasoning, text only. |
| `zai/glm-4.6v` | Reasoning, text + image. Default image model. |
| `zai/glm-4.5` | Reasoning, text only. |
| `zai/glm-4.5-air` | Reasoning, text only. |
| `zai/glm-4.5-flash` | Reasoning, text only. |
| `zai/glm-4.5v` | Reasoning, text + image. |
<Note>
GLM versions and availability can change. Run `openclaw models list --provider zai` to see the catalog rows known to your installed version, and check Z.AI's docs for newly added or deprecated models.
</Note>
## Advanced configuration
<AccordionGroup>
<Accordion title="Endpoint auto-detection">
When you use the `zai-api-key` auth choice, OpenClaw inspects the key shape to determine the correct Z.AI base URL. Explicit regional choices (`zai-coding-global`, `zai-coding-cn`, `zai-global`, `zai-cn`) override auto-detection and pin the endpoint directly.
</Accordion>
<Accordion title="Provider details">
GLM models are served by the `zai` runtime provider. For full provider configuration, regional endpoints, and additional capabilities, see the [Z.AI provider page](/providers/zai).
</Accordion>
</AccordionGroup>
## Related
<CardGroup cols={2}>
<Card title="Z.AI provider" href="/providers/zai" icon="server">
Full Z.AI provider configuration and regional endpoints.
</Card>
<Card title="Model providers" href="/concepts/model-providers" icon="layers">
Choosing providers, model refs, and failover behavior.
</Card>
<Card title="Thinking modes" href="/tools/thinking" icon="brain">
`/think` levels for the reasoning-capable GLM family.
</Card>
<Card title="Models FAQ" href="/help/faq-models" icon="circle-question">
Auth profiles, switching models, and resolving "no profile" errors.
</Card>
</CardGroup>
+1 -2
View File
@@ -41,7 +41,6 @@ Looking for chat channel docs (WhatsApp/Telegram/Discord/Slack/Mattermost (plugi
- [fal](/providers/fal)
- [Fireworks](/providers/fireworks)
- [GitHub Copilot](/providers/github-copilot)
- [GLM models](/providers/glm)
- [Google (Gemini)](/providers/google)
- [Gradium](/providers/gradium)
- [Groq (LPU inference)](/providers/groq)
@@ -76,7 +75,7 @@ Looking for chat channel docs (WhatsApp/Telegram/Discord/Slack/Mattermost (plugi
- [Vydra](/providers/vydra)
- [xAI](/providers/xai)
- [Xiaomi](/providers/xiaomi)
- [Z.AI](/providers/zai)
- [Z.AI (GLM)](/providers/zai)
## Shared overview pages
+1 -2
View File
@@ -32,7 +32,6 @@ model as `provider/model`.
- [DeepInfra](/providers/deepinfra)
- [fal](/providers/fal)
- [Fireworks](/providers/fireworks)
- [GLM models](/providers/glm)
- [MiniMax](/providers/minimax)
- [Mistral](/providers/mistral)
- [Moonshot AI (Kimi + Kimi Coding)](/providers/moonshot)
@@ -47,7 +46,7 @@ model as `provider/model`.
- [Vercel AI Gateway](/providers/vercel-ai-gateway)
- [Venice (Venice AI)](/providers/venice)
- [xAI](/providers/xai)
- [Z.AI](/providers/zai)
- [Z.AI (GLM)](/providers/zai)
## Additional provider variants
+49 -28
View File
@@ -6,19 +6,26 @@ read_when:
title: "Z.AI"
---
Z.AI is the API platform for **GLM** models. It provides REST APIs for GLM and uses API keys
for authentication. Create your API key in the Z.AI console. OpenClaw uses the `zai` provider
with a Z.AI API key.
Z.AI is the API platform for **GLM** models. It provides REST APIs for GLM and
uses API keys for authentication. Create your API key in the Z.AI console.
OpenClaw uses the `zai` provider with a Z.AI API key.
- Provider: `zai`
- Auth: `ZAI_API_KEY`
- API: Z.AI Chat Completions (Bearer auth)
| Property | Value |
| -------- | -------------------------------------------- |
| Provider | `zai` |
| Auth | `ZAI_API_KEY` (legacy alias: `Z_AI_API_KEY`) |
| API | Z.AI Chat Completions (Bearer auth) |
## GLM models
GLM is a model family, not a separate provider. In OpenClaw, GLM models use
refs such as `zai/glm-5.1`: provider `zai`, model id `glm-5.1`.
## Getting started
<Tabs>
<Tab title="Auto-detect endpoint">
**Best for:** most users. OpenClaw detects the matching Z.AI endpoint from the key and applies the correct base URL automatically.
**Best for:** most users. OpenClaw probes supported Z.AI endpoints with your API key and applies the correct base URL automatically.
<Steps>
<Step title="Run onboarding">
@@ -26,14 +33,6 @@ with a Z.AI API key.
openclaw onboard --auth-choice zai-api-key
```
</Step>
<Step title="Set a default model">
```json5
{
env: { ZAI_API_KEY: "sk-..." },
agents: { defaults: { model: { primary: "zai/glm-5.1" } } },
}
```
</Step>
<Step title="Verify the model is listed">
```bash
openclaw models list --all --provider zai
@@ -62,14 +61,6 @@ with a Z.AI API key.
openclaw onboard --auth-choice zai-cn
```
</Step>
<Step title="Set a default model">
```json5
{
env: { ZAI_API_KEY: "sk-..." },
agents: { defaults: { model: { primary: "zai/glm-5.1" } } },
}
```
</Step>
<Step title="Verify the model is listed">
```bash
openclaw models list --all --provider zai
@@ -80,6 +71,29 @@ with a Z.AI API key.
</Tab>
</Tabs>
## Config example
<Tip>
`zai-api-key` lets OpenClaw detect the matching Z.AI endpoint from the key and
apply the correct base URL automatically. Use the explicit regional choices when
you want to force a specific Coding Plan or general API surface.
</Tip>
```json5
{
env: { ZAI_API_KEY: "sk-..." },
models: {
providers: {
zai: {
// Example value. Onboarding writes the matching baseUrl for your endpoint.
baseUrl: "https://api.z.ai/api/paas/v4",
},
},
},
agents: { defaults: { model: { primary: "zai/glm-5.1" } } },
}
```
## Built-in catalog
OpenClaw ships the bundled `zai` provider catalog in the plugin manifest, so read-only
@@ -108,9 +122,15 @@ The manifest-backed catalog currently includes:
| `zai/glm-4.5v` | |
<Tip>
GLM models are available as `zai/<model>` (example: `zai/glm-5`). The default bundled model ref is `zai/glm-5.1`.
GLM models are available as `zai/<model>` (example: `zai/glm-5`).
</Tip>
<Note>
The default bundled model ref is `zai/glm-5.1`. GLM versions and availability
can change; run `openclaw models list --all --provider zai` to see the catalog
known to your installed version.
</Note>
## Advanced configuration
<AccordionGroup>
@@ -185,8 +205,9 @@ GLM models are available as `zai/<model>` (example: `zai/glm-5`). The default bu
<Accordion title="Auth details">
- Z.AI uses Bearer auth with your API key.
- The `zai-api-key` onboarding choice auto-detects the matching Z.AI endpoint from the key prefix.
- The `zai-api-key` onboarding choice auto-detects the matching Z.AI endpoint by probing supported endpoints with your key.
- Use the explicit regional choices (`zai-coding-global`, `zai-coding-cn`, `zai-global`, `zai-cn`) when you want to force a specific API surface.
- The legacy env var `Z_AI_API_KEY` is still accepted; OpenClaw copies it to `ZAI_API_KEY` at startup if `ZAI_API_KEY` is unset.
</Accordion>
</AccordionGroup>
@@ -194,10 +215,10 @@ GLM models are available as `zai/<model>` (example: `zai/glm-5`). The default bu
## Related
<CardGroup cols={2}>
<Card title="GLM model family" href="/providers/glm" icon="microchip">
Model family overview for GLM.
</Card>
<Card title="Model selection" href="/concepts/model-providers" icon="layers">
Choosing providers, model refs, and failover behavior.
</Card>
<Card title="Configuration reference" href="/gateway/configuration-reference" icon="gear">
Full OpenClaw config schema, including provider and model settings.
</Card>
</CardGroup>
+1
View File
@@ -67,6 +67,7 @@ cp docs/reference/AGENTS.default.md ~/.openclaw/workspace/AGENTS.md
- Long-term memory: `MEMORY.md` for durable facts, preferences, and decisions.
- Lowercase `memory.md` is legacy repair input only; do not keep both root files on purpose.
- On session start, read today + yesterday + `MEMORY.md` when present.
- Before writing memory files, read them first; write only concrete updates, never empty placeholders.
- Capture: decisions, preferences, constraints, open loops.
- Avoid secrets unless explicitly requested.
+1
View File
@@ -37,6 +37,7 @@ git commit -m "Add agent workspace"
- Keep a short daily log at memory/YYYY-MM-DD.md (create memory/ if needed).
- On session start, read today + yesterday if present.
- Before writing memory files, read them first; write only concrete updates, never empty placeholders.
- Capture durable facts, preferences, and decisions; avoid secrets.
## Heartbeats (optional)
+1
View File
@@ -52,6 +52,7 @@ Capture what matters. Decisions, context, things to remember. Skip the secrets u
- **Memory is limited** — if you want to remember something, WRITE IT TO A FILE
- "Mental notes" don't survive session restarts. Files do.
- Before writing memory files, read them first; write only concrete updates, never empty placeholders.
- When someone says "remember this" → update `memory/YYYY-MM-DD.md` or relevant file
- When you learn a lesson → update AGENTS.md, TOOLS.md, or the relevant skill
- When you make a mistake → document it so future-you doesn't repeat it
+9 -1
View File
@@ -196,7 +196,7 @@ Inbound attachments (images/audio/docs) can be surfaced to your command via temp
- `{{MediaUrl}}` (pseudo-URL)
- `{{Transcript}}` (if audio transcription is enabled)
Outbound attachments from the agent: include `MEDIA:<path-or-url>` on its own line (no spaces). Example:
Outbound attachments from the agent: include `MEDIA:<path-or-url>` on its own line (no spaces). The directive must start the line as plain text, outside code fences and without Markdown wrappers such as bold or inline code. Example:
```
Here's the screenshot.
@@ -205,6 +205,14 @@ MEDIA:https://example.com/screenshot.png
OpenClaw extracts these and sends them as media alongside the text.
These forms are not attachment directives and are sent as normal text:
```md
**MEDIA:https://example.com/screenshot.png**
`MEDIA:https://example.com/screenshot.png`
Here is the screenshot: MEDIA:https://example.com/screenshot.png
```
Local-path behavior follows the same file-read trust model as the agent:
- If `tools.fs.workspaceOnly` is `true`, outbound `MEDIA:` local paths stay restricted to the OpenClaw temp root, the media cache, agent workspace paths, and sandbox-generated files.
+1
View File
@@ -422,6 +422,7 @@ function buildAssistantOutputDirectivesSection(params: {
return [
"## Assistant Output Directives",
"- Attach media: `MEDIA:<path-or-url>` on its own line.",
" The MEDIA directive must start the line as plain text, outside code fences and without Markdown wrappers. Do not write `**MEDIA:...**`, `` `MEDIA:...` ``, or inline prose like `Here is the file: MEDIA:...`.",
"- Voice-note audio hint: `[[audio_as_voice]]` when audio is attached.",
"- Native quote/reply: first token `[[reply_to_current]]`; use `[[reply_to:<id>]]` only with an explicit id.",
"- Supported directives are stripped before rendering; channel config still decides delivery.",