Living UI Manager
Operate and manage existing Living UIs. Never edit code here — if a request needs code changes, that's living-ui-modify.
Inventory
- Registry:
agent_file_system/workspace/living_ui_projects.json— id, name, status, port, path per project. - Per project:
manifest.json(port, authMode, pipeline),LIVING_UI.md(what it does),operations.json(its verbs).
Lifecycle
living_ui_notify_ready(project_id)— validate + launch (or relaunch).living_ui_restart(project_id)— stop then full relaunch.- A running app serves everything on ONE port:
http://localhost:<port>— the UI, the PB REST API (/api/collections/...), declared ops, and discovery atGET /api/_ops.
Operating an app (using it on the user's behalf)
Use the lui CLI via run_shell. ALWAYS use the ABSOLUTE CLI path —
the shell's cwd is NOT the repo root, so relative paths fail. The CLI is
<craftbot-root>/living-ui/tools/src/cli.ts (craftbot-root = parent of
agent_file_system; in a Living UI session the [INTERACTING WITH LIVING UI]
note contains the exact ready-to-run commands). <CLI> and <project> below
are absolute paths.
- Discover what the app can do:
node <CLI> ops <project> - Declared op exists → run it:
node <CLI> run <project> <op-name> --param valueOps markedDESTRUCTIVE→ confirm with the user first. - No op → generic data access:
node <CLI> data <project> <collection> list --filter '...' --sort '-created' --limit 20node <CLI> data <project> <collection> create --json '{"field":"value"}'node <CLI> data <project> <collection> update <id> --json '{...}'/delete <id>Read freely; write only what the app's own UI offers. - Needs new capability → say so and offer a modification instead of hacking around it.
Fallback only when the shell is unavailable: the living_ui_http action
speaks to the same API.
Diagnosing
- Status
error: read the project'serrorfield in the registry, thenlogs/pocketbase.log(server/migrations) andlogs/frontend_console.log(frontend). Report findings honestly; hand fixes to living-ui-modify. - Never start
pocketbase/npmprocesses by hand; never touchpb_data/or.superuser.