Documentation

User guide and developer references.

User Guide

Extensions

An extension is a plug-in. It can give the model tools to call, add controls inside the chat, contribute prompt guidance, and connect to hardware. Most do two or three of those at once.

The mental model

You install an extension once, then enable it per persona. Built-ins ship with the app, so installing them is just a toggle. Marketplace extensions are downloaded code that runs in your browser. Local extensions (covered further down) are how you develop your own without publishing anything.

Where extensions come from

Built-in extensions ship with the app and never need to be downloaded.

Marketplace extensions are installed with one click from the Marketplace.

Local extensions are loaded from a file you supply, for development and testing.

What they do

Toys drive physical devices over Bluetooth or serial (Lovense, Coyote, OSSM and others).

Utilities cover sensors, lighting, capture, and screen sharing.

Integrations connect to services like Spotify, webhooks, TTS, or add prompt helpers.

Finding what you have

Installed extensions are split into three sidebar pages by category: My Toys (at /app/toys), My Utilities (at /app/utilities), and My Integrations (at /app/integrations). Each page has a status filter row with the chips All installed, Needs update, Enabled here, and Disabled here, plus a search box that matches name, key, description, and tags.

Click Open settings on a card to reach the detail page. That is where global settings, per-persona toggles, persona overrides, and (for hardware) device instances live.

Global versus per-persona

Settings split into two scopes. Global values are account-wide defaults: connection info, API keys, things that don't change between personas. Persona overrides apply on top, for cases like running one persona at lower intensity or switching an integration off for a specific persona without disturbing the rest.

On the detail page, the Enable by Persona section lists your personas with a toggle each, and the Settings section has a Global / Persona switch. In Persona mode you pick which persona you're editing; fields that haven't been overridden inherit the global value, and a Reset control puts a persona back on global defaults.

Quick controls

Some extensions add a small set of inline controls — a toggle, an intensity slider — that live in the extension dropdown above the chat. Open it from the extension's status icon in the top bar. The point is to nudge something without leaving the conversation.

Updates

When a marketplace extension you have installed gets a newer approved version, its card shows an Update available chip and the detail page has an Update now button. You can also switch the extension between Auto updates and Manual updates on the detail page. In manual mode it stays pinned to whatever version you have until you update it yourself.

Dev Extensions

If you're writing an extension, you don't have to publish it to try it. Turn on Developer Mode in Settings → Advanced, then also toggle Show developer features. A Dev Extensions entry appears in the sidebar. The developer settings expire after seven days; toggle them back on when they do.

Hot-loading a local extension

  1. 1Enable Developer Mode and Show developer features in Settings → Advanced.
  2. 2On the Dev Extensions page, pick a workspace folder (or upload one if your browser doesn't support the folder picker). Each extension lives in its own subfolder with a manifest.json and a single JS module.
  3. 3Hit Scan workspace. Installable extensions appear with green badges; blockers are listed in red.
  4. 4Install one into the dev slot. Only one local extension can be active at a time.
  5. 5Edit files in your editor and click Reload on the card (or use the reload button in the top bar) to pick up changes. No restart.
Local extensions get the same permissions as a userscript: storage, network, Web Bluetooth, Web Serial. The Load Extension dialog shows the SHA-256 hash of the JS module before you confirm. Only install local extensions from sources you trust.

Disabling and uninstalling

  • To turn an extension off for the current persona, flip its toggle in the Enable by Persona row. It stays installed.
  • To remove a marketplace extension from your account entirely, use the detail page; you can always reinstall from the marketplace.
  • For local extensions, Unload on the Dev Extensions card clears the dev slot. Persona settings stick around unless you delete them by hand.