macOS widget panel
canvas presentaccepts the existing optional target plus--x/--y/--width/--heightplacement arguments.canvas navigateaccepts a hosted widget-document path or an app-local Canvas URL. The macOS app resolves hosted paths through its current scoped Canvas capability URL.- The agent-facing path is
show_widgetwithpresentation.target: "node_panel"; use the CLI helpers for direct operator control. - A2UI renders on session dashboards, not through node Canvas commands.
Photos + videos (node camera)
Photos (jpg):
mp4):
- The node must be foregrounded for
camera.*(background calls returnNODE_BACKGROUND_UNAVAILABLE). - Nodes clamp clip duration to keep the base64 payload manageable (see Camera capture for exact per-platform limits). The
nodesagent tool additionally caps requesteddurationMsat 300000 (5 minutes) before forwarding the call; the node itself enforces the tighter limit. - Android will prompt for
CAMERA/RECORD_AUDIOpermissions when possible; denied permissions fail with*_PERMISSION_REQUIRED.
Screen recordings (nodes)
Supported nodes exposescreen.record (mp4). Example:
screen.recordavailability depends on node platform.- The
nodesagent tool caps requesteddurationMsat 300000 (5 minutes); the node may enforce a tighter limit to bound the returned payload. --no-audiodisables microphone capture on supported platforms.- Use
--screen <index>to select a display when multiple screens are available (0 = primary).
Location (nodes)
Nodes exposelocation.get when Location is enabled in settings.
CLI helper:
- Location is off by default.
- “Always” requires system permission; background fetch is best-effort.
- The response includes lat/lon, accuracy (meters), and timestamp.
- Full parameter/response shape and error codes: Location command.
SMS (Android nodes)
Android nodes can exposesms.send and sms.search when the user grants SMS permission and the device supports telephony. Both commands are dangerous-by-default: the gateway operator must also add them to gateway.nodes.commands.allow before they can be invoked (see Command policy).
For read-only SMS search, opt in explicitly in openclaw.json:
sms.send separately only when the node should also be able to send messages. Android permission and Gateway command authorization are independent; granting the phone permission does not edit Gateway policy.
Low-level invoke:
sms.searchmay be declared beforeREAD_SMSis granted so an invocation can return a permission diagnostic; reading messages still requires that Android permission.- Wi-Fi-only devices without telephony will not advertise
sms.send. - A
requires explicit gateway.nodes.commands.allow opt-inerror means the phone declared the command but the Gateway operator has not authorized it.
Device and personal data commands
iOS and Android nodes advertise several read-only data commands by default (see the Command policy table); Android additionally exposes a larger family gated by its own in-app settings. A macOS or headless-mac TypeScript node host advertisesdevice.apps only after the operator enables installed-app sharing with --share-installed-apps.
Available families:
device.status,device.info— iOS, Android, Windows.device.permissions,device.health— Android only.device.apps— Android, macOS, and headless-mac nodes. Android requires Installed Apps sharing in Settings and returns launcher-visible apps by default. TypeScript node hosts keep sharing off by default and acceptquery,limit, andincludeSystem; macOS results containlabel,bundleId,path, andsystem.notifications.list,notifications.actions— Android only.photos.latest— iOS, Android.contacts.search— iOS, Android (read-only default);contacts.addis dangerous and needsgateway.nodes.commands.allow.calendar.events— iOS, Android (read-only default);calendar.addis dangerous and needsgateway.nodes.commands.allow.reminders.list— iOS, Android (read-only default);reminders.addis dangerous and needsgateway.nodes.commands.allow.callLog.search— Android only.motion.activity,motion.pedometer— iOS, Android; capability-gated by available sensors.