🧰 The platform (for whoever operates it)
Underneath the sections there's a platform layer that keeps everything running and audited. It's
managed from the command line with nocloudme.
Scheduled tasks (jobs)
Everything that runs on its own — refreshing quotes, recalculating the home screen, backups,
ingests — lives in a job registry (config/jobs.yaml) with its schedule, host, timeout and what
it produces.
nocloud jobs # list jobs and their state
nocloud jobs run <id> # trigger one by hand
No hidden tasks in an unreadable crontab: the inventory is a single, versioned list.
Events and auditing
Every relevant action emits an event (with severity, author, message and data) into an audit stream with a fixed schema.
nocloudme audit summary # summary of the event stream
nocloudme events # latest platform events
Validated configuration
The instance's configuration is described by a schema (config/schema.yaml): the manager
validates known keys and masks secrets in any output.
nocloud doctor # installation diagnostics
doctor runs well over a dozen checks — git and Python availability, the job registry, the
configuration schema, the database and its seeded sections, module manifests, the backup contract,
the audit event stream and the upgrade lifecycle — and reports each one individually.
The upgrade lifecycle
Upgrading isn't "copy and pray": it's a lifecycle with distinct phases and a point of no return.
preflight → backup → migrate → build → deploy → verify
If a phase fails, the prior snapshot lets you roll back.
The daemon and the "typing pause"
A small daemon on the workstation orchestrates jobs and heavy work, and also serves on-demand requests — like a Store connector's "refresh now" button — over a local API. It follows one courtesy rule: it freezes intensive tasks while you're typing and resumes them once you stop, so it never competes with you for the machine while you're using it.