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.