Apps & Skills
Apps & Skills List available apps, inspect skill schemas, and use dedicated typed app commands from the terminal. Skills can also be invoked via @mentions in...
Apps & Skills
List available apps, inspect skill schemas, and use dedicated typed app commands from the terminal. Skills can also be invoked via @mentions in chat messages.
Listing Apps
openmates apps list
openmates apps list --json
Shows all available apps with their IDs and descriptions.
App Info
openmates apps web
openmates apps info web
openmates apps web --json
Both openmates apps <app-id> and openmates apps info <app-id> display details about an app, including its available skills.
Skill Info
openmates apps skill-info web search
openmates apps skill-info web search --json
Shows the skill’s description, required parameters, input schema, and any public example chats linked to that app skill. Use this to understand what a skill expects before invoking it through chat, SDKs, or a dedicated typed CLI command.
Skill Example Chats
openmates apps examples travel search_connections
openmates apps examples travel search_connections --json
openmates apps examples travel
Lists public example chats connected to an app skill via the same curated example metadata used by the web app store. The command works without login because example chats are bundled public content. Use the printed openmates chats show ... command to read the transcript in the terminal, or openmates chats open ... to open the web example page.
Typed App Commands
Generic openmates apps <app-id> <skill-id> execution is not supported. Use app-specific typed commands with command-specific help, validation, and examples instead.
openmates tasks create --title "Draft launch checklist"
openmates tasks list
openmates workflows list
openmates apps images detect-ai --file ./image.png
Use openmates <command> --help for each typed command’s accepted flags and examples.
Images AI Detection
The Images app has a dedicated command for checking whether a local image is likely AI-generated. It reuses the authenticated upload pipeline, so the image is uploaded, scanned by Sightengine, stored like a normal upload, and returned with detection metadata.
openmates apps images detect-ai --file ./image.png
openmates apps images detect-ai ./image.webp --json
The JSON output includes ai_generated as a 0.0 to 1.0 probability, the sightengine provider metadata, and a stable classification value.
Travel Booking Links
A specialized command for resolving booking URLs from travel search results:
openmates apps travel booking-link --token "<booking_token>"
openmates apps travel booking-link --token "<booking_token>" --context '{"currency":"EUR"}'
The booking_token is included in travel search results returned by the app or SDK.
Code Run
The Code app has a dedicated convenience command for running local snippets or project files through the app-skill endpoint:
openmates apps code run --language python --code 'print("Hello")'
openmates apps code run --entry main.py --file main.py --file requirements.txt
openmates apps code run --entry main.py --dir ./project --exclude node_modules
Use inline --code for short snippets, repeated --file flags for a small set of files, or --dir plus --entry for a project folder. The command streams status/output when available and falls back to polling the execution status endpoint.
3D Model Search
The 3D Models app has a dedicated search command that returns provider link-out cards. It does not download, cache, or convert model files.
openmates apps models3d search --query benchy
openmates apps models3d search --query benchy --count 2 --providers Printables --json
openmates apps models3d search --query "phone stand" --sort newest --free-only
Use --providers with a comma-separated list or repeated --provider flags. Supported sort values are best_match, popular, downloads, and newest.
Authentication
Skills use your logged-in session by default. Alternatively, pass an API key:
openmates workflows list --api-key <key>
Or set the OPENMATES_API_KEY environment variable.
Memories
Memories are per-app key-value entries stored in Memories. They are encrypted and synced via WebSocket.
Listing Memories
openmates settings memories list
openmates settings memories list --app-id code
openmates settings memories list --app-id code --item-type preferred_tech
openmates settings memories list --json
Listing Memory Types
Shows available memory types and their field schemas for a given app:
openmates settings memories types
openmates settings memories types --app-id code
openmates settings memories types --json
Creating a Memory
openmates settings memories create --app-id code --item-type preferred_tech --data '{"name":"Python","proficiency":"advanced"}'
Field values are validated against the MEMORY_TYPE_REGISTRY in the CLI before sending. See the types command to discover required fields.
Updating a Memory
openmates settings memories update --id <uuid> --app-id code --item-type preferred_tech --data '{"name":"Python","proficiency":"expert"}'
openmates settings memories update --id <uuid> --app-id code --item-type preferred_tech --data '...' --version 2
The --version flag enables optimistic concurrency control.
Deleting a Memory
openmates settings memories delete --id <uuid>
Key Files
- See cli.ts for
handleApps()andhandleMemories() - See client.ts for
runSkill(),listApps(),getSkillInfo(),getSkillSchema(), and theMEMORY_TYPE_REGISTRY
Related Docs
- README – CLI overview
- Settings – settings management (memories are a sub-command of settings)
- Embeds & Sharing – @mentions for skills in chat messages
- CLI Standards – Rule 3 on keeping
MEMORY_TYPE_REGISTRYin sync withapp.yml
Downloading generated files
All file-generating app skills use the same download options, including image,
video, music, audio, 3D, and code-generated artifacts. Without --json, files
are saved in the directory where you run the command. Automatic names are
unique: existing files are never overwritten. Redundant previews are omitted.
--json alone returns structured results with download URLs and their expiry
information, without saving files. These URLs are temporary bearer links.
Explicit destination options trigger downloading even with --json; the JSON
then also contains local_files with saved absolute paths.
| Options | Behavior |
|---|---|
--output-dir ./media |
Create/use a directory; preserve existing files with unique automatic names. |
--filename background.wav |
Save one file in the current directory under this name. |
--output-dir ./media --filename background.wav |
Choose both the directory and filename. |
--output ./media/background.wav |
Choose a complete file path; cannot combine with the other destination options. |
--json --output ./media/background.wav |
Download the file and return machine-readable results and its local path. |
--no-download |
Return results without saving files. |
An explicit filename always overwrites an existing target, but only after the new download completes successfully. A failed transfer leaves the old file intact. A batch that produces multiple files needs a directory, not one filename. Download errors do not automatically repeat generation or incur another charge.
openmates apps music generate "Warm instrumental background" --output-dir ./music
openmates apps music generate "Warm instrumental background" --json
openmates apps music generate "Warm instrumental background" --json --output ./music/background.wav
openmates apps audio generate "Soft notification chime" --provider elevenlabs --output ./sounds/chime.mp3
For inline Code Run, --source-filename names the source script; --filename
names the generated output artifact. For example:
openmates apps code run --language python --source-filename main.py --code 'open("result.csv", "w").write("value\n42\n")' --filename result.csv
If Code Run live streaming is unavailable, the CLI reports that it is polling the existing execution for its final status and generated artifacts. This does not start a second run.