Daemon

The daemon watches one repository, caches facts, and serves the local API.

Runtime

The bundled daemon runs on Bun. The skill ships built JavaScript, UI assets, validators, and the engine runtime, so consumers do not install workspace packages to run it.

Lifecycle

daemon lifecycle
sh
opencanon daemon start       # background
opencanon daemon serve       # foreground
opencanon daemon status
opencanon daemon list        # all registered daemons
opencanon daemon stop
opencanon daemon check       # prerequisites only

State

Repo state lives under .opencanon/. The supervisor registry lives in ~/.opencanon/daemons.json. Parser caches belong in Git ignore; doctor --fix safe can add the ignore entry. Runtime assets under .agents/skills/opencanon/runtime/ are release artifacts installed into each checkout and ignored by the skill-local .gitignore, not repository source.

Engine Runtime

The daemon uses the engine binary under .agents/skills/opencanon/runtime/engine/ for watching, hashing, fact extraction, and affected-file calculation. JavaScript and TypeScript use Oxc. Python source facts are available to validators, and Rust, Cargo, npm, and Python dependency metadata feed generated project constants.

Project Types

While the daemon is running, it refreshes gitignored project authoring types when package manifests, Cargo files, Python dependency files, fixtures, or TypeScript config inputs change. Run generation manually during setup, CI, or recovery if the watcher reports stale generated types.

project types
sh
opencanon project-types generate
opencanon daemon status

Updates

Runtime updates are manifest-driven. The CLI selects the current target, verifies Bun and schema compatibility, checks the asset hash, and refuses to write while the daemon is running.

runtime update
sh
opencanon update check --manifest ./opencanon-runtime-manifest.json
opencanon daemon stop
opencanon update apply --manifest ./opencanon-runtime-manifest.json
opencanon daemon check
opencanon daemon start

API

The daemon exposes a JSON API over a local Unix socket. The CLI, hooks, and UI use the same endpoints.