Extension Model
Extensions are how custom capabilities are packaged, versioned, and deployed onto IIOS. An extension declares what it contributes to the platform and the least-privilege scopes it needs — and inherits the platform's permission, provenance, and audit model automatically.
What you can package
A single extension can contribute one or many capability types. Each is governed by the same runtime as our first-party products.
Ontology modules
Extend the shared ontology with domain types, relationships, and constraints. Modules version independently and merge into the tenant schema.
Reasoning skills
Package reusable reasoning steps that compose graph traversals, retrievals, and models. Every output is evidence-linked and confidence-scored.
Connectors
Ingest data from operational systems into the graph as entities, events, and evidence — without data leaving your sovereignty boundary.
Scoped agents
Ship agents bound to a scoped view of the graph with explicit permission and confidence policy attached at deploy time.
The manifest
Every extension is described by a manifest that declares what it provides and the scopes it requests. The platform enforces those scopes at runtime — an extension can never exceed what its manifest declares.
# iios.extension.yaml
name: predictive-maintenance
version: 1.4.0
kind: capability
# What this extension contributes to the platform
provides:
ontology:
- modules/asset-health.ttl
skills:
- reason/failure-prediction
connectors:
- source: scada
driver: connectors/scada.ts
# Least-privilege scopes the extension may request
scopes:
- graph:read:Asset
- graph:write:Event
- reason:invokeAuthor a skill
Skills are the unit of custom reasoning. They compose graph access and models, and must return evidence-linked, confidence-scored results — the platform rejects outputs that omit provenance.
import { defineSkill } from "@iios/sdk"
export default defineSkill({
name: "failure-prediction",
input: { assetId: "string" },
// Skills compose graph queries, retrievals, and calculations
async run({ assetId }, ctx) {
const asset = await ctx.graph.get(assetId, {
traverse: { events: { since: "-1y" }, evidence: true },
})
const risk = model.score(asset.events)
// Outputs are evidence-linked and confidence-scored
return ctx.result({
value: risk,
confidence: model.calibration(risk),
evidence: asset.evidence,
})
},
})Validate, publish, promote
Extensions are validated against your ontology and scopes, published to your tenant's private registry, and promoted through environments with a full audit trail.
# Validate against your ontology and scopes
iios ext validate
# Publish to your tenant's private registry
iios ext publish --tenant acme-industrial
# Promote through environments
iios ext promote predictive-maintenance@1.4.0 --to production