Documentation Index
Fetch the complete documentation index at: https://docs.ixo.world/llms.txt
Use this file to discover all available pages before exploring further.
Copy-paste recipe
The whole API is afeatures map handed to createOracleApp. Each key is a bundled plugin name, each value is true / false / 'auto'.
BUNDLED_PLUGINS; features only controls which ones survive resolution. Reference oracle: apps/qiforge-example/src/main.ts.
How resolution works
The runtime starts with the bundled list
BUNDLED_PLUGINS is a fixed 15-plugin tuple — memory, portal, firecrawl, domain-indexer, composio, sandbox, skills, editor, agui, slack, tasks, credits, calls, user-preferences, matrix-group-chats.You do not import or instantiate the plugins you want at defaults — they are already there.Each plugin gets a feature decision
For every bundled plugin,
resolvePlugins reads features[plugin.name]:| Value | Behaviour |
|---|---|
true | Force the plugin on. If its autoDetect(env) returns false, boot fails with boot.plugin.env_missing. |
false | Force the plugin off. Skip autoDetect entirely. |
'auto' (or omitted) | Run plugin.autoDetect(env). Include if true, exclude otherwise. |
Your own plugins are added next
Plugins from the
plugins: [] array are always loaded — they’re not gated by features. If a name collides with a bundled plugin, your instance wins (the loader dedupes by name).What every bundled plugin does by default
Each plugin’sautoDetect predicate decides whether to opt in when you leave it on 'auto'.
| Plugin | Auto-detects when | Notes |
|---|---|---|
memory | MEMORY_MCP_URL and MEMORY_ENGINE_URL set | Visibility always |
portal | always on | Visibility on-demand |
firecrawl | FIRECRAWL_MCP_URL set | Visibility on-demand |
domain-indexer | always on | Visibility always |
composio | COMPOSIO_API_KEY set | Visibility on-demand |
sandbox | SANDBOX_MCP_URL set | Visibility always |
skills | always on | Visibility always; depends on sandbox |
editor | always on | Needs matrixClient — instantiate explicitly |
agui | always on | Visibility on-demand |
slack | SLACK_BOT_OAUTH_TOKEN set | Visibility silent (transport) |
tasks | REDIS_URL set | Stub |
credits | always on | Visibility silent; pass redis for production |
calls | always on | Stub |
user-preferences | always on | Visibility always |
matrix-group-chats | always on | Visibility on-demand; gating middleware + tools fire only in Matrix group rooms (memberCount > 2) |
Opt out of a plugin
Set the feature flag to false
autoDetect runs. Its configSchema is also removed from the merged env schema, so its env vars become optional.Force a plugin on
Set every env var the plugin needs
With See the plugin’s page in the plugin catalog for its full env requirements.
features: { composio: true } and no COMPOSIO_API_KEY, the runtime throws at boot:Plugins that need constructor args
Two bundled plugins take a live runtime object you provide — instantiate explicitly and pass them viaplugins:
The bundled
editorPlugin and creditsPlugin instances boot in stub form (for testing). For production behaviour, instantiate them yourself and pass the live objects in.Inspect what loaded
Read app.plugins.status() after boot
cause is one of 'feature_false', 'auto_detect_missing', 'cascaded'. Surface this in your boot logs so operators see what came up.Or use the CLI
Where to read next
Plugin catalog
Every bundled plugin in detail.
Environment variables
Core vars plus per-plugin vars.
createOracleApp reference
Every option, exhaustively.
Write a plugin
Build your own next to the bundled set.