Save app
save_appCreate or update a persistent UI app with its HTML, manifest, and AI usage skill, saving each change as a new version for reuse.
Instructions
Create or update a UI app in the persistent registry. Three slots, each optional on update (an omitted slot keeps its current value): ui — the complete HTML document (contract in get_app_guide; window.oma, loads only from the guide's CDN allowlist or manifest.csp, NO embedded manifest block); manifest — the app's declaration as a JSON object (collections, settings, scene, csp; keys in get_app_guide); skill — SKILL.md text telling an AI how to USE the app. null clears manifest or skill. Creating needs ui. Every save snapshots all slots as one new version (history kept). After saving, open it IMMEDIATELY with open_app.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| ui | No | complete self-contained HTML document using window.oma; omit on update to keep the current one | |
| name | Yes | app name, ^[a-z][a-z0-9-]{0,31}$ (e.g. 'kanban', 'habit-tracker') | |
| skill | No | SKILL.md text (whole-value replace), null to clear, omit to keep | |
| manifest | No | declaration object (whole-value replace), null to clear, omit to keep | |
| command_id | No | idempotency key (uuid); auto-generated if omitted | |
| description | No | one line: what this app shows and what data fields it uses | |
| expected_version | No | REQUIRED when overwriting an existing app: the version you read (get_app). Creating a new name needs none |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
| ok | Yes | ||
| eot | No | ||
| name | No | ||
| note | No | ||
| size | No | ||
| reason | No | ||
| applied | No | ||
| created | No | ||
| version | No | ||
| prev_size | No | ||
| manifest_action | No | ||
| expected_version | No |