OpenMates Docs Open Chat

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...

[T:documentation.sender_name]

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.

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.

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() and handleMemories()
  • See client.ts for runSkill(), listApps(), getSkillInfo(), getSkillSchema(), and the MEMORY_TYPE_REGISTRY
  • 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_REGISTRY in sync with app.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.