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.
The three layers
A QiForge deployment has exactly three layers. Knowing what each one owns saves a lot of confusion.Layer 1 — Your oracle
Typicallyapps/your-oracle/src/main.ts (a createOracleApp(...) call), a config.ts for identity, and any custom plugins or Nest modules.
You own: the entry point, your oracle’s identity, custom plugins, custom Nest modules.
You don’t own: the agent loop, the graph state shape, the checkpointer, the auth flow, the meta-tools, the bundled plugins’ internals.
Layer 2 — @ixo/oracle-runtime
The framework. Owns the bootstrap (createOracleApp), the always-on Nest modules (Sessions, Messages, WebSocket, Secrets, UCAN, Auth, Subscription, Throttler, Health), the per-request agent builder, the four always-on middleware, the Matrix-backed SQLite checkpointer, and the plugin API.
You never edit this layer. Updates come via pnpm update @ixo/oracle-runtime.
Layer 3 — Bundled plugins
15 plugins shipped inside the runtime package, each independently toggleable viafeatures. See the Plugin catalog for what each one does.
Bootstrap, in one picture
The HTTP server accepts requests immediately; auth-requiring routes 401 until Matrix init finishes and the UCAN signing mnemonic loads. Defined increate-oracle-app.ts.
The six registries
Plugins don’t talk to the runtime directly. They push contributions into one of six registries at boot; the agent builder reads from them per request.| Registry | Holds | Collision rule |
|---|---|---|
| ToolRegistry | All plugin tools | Flat namespace — collision is a boot error |
| SubAgentRegistry | All plugin sub-agents | Flat namespace — collision is a boot error |
| MiddlewareRegistry | All plugin middleware | Ordered topologically; no names |
| ManifestRegistry | All plugin manifests | Title collision = soft warn |
| ConfigSchemaRegistry | All plugin Zod schemas | Merged; later wins with warning |
| SharedStateRegistry | Plugin shared-state accessors | Flat namespace — collision is a boot error |
packages/oracle-runtime/src/registries/.
What’s pluggable vs fixed
| Pluggable | Fixed |
|---|---|
| Plugin set (bundled toggles + your plugins) | Agent loop (LangChain createAgent) |
nestModules (your Nest modules) | Graph state shape (except one new loadedPlugins field) |
authExcludedRoutes (host + plugin) | Checkpointer (Matrix-backed SQLite) |
| LLM provider (env-driven) | Auth flow (UCAN delegation) |
hooks.checkpointerForUser (advanced) | The four always-on middleware |
System prompt (via OracleConfig.prompt) | The Tier-1 block format |
| Anything inside a custom plugin | The six registries |
Read next
Request lifecycle
What happens between user message and streamed response.
Build your first oracle
The recipe for wiring
createOracleApp.