Files
overlord/plugins/docs/wasm-plugins.md
T
2026-06-22 13:04:33 -05:00

2.8 KiB

WASM Plugins

Plugin 2.0 WASM plugins run inside the agent through a sandboxed runtime. They cannot access files or OS APIs directly; they declare needs in config.json, and the agent exposes approved host bridge operations.

Config

{
  "name": "My WASM Plugin",
  "version": "1.0.0",
  "apiVersion": 2,
  "runtime": "wasm",
  "wasm": "my-plugin.wasm",
  "needs": {
    "files": [
      {
        "bucket": "pluginData",
        "access": ["read", "write", "list", "mkdir"],
        "reason": "Store plugin state"
      }
    ]
  }
}

Supported file buckets are home, desktop, documents, downloads, temp, appData, pluginData, and fullDisk.

Supported operations are read, write, list, delete, and mkdir. Approval is tracked by a stable hash of normalized needs; changing needs requires approval again.

Required Exports

Export Signature
overlord_alloc ptr(uint32 size)
overlord_free void(ptr, uint32 size)
overlord_on_load int32(ptr hostInfo, uint32 hostInfoLen)
overlord_on_event int32(ptr event, uint32 eventLen, ptr payload, uint32 payloadLen)
overlord_on_unload void()

Host Imports

Imports are available from both env and overlord.

Import Behavior
overlord_emit(event, eventLen, payload, payloadLen) Sends an event through the plugin event channel.
overlord_host_info(out, outLen) Writes HostInfo JSON into out.
overlord_fs_stat(bucket, bucketLen, path, pathLen, out, outLen) Writes JSON file metadata into out.
overlord_fs_list(bucket, bucketLen, path, pathLen, out, outLen) Writes a JSON directory listing into out.
overlord_fs_read(bucket, bucketLen, path, pathLen, out, outLen) Writes file bytes into out, max 32 MB.
overlord_fs_write(bucket, bucketLen, path, pathLen, data, dataLen) Writes bytes to a bucket-relative path.
overlord_fs_delete(bucket, bucketLen, path, pathLen) Deletes a bucket-relative file or directory.
overlord_fs_mkdir(bucket, bucketLen, path, pathLen) Creates a bucket-relative directory.

Bridge functions return non-negative byte counts or 0 on success. Negative return codes mean denied, invalid path/memory, not found, output buffer too small, file too large, or I/O failure.

HostInfo

WASM plugins are universal across OS/architecture. To branch by platform, read HostInfo from overlord_on_load(hostInfo, hostInfoLen) or overlord_host_info(out, outLen).

{
  "clientId": "abc123",
  "os": "windows",
  "arch": "amd64",
  "version": "1.0.0"
}

Samples

Directory Toolchain
plugins/sample-wasm C/WASI
plugins/sample-wasm-hostinfo TinyGo
plugins/sample-wasm-platform-note Rust