> openclaw
Deploy and manage OpenClaw, a self-hosted gateway bridging messaging platforms to AI coding agents. Use when a user asks to set up OpenClaw, connect WhatsApp or Telegram or Discord to an AI agent, configure multi-agent routing, schedule cron jobs in OpenClaw, set up webhooks, manage OpenClaw channels, pair a messaging account, configure heartbeats, spawn sub-agents, or troubleshoot OpenClaw gateway issues. Covers installation, channel setup, agent configuration, cron scheduling, webhooks, and su
curl "https://skillshub.wtf/TerminalSkills/skills/openclaw?format=md"OpenClaw
Overview
Manage OpenClaw, an open-source self-hosted gateway that connects messaging platforms (WhatsApp, Telegram, Discord, Slack, Signal, iMessage) to AI coding agents. Covers the full lifecycle from installation through multi-agent routing, cron scheduling, webhooks, and sub-agent orchestration. Configuration lives at ~/.openclaw/openclaw.json.
Instructions
When a user asks for help with OpenClaw, determine which task they need:
Task A: Install and onboard
# Install globally
npm install -g openclaw@latest
# Interactive onboarding (creates config, pairs first channel, starts gateway)
openclaw onboard --install-daemon
# Or manual setup
openclaw channels login # Scan QR to pair WhatsApp
openclaw gateway --port 18789 # Start the gateway
The Control UI is accessible at http://127.0.0.1:18789/ after the gateway starts.
Task B: Configure channels
Edit ~/.openclaw/openclaw.json to enable channels. Each channel has dmPolicy (pairing, allowlist, open, disabled) and groupPolicy (open, allowlist, disabled).
WhatsApp:
{ channels: { whatsapp: { enabled: true, allowFrom: ["+15555550123"], groups: { "*": { requireMention: true } } } } }
Telegram:
{ channels: { telegram: {
enabled: true, token: "BOT_TOKEN", dmPolicy: "pairing", groupPolicy: "allowlist",
allowedGroups: { "-100123456789": { allowedUsers: ["987654321"] } }
} } }
Discord:
{ channels: { discord: {
enabled: true, token: "BOT_TOKEN", groupPolicy: "allowlist",
guilds: { "123456789012345678": { requireMention: true, users: ["987654321098765432"], channels: { "general": { allow: true } } } }
} } }
Verify connectivity with openclaw channels status --probe.
Task C: Set up agents and routing
Define multiple agents in agents.list. Each agent gets an isolated workspace, session store, and tool access.
{
agents: {
list: [
{ id: "alfred", name: "Alfred", workspace: "~/.openclaw/workspace-alfred", default: true },
{ id: "support", name: "Support Agent", workspace: "~/agents/support" }
],
defaults: {
model: { provider: "anthropic", name: "claude-sonnet-4-20250514" },
thinking: "off",
heartbeat: { every: "30m", activeHours: { start: "08:00", end: "22:00", timezone: "America/New_York" } }
}
}
}
Route messages to agents using bindings (evaluated in priority order):
{
bindings: [
{ match: { channel: "whatsapp", peer: { kind: "group", id: "120363403215116621@g.us" } }, agentId: "support" },
{ match: { channel: "telegram", peer: { kind: "group", id: "-100123" } }, agentId: "alfred" },
{ match: { channel: "discord", guildId: "123456789012345678", roles: ["111111111111111111"] }, agentId: "alfred" }
]
}
CLI commands: openclaw agents list, openclaw agents info <id>, openclaw agents create.
Task D: Schedule cron jobs
Cron runs inside the gateway and persists jobs at ~/.openclaw/cron/. Enable with "cron": { "enabled": true }.
# One-shot reminder (UTC, auto-deletes after run)
openclaw cron add --name "Reminder" --at "2026-02-15T16:00:00Z" \
--session main --system-event "Check project deadlines" --wake now --delete-after-run
# Recurring isolated job with delivery to WhatsApp
openclaw cron add --name "Morning brief" --cron "0 7 * * *" \
--tz "America/Los_Angeles" --session isolated \
--message "Summarize overnight updates" \
--announce --channel whatsapp --to "+15551234567"
# Manage jobs
openclaw cron list
openclaw cron run <job-id> # Run immediately
openclaw cron runs --id <job-id> # View run history
openclaw cron edit <job-id> --message "Updated prompt"
Schedule types: at (one-shot), every (fixed interval), cron (5-field expression with timezone).
Task E: Set up webhooks
Enable webhook ingestion for external triggers:
{
hooks: {
enabled: true,
token: "SHARED_SECRET",
path: "/hooks",
allowedAgentIds: ["hooks", "main"]
}
}
Endpoints:
POST /hooks/wake— enqueue a system event:{"text": "description", "mode": "now"}POST /hooks/agent— isolated agent run:{"message": "task", "deliver": true, "channel": "slack", "to": "channel:C123"}POST /hooks/<name>— custom mapped endpoints viahooks.mappings
Authenticate with Authorization: Bearer <token> header.
Task F: Use sub-agents
Sub-agents run background tasks in isolated sessions. No configuration needed for defaults.
{
agents: {
defaults: {
subagents: {
model: "minimax/MiniMax-M2.1",
thinking: "low",
maxConcurrent: 4,
archiveAfterMinutes: 120
}
}
}
}
Spawn by telling the agent: "Spawn a sub-agent to research the latest Node.js release notes."
Manage with /subagents list, /subagents stop <id>, /subagents log <id>.
Task G: Monitor and troubleshoot
openclaw status # Local creds and sessions
openclaw status --deep # Gateway health checks
openclaw gateway status # Gateway process info
openclaw logs --follow # Stream gateway logs
openclaw doctor # Diagnose common issues
openclaw channels status --probe # Test channel connectivity
Workspace files: IDENTITY.md (personality), SOUL.md (memory), HEARTBEAT.md (periodic tasks), TOOLS.md (tool access), AGENTS.md (subagent allowlist).
Examples
Example 1: Personal WhatsApp assistant with heartbeats
User request: "Set up OpenClaw as a personal assistant on WhatsApp with periodic check-ins"
$ npm install -g openclaw@latest
$ openclaw channels login # Scan QR with assistant's phone
Config (~/.openclaw/openclaw.json):
{
agent: {
model: "anthropic/claude-sonnet-4-20250514",
workspace: "~/.openclaw/workspace",
heartbeat: { every: "30m", activeHours: { start: "08:00", end: "22:00", timezone: "America/New_York" } }
},
channels: { whatsapp: { allowFrom: ["+15555550123"], groups: { "*": { requireMention: true } } } },
session: { scope: "per-sender", reset: { mode: "daily", atHour: 4, idleMinutes: 10080 } }
}
$ openclaw gateway --port 18789
Gateway started on http://127.0.0.1:18789/
# Agent now responds via WhatsApp and runs heartbeat checks every 30 min
Example 2: Multi-agent team with cron and Discord routing
User request: "Set up two agents — one for code review in Discord, one for daily standup via Telegram"
Config:
{
agents: { list: [
{ id: "reviewer", name: "Code Reviewer", workspace: "~/agents/reviewer", default: true },
{ id: "standup", name: "Standup Bot", workspace: "~/agents/standup" }
] },
bindings: [
{ match: { channel: "discord", guildId: "123456789012345678" }, agentId: "reviewer" },
{ match: { channel: "telegram", peer: { kind: "group", id: "-1001234567890" } }, agentId: "standup" }
],
channels: {
discord: { enabled: true, token: "DISCORD_BOT_TOKEN", guilds: { "123456789012345678": { requireMention: true } } },
telegram: { enabled: true, token: "TELEGRAM_BOT_TOKEN", groupPolicy: "allowlist", allowedGroups: { "-1001234567890": {} } }
},
cron: { enabled: true }
}
$ openclaw cron add --name "Daily standup" --cron "0 9 * * 1-5" \
--tz "America/New_York" --session isolated \
--message "Compile yesterday's commits and open PRs into a standup summary" \
--announce --channel telegram --to "group:-1001234567890"
Cron job created: job-abc123
Example 3: Webhook-triggered CI notifications to WhatsApp
User request: "Send me a WhatsApp message whenever my CI pipeline finishes"
Config addition:
{
hooks: {
enabled: true, token: "ci-webhook-secret-2024",
mappings: [{ match: { path: "ci-notify" }, action: "agent", deliver: true, channel: "whatsapp", to: "+15555550123" }]
}
}
GitHub Actions step:
- name: Notify via OpenClaw
run: |
curl -X POST "https://openclaw.example.com/hooks/ci-notify" \
-H "Authorization: Bearer ${{ secrets.OPENCLAW_HOOK_TOKEN }}" \
-H "Content-Type: application/json" \
-d '{"message": "Deploy of ${{ github.repository }} completed (${{ job.status }})"}'
Guidelines
- Use a separate phone number for the WhatsApp assistant to avoid mixing personal and agent messages.
- Always configure
allowFromon WhatsApp to restrict who can message the agent. - Start with
heartbeat.every: "0m"(disabled) until you trust the setup, then increase to"30m". - Agent workspaces should be treated as the agent's memory — back them up with git (use a private repo).
- Session keys follow the pattern
agent:<agentId>:<channel>:<kind>:<id>. UsedmScope: "per-channel-peer"for multi-user setups. - Cron jobs without
--tzuse the gateway host's timezone. Always specify--tzfor predictable scheduling. - Webhook tokens should be stored securely and rotated periodically. Never use query string authentication.
- Sub-agents cannot spawn their own sub-agents (no nesting). Use
maxConcurrentto control resource usage. - For troubleshooting, start with
openclaw doctorandopenclaw logs --followto identify issues quickly. - OpenClaw config uses JSON5 format (comments and trailing commas are allowed).
> related_skills --same-repo
> zustand
You are an expert in Zustand, the small, fast, and scalable state management library for React. You help developers manage global state without boilerplate using Zustand's hook-based stores, selectors for performance, middleware (persist, devtools, immer), computed values, and async actions — replacing Redux complexity with a simple, un-opinionated API in under 1KB.
> zoho
Integrate and automate Zoho products. Use when a user asks to work with Zoho CRM, Zoho Books, Zoho Desk, Zoho Projects, Zoho Mail, or Zoho Creator, build custom integrations via Zoho APIs, automate workflows with Deluge scripting, sync data between Zoho apps and external systems, manage leads and deals, automate invoicing, build custom Zoho Creator apps, set up webhooks, or manage Zoho organization settings. Covers Zoho CRM, Books, Desk, Projects, Creator, and cross-product integrations.
> zod
You are an expert in Zod, the TypeScript-first schema declaration and validation library. You help developers define schemas that validate data at runtime AND infer TypeScript types at compile time — eliminating the need to write types and validators separately. Used for API input validation, form validation, environment variables, config files, and any data boundary.
> zipkin
Deploy and configure Zipkin for distributed tracing and request flow visualization. Use when a user needs to set up trace collection, instrument Java/Spring or other services with Zipkin, analyze service dependencies, or configure storage backends for trace data.