active, give the agent a stable active-node hint, and route
node connection alerts to the computer where you are most likely present.
This is separate from system presence, which is the live
roster of Gateway clients, and from durable node.presence.alive beacons, which
record when a mobile node last woke without treating it as connected.
Requirements
- The OpenClaw macOS app is paired and connected in node mode.
- Settings -> Permissions -> Active computer detection is enabled. It is off by default.
- Accessibility permission is granted to the signed OpenClaw app.
- For connection alerts, Notifications permission is also granted and the
Mac node exposes
system.notify.
Check the active computer
- In the macOS app, open Settings -> Permissions, enable Active computer detection, and grant Accessibility in macOS System Settings.
-
Confirm the Mac node is connected:
-
Move the mouse or press a key on that Mac, then run:
active. Status output shows its last-input
age; describe exposes active, lastActiveAtMs, and presenceUpdatedAtMs.
Activity is intentionally coalesced, so the display may take up to about 15
seconds to reflect another input after a recent report.
How activity becomes presence
The macOS reporter samples the HID system idle clock every two seconds. It reports once when a node connection becomes ready, then reports newer physical activity no more than once every 15 seconds. While idle, it sends a keepalive every three minutes. Idle duration is capped at 30 days so a very old sample cannot drift forward and incorrectly become the newest computer. Disabling Active computer detection stops sampling and sends an authenticated clear event over the current node connection. The Gateway immediately removes that Mac’s retained activity timestamps and recomputes the active computer; other node capabilities and in-flight work stay connected. If the connected Gateway predates this clear action, the Mac node reconnects once so disconnect cleanup can remove the retained activity instead. The Gateway accepts activity only when all of these are true:- the event belongs to the current authenticated connection for that node id;
- the node has effective
accessibility: truepermission; - the payload contains a bounded integer
idleSecondsvalue.
idleSeconds from its own observation time to derive
lastActiveAtMs. It never trusts a node-supplied wall-clock timestamp. Among
connected eligible Macs, the newest lastActiveAtMs wins; a tie uses the most
recent presence update.
Presence is process-local and connection-bound. Disconnecting the current
session, replacing it with another session using the same node id, or revoking
Accessibility clears that node’s activity state and recomputes the active Mac.
Privacy and model context
Activity sharing is off by default and is separate from the Accessibility grant used for UI automation. OpenClaw sends idle duration, not input content. It does not send key values, mouse coordinates, application names, window titles, or raw input events. The macOS reporter reads the hardware HID state, so synthetic computer-control events do not make an automated Mac appear to be the computer you physically used. Continuous activity does not create model-facing system events. The dynamic runtime line contains only the authenticated node id:nodes tool can read node.list or node.describe instead.
How connection alerts are routed
After a node finishes its first successful Gateway handshake after approval, OpenClaw waits 750 milliseconds so the connecting Mac can submit its first activity sample. It then tries the connected notification-capable Mac with the freshest activity.- If primary delivery succeeds, no other Mac receives the alert.
- If no active Mac is available or primary delivery fails, OpenClaw waits five
seconds and tries every remaining connected Mac that exposes
system.notify. - Later reconnects are silent. The Gateway records the successful connection in pairing metadata, so a Gateway restart does not replay alerts for every previously connected node.
Troubleshooting
For TCC recovery, see macOS permissions. For node
connection and command failures, see Node troubleshooting.