Skip to main content
LabsThis feature is in Labs.
Extensions are opt-in capabilities that ship inside the Otto binary and add tools, slash commands, or background behaviors to a session. Some are on by default because they catch common mistakes or add useful slash commands; others are off by default because they spawn subprocesses, consume credits, or materially change behavior.

Bundled extensions

Enable or disable an extension

Four layers control whether an extension is on, merged in order (highest priority first): Within a layer, an explicit disable beats an explicit enable. For example, --extension foo --no-extension foo disables foo.

Manage extensions interactively

Run /extensions inside an Otto session to open an interactive editor. The main picker shows each bundled extension with its current state and a * marker when a CLI flag or environment variable is overriding the settings files. Select an extension to open a per-extension editor with two rows: a User scope row and a Project scope row. Each row has a three-state checkbox:
  • [x] on — writes enabled: true to that settings file.
  • [ ] off — writes enabled: false to that settings file.
  • [~] unset — removes the enabled field so lower layers win.
Press Enter or Space to cycle the focused row. The title bar updates to show the predicted next-session state and which layer is winning. Press Escape to save and close. To apply the change:
  • Run /reload to re-run the extension list against the fresh settings while keeping your conversation history.
  • Run /new to start a fresh session.
  • Restart Otto for a full reset.

Configure an extension

The settings file accepts either a boolean shorthand or an object with enabled plus any extension-specific config. Both forms can coexist in the same file:
extensions.json
Project settings shadow user settings per extension (whole-entry replace, not a deep merge).

Configurable fields

Extensions that don’t appear in the table take no configuration — they’re either on or off.