The computer connector's tools relay an RPC to the machine:
- filesystem —
computer.fs.read/fs.write/fs.list/fs.stat/fs.delete - shell —
computer.shell.exec(stdout / stderr / exitCode) - desktop —
computer.desktop.cua.click/type_text/press_key/hotkey/scroll/launch_app/list_apps/list_windows/get_screen_size/get_accessibility_tree, pluscomputer.desktop.cua.call(a passthrough to ANY computer-use tool by name).
Every relayed tool takes a computer argument selecting which machine
(its name or id). It's optional when exactly one machine is online — then that
one is used by default.
This is for a connected, external computer — not this sandbox. To touch files
in your own workspace, use normal shell/fs. Reach for computer.* only when the
task is explicitly about the user's own machine.
{ "connector": "computer", "action": "list_computers" }
// → { "computers": [ { "id": "…", "name": "Marko's MacBook", "online": true,
// "capabilities": ["filesystem","shell","desktop"], "platform": "darwin" } ] }
If connectors doesn't list a computer connector at all, this project cannot
reach a machine yet. Say so plainly and hand back the two steps — don't hunt for
another way in:
- Turn the feature on. The Agent Computer Tunnel is gated by the
agent_tunnelexperimental feature. A member with customize-write enables it in Customize → Settings → Experimental. Until it is on, the Computers section does not appear in the dashboard at all. - Pair a machine in Customize → Computers, which shows up once the feature is enabled.
If the connector IS listed but list_computers shows the target online: false, the machine is paired but not running — ask them to bring it online.
2. Call a tool, picking the machine. Pass computer (name or id). Omit it
when only one machine is online.
// read a file on the laptop
{ "connector": "computer", "action": "fs.read",
"args": { "computer": "Marko's MacBook", "path": "/Users/marko/notes.md" } }
// run a command (sole online machine → no selector needed)
{ "connector": "computer", "action": "shell.exec",
"args": { "command": "git", "args": ["status"], "cwd": "/Users/marko/proj" } }
// drive the desktop
{ "connector": "computer", "action": "desktop.cua.type_text",
"args": { "computer": "Marko's MacBook", "text": "hello" } }
describe any tool first if unsure of its inputs (e.g.
{ "tool": "computer.shell.exec" }).
3. The passthrough for the long tail. Beyond the curated desktop actions,
computer.desktop.cua.call invokes any computer-use tool by name:
{ "connector": "computer", "action": "desktop.cua.call",
"args": { "computer": "Marko's MacBook", "tool": "double_click", "args": { "x": 220, "y": 140 } } }
If you call something that isn't yet granted, the call comes back as pending_approval: a permission request is created and surfaced to the user in Computers. Tell them what you're trying to do and that they need to approve the request in Computers, then retry once they have. Don't try to route around a denial (there is no token to fall back to, by design).