Harden Telegram poll gating and schema consistency (#36547)
Merged via squash.
Prepared head SHA: f77824419e3d166f727474a9953a063a2b4547f2 Co-authored-by: gumadeiras 5599352+gumadeiras@users.noreply.github.com Co-authored-by: gumadeiras 5599352+gumadeiras@users.noreply.github.com Reviewed-by: @gumadeiras
版权所有:中国计算机学会技术支持:开源发展技术委员会
京ICP备13000930号-9
京公网安备 11010802032778号
🦞 OpenClaw — Personal AI Assistant
EXFOLIATE! EXFOLIATE!
OpenClaw is a personal AI assistant you run on your own devices. It answers you on the channels you already use (WhatsApp, Telegram, Slack, Discord, Google Chat, Signal, iMessage, BlueBubbles, IRC, Microsoft Teams, Matrix, Feishu, LINE, Mattermost, Nextcloud Talk, Nostr, Synology Chat, Tlon, Twitch, Zalo, Zalo Personal, WebChat). It can speak and listen on macOS/iOS/Android, and can render a live Canvas you control. The Gateway is just the control plane — the product is the assistant.
If you want a personal, single-user assistant that feels local, fast, and always-on, this is it.
Website · Docs · Vision · DeepWiki · Getting Started · Updating · Showcase · FAQ · Wizard · Nix · Docker · Discord
Preferred setup: run the onboarding wizard (
openclaw onboard) in your terminal. The wizard guides you step by step through setting up the gateway, workspace, channels, and skills. The CLI wizard is the recommended path and works on macOS, Linux, and Windows (via WSL2; strongly recommended). Works with npm, pnpm, or bun. New install? Start here: Getting startedSponsors
Subscriptions (OAuth):
Model note: while many providers/models are supported, for the best experience and lower prompt-injection risk use the strongest latest-generation model available to you. See Onboarding.
Models (selection + auth)
Install (recommended)
Runtime: Node ≥22.
The wizard installs the Gateway daemon (launchd/systemd user service) so it stays running.
Quick start (TL;DR)
Runtime: Node ≥22.
Full beginner guide (auth, pairing, channels): Getting started
Upgrading? Updating guide (and run
openclaw doctor).Development channels
vYYYY.M.DorvYYYY.M.D-<patch>), npm dist-taglatest.vYYYY.M.D-beta.N), npm dist-tagbeta(macOS app may be missing).main, npm dist-tagdev(when published).Switch channels (git + npm):
openclaw update --channel stable|beta|dev. Details: Development channels.From source (development)
Prefer
pnpmfor builds from source. Bun is optional for running TypeScript directly.Note:
pnpm openclaw ...runs TypeScript directly (viatsx).pnpm buildproducesdist/for running via Node / the packagedopenclawbinary.Security defaults (DM access)
OpenClaw connects to real messaging surfaces. Treat inbound DMs as untrusted input.
Full security guide: Security
Default behavior on Telegram/WhatsApp/Signal/iMessage/Microsoft Teams/Discord/Google Chat/Slack:
dmPolicy="pairing"/channels.discord.dmPolicy="pairing"/channels.slack.dmPolicy="pairing"; legacy:channels.discord.dm.policy,channels.slack.dm.policy): unknown senders receive a short pairing code and the bot does not process their message.openclaw pairing approve <channel> <code>(then the sender is added to a local allowlist store).dmPolicy="open"and include"*"in the channel allowlist (allowFrom/channels.discord.allowFrom/channels.slack.allowFrom; legacy:channels.discord.dm.allowFrom,channels.slack.dm.allowFrom).Run
openclaw doctorto surface risky/misconfigured DM policies.Highlights
Star History
Everything we built so far
Core platform
mainfor direct chats, group isolation, activation modes, queue modes, reply-back. Group rules: Groups.Channels
Apps + nodes
Tools + automation
Runtime + safety
Ops + packaging
How it works (short)
Key subsystems
location.get, notifications, plus macOS‑onlysystem.run/system.notify.Tailscale access (Gateway dashboard)
OpenClaw can auto-configure Tailscale Serve (tailnet-only) or Funnel (public) while the Gateway stays bound to loopback. Configure
gateway.tailscale.mode:off: no Tailscale automation (default).serve: tailnet-only HTTPS viatailscale serve(uses Tailscale identity headers by default).funnel: public HTTPS viatailscale funnel(requires shared password auth).Notes:
gateway.bindmust stayloopbackwhen Serve/Funnel is enabled (OpenClaw enforces this).gateway.auth.mode: "password"orgateway.auth.allowTailscale: false.gateway.auth.mode: "password"is set.gateway.tailscale.resetOnExitto undo Serve/Funnel on shutdown.Details: Tailscale guide · Web surfaces
Remote Gateway (Linux is great)
It’s perfectly fine to run the Gateway on a small Linux instance. Clients (macOS app, CLI, WebChat) can connect over Tailscale Serve/Funnel or SSH tunnels, and you can still pair device nodes (macOS/iOS/Android) to execute device‑local actions when needed.
system.run, camera, screen recording, notifications) vianode.invoke. In short: exec runs where the Gateway lives; device actions run where the device lives.Details: Remote access · Nodes · Security
macOS permissions via the Gateway protocol
The macOS app can run in node mode and advertises its capabilities + permission map over the Gateway WebSocket (
node.list/node.describe). Clients can then execute local actions vianode.invoke:system.runruns a local command and returns stdout/stderr/exit code; setneedsScreenRecording: trueto require screen-recording permission (otherwise you’ll getPERMISSION_MISSING).system.notifyposts a user notification and fails if notifications are denied.canvas.*,camera.*,screen.record, andlocation.getare also routed vianode.invokeand follow TCC permission status.Elevated bash (host permissions) is separate from macOS TCC:
/elevated on|offto toggle per‑session elevated access when enabled + allowlisted.sessions.patch(WS method) alongsidethinkingLevel,verboseLevel,model,sendPolicy, andgroupActivation.Details: Nodes · macOS app · Gateway protocol
Agent to Agent (sessions_* tools)
sessions_list— discover active sessions (agents) and their metadata.sessions_history— fetch transcript logs for a session.sessions_send— message another session; optional reply‑back ping‑pong + announce step (REPLY_SKIP,ANNOUNCE_SKIP).Details: Session tools
Skills registry (ClawHub)
ClawHub is a minimal skill registry. With ClawHub enabled, the agent can search for skills automatically and pull in new ones as needed.
ClawHub
Chat commands
Send these in WhatsApp/Telegram/Slack/Google Chat/Microsoft Teams/WebChat (group commands are owner-only):
/status— compact session status (model + tokens, cost when available)/newor/reset— reset the session/compact— compact session context (summary)/think <level>— off|minimal|low|medium|high|xhigh (GPT-5.2 + Codex models only)/verbose on|off/usage off|tokens|full— per-response usage footer/restart— restart the gateway (owner-only in groups)/activation mention|always— group activation toggle (groups only)Apps (optional)
The Gateway alone delivers a great experience. All apps are optional and add extra features.
If you plan to build/run companion apps, follow the platform runbooks below.
macOS (OpenClaw.app) (optional)
Note: signed builds required for macOS permissions to stick across rebuilds (see
docs/mac/permissions.md).iOS node (optional)
openclaw nodes ….Runbook: iOS connect.
Android node (optional)
openclaw devices ...).Agent workspace + skills
~/.openclaw/workspace(configurable viaagents.defaults.workspace).AGENTS.md,SOUL.md,TOOLS.md.~/.openclaw/workspace/skills/<skill>/SKILL.md.Configuration
Minimal
~/.openclaw/openclaw.json(model + defaults):Full configuration reference (all keys + examples).
Security model (important)
agents.defaults.sandbox.mode: "non-main"to run non‑main sessions (groups/channels) inside per‑session Docker sandboxes; bash then runs in Docker for those sessions.bash,process,read,write,edit,sessions_list,sessions_history,sessions_send,sessions_spawn; denylistbrowser,canvas,nodes,cron,discord,gateway.Details: Security guide · Docker + sandboxing · Sandbox config
WhatsApp
pnpm openclaw channels login(stores creds in~/.openclaw/credentials).channels.whatsapp.allowFrom.channels.whatsapp.groupsis set, it becomes a group allowlist; include"*"to allow all.Telegram
TELEGRAM_BOT_TOKENorchannels.telegram.botToken(env wins).channels.telegram.groups(withchannels.telegram.groups."*".requireMention); when set, it is a group allowlist (include"*"to allow all). Alsochannels.telegram.allowFromorchannels.telegram.webhookUrl+channels.telegram.webhookSecretas needed.Slack
SLACK_BOT_TOKEN+SLACK_APP_TOKEN(orchannels.slack.botToken+channels.slack.appToken).Discord
DISCORD_BOT_TOKENorchannels.discord.token(env wins).commands.native,commands.text, orcommands.useAccessGroups, pluschannels.discord.allowFrom,channels.discord.guilds, orchannels.discord.mediaMaxMbas needed.Signal
signal-cliand achannels.signalconfig section.BlueBubbles (iMessage)
channels.bluebubbles.serverUrl+channels.bluebubbles.passwordand a webhook (channels.bluebubbles.webhookPath).iMessage (legacy)
imsg(Messages must be signed in).channels.imessage.groupsis set, it becomes a group allowlist; include"*"to allow all.Microsoft Teams
msteamsconfig section.msteams.allowFrom; group access viamsteams.groupAllowFromormsteams.groupPolicy: "open".WebChat
Browser control (optional):
Docs
Use these when you’re past the onboarding flow and want the deeper reference.
Advanced docs (discovery + control)
Operations & troubleshooting
Deep dives
Workspace & skills
Platform internals
Email hooks (Gmail)
Molty
OpenClaw was built for Molty, a space lobster AI assistant. 🦞 by Peter Steinberger and the community.
Community
See CONTRIBUTING.md for guidelines, maintainers, and how to submit PRs. AI/vibe-coded PRs welcome! 🤖
Special thanks to Mario Zechner for his support and for pi-mono. Special thanks to Adam Doppelt for lobster.bot.
Thanks to all clawtributors: