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.
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.
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:
/reload to re-run the extension list against the fresh settings while keeping your conversation history./new to start a fresh session.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:
Project settings shadow user settings per extension (whole-entry replace, not a deep merge).
Extensions that don’t appear in the table take no configuration — they’re either on or off.