macOS widget panel

apus nodes canvas present --node <idOrNameOrIp>
apus nodes canvas hide --node <idOrNameOrIp>
apus nodes canvas navigate "/__apus__/canvas/documents/<document-id>/index.html" --node <idOrNameOrIp>

Notes:

Photos + videos (node camera)

Photos (jpg):

apus nodes camera list --node <idOrNameOrIp>
apus nodes camera snap --node <idOrNameOrIp>            # default: one node-selected photo
apus nodes camera snap --node <idOrNameOrIp> --facing front
apus nodes camera snap --node <idOrNameOrIp> --facing both # front then back (2 saved paths)
apus nodes camera snap --node <idOrNameOrIp> --device-id <id> --max-width 1200 --quality 0.9 --delay-ms 2000

Video clips (mp4):

apus nodes camera clip --node <idOrNameOrIp> --duration 10s
apus nodes camera clip --node <idOrNameOrIp> --duration 3000 --no-audio

Notes:

Screen recordings (nodes)

Supported nodes expose screen.record (mp4). Example:

apus nodes screen record --node <idOrNameOrIp> --duration 10s --fps 10
apus nodes screen record --node <idOrNameOrIp> --duration 10s --fps 10 --no-audio

Notes:

Location (nodes)

Nodes expose location.get when Location is enabled in settings.

CLI helper:

apus nodes location get --node <idOrNameOrIp>
apus nodes location get --node <idOrNameOrIp> --accuracy precise --max-age 15000 --location-timeout 10000

Notes:

SMS (Android nodes)

Android nodes can expose sms.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 apus.json:

{
  gateway: {
    nodes: {
      commands: { allow: ["sms.search"] },
    },
  },
}

Add 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:

apus nodes invoke --node <idOrNameOrIp> --command sms.send --params '{"to":"+15555550123","message":"Hello from Apus"}'

Notes:

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 advertises device.apps only after the operator enables installed-app sharing with --share-installed-apps.

Available families:

The nodes agent tool's invoke action accepts invokeTimeoutMs for the node invocation. Unless timeoutMs is explicitly set, Gateway transport receives that budget plus 30 seconds for forwarding and the response.

Example invokes:

apus nodes invoke --node <idOrNameOrIp> --command device.status --params '{}'
apus nodes invoke --node <idOrNameOrIp> --command device.apps --params '{"limit":10}'
apus nodes invoke --node <idOrNameOrIp> --command notifications.list --params '{}'
apus nodes invoke --node <idOrNameOrIp> --command photos.latest --params '{"limit":1}'