Skip to main content
Source: packages/oracle-runtime/src/plugins/vfs/

Summary

The user’s Virtual Filesystem (VFS) — their persistent, access-controlled home for real documents, notes, datasets, and artifacts, in folders, searchable and versioned. This is reusable context that lives across sessions — not sandbox scratch files, not chat attachments, not the web. The oracle acts as the user, inside the exact folder the user delegated to it. The user owns their filesystem and is the sole grantor: only their key can sign the delegation — the oracle can never grant itself access. Every file the oracle reads or writes is confined to the granted subtree and audited as invoker=oracle, actor=user. The filesystem is securely stored with managed encryption; authorized IXO services can read content to power search and previews, so it is not end-to-end encrypted — never describe it as zero-knowledge.

How the oracle gets access

The user grants access from the IXO Portal — the oracle never self-grants:
1

User opens their domain's file access

In the Portal: your domain → Library → Files → Access (top-right).
2

User adds the oracle's agent DID

In Manage access, paste the oracle’s account DID (its ORACLE_DID) as the Recipient DID, choose the rights (Read / Write / Delete), set the folder scope and duration, and Grant access.
3

The oracle picks it up automatically

The grant is a UCAN delegation deposited in the UCAN Store Worker, addressed to the oracle. Per request the oracle pulls that delegation and mints a fresh, single-use VFS invocation — no extra wiring. Until a grant exists, the file tools return a short message telling the user how to grant access (including the oracle’s DID).
See Identity and auth for the two-hop UCAN flow (oracle → UCAN Store → VFS).

Environment variables

The worker URLs are bundled per network — there is nothing to configure. Everything else is optional tuning. The oracle’s UCAN signing key (loaded from its Matrix account room at boot) is required — without it the plugin contributes no tools.

What it contributes

  • Tools: ten file tools, each resolving a fresh single-use UCAN bearer per call:
  • Sub-agents: none.
  • Middleware: none.
  • HTTP routes: none.
  • Shared state: none.

Sandbox bridge tools

When sandbox is configured (SANDBOX_MCP_URL set), two extra tools move a file between the user’s sandbox and their filesystem server-side — the bytes never pass through the LLM:
  • sandbox_to_vfs — persist something the sandbox produced (a report, export, chart) into the user’s files so it survives the session.
  • vfs_to_sandbox — feed one of the user’s files into the sandbox (under /workspace/data/) so sandbox_run code can process it.

Opt out / Opt in

When to use it

  • The user refers to a document, note, file, or folder they “saved”, “uploaded”, or “shared with you”.
  • You need to create, update, or organise a file that should persist across sessions.
  • You need to find or quote something from the user’s files (“what did my notes say about X”).
  • You can reuse a file the user already has instead of asking them to re-paste it.
  • The user asks you to share a file or make it downloadable.
  • Persist a sandbox artifact into the user’s files (sandbox_to_vfs), or feed a file into the sandbox (vfs_to_sandbox).

When NOT to use it

  • General knowledge or web questions — the files are the user’s private content, not a knowledge base of the world.
  • Content the user pasted directly into chat — act on it inline; don’t write it to a file unless asked.
  • Temporary/scratch files from a compute run — those belong to the sandbox, not the user’s filesystem.
  • Data another plugin owns (flows, skills, memory) — use that plugin.
If a file action reports no access (or read-only), the oracle relays the grant steps above — with its agent DID — so the user can authorize it, then retries. It never claims a file is missing when the real issue is access.

Identity and auth

The two-hop UCAN flow that lets the oracle act as the user.

sandbox

The compute box the VFS bridges to.