The manifest, schedules, and type methods
A wasm realm ships dist/manifest.json in the same manifest format as TS handlers — hand-authored for the single-file JS path, generated by the build for a src/ TypeScript project. The schemas drive the typed LLM surface exactly as for docker-hosted functions and are enforced by the host at invocation. outputSchema describes the unwrapped payload — the value the handler returns, before the host wraps it in the wire envelope — never the envelope itself. Two entry fields matter here:
| Field | Meaning |
|---|---|
schedule |
A cron expression (Spring 6-field, evaluated in the host’s timezone). Installation makes the schedule available but does not activate it. It starts only after adoption under the same digest-bound grant as a routine, and a realm update pauses it until that grant is valid again. A host shows a realm’s Manifest Schedules as routines of an agent it proposes for the realm, so they are adopted the same way. A Manifest Schedule passes empty args ({}), so every inputSchema field must be optional. (A scheduled routine in agents/ instead passes {trigger: "cron", firedAt} under a different input contract; see routines that call a Realm Function.) |
onType |
The function is a method on a declared type — callable as <obj>.<name>(args) on an in-scope object, not as a bare gateway function. The handler receives the object as input.self and the caller’s arguments as input.args. schedule does not combine with onType: a scheduled invocation has no receiver. |
A Trigger Registration has one discriminated identity everywhere it appears in adoption, dispatch,
receipts, and audit: routine:<agent name, routine name, routine revision> for a routine in agents/, or
manifest-schedule:<namespace, name, schedule revision> for a manifest entry. The schedule revision
is a canonical digest of the entry’s schedule and invocation schema; realmDigest still pins the
rest of the package.
{ "version": 1, "generatedAt": "2026-08-01T00:00:00Z", "entries": [ { "namespace": "chatops", "name": "digest", "description": "Summarize ingested channel activity — counts per channel and the most recent messages.", "schedule": "0 30 * * * *", "inputSchema": { "type": "object", "properties": { "limit": { "type": "number" } }, "required": [] }, "outputSchema": { "type": "object", "properties": { "totalMessages": { "type": "number" }, "channels": { "type": "array" }, "recent": { "type": "array" } } } } ]}
