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.
Turn on LangSmith in one block
LangChain auto-wires tracing when these env vars are present inprocess.env — the runtime never reads them, only declares them in the base env schema so they show up in qiforge env output.
| Env var | Required | Purpose |
|---|---|---|
LANGSMITH_TRACING | yes | Set to true to enable tracing. Anything else (or unset) disables it. |
LANGSMITH_API_KEY | yes | API key from your LangSmith workspace. |
LANGSMITH_PROJECT | yes | Project name traces land under. |
LANGSMITH_ENDPOINT | no | Override for self-hosted LangSmith. Defaults to LangSmith cloud. |
What QiForge gives you out of the box
Three signals — that’s the whole surface. Bring your own log aggregator and metrics.- LangSmith traces — env-driven, covered above.
- Plugin status events —
app.onPluginStatusChange(handler). - Plugin-scoped logger —
ctx.logger(boot) andrtCtx.logger(per-request).
Subscribe to plugin status events
Register a handler after createOracleApp returns
Capture background errors with onError
source is a short label like 'matrix-init'. Use this for background failures (Matrix sync errors, key setup failures). Boot-time errors (env validation, manifest validation, dependency cycles) throw from createOracleApp itself — your try/catch around the call sees them.
Log the boot resolution snapshot
app.plugins.status() returns the loader’s resolution snapshot — log it once at boot so operators see what came up.
packages/oracle-runtime/src/bootstrap/plugin-loader.ts:
Use the plugin-scoped logger
EveryPluginContext and RuntimeContext carries a logger field auto-prefixed with the plugin’s name — see Logger in types.ts.
Logger interface:
| Method | Required | Purpose |
|---|---|---|
log(message, ...optional) | yes | Info-level output. |
error(message, ...optional) | yes | Error-level output. |
warn(message, ...optional) | yes | Warn-level output. |
debug(message, ...optional) | no | Debug-level — implementation-defined. |
verbose(message, ...optional) | no | Verbose-level — implementation-defined. |
child(bindings) | no | Returns a logger with additional context fields. Falls back to the same logger if not implemented. |
Logger format in development (pnpm dev shows it nicely); pipe to your aggregator in production. Override the global logger with createOracleApp({ logger }) if you want a custom format — see createOracleApp reference.
UI-facing tool-call events
For showing the user what the agent did, the runtime emits typed events viartCtx.emit. The bundled clients (Portal, Slack, Matrix) consume these and render the right UI — you only emit them yourself when writing a custom client.
RuntimeContext.emit in types.ts.
Where to read next
Deployment
Logs and probes in production.
Add a middleware
Custom observability via plugin middleware hooks.
Runtime context
Full
rtCtx.emit and rtCtx.logger surface.Environment variables
Every env var the runtime declares.