[ { "description": "Control node canvases (present/hide/navigate/eval/snapshot/A2UI). Use snapshot to capture the rendered UI.", "inputSchema": { "properties": { "action": { "enum": ["present", "hide", "navigate", "eval", "snapshot", "a2ui_push", "a2ui_reset"], "type": "string" }, "delayMs": { "type": "number" }, "gatewayToken": { "type": "string" }, "gatewayUrl": { "type": "string" }, "height": { "type": "number" }, "javaScript": { "type": "string" }, "jsonl": { "type": "string" }, "jsonlPath": { "type": "string" }, "maxWidth": { "type": "number" }, "node": { "type": "string" }, "outputFormat": { "enum": ["png", "jpg", "jpeg"], "type": "string" }, "quality": { "type": "number" }, "target": { "type": "string" }, "timeoutMs": { "type": "number" }, "url": { "type": "string" }, "width": { "type": "number" }, "x": { "type": "number" }, "y": { "type": "number" } }, "required": ["action"], "type": "object" }, "name": "canvas" }, { "description": "Discover and control paired nodes (status/describe/pairing/notify/camera/photos/screen/location/notifications/invoke). For file retrieval, use the dedicated file_fetch tool.", "inputSchema": { "properties": { "action": { "enum": [ "status", "describe", "pending", "approve", "reject", "notify", "camera_snap", "camera_list", "camera_clip", "photos_latest", "screen_record", "location_get", "notifications_list", "notifications_action", "device_status", "device_info", "device_permissions", "device_health", "invoke" ], "type": "string" }, "body": { "type": "string" }, "delayMs": { "type": "number" }, "delivery": { "enum": ["system", "overlay", "auto"], "type": "string" }, "desiredAccuracy": { "enum": ["coarse", "balanced", "precise"], "type": "string" }, "deviceId": { "type": "string" }, "duration": { "type": "string" }, "durationMs": { "maximum": 300000, "type": "number" }, "facing": { "description": "camera_snap: front/back/both; camera_clip: front/back only.", "enum": ["front", "back", "both"], "type": "string" }, "fps": { "type": "number" }, "gatewayToken": { "type": "string" }, "gatewayUrl": { "type": "string" }, "includeAudio": { "type": "boolean" }, "invokeCommand": { "type": "string" }, "invokeParamsJson": { "type": "string" }, "invokeTimeoutMs": { "type": "number" }, "limit": { "type": "number" }, "locationTimeoutMs": { "type": "number" }, "maxAgeMs": { "type": "number" }, "maxWidth": { "type": "number" }, "node": { "type": "string" }, "notificationAction": { "enum": ["open", "dismiss", "reply"], "type": "string" }, "notificationKey": { "type": "string" }, "notificationReplyText": { "type": "string" }, "outPath": { "type": "string" }, "priority": { "enum": ["passive", "active", "timeSensitive"], "type": "string" }, "quality": { "type": "number" }, "requestId": { "type": "string" }, "screenIndex": { "type": "number" }, "sound": { "type": "string" }, "timeoutMs": { "type": "number" }, "title": { "type": "string" } }, "required": ["action"], "type": "object" }, "name": "nodes" }, { "description": "Manage Gateway cron jobs (status/list/add/update/remove/run/runs) and send wake events. Use this for reminders, \"check back later\" requests, delayed follow-ups, and recurring tasks. Do not emulate scheduling with exec sleep or process polling.\n\nMain-session cron jobs enqueue system events for heartbeat handling. Isolated cron jobs create background task runs that appear in `openclaw tasks`.\n\nACTIONS:\n- status: Check cron scheduler status\n- list: List jobs (use includeDisabled:true to include disabled)\n- add: Create job (requires job object, see schema below)\n- update: Modify job (requires jobId + patch object)\n- remove: Delete job (requires jobId)\n- run: Trigger job immediately (requires jobId)\n- runs: Get job run history (requires jobId)\n- wake: Send wake event (requires text, optional mode)\n\nJOB SCHEMA (for add action):\n{\n \"name\": \"string (optional)\",\n \"schedule\": { ... }, // Required: when to run\n \"payload\": { ... }, // Required: what to execute\n \"delivery\": { ... }, // Optional: announce summary (isolated/current/session:xxx only) or webhook POST\n \"sessionTarget\": \"main\" | \"isolated\" | \"current\" | \"session:\", // Optional, defaults based on context\n \"enabled\": true | false // Optional, default true\n}\n\nSESSION TARGET OPTIONS:\n- \"main\": Run in the main session (requires payload.kind=\"systemEvent\")\n- \"isolated\": Run in an ephemeral isolated session (requires payload.kind=\"agentTurn\")\n- \"current\": Bind to the current session where the cron is created (resolved at creation time)\n- \"session:\": Run in a persistent named session (e.g., \"session:project-alpha-daily\")\n\nDEFAULT BEHAVIOR (unchanged for backward compatibility):\n- payload.kind=\"systemEvent\" → defaults to \"main\"\n- payload.kind=\"agentTurn\" → defaults to \"isolated\"\nTo use current session binding, explicitly set sessionTarget=\"current\".\n\nSCHEDULE TYPES (schedule.kind):\n- \"at\": One-shot at absolute time\n { \"kind\": \"at\", \"at\": \"\" }\n- \"every\": Recurring interval\n { \"kind\": \"every\", \"everyMs\": , \"anchorMs\": }\n- \"cron\": Cron expression evaluated in the supplied timezone, or the Gateway host local timezone when tz is omitted\n { \"kind\": \"cron\", \"expr\": \"\", \"tz\": \"\" }\n Write expr in the selected timezone's local wall-clock time; do not convert the requested local time to UTC first.\n If tz is omitted, do not assume UTC; the Gateway host local timezone is used.\n Example: \"Remind me every day at 6pm Shanghai time\" -> { \"kind\": \"cron\", \"expr\": \"0 18 * * *\", \"tz\": \"Asia/Shanghai\" }\n\nFor schedule.kind=\"at\", ISO timestamps without an explicit timezone are treated as UTC.\n\nPAYLOAD TYPES (payload.kind):\n- \"systemEvent\": Injects text as system event into session\n { \"kind\": \"systemEvent\", \"text\": \"\" }\n- \"agentTurn\": Runs agent with message (isolated sessions only)\n { \"kind\": \"agentTurn\", \"message\": \"\", \"model\": \"\", \"thinking\": \"\", \"timeoutSeconds\": }\n\nDELIVERY (top-level):\n { \"mode\": \"none|announce|webhook\", \"channel\": \"\", \"to\": \"\", \"threadId\": \"\", \"bestEffort\": }\n - Default for isolated agentTurn jobs (when delivery omitted): \"announce\"\n - announce: send to chat channel (optional channel/to target)\n - threadId: chat thread/topic id for channels that support threaded delivery\n - webhook: send finished-run event as HTTP POST to delivery.to (URL required)\n - If the task needs to send to a specific chat/recipient, set announce delivery.channel/to; do not call messaging tools inside the run.\n\nCRITICAL CONSTRAINTS:\n- sessionTarget=\"main\" REQUIRES payload.kind=\"systemEvent\"\n- sessionTarget=\"isolated\" | \"current\" | \"session:xxx\" REQUIRES payload.kind=\"agentTurn\"\n- For webhook callbacks, use delivery.mode=\"webhook\" with delivery.to set to a URL.\nDefault: prefer isolated agentTurn jobs unless the user explicitly wants current-session binding.\n\nWAKE MODES (for wake action):\n- \"next-heartbeat\" (default): Wake on next heartbeat\n- \"now\": Wake immediately\n\nUse jobId as the canonical identifier; id is accepted for compatibility. Use contextMessages (0-10) to add previous messages as context to the job text.", "inputSchema": { "additionalProperties": true, "properties": { "action": { "enum": ["status", "list", "add", "update", "remove", "run", "runs", "wake"], "type": "string" }, "contextMessages": { "maximum": 10, "minimum": 0, "type": "number" }, "gatewayToken": { "type": "string" }, "gatewayUrl": { "type": "string" }, "id": { "type": "string" }, "includeDisabled": { "type": "boolean" }, "job": { "additionalProperties": true, "properties": { "agentId": { "description": "Agent id, or null to keep it unset", "type": "string" }, "deleteAfterRun": { "description": "Delete after first execution", "type": "boolean" }, "delivery": { "additionalProperties": true, "properties": { "accountId": { "description": "Account target for delivery", "type": "string" }, "bestEffort": { "type": "boolean" }, "channel": { "description": "Delivery channel", "type": "string" }, "failureDestination": { "additionalProperties": true, "properties": { "accountId": { "type": "string" }, "channel": { "type": "string" }, "mode": { "enum": ["announce", "webhook"], "type": "string" }, "to": { "type": "string" } }, "type": "object" }, "mode": { "description": "Delivery mode", "enum": ["none", "announce", "webhook"], "type": "string" }, "threadId": { "anyOf": [ { "type": "string" }, { "type": "number" } ], "description": "Thread/topic id for channels that support threaded delivery" }, "to": { "description": "Delivery target", "type": "string" } }, "type": "object" }, "description": { "description": "Human-readable description", "type": "string" }, "enabled": { "type": "boolean" }, "failureAlert": { "additionalProperties": true, "description": "Failure alert config object, or the boolean value false to disable alerts for this job", "properties": { "accountId": { "type": "string" }, "after": { "description": "Failures before alerting", "type": "number" }, "channel": { "description": "Alert channel", "type": "string" }, "cooldownMs": { "description": "Cooldown between alerts in ms", "type": "number" }, "includeSkipped": { "description": "Count consecutive skipped runs toward alerting", "type": "boolean" }, "mode": { "enum": ["announce", "webhook"], "type": "string" }, "to": { "description": "Alert target", "type": "string" } }, "type": "object" }, "name": { "description": "Job name", "type": "string" }, "payload": { "additionalProperties": true, "properties": { "allowUnsafeExternalContent": { "type": "boolean" }, "fallbacks": { "description": "Fallback model ids", "items": { "type": "string" }, "type": "array" }, "kind": { "description": "Payload type", "enum": ["systemEvent", "agentTurn"], "type": "string" }, "lightContext": { "type": "boolean" }, "message": { "description": "Agent prompt (kind=agentTurn)", "type": "string" }, "model": { "description": "Model override", "type": "string" }, "text": { "description": "Message text (kind=systemEvent)", "type": "string" }, "thinking": { "description": "Thinking level override", "type": "string" }, "timeoutSeconds": { "type": "number" }, "toolsAllow": { "description": "Allowed tool ids", "items": { "type": "string" }, "type": "array" } }, "type": "object" }, "schedule": { "additionalProperties": true, "properties": { "anchorMs": { "description": "Optional start anchor in milliseconds (kind=every)", "type": "number" }, "at": { "description": "ISO-8601 timestamp (kind=at)", "type": "string" }, "everyMs": { "description": "Interval in milliseconds (kind=every)", "type": "number" }, "expr": { "description": "Cron expression (kind=cron) written in the supplied tz's local wall-clock time, or the Gateway host local timezone when tz is omitted; do not convert the requested local time to UTC first. Example: 6pm Shanghai daily is \"0 18 * * *\" with tz \"Asia/Shanghai\".", "type": "string" }, "kind": { "description": "Schedule type", "enum": ["at", "every", "cron"], "type": "string" }, "staggerMs": { "description": "Random jitter in ms (kind=cron)", "type": "number" }, "tz": { "description": "IANA timezone for interpreting cron wall-clock fields (kind=cron), e.g. \"Asia/Shanghai\"; if omitted, cron uses the Gateway host local timezone.", "type": "string" } }, "type": "object" }, "sessionKey": { "description": "Explicit session key, or null to clear it", "type": "string" }, "sessionTarget": { "description": "Session target: \"main\", \"isolated\", \"current\", or \"session:\"", "type": "string" }, "wakeMode": { "description": "When to wake the session", "enum": ["now", "next-heartbeat"], "type": "string" } }, "type": "object" }, "jobId": { "type": "string" }, "mode": { "enum": ["now", "next-heartbeat"], "type": "string" }, "patch": { "additionalProperties": true, "properties": { "agentId": { "description": "Agent id, or null to clear it", "type": "string" }, "deleteAfterRun": { "type": "boolean" }, "delivery": { "additionalProperties": true, "properties": { "accountId": { "description": "Account target for delivery", "type": "string" }, "bestEffort": { "type": "boolean" }, "channel": { "description": "Delivery channel", "type": "string" }, "failureDestination": { "additionalProperties": true, "properties": { "accountId": { "type": "string" }, "channel": { "type": "string" }, "mode": { "enum": ["announce", "webhook"], "type": "string" }, "to": { "type": "string" } }, "type": "object" }, "mode": { "description": "Delivery mode", "enum": ["none", "announce", "webhook"], "type": "string" }, "threadId": { "anyOf": [ { "type": "string" }, { "type": "number" } ], "description": "Thread/topic id for channels that support threaded delivery" }, "to": { "description": "Delivery target", "type": "string" } }, "type": "object" }, "description": { "type": "string" }, "enabled": { "type": "boolean" }, "failureAlert": { "additionalProperties": true, "description": "Failure alert config object, or the boolean value false to disable alerts for this job", "properties": { "accountId": { "type": "string" }, "after": { "description": "Failures before alerting", "type": "number" }, "channel": { "description": "Alert channel", "type": "string" }, "cooldownMs": { "description": "Cooldown between alerts in ms", "type": "number" }, "includeSkipped": { "description": "Count consecutive skipped runs toward alerting", "type": "boolean" }, "mode": { "enum": ["announce", "webhook"], "type": "string" }, "to": { "description": "Alert target", "type": "string" } }, "type": "object" }, "name": { "description": "Job name", "type": "string" }, "payload": { "additionalProperties": true, "properties": { "allowUnsafeExternalContent": { "type": "boolean" }, "fallbacks": { "description": "Fallback model ids", "items": { "type": "string" }, "type": "array" }, "kind": { "description": "Payload type", "enum": ["systemEvent", "agentTurn"], "type": "string" }, "lightContext": { "type": "boolean" }, "message": { "description": "Agent prompt (kind=agentTurn)", "type": "string" }, "model": { "description": "Model override", "type": "string" }, "text": { "description": "Message text (kind=systemEvent)", "type": "string" }, "thinking": { "description": "Thinking level override", "type": "string" }, "timeoutSeconds": { "type": "number" }, "toolsAllow": { "description": "Allowed tool ids, or null to clear", "items": { "type": "string" }, "type": "array" } }, "type": "object" }, "schedule": { "additionalProperties": true, "properties": { "anchorMs": { "description": "Optional start anchor in milliseconds (kind=every)", "type": "number" }, "at": { "description": "ISO-8601 timestamp (kind=at)", "type": "string" }, "everyMs": { "description": "Interval in milliseconds (kind=every)", "type": "number" }, "expr": { "description": "Cron expression (kind=cron) written in the supplied tz's local wall-clock time, or the Gateway host local timezone when tz is omitted; do not convert the requested local time to UTC first. Example: 6pm Shanghai daily is \"0 18 * * *\" with tz \"Asia/Shanghai\".", "type": "string" }, "kind": { "description": "Schedule type", "enum": ["at", "every", "cron"], "type": "string" }, "staggerMs": { "description": "Random jitter in ms (kind=cron)", "type": "number" }, "tz": { "description": "IANA timezone for interpreting cron wall-clock fields (kind=cron), e.g. \"Asia/Shanghai\"; if omitted, cron uses the Gateway host local timezone.", "type": "string" } }, "type": "object" }, "sessionKey": { "description": "Explicit session key, or null to clear it", "type": "string" }, "sessionTarget": { "description": "Session target", "type": "string" }, "wakeMode": { "enum": ["now", "next-heartbeat"], "type": "string" } }, "type": "object" }, "runMode": { "enum": ["due", "force"], "type": "string" }, "text": { "type": "string" }, "timeoutMs": { "type": "number" } }, "required": ["action"], "type": "object" }, "name": "cron" }, { "description": "Send, delete, and manage messages via channel plugins. Supports actions: send.", "inputSchema": { "properties": { "accountId": { "type": "string" }, "action": { "enum": ["send"], "type": "string" }, "activityName": { "description": "Activity name shown in sidebar (e.g. 'with fire'). Ignored for custom type.", "type": "string" }, "activityState": { "description": "State text. For custom type this is the status text; for others it shows in the flyout.", "type": "string" }, "activityType": { "description": "Activity type: playing, streaming, listening, watching, competing, custom.", "type": "string" }, "activityUrl": { "description": "Streaming URL (Twitch or YouTube). Only used with streaming type; may not render for bots.", "type": "string" }, "after": { "type": "string" }, "appliedTags": { "items": { "type": "string" }, "type": "array" }, "around": { "type": "string" }, "asDocument": { "description": "Send image/GIF as document to avoid Telegram compression. Alias for forceDocument (Telegram only).", "type": "boolean" }, "asVoice": { "type": "boolean" }, "authorId": { "type": "string" }, "authorIds": { "items": { "type": "string" }, "type": "array" }, "autoArchiveMin": { "type": "number" }, "before": { "type": "string" }, "bestEffort": { "type": "boolean" }, "buffer": { "description": "Base64 payload for attachments (optionally a data: URL).", "type": "string" }, "caption": { "type": "string" }, "categoryId": { "type": "string" }, "channel": { "type": "string" }, "channelId": { "description": "Channel id filter (search/thread list/event create).", "type": "string" }, "channelIds": { "items": { "description": "Channel id filter (repeatable).", "type": "string" }, "type": "array" }, "chatId": { "description": "Chat id for chat-scoped metadata actions.", "type": "string" }, "clearParent": { "description": "Clear the parent/category when supported by the provider.", "type": "boolean" }, "contentType": { "type": "string" }, "deleteDays": { "type": "number" }, "desc": { "type": "string" }, "dryRun": { "type": "boolean" }, "durationMin": { "type": "number" }, "effect": { "description": "Alias for effectId (e.g., invisible-ink, balloons).", "type": "string" }, "effectId": { "description": "Message effect name/id for sendWithEffect (e.g., invisible ink).", "type": "string" }, "emoji": { "type": "string" }, "emojiName": { "type": "string" }, "endTime": { "type": "string" }, "eventName": { "type": "string" }, "eventType": { "type": "string" }, "fileId": { "type": "string" }, "filename": { "type": "string" }, "filePath": { "type": "string" }, "forceDocument": { "description": "Send image/GIF as document to avoid Telegram compression (Telegram only).", "type": "boolean" }, "fromMe": { "type": "boolean" }, "gatewayToken": { "type": "string" }, "gatewayUrl": { "type": "string" }, "gifPlayback": { "type": "boolean" }, "groupId": { "type": "string" }, "guildId": { "type": "string" }, "image": { "description": "Cover image URL or local file path for the event.", "type": "string" }, "includeArchived": { "type": "boolean" }, "includeMembers": { "type": "boolean" }, "kind": { "type": "string" }, "limit": { "type": "number" }, "location": { "type": "string" }, "media": { "description": "Media URL or local path. data: URLs are not supported here, use buffer.", "type": "string" }, "memberId": { "type": "string" }, "memberIdType": { "type": "string" }, "members": { "type": "boolean" }, "message": { "type": "string" }, "message_id": { "description": "snake_case alias of messageId. If omitted for reaction-like actions, defaults to the current inbound message id when available.", "type": "string" }, "messageId": { "description": "Target message id for read, reaction, edit, delete, pin, or unpin. If omitted for reaction-like actions, defaults to the current inbound message id when available.", "type": "string" }, "mimeType": { "type": "string" }, "name": { "type": "string" }, "nsfw": { "type": "boolean" }, "openId": { "type": "string" }, "pageSize": { "type": "number" }, "pageToken": { "type": "string" }, "parentId": { "type": "string" }, "participant": { "type": "string" }, "path": { "type": "string" }, "pollDurationHours": { "type": "number" }, "pollId": { "type": "string" }, "pollMulti": { "type": "boolean" }, "pollOption": { "items": { "type": "string" }, "type": "array" }, "pollOptionId": { "description": "Poll answer id to vote for. Use when the channel exposes stable answer ids.", "type": "string" }, "pollOptionIds": { "items": { "description": "Poll answer ids to vote for in a multiselect poll. Use when the channel exposes stable answer ids.", "type": "string" }, "type": "array" }, "pollOptionIndex": { "description": "1-based poll option number to vote for, matching the rendered numbered poll choices.", "type": "number" }, "pollOptionIndexes": { "items": { "description": "1-based poll option numbers to vote for in a multiselect poll, matching the rendered numbered poll choices.", "type": "number" }, "type": "array" }, "pollQuestion": { "type": "string" }, "position": { "type": "number" }, "query": { "type": "string" }, "quoteText": { "description": "Quote text for Telegram reply_parameters", "type": "string" }, "rateLimitPerUser": { "type": "number" }, "reason": { "type": "string" }, "remove": { "type": "boolean" }, "replyTo": { "type": "string" }, "roleId": { "type": "string" }, "roleIds": { "items": { "type": "string" }, "type": "array" }, "scope": { "type": "string" }, "silent": { "type": "boolean" }, "startTime": { "type": "string" }, "status": { "description": "Bot status: online, dnd, idle, invisible.", "type": "string" }, "stickerDesc": { "type": "string" }, "stickerId": { "items": { "type": "string" }, "type": "array" }, "stickerName": { "type": "string" }, "stickerTags": { "type": "string" }, "target": { "description": "Recipient/channel: E.164 for WhatsApp/Signal, Telegram chat id/@username, Discord/Slack/Mattermost , or iMessage handle/chat_id", "type": "string" }, "targetAuthor": { "type": "string" }, "targetAuthorUuid": { "type": "string" }, "targets": { "items": { "description": "Recipient/channel targets (same format as --target); accepts ids or names when the directory is available.", "type": "string" }, "type": "array" }, "threadId": { "type": "string" }, "threadName": { "type": "string" }, "timeoutMs": { "type": "number" }, "topic": { "type": "string" }, "type": { "type": "number" }, "unionId": { "type": "string" }, "until": { "type": "string" }, "userId": { "type": "string" } }, "required": ["action"], "type": "object" }, "name": "message" }, { "description": "Use only for explicit audio intent (audio, voice, speech, TTS) or active TTS config. Never use for ordinary text replies. Audio is delivered automatically from the tool result. After a successful call, follow the current conversation's reply instructions and avoid sending a duplicate text/audio response.", "inputSchema": { "properties": { "channel": { "description": "Optional channel id to pick output format.", "type": "string" }, "text": { "description": "Text to convert to speech.", "type": "string" }, "timeoutMs": { "description": "Optional provider request timeout in milliseconds.", "minimum": 1, "type": "number" } }, "required": ["text"], "type": "object" }, "name": "tts" }, { "description": "Restart, inspect a specific config schema path, apply config, or update the gateway in-place (SIGUSR1). Use config.schema.lookup with a targeted dot path before config edits. Use config.patch for safe partial config updates (merges with existing). Use config.apply only when replacing entire config. Config writes hot-reload when possible and restart when required. Always pass a human-readable completion message via the `note` parameter so the system can deliver it to the user after restart. If restarting during a user task and you still owe the user a reply, pass a specific one-shot `continuationMessage` for what to verify or report after boot; do not write restart sentinel files directly.", "inputSchema": { "properties": { "action": { "enum": [ "restart", "config.get", "config.schema.lookup", "config.apply", "config.patch", "update.run" ], "type": "string" }, "baseHash": { "type": "string" }, "continuationMessage": { "type": "string" }, "delayMs": { "type": "number" }, "gatewayToken": { "type": "string" }, "gatewayUrl": { "type": "string" }, "note": { "type": "string" }, "path": { "type": "string" }, "raw": { "type": "string" }, "reason": { "type": "string" }, "restartDelayMs": { "type": "number" }, "sessionKey": { "type": "string" }, "timeoutMs": { "type": "number" } }, "required": ["action"], "type": "object" }, "name": "gateway" }, { "description": "List OpenClaw agent ids you can target with `sessions_spawn` when `runtime=\"subagent\"` (based on subagent allowlists).", "inputSchema": { "properties": {}, "type": "object" }, "name": "agents_list" }, { "description": "List visible sessions with optional filters for kind, label, agentId, search, recent activity, derived titles, and last-message previews. Use this to discover a target session before calling sessions_history or sessions_send.", "inputSchema": { "properties": { "activeMinutes": { "minimum": 1, "type": "number" }, "agentId": { "maxLength": 64, "minLength": 1, "type": "string" }, "includeDerivedTitles": { "type": "boolean" }, "includeLastMessage": { "type": "boolean" }, "kinds": { "items": { "type": "string" }, "type": "array" }, "label": { "minLength": 1, "type": "string" }, "limit": { "minimum": 1, "type": "number" }, "messageLimit": { "minimum": 0, "type": "number" }, "search": { "minLength": 1, "type": "string" } }, "type": "object" }, "name": "sessions_list" }, { "description": "Fetch sanitized message history for a visible session. Supports limits and optional tool messages; use this to inspect another session before replying, debugging, or resuming work.", "inputSchema": { "properties": { "includeTools": { "type": "boolean" }, "limit": { "minimum": 1, "type": "number" }, "sessionKey": { "type": "string" } }, "required": ["sessionKey"], "type": "object" }, "name": "sessions_history" }, { "description": "Send a message into another visible session by sessionKey or label. Thread-scoped chat sessions are rejected; target the parent channel session for inter-agent coordination. Use this to delegate follow-up work to an existing session; waits for the target run and returns the updated assistant reply when available.", "inputSchema": { "properties": { "agentId": { "maxLength": 64, "minLength": 1, "type": "string" }, "label": { "maxLength": 512, "minLength": 1, "type": "string" }, "message": { "type": "string" }, "sessionKey": { "type": "string" }, "timeoutSeconds": { "minimum": 0, "type": "number" } }, "required": ["message"], "type": "object" }, "name": "sessions_send" }, { "description": "Spawn a clean isolated session by default with the native subagent runtime. `mode=\"run\"` is one-shot background work. Subagents inherit the parent workspace directory automatically. For native subagents only, set `context=\"fork\"` when the child needs the current transcript context; otherwise omit it or use `context=\"isolated\"`. Use this when the work should happen in a fresh child session instead of the current one.", "inputSchema": { "properties": { "agentId": { "type": "string" }, "attachAs": { "properties": { "mountPath": { "type": "string" } }, "type": "object" }, "attachments": { "items": { "properties": { "content": { "type": "string" }, "encoding": { "enum": ["utf8", "base64"], "type": "string" }, "mimeType": { "type": "string" }, "name": { "type": "string" } }, "required": ["name", "content"], "type": "object" }, "maxItems": 50, "type": "array" }, "cleanup": { "enum": ["delete", "keep"], "type": "string" }, "context": { "description": "Native subagent context mode. Omit or use \"isolated\" for a clean child session; use \"fork\" only when the child needs the requester transcript context.", "enum": ["isolated", "fork"], "type": "string" }, "cwd": { "type": "string" }, "label": { "type": "string" }, "lightContext": { "description": "When true, spawned subagent runs use lightweight bootstrap context. Only applies to runtime='subagent'.", "type": "boolean" }, "mode": { "enum": ["run"], "type": "string" }, "model": { "type": "string" }, "runtime": { "enum": ["subagent"], "type": "string" }, "runTimeoutSeconds": { "minimum": 0, "type": "number" }, "sandbox": { "enum": ["inherit", "require"], "type": "string" }, "task": { "type": "string" }, "thinking": { "type": "string" }, "timeoutSeconds": { "minimum": 0, "type": "number" } }, "required": ["task"], "type": "object" }, "name": "sessions_spawn" }, { "description": "End your current turn. Use after spawning subagents to receive their results as the next message.", "inputSchema": { "properties": { "message": { "type": "string" } }, "type": "object" }, "name": "sessions_yield" }, { "description": "List, kill, or steer spawned sub-agents for this requester session. Use this for sub-agent orchestration.", "inputSchema": { "properties": { "action": { "enum": ["list", "kill", "steer"], "type": "string" }, "message": { "type": "string" }, "recentMinutes": { "minimum": 1, "type": "number" }, "target": { "type": "string" } }, "type": "object" }, "name": "subagents" }, { "description": "Show a /status-equivalent session status card for the current or another visible session, including usage, time, cost when available, and linked background task context. Use `sessionKey=\"current\"` for the current session; do not use UI/client labels such as `openclaw-tui` as session keys. Optional `model` sets a per-session model override; `model=default` resets overrides. Use this for questions like what model is active or how a session is configured.", "inputSchema": { "properties": { "model": { "type": "string" }, "sessionKey": { "type": "string" } }, "type": "object" }, "name": "session_status" }, { "description": "Search the web. Returns provider-normalized results for current information lookup.", "inputSchema": { "properties": { "count": { "description": "Number of results to return.", "maximum": 10, "minimum": 1, "type": "number" }, "country": { "description": "2-letter country code for region-specific results.", "type": "string" }, "date_after": { "description": "Only results published after this date (YYYY-MM-DD).", "type": "string" }, "date_before": { "description": "Only results published before this date (YYYY-MM-DD).", "type": "string" }, "domain_filter": { "description": "Perplexity native Search API domain filter.", "items": { "type": "string" }, "type": "array" }, "freshness": { "description": "Filter by time: day, week, month, or year.", "type": "string" }, "language": { "description": "ISO 639-1 language code for results.", "type": "string" }, "max_tokens": { "description": "Perplexity native Search API total content budget.", "maximum": 1000000, "minimum": 1, "type": "number" }, "max_tokens_per_page": { "description": "Perplexity native Search API max tokens extracted per page.", "minimum": 1, "type": "number" }, "query": { "description": "Search query string.", "type": "string" }, "search_lang": { "description": "Brave search result language code.", "type": "string" }, "ui_lang": { "description": "Brave UI locale code in language-region format.", "type": "string" } }, "type": "object" }, "name": "web_search" }, { "description": "Fetch and extract readable content from a URL (HTML → markdown/text). Use for lightweight page access without browser automation.", "inputSchema": { "properties": { "extractMode": { "default": "markdown", "description": "Extraction mode (\"markdown\" or \"text\").", "enum": ["markdown", "text"], "type": "string" }, "maxChars": { "description": "Maximum characters to return (truncates when exceeded).", "minimum": 100, "type": "number" }, "url": { "description": "HTTP or HTTPS URL to fetch.", "type": "string" } }, "required": ["url"], "type": "object" }, "name": "web_fetch" } ]