Skip to main content

Monorepo support

Many teams keep several models in one repository, each in its own directory with its own cirron.yaml. A root cirron.yaml with a top-level workspace: key lets the CLI discover all of them and operate from the repo root, the way Turborepo’s turbo.json does for JavaScript monorepos. When the CLI finds a workspace: config in the current directory it runs in monorepo mode. Otherwise it runs in single-model mode (the default behavior). There is no upward search. Running a command inside a model subdirectory operates on that model alone.

Root cirron.yaml

Each path points to a directory containing a model-level cirron.yaml. A path that doesn’t resolve to a directory with a cirron config is reported as an error.

Model cirron.yaml

Unchanged: a model config never has a workspace: key:

Inheritance

Root defaults are merged into each model’s config with a shallow strategy:
  • env: shallow-merged; the model’s value wins on key conflicts. With the example above the model ends up with ENVIRONMENT: production (from defaults) and THRESHOLD: "0.5" (its own).
  • profiling: replaced wholesale when the model defines its own profiling block; otherwise the default profiling is used as-is.
  • Any other key under defaults: applied only when the model doesn’t already set it.
No deep merge anywhere. Predictable, no surprises.

Commands

Today cirron validate is workspace-aware:
See cirron validate for details. Workspace-aware push, status, and list are on the roadmap.