Skip to main content
OpenClaw lets your OpenHome agent control your local machine through voice: launch apps, monitor system status, manage files, run developer workflows, and more.
OpenHome doesn’t run on your local machine, so it can’t reach your computer directly. OpenHome Local Link, the openhome local gateway from the OpenHome CLI, runs on your PC and provides that connection. Its built-in openclaw handler detects your running OpenClaw gateway and forwards tasks to it. There’s no separate client to download. For a short task-oriented quickstart, see Getting Started → OpenClaw. This page is the full reference. Local Link holds a single persistent connection to OpenClaw’s Gateway for as long as it’s running, rather than starting OpenClaw fresh for every command. Requests sent through ask_openclaw() share a session, so OpenClaw retains context across calls the same way Hermes retains context across turns: no per-command cold start, and no need to repeat context you’ve already given it.

What you can build

  • Application launcher and manager
  • System monitoring and diagnostics
  • File and folder automation
  • Development environment controller
  • Custom workflow automations
  • Smart home integration via computer
  • Screenshot and screen recording tools
  • Clipboard and text manipulation

How it works

The integration has two pieces: Local Link routes each incoming request to a local handler:
  • local-link: a raw shell executor. Always available, and the default if a request doesn’t say otherwise.
  • openclaw: used when OpenClaw is installed and its gateway is running.
  • hermes: used when Hermes is installed and configured.
Because local-link is the default handler, reaching OpenClaw specifically means the Ability must ask for it by name. That’s what target: "openclaw" in the examples below does, see The exec_local_command() API.
  1. Trigger: you say a command by voice. OpenHome captures it as text.
  2. Send: the Ability sends the command to exec_local_command(), targeting the openclaw handler.
  3. Execute: OpenClaw runs it on your computer through its gateway.
  4. Reply: OpenClaw returns the result (success, failure, or output).
  5. Speak: an LLM converts the technical output into a short, natural spoken response.

Setup

1. Install and start OpenClaw

OpenClaw must be installed, configured with an LLM API key, and running its gateway:
During onboarding you’ll be prompted for an LLM API key (OpenAI, Anthropic, etc.). OpenClaw uses this key to interpret natural-language commands.

2. Install and log in to the OpenHome CLI

Local Link ships with the OpenHome CLI. Install it with the one-line installer, or from the repo if you need Python 3.10+ directly:
See OpenHome CLI for the repo-based install method, JWT setup, and the full command reference. Run the gateway on the same machine where OpenClaw is installed, and keep it running:
openhome local run runs it in the foreground for debugging. start and run accept --client-id (device name, default laptop), --role (default agent), and --timeout (per-request seconds, default 30). Give each device a distinct --client-id if you run more than one.

4. Add the OpenClaw Ability

Install the OpenClaw Ability from the Marketplace on your Agent, set Trigger Words, and this is the template you’ll customize for your use case.

The exec_local_command() API

One function carries every command from the Ability to Local Link.
Parameters:
  • command (str | dict, required): the request. A plain string goes to the default local-link shell handler. To reach OpenClaw, send a dict (or its JSON string) shaped like {"type": "command", "target": "openclaw", "data": "<your command>"}.
  • target_id (str | None): which device to reach, if you run Local Link on more than one machine (default: "laptop", matching --client-id).
  • timeout (float): max seconds to wait for a response (default: 10.0).
Returns: the Local Link protocol envelope, {"type": "response", "data": {"status": "ok" | "error", "data": "<reply>", "error": "<message>"}}. Unwrap both layers before reading the reply, see ask_openclaw() below.

Usage

Set the target once in a small helper like ask_openclaw() above, then every call in your Ability reaches OpenClaw without repeating the payload shape.

Example abilities

1. Development environment controller

2. System health monitor

3. Smart screenshot

4. App manager with confirmation

Best practices

1. Define clear trigger words

Specific, unambiguous triggers beat generic ones:
  • start development session, launch dev environment, open my coding setup
  • start, go, do it
Avoid trigger phrases that collide with other Abilities.

2. Validate before executing

3. Confirm destructive actions

4. Tune timeouts

5. Format responses for voice

Don’t just echo raw OpenClaw output. Parse and shape:
Keep spoken output to 1 sentence, 15 words or less.

6. Handle errors and timeouts

7. Chain commands for workflows

Troubleshooting

The gateway isn’t running. Run openclaw gateway start, then openclaw gateway status, and restart Local Link: openhome local stop && openhome local start.
OpenClaw requests already get an automatic 120-second floor, regardless of the timeout you pass, so this is rarely a plain timeout issue: commands with several tool calls can genuinely take a while. If a request does time out, it’s properly cancelled on the Gateway side rather than just abandoned locally. Watch openhome local logs for what actually happened, and raise the timeout further only if you’re seeing genuinely longer runs.
System Settings → Privacy & Security → find the blocked app → Open Anyway. Grant Accessibility and Automation permissions when prompted.
Confirm openhome local status shows OpenClaw detected, test a safe command first (“what time is it”), and review openhome local logs.

Security & privacy

OpenClaw runs with your user permissions on the local machine. Commands execute exactly as if you typed them in a terminal.
  • Commands run locally, not sent to external servers (the LLM used by OpenClaw may receive the natural-language text for command generation).
  • Your OpenHome API key authenticates the OpenHome → Local Link connection. Treat it as a secret, and rotate it if it’s ever been pasted somewhere public.
  • Always add validation for user-provided input.
  • Use confirmation prompts for destructive operations (restart, delete, format).
  • Anyone with access to your OpenHome account can reach OpenClaw through your gateway while it’s running.

Architecture

Both run through the same openhome local gateway, as two handlers: Use openclaw for LLM-driven automation. For direct terminal commands, see Local Connect.

Resources