The runtime merges every loaded plugin’sDocumentation Index
Fetch the complete documentation index at: https://docs.ixo.world/llms.txt
Use this file to discover all available pages before exploring further.
configSchema onto a base schema, validates process.env at boot, and exposes the result on ctx.config.
Declare the schema with Zod
Prefix every variable with your plugin’s name in Bundled plugins follow the same rule (
SHOUT_SNAKE_CASE to avoid collisions across plugins.MEMORY_MCP_URL, SLACK_BOT_OAUTH_TOKEN, …). See memory.plugin.ts for a required-field example.Attach it as configSchema on the plugin class
The composer merges this schema with the base schema and every other loaded plugin’s schema, then validates Boot fails fast on missing or invalid values:
process.env.[boot-error] Plugin 'weather' env validation failed for 'WEATHER_DEFAULT_UNITS'. See weather.plugin.ts.Read typed values from ctx.config
ctx.config is typed as MergedConfig (Record<string, unknown>). Parse it through your schema to get a typed view — this can’t fail at runtime because boot already validated.RuntimeContext.config inside getRequestTools and tool handlers.Gate the plugin on env with autoDetect (optional)
Implement Without
autoDetect to make the plugin opt-in. Pair it with autoDetectHint so boot logs explain why it was skipped.autoDetect, a plugin is on by default. See memory.plugin.ts.Force-toggle from your oracle's main.ts
Forks override
autoDetect via the features map passed to createOracleApp.FeatureToggle is boolean | 'auto'. See plugin-loader.ts.What to know before shipping
- Use
.default(value)and.coerce.number()freely — env values are strings, so coerce explicitly. - Disabling a plugin (via
featuresorautoDetect) automatically removes its env requirements. - Two plugins declaring the same env-var name fail boot. Follow the naming convention to avoid this.
- To read a variable your plugin doesn’t own, declare a separate optional sibling schema and
safeParseit — don’t require it through your ownconfigSchema. - Required boot-time fields stay in
configSchema; per-call settings belong elsewhere (e.g. request headers, manifest defaults).
Where to read next
Enable bundled plugins
Features map, autoDetect, and the bundled set’s defaults.
Environment variables reference
Every base var and per-plugin var.