# @conventions Single source of truth for workspace + coding conventions, shared by every project under `~/Code` (and known to global agentic config, so any agent in any repo can resolve them). ## Layout ``` @conventions/ ├── convention.yaml.schema # meta-schema every convention validates against ├── programming_general/.yaml # language-agnostic conventions ├── programming_ts/.yaml # TypeScript ├── programming_swift/.yaml # Swift ├── programming_py/.yaml # Python ├── programming_rust/.yaml # Rust └── programming_gd/.yaml # GDScript ``` ## A convention A `.yaml` is metadata + `rules`, and may: - **accept `params`** — referenced as `convention:()`, 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:` by reading `programming_/.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. - `programming_general/infra_manifest.yaml` — per-project `.infra.yaml`. ## Lint `./run lint:yaml` validates every convention against `convention.yaml.schema` (name==filename, scope==dir, semver). `run` is a symlink to `scripts/cli/run`.