The Create-app loop, available to any app: package a folder into a .aip and install it into the OS, or mount a live sandboxed preview of one. Both are prompt-gated escalations — first use prompts; appInstall never auto-allows even for a Trusted app.
Installing an app from an app (capability: appInstall)
const { install, fileName } = await window.chatoss.appInstall.install(folderPath);
// folderPath = an absolute path inside a folder from files.pickFolder(); its
// CONTENTS become the app root.
The installed app's own permission disclosure still shows — installing is never silent.
Live previews (capability: preview)
Mount a sandboxed live preview of an app folder — with the REAL window.chatoss bridge injected — in a host-owned overlay over your app's section:
const { id } = await window.chatoss.preview.launch(folderPath); // folderPath inside a picked folder
await window.chatoss.preview.reload(id); // re-read the folder after edits
await window.chatoss.preview.close(id);
A previewed app gets real namespaced databases and storage, so you can build and test the whole app before publishing. See What is a .aip? for the packaging rules.