Standalone apps
A standalone App is a full-page experience that is not tied to any Agent or chat. You declare one by returning standalone: true (and a stable id) from your App's /meta route.
Where it renders
SAALT Core renders a standalone App at a top-level URL, /plugin/{id}, outside any Space, Agent, or chat context, proxying to your App's user surface. An optional admin/config surface is embedded through the Admin → Apps "Configure" dialog — shown when your meta sets hasAdminChatPage.
Bridge scope
The plugin token forwarded to a standalone App is standalone-scoped: it carries no Agent ids. Create the bridge without an agentId:
Code
Because there is no Agent in scope, the agent-only namespaces throw on a standalone bridge:
bridge.knowledge.*bridge.conversation.findFirstbridge.agent.getAgentbridge.llm.getAvailableModels
The scope-agnostic namespaces still work, scoped per-plugin (not per-agent):
bridge.data.configbridge.data.pluginDatabridge.files
See Agent-scoped vs standalone bridges for the full comparison.
Data
Standalone App data is stored per-plugin (Agent-optional), so pluginData and config persist without an Agent.
Access control
Standalone Apps are not gated by per-Agent or per-Space availability. Access is granted per-App through permission groups (an "App Permissions" / "Use App" scope). A user sees the sidebar Apps entry and the /apps gallery only for the Apps they have been granted.
Headers
Requests to your App carry the same forwarded headers as agent-scoped views:
saalt_session_tokensaalt_server_urlsaalt_base_path