Skip to main content

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.

Source: packages/oracle-runtime/src/plugins/editor/
AttributeValue
Visibilityon-demand
Stabilitystable
Categorydata
Default stateOn (needs an explicit Matrix client for production behaviour)
Depends on

Summary

Reads and edits BlockNote pages — collaborative documents in the user’s workspace via Matrix CRDT. Behaviour depends on per-request state:
  • state.editorRoomId set → editor sub-agent (call_editor_agent) bound to that room; plus apply_sandbox_output_to_block when sandbox is also loaded.
  • state.spaceId set without editorRoomId → standalone call_editor_agent tool that accepts a room_id argument per call.
  • Neither set → no contributions.

Environment variables

The plugin owns no env vars. It reads the following from the core base env schema:
VarRequiredDescription
MATRIX_BASE_URLyes (base schema)Matrix homeserver base URL.
MATRIX_ORACLE_ADMIN_USER_IDyes (base schema)Admin Matrix user ID.
MATRIX_ORACLE_ADMIN_ACCESS_TOKENyes (base schema)Admin Matrix access token.
SANDBOX_MCP_URLnoRead when apply_sandbox_output_to_block is constructed.
SKILLS_CAPSULES_BASE_URLnoRead when apply_sandbox_output_to_block is constructed.
ORACLE_SECRETSnoRead when apply_sandbox_output_to_block is constructed.

What it contributes

  • Tools: apply_sandbox_output_to_block (when an editor room + sandbox plugin are both available); standalone call_editor_agent (when only a spaceId is in scope).
  • Sub-agents: call_editor_agent — built only when state.editorRoomId is set.
  • Middleware: none.
  • HTTP routes: none.
  • Shared state: none.

Production constructor

The bundled singleton works for inspect / test; production behaviour needs an explicit Matrix client:
import { createOracleApp, EditorPlugin } from '@ixo/oracle-runtime';
import * as sdk from 'matrix-js-sdk';

const matrixClient = sdk.createClient({ /* … */ });

const app = await createOracleApp({
  config,
  plugins: [new EditorPlugin({ matrixClient })],
});

Opt out / Opt in

const app = await createOracleApp({
  config,
  features: { editor: false }, // never load
  // features: { editor: true }, // force load (default)
});

When to use it

  • User asks to read, summarise, or edit a page in their workspace.
  • User wants to update specific blocks (status, properties, content) on a page.
  • User wants to create a new page or update an existing one.
  • A skill produced output (URLs, credentials, status values) that should land on specific blocks.

When NOT to use it

  • IXO entity lookups — use domain-indexer. Pages are documents, not entities.
  • Web search or scraping — use firecrawl.
  • Long-term user memory — use memory.

Add a sub-agent

How call_editor_agent is built per-request.

Shared state

editorRoomId and spaceId are state fields the client sets.