openclaw/docs/docs.json
Peter Steinberger 295809df98
feat(geolocation): resolve client addresses to a coarse city via a bundled plugin (#128546)
* feat(geolocation): resolve client addresses to a coarse city via a bundled plugin

The Activity identity card could show a client's IP address but not where it
was, so an operator still had to look the address up by hand.

Add a bundled `geolocation` plugin that owns address-to-place resolution behind
one authenticated route, `GET /plugins/geolocation/lookup?ip=`. It downloads a
MaxMind-format database on first lookup into the state directory, answers from
that local copy, and refreshes it monthly, so a lookup never sends an address
to a third party. The Control UI renders the resolved city on the device row
next to the address and the client-reported time zone.

The default source is DB-IP City Lite under CC BY 4.0. That license requires
attribution, so every response carries the credit and the UI renders it next to
the value; the database is downloaded at runtime and never redistributed.
Plugin code and the `maxmind` reader are MIT. No free city-level IP database is
MIT-licensed, so the obligation lives with the data rather than the code, and
`databaseUrl` plus the attribution fields make the source swappable.

No new core provider kind: with one implementation the plugin owns everything
through the existing HTTP-route seam, keeping core plugin-agnostic. A second
provider is what would justify promoting this to a registry contract.

Availability and lookup failure stay distinguishable: a missing or still
downloading database answers 503, never `found: false`. A failed refresh serves
the cached copy, and a body that does not parse as an MMDB is discarded without
replacing a working database.

* fix(docs): correct geolocation config examples and add zh-CN glossary entries

The config examples used `plugins.<id>` instead of the real
`plugins.entries.<id>.config` shape, which the docs config-example
validator and src/config/docs-config-examples.test.ts both reject.
New doc labels also need zh-CN glossary entries.

* chore(labeler): cover the geolocation extension directory

AGENTS.md requires a labeler entry plus a GitHub label for every new
plugin surface; test/scripts/labeler-extension-coverage.test.ts enforces
the labeler half.

* fix(geolocation): address review findings on caching, download bounds, and scope

Cold-start lookups were permanently suppressed. The loader cached one promise
per address including failures, so the 15s browser deadline expiring against a
first download that takes ~46s cached a blank forever, and a mounted row only
looks up again when its IP changes. Lookups now return a discriminated
located/absent/unavailable result: only definitive answers are cached, and the
element retries an unavailable one on a widening 5s/15s/45s schedule.

Download limits ran after allocation. The size check happened only after
`response.arrayBuffer()` had buffered the whole body, and gunzip had no output
ceiling, so a replaced source or a compression bomb could exhaust Gateway memory
before rejection. The body now streams against a compressed ceiling enforced
per chunk, and inflation uses zlib's maxOutputLength.

Cached placements were not scoped to the Gateway. The cache keyed only by
address while endpoint and credentials come from the shared Gateway context, so
a switch could render the previous Gateway's answer. The shared reset hook now
supports multiple subscribers - a single slot silently dropped whichever
registered first - and the geolocation cache subscribes.

Unresolvable ranges no longer trigger a download. Only loopback suppresses `ip`
at connect, so Tailscale carrier-grade-NAT and LAN addresses are recorded and
displayed. No geolocation database contains them, so a tailnet-only or LAN-only
Gateway was downloading 125 MB to answer nothing. The route now answers those
ranges without loading the database, using the already-public
`isPrivateOrLoopbackHost` seam so the SDK surface budget is unchanged.

The quickstart queried a reserved documentation range while showing a located
response, which cannot happen; it now uses a routable address and documents the
not-found case.

* fix(deps): resync the lockfile after dropping the net-policy dependency

The geolocation plugin briefly depended on @openclaw/net-policy before
switching to the already-public isPrivateOrLoopbackHost SDK seam. The
package.json entry was removed without regenerating the lockfile, so the
frozen-lockfile install failed and every downstream CI job failed with it.
2026-08-24 04:56:03 -07:00

2111 lines
58 KiB
JSON

{
"$schema": "https://mintlify.com/docs.json",
"name": "OpenClaw",
"description": "Self-hosted gateway that connects Discord, Google Chat, iMessage, Matrix, Microsoft Teams, Signal, Slack, Telegram, WhatsApp, Zalo, and more to AI coding agents. Run one Gateway process on your own machine and message your AI assistant from anywhere.",
"theme": "mint",
"icons": {
"library": "lucide"
},
"logo": {
"light": "/assets/pixel-lobster.svg",
"dark": "/assets/pixel-lobster.svg"
},
"fonts": {
"body": {
"family": "Fragment Mono"
},
"heading": {
"family": "DM Sans"
}
},
"favicon": "/assets/pixel-lobster.svg",
"colors": {
"primary": "#D84A31",
"dark": "#E05540",
"light": "#F5654A"
},
"styling": {
"codeblocks": {
"theme": {
"dark": "min-dark",
"light": "min-light"
}
}
},
"navbar": {
"links": [
{
"label": "GitHub",
"href": "https://github.com/openclaw/openclaw",
"icon": "github"
},
{
"label": "Releases",
"href": "https://github.com/openclaw/openclaw/releases",
"icon": "package"
},
{
"label": "Discord",
"href": "https://discord.com/invite/clawd",
"icon": "discord"
}
]
},
"redirects": [
{
"source": "/gateway/security/shrinkwrap",
"destination": "/gateway/security/dependency-locking"
},
{
"source": "/cli/crestodian",
"destination": "/cli/openclaw"
},
{
"source": "/channels/bluebubbles",
"destination": "/channels/imessage-from-bluebubbles"
},
{
"source": "/install/migrating-matrix",
"destination": "/channels/matrix-migration"
},
{
"source": "/concepts/qa-matrix",
"destination": "/concepts/qa-e2e-automation#matrix-live-lane"
},
{
"source": "/plugins/reference/qa-matrix",
"destination": "/plugins/reference/qa-lab"
},
{
"source": "/plugins/reference/fish-audio",
"destination": "/plugins/reference/fish-audio-speech"
},
{
"source": "/concepts/openclaw-sdk",
"destination": "/gateway/external-apps"
},
{
"source": "/reference/openclaw-sdk-api-design",
"destination": "/gateway/external-apps"
},
{
"source": "/reference/wizard",
"destination": "/start/wizard-cli-reference"
},
{
"source": "/reference/maturity-scorecard",
"destination": "/maturity/scorecard"
},
{
"source": "/reference/maturity-taxonomy",
"destination": "/maturity/taxonomy"
},
{
"source": "/mcp",
"destination": "/cli/mcp"
},
{
"source": "/help/gpt54-codex-agentic-parity",
"destination": "/agent-runtime-architecture"
},
{
"source": "/help/gpt54-codex-agentic-parity-maintainers",
"destination": "/agent-runtime-architecture"
},
{
"source": "/help/gpt55-codex-agentic-parity",
"destination": "/agent-runtime-architecture"
},
{
"source": "/help/gpt55-codex-agentic-parity-maintainers",
"destination": "/agent-runtime-architecture"
},
{
"source": "/pi",
"destination": "/agent-runtime-architecture"
},
{
"source": "/pi-dev",
"destination": "/openclaw-agent-runtime"
},
{
"source": "/providers/modelstudio",
"destination": "/providers/qwen"
},
{
"source": "/providers/qwen_modelstudio",
"destination": "/providers/qwen"
},
{
"source": "/platforms/oracle",
"destination": "/install/oracle"
},
{
"source": "/platforms/digitalocean",
"destination": "/install/digitalocean"
},
{
"source": "/platforms/raspberry-pi",
"destination": "/install/raspberry-pi"
},
{
"source": "/plugins/building-extensions",
"destination": "/plugins/building-plugins"
},
{
"source": "/plugins/agent-tools",
"destination": "/plugins/building-plugins#registering-agent-tools"
},
{
"source": "/plugins/reference/codex-supervisor",
"destination": "/plugins/codex-supervision"
},
{
"source": "/specs/claw-supervisor",
"destination": "/specs/codex-supervision"
},
{
"source": "/gateway/admin-http-rpc",
"destination": "/plugins/admin-http-rpc"
},
{
"source": "/cli/capability",
"destination": "/cli/infer"
},
{
"source": "/tools/capability-cookbook",
"destination": "/plugins/adding-capabilities"
},
{
"source": "/reference/code-mode",
"destination": "/tools/code-mode"
},
{
"source": "/brave-search",
"destination": "/tools/brave-search"
},
{
"source": "/perplexity",
"destination": "/tools/perplexity-search"
},
{
"source": "/web-fetch",
"destination": "/tools/web-fetch"
},
{
"source": "/duckduckgo-search",
"destination": "/tools/duckduckgo-search"
},
{
"source": "/exa-search",
"destination": "/tools/exa-search"
},
{
"source": "/gemini-search",
"destination": "/tools/gemini-search"
},
{
"source": "/grok-search",
"destination": "/tools/grok-search"
},
{
"source": "/kimi-search",
"destination": "/tools/kimi-search"
},
{
"source": "/tts",
"destination": "/tools/tts"
},
{
"source": "/messages",
"destination": "/concepts/messages"
},
{
"source": "/context",
"destination": "/concepts/context"
},
{
"source": "/compaction",
"destination": "/concepts/compaction"
},
{
"source": "/context-engine",
"destination": "/concepts/context-engine"
},
{
"source": "/cron",
"destination": "/automation/cron-jobs"
},
{
"source": "/minimax",
"destination": "/providers/minimax"
},
{
"source": "/xiaomi",
"destination": "/providers/xiaomi"
},
{
"source": "/openai",
"destination": "/providers/openai"
},
{
"source": "/openai/",
"destination": "/providers/openai"
},
{
"source": "/anthropic",
"destination": "/providers/anthropic"
},
{
"source": "/anthropic/",
"destination": "/providers/anthropic"
},
{
"source": "/moonshot",
"destination": "/providers/moonshot"
},
{
"source": "/mistral",
"destination": "/providers/mistral"
},
{
"source": "/openrouter",
"destination": "/providers/openrouter"
},
{
"source": "/opencode",
"destination": "/providers/opencode"
},
{
"source": "/opencode-go",
"destination": "/providers/opencode-go"
},
{
"source": "/qianfan",
"destination": "/providers/qianfan"
},
{
"source": "/mattermost",
"destination": "/channels/mattermost"
},
{
"source": "/line",
"destination": "/channels/line"
},
{
"source": "/glm",
"destination": "/providers/zai"
},
{
"source": "/zai",
"destination": "/providers/zai"
},
{
"source": "/providers/glm",
"destination": "/providers/zai"
},
{
"source": "/message",
"destination": "/cli/message"
},
{
"source": "/providers/discord",
"destination": "/channels/discord"
},
{
"source": "/providers/googlechat",
"destination": "/channels/googlechat"
},
{
"source": "/providers/grammy",
"destination": "/channels/telegram"
},
{
"source": "/providers/imessage",
"destination": "/channels/imessage"
},
{
"source": "/providers/location",
"destination": "/channels/location"
},
{
"source": "/providers/mattermost",
"destination": "/channels/mattermost"
},
{
"source": "/providers/msteams",
"destination": "/channels/msteams"
},
{
"source": "/providers/line",
"destination": "/channels/line"
},
{
"source": "/providers/signal",
"destination": "/channels/signal"
},
{
"source": "/providers/slack",
"destination": "/channels/slack"
},
{
"source": "/providers/telegram",
"destination": "/channels/telegram"
},
{
"source": "/providers/troubleshooting",
"destination": "/channels/troubleshooting"
},
{
"source": "/providers/zalo",
"destination": "/channels/zalo"
},
{
"source": "/channels/openclaw-zaloclawbot",
"destination": "/channels/zaloclawbot"
},
{
"source": "/providers/whatsapp",
"destination": "/channels/whatsapp"
},
{
"source": "/sandbox",
"destination": "/cli/sandbox"
},
{
"source": "/sandboxing",
"destination": "/gateway/sandboxing"
},
{
"source": "/AGENTS.default",
"destination": "/reference/AGENTS.default"
},
{
"source": "/RELEASING",
"destination": "/reference/RELEASING"
},
{
"source": "/agent",
"destination": "/concepts/agent"
},
{
"source": "/agent-loop",
"destination": "/concepts/agent-loop"
},
{
"source": "/agent-send",
"destination": "/tools/agent-send"
},
{
"source": "/agent-workspace",
"destination": "/concepts/agent-workspace"
},
{
"source": "/android",
"destination": "/platforms/android"
},
{
"source": "/architecture",
"destination": "/concepts/architecture"
},
{
"source": "/audio",
"destination": "/nodes/audio"
},
{
"source": "/background-process",
"destination": "/gateway/background-process"
},
{
"source": "/bash",
"destination": "/tools/exec"
},
{
"source": "/tools/bash",
"destination": "/tools/exec"
},
{
"source": "/bonjour",
"destination": "/gateway/bonjour"
},
{
"source": "/gateway/config-tts",
"destination": "/tools/tts"
},
{
"source": "/gateway/observability",
"destination": "/gateway/opentelemetry"
},
{
"source": "/browser",
"destination": "/tools/browser"
},
{
"source": "/browser-linux-troubleshooting",
"destination": "/tools/browser-linux-troubleshooting"
},
{
"source": "/bun",
"destination": "/install/bun"
},
{
"source": "/auth-monitoring",
"destination": "/gateway/authentication"
},
{
"source": "/camera",
"destination": "/nodes/camera"
},
{
"source": "/clawd",
"destination": "/start/openclaw"
},
{
"source": "/start/clawd",
"destination": "/start/openclaw"
},
{
"source": "/start/clawd/",
"destination": "/start/openclaw"
},
{
"source": "/start/pairing",
"destination": "/channels/pairing"
},
{
"source": "/clawdhub",
"destination": "/clawhub"
},
{
"source": "/tools/clawhub",
"destination": "/clawhub"
},
{
"source": "/tools/clawdhub",
"destination": "/clawhub"
},
{
"source": "/configuration",
"destination": "/gateway/configuration"
},
{
"source": "/control-ui",
"destination": "/web/control-ui"
},
{
"source": "/cron-jobs",
"destination": "/automation/cron-jobs"
},
{
"source": "/cron-vs-heartbeat",
"destination": "/automation"
},
{
"source": "/dashboard",
"destination": "/web/dashboard"
},
{
"source": "/device-models",
"destination": "/reference/device-models"
},
{
"source": "/discord",
"destination": "/channels/discord"
},
{
"source": "/discovery",
"destination": "/gateway/discovery"
},
{
"source": "/docker",
"destination": "/install/docker"
},
{
"source": "/podman",
"destination": "/install/podman"
},
{
"source": "/doctor",
"destination": "/gateway/doctor"
},
{
"source": "/elevated",
"destination": "/tools/elevated"
},
{
"source": "/faq",
"destination": "/help/faq"
},
{
"source": "/gateway-lock",
"destination": "/gateway/gateway-lock"
},
{
"source": "/getting-started",
"destination": "/start/getting-started"
},
{
"source": "/quickstart",
"destination": "/start/getting-started"
},
{
"source": "/start/quickstart",
"destination": "/start/getting-started"
},
{
"source": "/gmail-pubsub",
"destination": "/automation/cron-jobs"
},
{
"source": "/grammy",
"destination": "/channels/telegram"
},
{
"source": "/channels/grammy",
"destination": "/channels/telegram"
},
{
"source": "/channels/openclaw-weixin",
"destination": "/channels/wechat"
},
{
"source": "/channels/weixin",
"destination": "/channels/wechat"
},
{
"source": "/group-messages",
"destination": "/channels/group-messages"
},
{
"source": "/groups",
"destination": "/channels/groups"
},
{
"source": "/health",
"destination": "/gateway/health"
},
{
"source": "/heartbeat",
"destination": "/gateway/heartbeat"
},
{
"source": "/hubs",
"destination": "/start/hubs"
},
{
"source": "/images",
"destination": "/nodes/images"
},
{
"source": "/imessage",
"destination": "/channels/imessage"
},
{
"source": "/ios",
"destination": "/platforms/ios"
},
{
"source": "/linux",
"destination": "/platforms/linux"
},
{
"source": "/location",
"destination": "/channels/location"
},
{
"source": "/location-command",
"destination": "/nodes/location-command"
},
{
"source": "/lore",
"destination": "/start/lore"
},
{
"source": "/mac/bun",
"destination": "/platforms/mac/bundled-gateway"
},
{
"source": "/platforms/mac/bun",
"destination": "/platforms/mac/bundled-gateway"
},
{
"source": "/mac/canvas",
"destination": "/platforms/mac/canvas"
},
{
"source": "/mac/child-process",
"destination": "/platforms/mac/bundled-gateway"
},
{
"source": "/mac/dev-setup",
"destination": "/platforms/mac/dev-setup"
},
{
"source": "/mac/health",
"destination": "/platforms/mac/health"
},
{
"source": "/mac/icon",
"destination": "/platforms/mac/icon"
},
{
"source": "/mac/logging",
"destination": "/platforms/mac/logging"
},
{
"source": "/mac/menu-bar",
"destination": "/platforms/mac/menu-bar"
},
{
"source": "/mac/peekaboo",
"destination": "/platforms/mac/peekaboo"
},
{
"source": "/mac/permissions",
"destination": "/platforms/mac/permissions"
},
{
"source": "/mac/release",
"destination": "/reference/RELEASING"
},
{
"source": "/mac/remote",
"destination": "/platforms/mac/remote"
},
{
"source": "/mac/signing",
"destination": "/platforms/mac/signing"
},
{
"source": "/mac/skills",
"destination": "/platforms/mac/skills"
},
{
"source": "/mac/voice-overlay",
"destination": "/platforms/mac/voice-overlay"
},
{
"source": "/mac/voicewake",
"destination": "/platforms/mac/voicewake"
},
{
"source": "/mac/webchat",
"destination": "/platforms/mac/webchat"
},
{
"source": "/mac/xpc",
"destination": "/platforms/mac/xpc"
},
{
"source": "/macos",
"destination": "/platforms/macos"
},
{
"source": "/model-failover",
"destination": "/concepts/model-failover"
},
{
"source": "/model",
"destination": "/concepts/models"
},
{
"source": "/model/",
"destination": "/concepts/models"
},
{
"source": "/models",
"destination": "/concepts/models"
},
{
"source": "/multi-agent",
"destination": "/concepts/multi-agent"
},
{
"source": "/nix",
"destination": "/install/nix"
},
{
"source": "/onboarding",
"destination": "/start/onboarding"
},
{
"source": "/pairing",
"destination": "/channels/pairing"
},
{
"source": "/experiments/plans/cron-add-hardening",
"destination": "/automation/cron-jobs"
},
{
"source": "/experiments/plans/group-policy-hardening",
"destination": "/channels/groups"
},
{
"source": "/poll",
"destination": "/cli/message"
},
{
"source": "/presence",
"destination": "/concepts/presence"
},
{
"source": "/provider-routing",
"destination": "/channels/channel-routing"
},
{
"source": "/concepts/provider-routing",
"destination": "/channels/channel-routing"
},
{
"source": "/queue",
"destination": "/concepts/queue"
},
{
"source": "/remote",
"destination": "/gateway/remote"
},
{
"source": "/remote-gateway-readme",
"destination": "/gateway/remote-gateway-readme"
},
{
"source": "/rpc",
"destination": "/reference/rpc"
},
{
"source": "/security",
"destination": "/gateway/security"
},
{
"source": "/session",
"destination": "/concepts/session"
},
{
"source": "/session-tool",
"destination": "/concepts/session-tool"
},
{
"source": "/sessions",
"destination": "/concepts/session"
},
{
"source": "/setup",
"destination": "/start/setup"
},
{
"source": "/showcase",
"destination": "/start/showcase"
},
{
"source": "/signal",
"destination": "/channels/signal"
},
{
"source": "/skills",
"destination": "/tools/skills"
},
{
"source": "/skill-workshop",
"destination": "/tools/skill-workshop"
},
{
"source": "/tools/skills-workshop",
"destination": "/tools/skill-workshop"
},
{
"source": "/skills-config",
"destination": "/tools/skills-config"
},
{
"source": "/slack",
"destination": "/channels/slack"
},
{
"source": "/slash-commands",
"destination": "/tools/slash-commands"
},
{
"source": "/subagents",
"destination": "/tools/subagents"
},
{
"source": "/tailscale",
"destination": "/gateway/tailscale"
},
{
"source": "/talk",
"destination": "/nodes/talk"
},
{
"source": "/telegram",
"destination": "/channels/telegram"
},
{
"source": "/templates/AGENTS",
"destination": "/reference/templates/AGENTS"
},
{
"source": "/templates/BOOT",
"destination": "/reference/templates/BOOT"
},
{
"source": "/templates/BOOTSTRAP",
"destination": "/reference/templates/BOOTSTRAP"
},
{
"source": "/templates/HEARTBEAT",
"destination": "/reference/templates/HEARTBEAT"
},
{
"source": "/templates/IDENTITY",
"destination": "/reference/templates/IDENTITY"
},
{
"source": "/templates/SOUL",
"destination": "/reference/templates/SOUL"
},
{
"source": "/templates/TOOLS",
"destination": "/reference/templates/TOOLS"
},
{
"source": "/templates/USER",
"destination": "/reference/templates/USER"
},
{
"source": "/test",
"destination": "/reference/test"
},
{
"source": "/thinking",
"destination": "/tools/thinking"
},
{
"source": "/timezone",
"destination": "/concepts/timezone"
},
{
"source": "/troubleshooting",
"destination": "/help/troubleshooting"
},
{
"source": "/tui",
"destination": "/web/tui"
},
{
"source": "/typebox",
"destination": "/concepts/typebox"
},
{
"source": "/updating",
"destination": "/install/updating"
},
{
"source": "/voicewake",
"destination": "/nodes/voicewake"
},
{
"source": "/webchat",
"destination": "/web/webchat"
},
{
"source": "/webhook",
"destination": "/automation/cron-jobs"
},
{
"source": "/whatsapp",
"destination": "/channels/whatsapp"
},
{
"source": "/windows",
"destination": "/platforms/windows"
},
{
"source": "/wizard",
"destination": "/start/wizard"
},
{
"source": "/start/wizard-cli-flow",
"destination": "/start/wizard-cli-reference"
},
{
"source": "/start/wizard-cli-auth",
"destination": "/start/wizard-cli-reference"
},
{
"source": "/start/wizard-cli-outputs",
"destination": "/start/wizard-cli-reference"
},
{
"source": "/start/faq",
"destination": "/help/faq"
},
{
"source": "/oauth",
"destination": "/concepts/oauth"
},
{
"source": "/plugin",
"destination": "/tools/plugin"
},
{
"source": "/plugins",
"destination": "/tools/plugin"
},
{
"source": "/railway",
"destination": "/install/railway"
},
{
"source": "/northflank",
"destination": "/install/northflank"
},
{
"source": "/render",
"destination": "/install/render"
},
{
"source": "/gcp",
"destination": "/install/gcp"
},
{
"source": "/azure",
"destination": "/install/azure"
},
{
"source": "/platforms/fly",
"destination": "/install/fly"
},
{
"source": "/platforms/hetzner",
"destination": "/install/hetzner"
},
{
"source": "/platforms/gcp",
"destination": "/install/gcp"
},
{
"source": "/platforms/azure",
"destination": "/install/azure"
},
{
"source": "/platforms/macos-vm",
"destination": "/install/macos-vm"
},
{
"source": "/platforms/exe-dev",
"destination": "/install/exe-dev"
},
{
"source": "/platforms/railway",
"destination": "/install/railway"
},
{
"source": "/platforms/render",
"destination": "/install/render"
},
{
"source": "/platforms/northflank",
"destination": "/install/northflank"
},
{
"source": "/gateway/trusted-proxy",
"destination": "/gateway/trusted-proxy-auth"
},
{
"source": "/automation/clawflow",
"destination": "/automation/taskflow"
},
{
"source": "/automation/poll",
"destination": "/cli/message"
},
{
"source": "/automation/auth-monitoring",
"destination": "/gateway/authentication"
},
{
"source": "/automation/troubleshooting",
"destination": "/automation/cron-jobs"
},
{
"source": "/automation/cron-vs-heartbeat",
"destination": "/automation"
},
{
"source": "/automation/webhook",
"destination": "/automation/cron-jobs"
},
{
"source": "/automation/gmail-pubsub",
"destination": "/automation/cron-jobs"
}
],
"navigation": {
"languages": [
{
"language": "en",
"tabs": [
{
"tab": "Get started",
"groups": [
{
"group": "Overview",
"pages": [
"index",
"start/showcase",
"concepts/features"
]
},
{
"group": "First steps",
"pages": [
"start/getting-started",
"start/onboarding-overview",
"start/wizard",
"start/onboarding"
]
},
{
"group": "Guides",
"pages": [
"start/openclaw",
"start/wizard-cli-reference",
"start/wizard-cli-automation"
]
}
]
},
{
"tab": "Install",
"groups": [
{
"group": "Install overview",
"pages": [
"install/index",
"install/installer",
"install/node"
]
},
{
"group": "Maintenance",
"pages": [
"install/backups",
"install/updating",
"install/update-troubleshooting",
{
"group": "Migrating",
"pages": [
"install/migrating",
"install/migrating-claude",
"install/migrating-hermes"
]
},
"install/uninstall",
"install/development-channels"
]
},
{
"group": "Containers",
"pages": [
"install/ansible",
"install/bun",
"install/clawdock",
"install/docker",
"install/nix",
"install/podman"
]
},
{
"group": "Hosting",
"pages": [
"install/azure",
"install/cloudflare",
"install/daytona",
"install/digitalocean",
"install/docker-vm-runtime",
"install/exe-dev",
"install/fly",
"install/gcp",
"install/hetzner",
"install/hostinger",
"install/kubernetes",
"vps",
"install/macos-vm",
"install/northflank",
"install/oracle",
"install/railway",
"install/raspberry-pi",
"install/render",
"install/upstash"
]
},
{
"group": "Advanced setup",
"pages": [
"start/setup",
"openclaw-agent-runtime"
]
}
]
},
{
"tab": "Channels",
"groups": [
{
"group": "Overview",
"pages": [
"channels/index",
"announcements/bluebubbles-imessage"
]
},
{
"group": "Mainstream messaging",
"pages": [
"channels/discord",
"channels/discord-activities",
"channels/slack",
"channels/sms",
"channels/telegram",
"channels/whatsapp",
"channels/signal",
"channels/msteams",
"channels/googlechat",
"channels/imessage",
"channels/imessage-from-bluebubbles",
"channels/matrix",
"channels/matrix-migration",
"channels/matrix-presentation",
"channels/matrix-push-rules"
]
},
{
"group": "Developer and self-hosted",
"pages": [
"channels/buzz",
"channels/clickclack",
"channels/irc",
"channels/mattermost",
"channels/nextcloud-talk",
"channels/nostr",
"channels/reef",
"channels/raft",
"channels/tlon",
"channels/synology-chat",
"channels/twitch"
]
},
{
"group": "Regional platforms",
"pages": [
"channels/line",
"channels/wechat",
"channels/wecom",
"channels/qqbot",
"channels/feishu",
"channels/yuanbao",
"channels/zalo",
"channels/zaloclawbot",
"channels/zalouser"
]
},
{
"group": "Configuration",
"pages": [
"channels/pairing",
"channels/access-groups",
"channels/group-messages",
"channels/groups",
"channels/ambient-room-events",
"channels/broadcast-groups",
"channels/channel-routing",
"channels/location",
"channels/troubleshooting"
]
}
]
},
{
"tab": "Agents",
"groups": [
{
"group": "Fundamentals",
"pages": [
"concepts/architecture",
"concepts/agent",
"concepts/agent-loop",
"concepts/agent-runtimes",
"concepts/system-prompt",
"concepts/context",
"concepts/context-engine",
"concepts/agent-workspace",
"concepts/managed-worktrees",
"concepts/soul",
"concepts/oauth",
"start/bootstrapping",
"concepts/experimental-features",
"concepts/qa-e2e-automation",
"concepts/personal-agent-benchmark-pack"
]
},
{
"group": "Sessions and memory",
"pages": [
"concepts/main-session",
"concepts/multi-user",
"concepts/session",
"concepts/session-attachment",
"concepts/session-search",
"concepts/channel-docking",
"concepts/session-pruning",
"concepts/session-state",
"concepts/session-tool",
{
"group": "Memory",
"pages": [
"concepts/memory",
"concepts/memory-architecture",
"concepts/user-model",
"concepts/standing-intents",
"concepts/memory-builtin",
"concepts/memory-honcho",
"concepts/memory-search",
"concepts/active-memory",
"concepts/dreaming"
]
},
"concepts/compaction"
]
},
{
"group": "Multi-agent",
"pages": [
"concepts/multi-agent",
"concepts/agent-bindings",
"concepts/parallel-specialist-lanes",
"concepts/presence",
"concepts/delegate-architecture"
]
},
{
"group": "Messages and delivery",
"pages": [
"concepts/messages",
"concepts/message-lifecycle-refactor",
"concepts/streaming",
"concepts/progress-drafts",
"concepts/retry",
"concepts/queue",
"concepts/queue-steering"
]
}
]
},
{
"tab": "Capabilities",
"groups": [
{
"group": "Overview",
"pages": [
"tools/index"
]
},
{
"group": "Plugins",
"pages": [
"tools/plugin",
"plugins/manage-plugins",
"plugins/community",
"plugins/bundles"
]
},
{
"group": "Plugin guides",
"pages": [
"plugins/codex-harness",
"plugins/codex-supervision",
"plugins/codex-native-plugins",
"plugins/codex-computer-use",
"plugins/logbook",
"plugins/meeting-plugins",
"plugins/google-meet",
"plugins/teams-meetings",
"plugins/zoom-meetings",
"plugins/workboard",
"plugins/webhooks",
"plugins/admin-http-rpc",
"plugins/geolocation",
"plugins/beam",
"plugins/voice-call",
"plugins/vault",
"plugins/onepassword",
"plugins/memory-wiki",
"plugins/llama-cpp",
"plugins/memory-lancedb",
"plugins/oc-path",
"plugins/zalouser"
]
},
{
"group": "Building plugins",
"pages": [
"plugins/building-plugins",
"plugins/tool-plugins",
"plugins/sdk-channel-plugins",
"plugins/sdk-provider-plugins",
"plugins/cli-backend-plugins",
"plugins/hooks",
"plugins/plugin-permission-requests",
"plugins/adding-capabilities"
]
},
{
"group": "Skills",
"pages": [
"tools/skills",
"tools/custodian-skills",
"tools/skill-workshop",
"tools/self-learning",
"tools/creating-skills",
"tools/skills-config",
"tools/slash-commands",
"prose"
]
},
{
"group": "Automation",
"pages": [
"automation/index",
"automation/cron-jobs",
"automation/tasks",
"automation/taskflow",
"automation/standing-orders",
"automation/hooks"
]
},
{
"group": "Tools",
"pages": [
"tools/apply-patch",
"tools/ask-user",
"tools/btw",
"tools/code-execution",
"tools/code-mode",
"tools/diffs",
"tools/screen",
"tools/progress-card",
"tools/show-widget",
"tools/elevated",
"tools/permission-modes",
"tools/exec-approvals",
"tools/exec-approvals-advanced",
"tools/exec",
"tools/image-generation",
"tools/llm-task",
"tools/lobster",
"tools/media-overview",
"tools/mcp",
"tools/music-generation",
"tools/pdf",
"tools/reactions",
"tools/thinking",
"tools/tokenjuice",
"tools/tool-search",
"tools/loop-detection",
"tools/trajectory",
"tools/tts",
"tools/video-generation",
{
"group": "Web browser",
"pages": [
"tools/browser",
"tools/chrome-extension",
"tools/browser-control",
"tools/browser-login",
"tools/browser-linux-troubleshooting",
"tools/browser-wsl2-windows-remote-cdp-troubleshooting"
]
},
{
"group": "Web tools",
"pages": [
"tools/web-fetch",
"tools/web",
"tools/brave-search",
"tools/duckduckgo-search",
"tools/exa-search",
"tools/firecrawl",
"tools/gemini-search",
"tools/grok-search",
"tools/kimi-search",
"tools/minimax-search",
"tools/ollama-search",
"tools/parallel-search",
"tools/perplexity-search",
"tools/searxng-search",
"tools/tavily"
]
}
]
},
{
"group": "Agent coordination",
"pages": [
"tools/agent-send",
"tools/goal",
"tools/steer",
"tools/subagents",
"tools/swarm",
"tools/acp-agents",
"tools/acp-agents-setup",
"tools/multi-agent-sandbox-tools"
]
}
]
},
{
"tab": "ClawHub",
"groups": [
{
"group": "Overview",
"pages": [
"clawhub/index",
"clawhub/quickstart",
"clawhub/how-it-works"
]
},
{
"group": "Using ClawHub",
"pages": [
"clawhub/cli",
"clawhub/publishing",
"clawhub/skill-format",
"clawhub/auth",
"clawhub/telemetry",
"clawhub/troubleshooting"
]
},
{
"group": "API and trust",
"pages": [
"clawhub/api",
"clawhub/http-api",
"clawhub/acceptable-usage",
"clawhub/moderation",
"clawhub/security-audits"
]
}
]
},
{
"tab": "Models",
"groups": [
{
"group": "Overview",
"pages": [
"providers/index",
"providers/models"
]
},
{
"group": "Concepts and configuration",
"pages": [
"concepts/models",
"concepts/model-providers",
"concepts/model-failover"
]
},
{
"group": "Providers",
"pages": [
"providers/alibaba",
"providers/bedrock",
"providers/bedrock-mantle",
"providers/anthropic",
"providers/arcee",
"providers/azure-speech",
"providers/cerebras",
"providers/chutes",
"providers/clawrouter",
"providers/cohere",
"providers/claude-max-api-proxy",
"providers/cloudflare-ai-gateway",
"providers/comfy",
"providers/deepgram",
"providers/deepinfra",
"providers/deepseek",
"providers/ds4",
"providers/elevenlabs",
"providers/fish-audio",
"providers/fal",
"providers/featherless",
"providers/fireworks",
"providers/github-copilot",
"providers/gmi",
"providers/google",
"providers/gradium",
"providers/groq",
"providers/huggingface",
"providers/inferrs",
"providers/inworld",
"providers/kilocode",
"providers/litellm",
"providers/lmstudio",
"providers/longcat",
"providers/meta",
"providers/minimax",
"providers/mistral",
"providers/moonshot",
"providers/novita",
"providers/nvidia",
"providers/ollama",
"providers/ollama-cloud",
"providers/openai",
"providers/opencode",
"providers/opencode-go",
"providers/openrouter",
"providers/perplexity-provider",
"providers/pixverse",
"providers/qianfan",
"providers/qwen",
"providers/runway",
"providers/senseaudio",
"providers/sglang",
"providers/stepfun",
"providers/synthetic",
"providers/tencent",
"providers/together",
"providers/venice",
"providers/vercel-ai-gateway",
"providers/vllm",
"providers/volcengine",
"providers/vydra",
"providers/xai",
"providers/xiaomi",
"providers/zai"
]
}
]
},
{
"tab": "Platforms",
"groups": [
{
"group": "Platforms overview",
"pages": [
"platforms/index",
"platforms/macos",
"platforms/linux",
"platforms/windows",
"platforms/android",
"platforms/chromeos",
"platforms/ios",
"platforms/ios-healthkit",
"platforms/easyrunner"
]
},
{
"group": "macOS companion app",
"pages": [
{
"group": "Setup",
"pages": [
"platforms/mac/dev-setup",
"platforms/mac/menu-bar",
"platforms/mac/icon",
"platforms/mac/permissions",
"platforms/mac/signing"
]
},
{
"group": "Runtime",
"pages": [
"platforms/mac/bundled-gateway",
"platforms/mac/health",
"platforms/mac/logging",
"platforms/mac/remote",
"platforms/mac/xpc"
]
},
{
"group": "Features",
"pages": [
"platforms/mac/voicewake",
"platforms/mac/voice-overlay",
"platforms/mac/webchat",
"platforms/mac/canvas",
"platforms/mac/skills",
"platforms/mac/peekaboo"
]
}
]
}
]
},
{
"tab": "Gateway & Ops",
"groups": [
{
"group": "Gateway",
"pages": [
"gateway/index",
{
"group": "Configuration",
"pages": [
"gateway/configuration",
"gateway/configuration-reference",
"gateway/config-agents",
"gateway/config-channels",
"gateway/config-tools",
"gateway/configuration-examples"
]
},
{
"group": "Authentication and secrets",
"pages": [
"gateway/authentication",
"auth-credential-semantics",
"gateway/secrets",
"gateway/1password",
"gateway/secrets-plan-contract",
"gateway/trusted-proxy-auth"
]
},
{
"group": "Health and diagnostics",
"pages": [
"gateway/health",
"gateway/heartbeat",
"gateway/doctor",
"gateway/audit",
"gateway/telemetry",
"logging",
"gateway/opentelemetry",
"gateway/prometheus",
"gateway/logging",
"gateway/diagnostics",
"gateway/troubleshooting"
]
},
{
"group": "Scaling and operations",
"pages": [
"gateway/gateway-lock",
"gateway/background-process",
"gateway/restart-recovery",
"gateway/cloud-workers",
"gateway/multiple-gateways",
"gateway/multi-tenant-hosting"
]
},
{
"group": "Security and sandboxing",
"pages": [
"gateway/security/index",
"gateway/security/exposure-runbook",
"gateway/security/secure-file-operations",
"gateway/security/dependency-locking",
"gateway/security/audit-checks",
"gateway/security/rate-limiting",
"gateway/operator-scopes",
"gateway/sandboxing",
"gateway/openshell",
"gateway/sandbox-vs-tool-policy-vs-elevated",
"gateway/permission-modes"
]
},
{
"group": "Protocols and APIs",
"pages": [
"gateway/protocol",
"gateway/clients",
"gateway/embedding",
"gateway/bridge-protocol",
"gateway/openai-http-api",
"gateway/openresponses-http-api",
"gateway/tools-invoke-http-api",
"gateway/cli-backends",
"gateway/local-models",
"gateway/local-model-services"
]
},
{
"group": "Networking and discovery",
"pages": [
"network",
"gateway/pairing",
"gateway/discovery",
"gateway/portals",
"gateway/bonjour"
]
}
]
},
{
"group": "Remote access",
"pages": [
"gateway/remote",
"gateway/remote-gateway-readme",
"gateway/stable-https-url",
"gateway/tailscale",
"gateway/cloudflare-access"
]
},
{
"group": "Security",
"pages": [
"security/network-proxy",
"security/formal-verification",
"security/THREAT-MODEL-ATLAS",
"security/CONTRIBUTING-THREAT-MODEL"
]
},
{
"group": "Nodes and media",
"pages": [
"nodes/index",
"nodes/presence",
"nodes/troubleshooting",
{
"group": "Media capabilities",
"pages": [
"nodes/media-understanding",
"nodes/media-playback",
"nodes/images",
"nodes/audio",
"nodes/camera",
"tools/tts"
]
},
{
"group": "Node features",
"pages": [
"nodes/computer-use",
"nodes/talk",
"nodes/voicewake",
"nodes/location-command"
]
}
]
},
{
"group": "Web interfaces",
"pages": [
"web/index",
"web/control-ui",
"web/notifications",
"web/urls",
"web/dashboard",
"web/dashboards",
"web/dashboard-architecture",
"web/webchat",
"web/tui",
"web/lobster"
]
}
]
},
{
"tab": "Reference",
"groups": [
{
"group": "CLI commands",
"pages": [
"cli/index",
{
"group": "Gateway and service",
"pages": [
"cli/backup",
"cli/openclaw",
"cli/daemon",
"cli/doctor",
"cli/fleet",
"cli/gateway",
"cli/health",
"cli/logs",
"cli/migrate",
"cli/onboard",
"cli/reset",
"cli/secrets",
"cli/security",
"cli/setup",
"cli/status",
"cli/uninstall",
"cli/update"
]
},
{
"group": "Agents and sessions",
"pages": [
"cli/agent",
"cli/agents",
"cli/claws",
"cli/audit",
"cli/hooks",
"cli/infer",
"cli/memory",
"cli/message",
"cli/models",
"cli/promos",
"cli/sessions",
"cli/system",
"cli/tasks"
]
},
{
"group": "Channels and messaging",
"pages": [
"cli/channels",
"cli/devices",
"cli/directory",
"cli/pairing",
"cli/qr",
"cli/voicecall"
]
},
{
"group": "Tools and execution",
"pages": [
"cli/approvals",
"cli/browser",
"cli/cron",
"cli/flows",
"cli/connect",
"cli/node",
"cli/nodes",
"cli/sandbox",
"cli/worker"
]
},
{
"group": "Configuration",
"pages": [
"cli/config",
"cli/configure",
"cli/webhooks"
]
},
{
"group": "Plugins and skills",
"pages": [
"cli/plugins",
"cli/path",
"cli/policy",
"cli/skills",
"cli/workboard"
]
},
{
"group": "Interfaces",
"pages": [
"cli/attach",
"cli/dashboard",
"cli/resume",
"cli/tui"
]
},
{
"group": "Utility",
"pages": [
"cli/acp",
"cli/clawbot",
"cli/completion",
"cli/dns",
"cli/docs",
"cli/mcp",
"cli/proxy",
"cli/wiki"
]
}
]
},
{
"group": "RPC and API",
"pages": [
"reference/rpc",
"gateway/external-apps",
"reference/device-models"
]
},
{
"group": "Codex harness",
"pages": [
"plugins/codex-harness-reference",
"plugins/codex-harness-runtime"
]
},
{
"group": "Plugin reference",
"pages": [
"plugins/plugin-inventory",
"plugins/reference",
"plugins/dependency-resolution",
"plugins/install-overrides"
]
},
{
"group": "Plugin SDK reference",
"pages": [
"plugins/sdk-overview",
"plugins/sdk-subpaths",
"plugins/sdk-entrypoints",
"plugins/sdk-runtime",
"plugins/sdk-agent-harness",
"plugins/sdk-setup",
"plugins/sdk-testing",
"plugins/manifest"
]
},
{
"group": "Plugin maintainer reference",
"pages": [
"plugins/architecture",
"plugins/architecture-internals",
"plugins/sdk-migration",
"plugins/compatibility",
"plugins/sdk-channel-outbound",
"plugins/sdk-channel-inbound",
"plugins/sdk-channel-ingress",
"plugins/message-presentation"
]
},
{
"group": "Templates",
"pages": [
"reference/AGENTS.default",
"reference/templates/AGENTS",
"reference/templates/BOOT",
"reference/templates/BOOTSTRAP",
"reference/templates/HEARTBEAT",
"reference/templates/IDENTITY",
"reference/templates/SOUL",
"reference/templates/USER"
]
},
{
"group": "Technical reference",
"pages": [
"agent-runtime-architecture",
"reference/token-use",
"reference/secretref-credential-surface",
"reference/openclaw-ai",
"reference/prompt-caching",
"reference/api-usage-costs",
"reference/transcript-hygiene",
"reference/database-schemas",
"reference/memory-config",
"reference/rich-output-protocol",
"reference/session-management-compaction",
"date-time"
]
},
{
"group": "Concept internals",
"pages": [
"concepts/typebox",
"concepts/markdown-formatting",
"concepts/typing-indicators",
"concepts/usage-tracking",
"concepts/timezone"
]
},
{
"group": "Project",
"pages": [
"reference/credits"
]
},
{
"group": "Contributing",
"pages": [
"reference/pull-request-review-flow"
]
}
]
},
{
"tab": "Release & CI",
"groups": [
{
"group": "Release notes",
"pages": [
"releases/index",
"releases/2026.7.1",
"releases/2026.6.11"
]
},
{
"group": "Maturity",
"pages": [
"maturity/scorecard",
"maturity/taxonomy"
]
},
{
"group": "Release process",
"pages": [
"reference/RELEASING",
"reference/full-release-validation",
"reference/release-performance-sweep"
]
},
{
"group": "Testing and CI",
"pages": [
"reference/test",
"ci",
"help/scripts"
]
}
]
},
{
"tab": "Help",
"groups": [
{
"group": "Start here",
"pages": [
"help/index",
"help/troubleshooting",
"help/debugging"
]
},
{
"group": "FAQ",
"pages": [
"help/faq",
"help/faq-first-run",
"help/faq-models"
]
},
{
"group": "Testing",
"pages": [
"help/testing",
"help/testing-updates-plugins",
"help/testing-live"
]
},
{
"group": "Diagnostics",
"pages": [
"help/environment",
"diagnostics/flags",
"debug/node-issue"
]
},
{
"group": "Community and meta",
"pages": [
"start/lore",
"start/hubs",
"start/docs-directory"
]
}
]
}
]
}
]
}
}