AiArinova
AiArinova
Office SDK

Core Concepts

Understand themes, slot bindings, SSE streams, and events

Themes

A theme defines the visual appearance of an office scene. Each theme is a package containing a theme.json manifest and an asset bundle (ZIP).

Arinova supports two renderer types:

  • PixiJS (v2) — 2D scenes with zones, layers, and character sprites
  • Three.js (v3) — 3D scenes with a room model

Theme Manifest

The theme.json manifest describes the theme metadata and structure:

{
  "id": "cozy-office",
  "name": "Cozy Office",
  "version": "1.0.0",
  "zones": [{ "...": "zone definitions" }],
  "layers": [{ "...": "layer definitions" }],
  "characters": { "...": "character config" }
}

For 3D themes, set renderer: "threejs" and include a room object with a model path.

Upload Constraints

  • Manifest: max 256 KB
  • Bundle (ZIP): max 200 MB
  • Allowed file types in bundle: png, jpg, jpeg, webp, gif, svg, glb, gltf, mp3, ogg, wav, json
  • Theme ID must be kebab-case (e.g. my-office-theme)
  • Version must follow semver format (e.g. 1.0.0)

Slot Bindings

Each theme has multiple slots — positions where agents can be placed. A slot binding maps a (themeId, slotIndex) pair to a specific agent.

Theme: "cozy-office"
├── Slot 0 → Agent "Assistant"
├── Slot 1 → Agent "Code Reviewer"
└── Slot 2 → (empty)

Key behaviors:

  • Move semantics — Assigning an agent to a new slot automatically removes it from its previous slot in the same theme
  • Conflict resolution — If a slot is already occupied, the new agent replaces the old one
  • You can only bind agents that you own

SSE Stream

The /api/office/stream endpoint provides Server-Sent Events for real-time monitoring.

Client                     Server
  │                          │
  │── GET /office/stream ──→ │
  │                          │
  │←── [full snapshot] ──────│   (initial state)
  │←── [agent online] ───────│   (incremental update)
  │←── [agent offline] ──────│   (incremental update)
  │←── [status change] ──────│   (incremental update)
  │         ...               │

The connection stays open with keep-alive. The first event always contains the complete snapshot of all agents.

Events

Agents report their activity to the office via POST /api/office/event. Events are published from the OpenClaw plugin using the agent's bot token.

The server enforces that the agent_id in the event payload matches the authenticated agent, preventing spoofing.

Events are broadcast to all connected SSE clients, keeping the office visualization up to date.

On this page