openhome-dev/abilities repository.
Install and Set Up
Install the CLI
Run from the repo root. Requires Python 3.10 or newer.Once installed, the
openhome command is accessible from any directory.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.
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.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.Write your Ability
Open
user/my-weather/main.py and implement your Ability’s logic. This file is the entry point for your Ability.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.
Command Reference
Account
| Command | What it does |
|---|---|
openhome login | Verifies and saves your credentials so you only sign in once. |
openhome agents | Lists your Agents with their IDs and names. |
openhome templates | Lists the templates and official example Abilities you can start from. |
openhome list | Lists your Abilities with their IDs, state, and trigger words. |
Create & Update
| Command | What it does |
|---|---|
openhome create <name> -t <template> | Scaffolds a new Ability from a template and pushes the first version to your account. |
openhome push <folder> | Pushes your current code, updating the Ability in place without committing a version. |
openhome push <folder> --commit -m "<msg>" | Commits the current code as a new version (v1 → v2). |
Trigger Words & State
| Command | What it does |
|---|---|
openhome set-triggers <id> "weather, forecast" | Replaces an Ability’s trigger words. |
openhome enable <id> | Enables an Ability so your Agent can trigger it. |
openhome disable <id> | Disables an Ability so no Agent can trigger it. |
Voice & Chat
| Command | What it does |
|---|---|
openhome call [agent-id] | Real voice call (mic + speaker) to your default Agent, or a specific one by ID. |
openhome chat [agent-id] | Interactive text chat with an Agent (needs an ID or OPENHOME_AGENT_ID). |
Sync & Remove
| Command | What it does |
|---|---|
openhome sync | Downloads your account’s Abilities into user/, keeping your local edits. |
openhome delete <id> | Removes an Ability from your account and locally. |
Contribute
| Command | What it does |
|---|---|
openhome push_to_community <name> | Copies an Ability from user/ into community/ for a contribution PR. |
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.
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

