openhome-dev/abilities repository.
Install and Set Up
1
Install the CLI
Install the CLI using one of the two methods below.One-line install (macOS and Linux) is the quickest way to get started. Run:This installs the OpenHome CLI and makes it available in your terminal.Installing from the repo is the right choice if you are contributing to the abilities repo or working with Ability source directly. It requires Python 3.10 or newer:With either method, the OpenHome CLI becomes available from your terminal.
2
Log in
Authenticate the CLI with your OpenHome account:Paste your API key when prompted. Find it in the Dashboard under Settings → API Keys → OpenHome API Key. Your credentials are saved locally, so you only log in once.
Adding a session token (JWT). To get your JWT, open app.openhome.com while logged in, then either:
openhome login prompts only for your API key, which is sufficient for everyday commands such as agents, list, call, and chat. Uploading an Ability’s code with openhome create or openhome push may additionally require a JWT — your browser session token. If an authentication error occurs while pushing an Ability, provide a JWT explicitly:- Run this in the browser console to copy it to your clipboard:
- Or open DevTools → Application → Local Storage, find
access_token, and copy its value.
3
Install voice dependencies
Voice calls (
openhome call) use the mpv player and PortAudio. Install them so you can talk to your Agent:The Core Loop
Building an Ability with the CLI follows a repeatable loop: scaffold it from a template, implement your logic, push your code to test it, and commit a version once it works. Each step is a single command, so you can iterate quickly without opening the Dashboard.1
Create from a template
user/ workspace and pushes the initial version directly to your account, where it appears in your Abilities list. You’ll be prompted for trigger words and a description (or pass them with --triggers and --description).Your user/ workspace is private to you — it’s gitignored and never committed. You don’t need to track Ability IDs yourself; the CLI remembers which account Ability each folder belongs to, so openhome push updates the right one in place instead of creating duplicates.2
Write your Ability
Open
user/my-weather/main.py and implement your Ability’s logic. This file is the entry point for your Ability.3
Push your code
As you make changes, push your current code to your account:This updates your Ability in place with the current contents of your folder. It does not create a committed version; it updates the working code so you can test it.
4
Test your Ability
Talk to your Agent and trigger the Ability with one of its trigger words:
5
Commit a version
Once the Ability behaves as intended, commit a versioned release:Committing saves a numbered version of your Ability (v1 → v2 → …) that you can continue to iterate on.
Command Reference
Account
Create & Update
Trigger Words & State
Voice & Chat
Sync & Remove
Contribute
Local Link
Trigger words are the spoken phrases that activate your Ability. Set them when you create an Ability, or update them at any time with
openhome set-triggers.Calling & Chatting with Your Agent
The CLI provides two ways to test an Ability against your Agent without leaving the terminal: a real voice call, or a text chat.Voice call
openhome call opens a live voice session: it streams your microphone to the Agent and plays the Agent’s spoken reply back through your speakers. With no ID it connects to your default Agent; pass an Agent ID to call a specific one.
During a call:
- Speak after the greeting — talk naturally, and the Agent responds in voice.
- Press SPACE to interrupt the Agent while it’s talking.
- Press Ctrl-C to hang up.
openhome call a convenient way to observe your Ability’s behavior and debug it during a conversation.
Voice calls need mpv installed (see Install and Set Up).
Text chat
openhome chat opens an interactive text session in your terminal — type a message, press Enter, and the Agent’s reply prints back. It is the same conversation as a voice call, in plain text, and requires no audio setup. Type /quit to exit.
Chat requires an Agent ID, passed directly or set via the OPENHOME_AGENT_ID environment variable.
Sync Your Account
If you built Abilities in the Dashboard, or want them on a new machine,sync downloads every Ability on your account into your user/ workspace:
sync only adds and updates — it never deletes your local work. Use --force to pull the account’s version over your local code, and --prune to mirror deletions you made on the account.
Contributing to the Community
Once your Ability is finished, tested, and behaving as intended, you can share it with the open-source community. Thepush_to_community command stages it for a pull request to the openhome-dev/abilities repository:
user/ and:
- Copies it into the repo’s
community/folder, stripping personal and build files (your local manifest, caches, and zips) so only the source is shared. - Runs the repo’s validator to check it meets the contribution rules, and flags anything to fix before you open a PR.
- Prints the git steps to create a branch, commit, and open your pull request.
Local Link
openhome local runs a small bridge on your computer that stays connected to your Agent. When your Agent needs something done on your machine, it sends the request to the bridge, the bridge runs it, and the reply goes back to the Agent — so a voice Agent can reach your computer without going through the cloud sandbox.
Each request is routed to whichever local handler is available:
- local-link — a raw shell executor (first-class on macOS and Linux, best-effort on Windows). Always available.
- hermes — used when Hermes is installed and configured.
- openclaw — used when OpenClaw is installed and its gateway is running.
start and run accept the following options:
openhome local logs shows recent history and then live-tails. Pass --no-follow to print recent logs and exit, or -n / --lines <N> to change how much history it shows first. The background bridge reconnects on its own if the connection drops; openhome local run --once connects a single time without reconnecting, which is useful while debugging.
Troubleshooting
openhome call does nothing or errors on audio
openhome call does nothing or errors on audio
Real voice calls require the
mpv player. Install it with brew install mpv portaudio (macOS) or sudo apt install mpv portaudio19-dev (Linux). If you prefer not to install it, use openhome chat for a text-based conversation instead.“Not authenticated” or credential errors
“Not authenticated” or credential errors
The CLI couldn’t find a valid API key. Run
openhome login and paste your key, or set OPENHOME_API_KEY in your .env file. Get your key from Settings → API Keys at app.openhome.com.My Ability was rejected on push
My Ability was rejected on push
Uploads are validated against OpenHome’s Ability rules — for example, only approved imports are allowed. Check that your
main.py follows the template structure and doesn’t use disallowed imports, then push again.See Also
- Ability Templates — the starter blueprints you scaffold from
- How to Build an Ability — writing your Ability’s logic
- Marketplace — how Abilities reach users
- Contributing — sharing your Ability with the community

