Contribution model
integrations maps package resources onto Host extension points. Each row has a stable id, a Host-known kind, and an in-package resource. Runtime may bind only declared rows. Agent-side contributions inject into conversations created or rebound after the plugin is enabled.
Handler ids
Worker handler ids must match:
^[a-z][A-Za-z0-9]*(?:[.-][a-z][A-Za-z0-9]*)*$The id starts with a lowercase letter. Every segment after . or - also starts with a lowercase letter. Valid: hello, surface.createSession, office-preview. Invalid: Hello, save.XML, task.1. JavaScript, Python, and Rust SDKs share this regex. CLI validation requires surface.createSession for an editable file-tab App surface.
Kinds
| kind | Role | Author notes |
|---|---|---|
content.skill |
Project contents/skills/... to compatible agents as a read-only native Skill entry |
resource must exist in-package |
content.mcp |
Host-managed MCP started per Agent session | See managedRuntime below |
content.hook |
Hook resource | resource and event |
workflow.binding |
Expose contents/workflows/ to Composer and Automation |
resource is workflow JSON |
file.opener |
Open by extension, fileNameSuffixes, or mediaTypes |
Exactly one previewProvider or exactly one editorSurface |
artifact.preview |
Broker-managed preview process | handler, optional runtime and process.argv |
app.surface |
Full Trust App | appEntrypoint is app; editable text uses slot: artifact.editor; detail panel uses plugin.detail.panel |
app.command |
Command palette | Keeps Plugin/Command identity |
app.toolbar |
Toolbar | slot is toolbar.main |
app.status |
Status bar | The UI shows at most three |
app.composer.slash |
Composer slash command | Coexists with agent-native commands by source |
app.timeline.card |
Timeline card | Separate kind |
app.settings.section |
Settings section | config.json remains the config fact |
host.service |
Periodic Worker handler | intervalSeconds minimum 5, default 30; at most eight per package |
Validation rejects missing, ambiguous, and wrong-slot references.
Skill
resource points at an existing path under contents/. Official packages use a skill directory such as contents/skills/office-docx with SKILL.md inside. The CLI accepts that directory and also accepts a path to SKILL.md. The content index items[].path names a file:
{
"path": "contents/skills/office-docx/SKILL.md",
"kind": "skill",
"title": "Word documents"
}A user Skill of the same name stays. targets may limit agents; the default is the all-compatible-agents binding. SKILL.md is written for the agent: when to apply, steps, inputs and outputs, forbidden actions. An undeclared external CLI may still import; readiness marks the dependency unknown.
MCP
Host-managed MCP uses managedRuntime:
{
"managedRuntime": {
"source": "runtime/mcp-server.mjs",
"entrypoint": "dist/mcp/server.mjs",
"protocolRevision": "2026-07-28",
"defaultBinding": "all-compatible-agents"
}
}protocolRevision must be 2026-07-28. entrypoint must exist in-package. source is optional; when present, build compiles it to entrypoint. A hostFamilyBinary plus binaryId selects a Host-family binary.
The Host injects Workspace and parent Conversation connection context. Plugin storage omits Server URL and credentials. New MCP uses protocol revision 2026-07-28 and negotiates a compatible version. contents/mcps/*.json may also project into agent-native config. Native config remains the Agent Runtime authority.
Workflow and files
Workflow references carry identity and dependency evidence. Publish, debug, and run use Workflow Core on the Host. Those entries close when the Host is offline.
artifact.preview declares handler, optional runtime, process.argv, and a ready timeout. After idle timeout the preview process exits and the next open starts it again. The Worker opens a preview with environment.host.call("artifact.preview", "open", { artifactHandle, providerId }). artifactHandle is issued by the Host, lives about 30 seconds, and is consumed once. The current Host routes every artifact.preview operation to open-preview. Lease expiry and generation drain reclaim the process.
Editable file tab:
file.openersetsextensions,fileNameSuffixes, ormediaTypes, andeditorSurfaceto an App surfaceid.- That
app.surfaceusesslot: artifact.editor,appEntrypoint: "app",handler: "surface.createSession". - The Worker registers
surface.createSession. - The App calls
bridge.artifact.readText()and saves withwriteText(content, expectedRevision).
The Host holds the canonical path. The App receives file name, revision, and bridge.artifact. Writes use expected revision and atomic replace. An external edit yields a recoverable conflict with code artifact_revision_conflict.
init --template file-tab emits a .txt artifact.preview and a plugin.detail.panel. Declare an editable file tab with the four steps above.
Commands and host services
app.command and app.composer.slash keep Plugin/Command identity and coexist with agent-native commands by source. host.service fits periodic work. The handler must be registered on the Worker. The interval is intervalSeconds, minimum 5, default 30. A package schedules at most eight host.service rows. A tick is skipped while the previous invocation is still running.

