Prox Studio System
Prox OS is an AI-native Web OS and workspace platform. Desktop Runtime is the
Position
Prox OS is an AI-native Web OS and workspace platform. Desktop Runtime is the primary runtime host for OS-grade app work, while a Studio is a workspace and composition product: a user can create, enter, configure, share, fork, and keep editing a personal or team workspace while AI helps assemble the first layout and each Studio Engine renders the same capabilities in a fit-for-purpose form.
The user-facing promise is simple:
Open Desktop Runtime for multi-window app work. Create a Studio when the work
needs a focused workspace, composition, or specialized creation surface.The developer-facing model is explicit:
Desktop Runtime -> App Window lifecycle
Studio -> Studio Engine -> Studio Surface -> App projectionCore Terms
| Term | Meaning |
|---|---|
| Desktop Runtime | The primary runtime host for multi-window app work, Dock, Launchpad integration, Active Apps, runtime overlays, and OS-grade interaction. |
| Studio | A user-owned workspace/composition product for personal, team, or community work. It can display apps, data, views, spaces, and AI workflows, but it is not the primary runtime host. |
| Studio Engine | The interaction and rendering engine for a Studio, such as Atlas, Grid, Ops, or a local-only development engine under /dev/studios/*. |
| Studio Surface | A surface where a capability appears inside an engine: window, widget, block, node, card, panel, rail, palette, or thumbnail. |
| App | A capability unit that can appear through adapters and presentations. It does not inherently belong to one Desktop or Studio. |
| Dataset | A first-class resource that can mount into Studios, apps, AI context, and connector flows. |
| AI Control Plane | OS-level intelligence across AI Entry, Alma, Cmd+K, Slash Menu, AI Action Cards, permission cards, and agent workflow views. |
Users should see Desktop Runtime as the primary runtime and Studio language for workspace creation: Create Studio, Open Studio, Studio template, and Studio AI Entry. Developers may use Studio Engine, Studio Surface, Projection Contract, Command Provider, App Manifest, and Command Context.
Studio Engines
| Engine | User purpose | Developer shape |
|---|---|---|
| Atlas Studio | Collections, knowledge landscapes, and map-like browsing. | Cards, collections, recent paths, and app projections. |
| Grid Studio | Dashboard cells, widgets, app projections, and operational views. | Grid widgets and projection cards. |
| Ops Studio | Metrics, records, admin checks, review queues, and low-code workflow surfaces. | Dashboard cards, tables, review panels, AI summaries, and operator workflows. |
| Local Dev Workbench | Local-only access to experimental engines and developer diagnostics. | /dev index plus /dev/studios/* routes hidden from public UI and creation flows. |
Studio Contracts And Packages
Studio language is now split across three package boundaries:
| Package | Responsibility |
|---|---|
@prox-os/studio-contract | Serializable Studio types, engine ids, surfaces, projection surfaces, manifests, and context objects. |
@prox-os/studio-registry | Engine metadata and command-provider composition for Desktop Runtime, Atlas, Grid, Ops, and local-only development engines, plus Desktop Runtime metadata for runtime discovery. |
@prox-os/*-studio-engine packages | Heavy engine UI implementation for renderers that need their own editor or canvas dependencies. |
@prox-os/studio-contract must stay implementation-neutral: no React, no
Shell state, no concrete engine package, and no backend persistence. The
registry may depend on the contract and engine packages for metadata and
command providers, but it does not own Shell runtime state. apps/os-shell
owns routing, active Studio context, lazy component loading, window manager
state, AI Control Plane glue, and Global Command Surface glue.
Block, Board, and Flow are extracted first because they own the heavy, engine-specific dependencies:
| Engine | Heavy dependency | Package |
|---|---|---|
| Block Studio | BlockNote | @prox-os/block-studio-engine |
| Board Studio | Excalidraw | @prox-os/board-studio-engine |
| Flow Studio | React Flow / xyflow | @prox-os/flow-studio-engine |
Desktop Runtime still leans on Shell runtime and layout state. Atlas, Grid, and
Ops stay inside the Shell as the visible Studio set. Site, Webview, Device,
Admin, IDE, App Studio, CLI, Block, Board, and Flow are local-only development
engines reachable from /dev/studios/* in development builds, hidden from the
public switcher and creation flows.
The Shell should lazy-load heavy engine components. /dev/studios/block,
/dev/studios/board, and /dev/studios/flow are the current local-only routes
that load their engine components; the Shell initial bundle should not
statically import BlockNote, Excalidraw, or React Flow component trees.
AI Control Plane
The AI Control Plane is not one widget. It is a set of surfaces with different mental models:
| Surface | Mental model | Scope |
|---|---|---|
| AI Entry | Full-screen agent workflow for Studio creation. | First-run or create-flow surface that can ask about role, interests, engine preference, connector posture, and template choice before opening a demo Studio. |
| Alma | Ambient observer and OS-level companion. | Explains current Studio context, proposes Action Cards, shows permission explanations, and offers suggested commands without stealing control. |
| Cmd+K | Global command surface. | Expresses explicit intent and gathers commands from the Shell, current Studio Engine, active app, AI providers, and debug providers. |
| Slash Menu | Local insert surface. | In v0 it primarily belongs to Block Studio and inserts content at the current cursor. |
These surfaces may share registries, but the UI contract stays separate:
| Registry | Owns |
|---|---|
| Action Registry | Reviewable action intents. |
| Command Registry | Global and scoped commands. |
| App Registry | Launchable capabilities and app metadata. |
| Block Insert Registry | Cursor-local block insertions. |
Weather shows the distinction:
| Surface | Weather behavior |
|---|---|
| Cmd+K | Open Weather App; Add Weather Widget to Current Studio. |
| Slash Menu | Insert Weather Block Here. |
| Alma | You are planning travel. Add weather context? |
Navigation Split
The Shell now separates public landing navigation from runtime and Studio navigation:
| Surface | Owner | Responsibility |
|---|---|---|
LandingTopNav | Public homepage | Presents product, Studio, Community, Docs, Pricing, Alma, sign-in, and Launch OS entry points. It does not host the Dock and does not reuse the runtime RuntimeCommandStrip. |
ShellTopbar | OS runtime | Owns global command, status, Alma, account, notifications, settings, Studio switching, and runtime-level identity. |
| Studio headers | Studio Engines | Expose Studio name, local tabs, view mode, actions, and context status without pretending to be the global Shell. |
| Desktop Runtime RuntimeCommandStrip preference | Desktop Runtime | Owns configurable RuntimeCommandStrip placement. Studio Engines use a stable top runtime bar so Desktop Runtime preferences do not squeeze every creative workspace. |
| Dock | Desktop Runtime | Floating launcher list controlled by the existing floating-surface position preference instead of being embedded inside the RuntimeCommandStrip. |
This split keeps the homepage as a product and AI-builder entry, keeps the OS runtime as a long-lived shell, and lets each Studio preserve its local boundary.
Studio Surface Shell
StudioSurfaceShell is the shared bounded workspace container for heavy
creative Studios. It provides the outer Studio workspace background, responsive
padding, rounded frame, border, subtle shadow, and overflow boundary. The
Studio Engine still owns 100% width and height inside that frame.
The shell applies this bounded surface to Ops Studio and to local-only
development Studio routes under /dev/studios/*. Desktop Runtime uses the
related runtime boundary because it is a
primary host rather than a normal Studio card in the Studio list. Future focus
or fullscreen modes can intentionally bypass or relax the frame when the user
asks for full-bleed work.
Singleton App Window
Singleton App Window is a lightweight single-app floating surface available outside Desktop Runtime. It exists so small tasks can open anywhere while Desktop Runtime remains the strongest place to organize apps, windows, sessions, layouts, widgets, connectors, and permissions.
The current MVP allows one singleton app window at a time. It is draggable,
closable, has shared app-window chrome, can be reset or maximized, and renders
apps through the same AppRuntime used by normal shell windows. It does not
copy app UI and it does not make every app singleton-window capable.
The shell registry annotates launch metadata through launchModes and
defaultLaunchMode. Light apps such as Calculator, Currency Converter,
Weather, DevUtils, Calendar, Pricing, AI Question Tracker, Subscription
Tracker, and Market Watch can opt into globalWindow. Heavy Studio and hub
work remains routed to Studio or normal OS surfaces.
All app-opening entry points should reuse the same launch action model:
| Entry point | Host behavior |
|---|---|
| Home | Can launch apps through singleton behavior outside Desktop Runtime. |
| Studio | Can launch apps through singleton behavior or Studio projection outside Desktop Runtime. |
| AI Entry | Can launch apps through the shared app launch action model. |
| Public preview | Can launch apps through singleton behavior when allowed. |
| App Store | Can launch apps but remains a platform-level catalog, not Desktop Runtime-private. |
| Cmd+K | Can launch apps according to the active host context. |
| Desktop Runtime | Uses the multi-window manager. |
Projection Contract
Apps and Studios can appear inside other engines, but v0 only supports projection, not unlimited recursive interactive nesting.
export const maxNestedInteractiveDepth = 1
export type ProjectionSurface =
| 'full'
| 'window'
| 'widget'
| 'block'
| 'node'
| 'card'
| 'thumbnail'
export type ProjectionContract = {
appId: string
supportedSurfaces: ProjectionSurface[]
maxInteractiveDepth?: number
fallbackSurface: Extract<ProjectionSurface, 'card' | 'thumbnail'>
}One Studio or App may appear inside another Studio as a card, widget, block, node, or thumbnail. v0 forbids a full interactive Studio inside another full interactive Studio when that nested Studio would continue nesting more interactive Studios. Past depth 1, the runtime should degrade to a card or thumbnail and expose an Open as Studio action.
The shared type home is @prox-os/studio-contract. Rendering glue still lives
inside apps/os-shell; packages do not own shell state, Zustand stores, or
backend persistence.
Global Command Surface
Cmd+K is a Shell-level surface, not a feature of Desktop Runtime or a Studio. The palette changes with active Studio context.
Each Studio Engine can expose command providers:
type CommandContext = {
studioId?: string
studioEngineId: StudioEngineId
activeAppId?: string
activeSurfaceId?: string
}
type CommandProvider = {
id: string
label: string
getCommands: (context: CommandContext) => Command[]
}Shortcut policy:
| Shortcut scope | Rule |
|---|---|
| Global command | Cmd+K / Ctrl+K opens the Global Command Surface across the workspace and Alma. |
| Local input surfaces | IDEs, editors, text inputs, iframe apps, and Slash Menu surfaces keep their own local shortcuts without intercepting the global command entry. |
Routes
Current user-scoped routes:
| Route | Category | Notes |
|---|---|---|
/studio | Public-ish creation entry | User-facing AI Entry for Prox Studio creation. |
/@user | Universe | Owner profile, Runtime list, Studio list, apps, Spaces, and future user graph. |
/@user/runtime/:runtimeSlug | Runtime | Owner-scoped Runtime root. The seeded mock route is /@esmadrider/runtime/os. |
/@user/runtime/:runtimeSlug/:runtimeMode | Runtime mode | Runtime Command Strip modes for Data, Apps, Automations, Collect, Settings, and Publish. |
/@user/studios/atlas | Studio | Atlas Studio. |
/@user/studios/grid | Studio | Grid Studio. |
/@user/studios/ops | Studio | Ops Studio. |
/dev | Development | Local developer workbench. |
/dev/studios/:engine | Development | Local-only engine surface for Site, Webview, Device, CLI, Admin, Block, Flow, Board, IDE, and App Studio experiments. |
/studio remains the AI Entry for creating or exploring Prox Studio. User-owned
Studio resources use /@user/studios/:studioSlug. Runtimes use
/@user/runtime/:runtimeSlug because Runtime is the repo-like object that can
be named, cloned, published, and listed from a Universe page.
Block Studio
Block Studio v0 uses BlockNote because it is the fastest path to a Notion-like block editor with a default slash menu, drag handles, block nesting, and custom block direction.
Longer-term evaluation stays open:
| Direction | Reason |
|---|---|
| Prox Block Protocol | Define OS-level block schemas so Prox is not locked to one editor library. |
| BlockSuite evaluation | Worth evaluating for docs plus whiteboard plus database collaboration. |
| Tiptap | Remains a lower-level editor foundation candidate for @prox-os/editor, not the primary Block Studio v0 surface. |
@prox-os/editor | Should eventually host shared editor foundations, but this slice avoids prematurely splitting every block concept into a package. |
The v0 choice is about architecture fit and product speed, not star counts.
Terminology Migration
Historical ideas are kept as design history, but the main product language is now Desktop Runtime plus Studio:
| Historical term | Current term |
|---|---|
| Block Desktop, Block Space, Block Station | Block Studio |
| Canvas Desktop | Flow Studio / Flow Engine |
| Freeform canvas direction | Board Studio / Board Engine |
| Immersive Desktop | App Studio / Single-App Engine plus app focus behavior |
| Desktop Surface Engine | Studio Engine Model |
Classic OS window spaces remain implementation concepts inside Desktop Runtime and the window manager. User-facing switching is Runtime/Studio switching across resources and Scene switching inside the active runtime or Studio.