AGENTS.md · git:20260726.5cd91ce · 2026-07-26 · sha256 120a0a41a390f370
AGENTS.md git:20260726.5cd91ceA
Immutable. This exact content is served forever at /api/v1/blob/120a0a41a390f370.
# AGENTS.md — working on oh-my-design with Codex (GPT-5.6) This file governs how the Codex / GPT-5.6 path contributes to this repository. `CLAUDE.md` covers the Claude Code path; both share the repository conventions at the bottom. ## Model ownership: the user chooses the model; OMD chooses only effort The concrete model selected for the host session is user-owned configuration. OMD never replaces it for a child agent. This applies equally to Codex and Claude Code, to every pipeline role, and to ad-hoc workers spawned during the run. - **Codex:** omit `model` from every `spawn_agent` call. The child inherits the session model. - **Claude Code:** agent metadata declares `model: inherit`; never request Opus, Sonnet, Haiku, or any concrete model in a spawn. - **Both hosts:** OMD may set only the role's reasoning/effort tier. Judgment-heavy roles use `high`; the production hand uses `medium`. Effort changes depth, not model identity. - A recommendation, benchmark, role name, or belief that another model would perform better is never authority to override the user's selection. If the session is Luna, every OMD child is Luna; if it is Sol, every child is Sol. The pipeline's agent source files carry only the effort tier. The Codex adapter emits `model_reasoning_effort` and no `model`; the Claude adapter emits `model: inherit` plus `effort`. A coordinator that passes a concrete model has violated the run even when the chosen model is nominally stronger. ## Repository conventions - **Source of truth is `src/`.** `src/agents/*.agent.yaml` and `src/skills/omd-*/SKILL.md` are the prompt originals. Root `agents/`, `skills/`, and `dist/` are generated by `npm run build` — never edit them directly. - **Edited directly:** `core/`, `bin/`, `adapters/`, `test/`, `evals/`, `scripts/`, `README.md`, `README.ko.md`, `.github/`, and the theory/recipe packs under `core/`. - **`.omd/` is the design record**, committed with the repo. `.omc/` is local session state and is gitignored. - **New linter rules stay narrow.** Every pattern gets a positive AND a negative test; a tell that cannot be made safe goes to the prompt layer with the reason recorded in-file. Rules warn, never error — a deliberate choice can overrule one with a written reason. - **Commits use conventional prefixes** (`feat:`, `fix:`, `docs:`, `chore:`). Do not add AI attribution footers to commit messages. - **Branch → PR → squash-merge.** Every change lands on a feature branch and merges through a PR; `main` is protected (one approval; the admin, 3x-haust, may bypass). - **Merge continuously, release on request only.** Feature branches merge to `main` as they finish — do not cut a version for every feature. A release happens **only when the user explicitly asks** for one. Work accumulates on `main` between releases. - **Releasing (when asked):** bump all three manifests with `scripts/bump.ts`, merge the bump to `main`, and the release workflow tags and publishes structured notes automatically. - **Definition of done for any change:** `npm test` 0 fail, `npx tsc --noEmit` clean, `npm run build` succeeds.