Otto extensions
Labs
This 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 — writesenabled: trueto that settings file.[ ]off — writesenabled: falseto that settings file.[~]unset — removes theenabledfield 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
/reloadto re-run the extension list against the fresh settings while keeping your conversation history. - Run
/newto 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:
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.