- **accept `params`** — referenced as `convention:<name>(<args>)`, e.g. `convention:recursive_code_workspace(~/Code)`;
- **define a manifest** via `providesFile` — a file (e.g. `.infra.yaml`) every conforming project must contain, with a nested JSON Schema for its contents.
Validate a convention file against `convention.yaml.schema`; validate a project's
manifest against the convention's `providesFile.schema`.
## How agents use it
Global config points agents here. An agent resolves `convention:<name>` by reading
`programming_<scope>/<name>.yaml`, applies its `rules`, and (for `providesFile`
conventions) reads/writes the project's manifest to that schema. Conventions are
data, not prose — tooling (a future `infra-apply`, linters, scaffolders) can consume
them directly.
## Seed conventions
-`programming_general/recursive_code_workspace.yaml` — the `~/Code`@org layout.
`./run lint:yaml` validates every convention against `convention.yaml.schema` (name==filename, scope==dir, semver). `run` is a symlink to `scripts/cli/run`.