Skip to content
RoutineOS
Esc
↑↓navigate↵open⌘Jpreview
On this page

Store collections

Every document path in a Desk workspace's store, who writes it, and what it holds. Producers, people, the seed step and the prompt header each own their own paths.

A workspace’s store is the database of its published Desk artifact. Every path has exactly one kind of writer. The write contract refuses a producer write to a path people own.

Paths

Path Holds Written by
meta/workspace Name, producers, template, template version, lint result, createdAt, createdBy, schema Seed step
meta/definition The compiled definition: producers, types, views, version hash Seed step, or compile alone
entities/<type>--<slug> One record, with every producer’s bySource slice and its sightings Producers
runs/<runId> A run’s phases, counts, drops and settings used Producers
inbox/<runId>--<n> An Inbox message Producers
pending/<runId>--g<n> A gate waiting for a decision Producers (create only)
state/learning Learning tallies Producers, via learn
state/budget Runs counted against the daily cap Producers, via lib/budget.py record
state/health runAt, outcome, itemsHandled, alert, overrides Producers, with set
state/verified Present once a person has accepted a run. Until then every run is report-only A person’s word, written during deploy
settings/<producerId> Setting values People. Seed writes defaults once, only if absent
settings/workspace Merge policy per type, notifications, quiet hours, learning People. Seed writes defaults once
views/<id> A view The agent creates it as proposed; people own every later edit
columns/<id> An agent column As views
userstate/<entityId> A record’s star, notes and other per-record marks people set People
merges/<entityId> A hand merge People
decisions/<pendingId or inboxId> A person’s answer to a gate or message People
decisions/<entityId> {decision: "keep", at, by} People
data/users/<viewer>/state/read/<inboxId> Read That viewer
data/users/<viewer>/state/done/<inboxId> Done That viewer
data/users/<viewer>/state/ack/<runId> Run acknowledged That viewer

The state/budget, state/health and state/verified paths come from the fixed prompt header (routineos.py prompt app-header), not from the write contract’s planner. A run writes state/budget and state/health directly. state/verified is written once, during deploy, on the person’s word, and never by a run.

data/users/<id>/ is private to that viewer, even from the owner. The page gets <id> from await user.id() with the user capability declared. A null id turns per-viewer state off; nothing moves to a shared path or to browser storage.

Hiring Signals after one run

After seeding and one run that found one company and two roles (see the Quickstart):

meta/workspace
meta/definition
settings/hiring-signals
settings/workspace
runs/2026-11-02-2200
entities/company--northwind-example
entities/role--https-jobs-example-au-1001
entities/role--https-jobs-example-au-1002
inbox/2026-11-02-2200--1
state/learning

state/learning is there once the run applies learning.json from its learn step.

state/budget and state/health follow once the run’s prompt steps write them.

Limits

25,000 documents per artifact and 256 KiB per document, per the registry, which also records a conflict with other published figures. See Storage.

Was this page helpful?