codex-mirror · v1.0.0 · 2026-09-24 · sha256 6b5993588cbb80ff

codex-mirror v1.0.0A

Immutable. This exact content never changes and is served at /api/v1/blob/6b5993588cbb80ff.

---
name: codex-mirror
description: "Пересобрать зеркало канона для Codex (~/.codex/AGENTS.md) после bump'а CLAUDE.md: движок показывает дельту из CLAUDE.CHANGELOG.md, я вписываю только новые правила, скрипт сам держит кап 32 КиБ, штамп… Триггеры: /codex-mirror, «обнови зеркало кодексу», «AGENTS.md устарел», RED от lint_agents_mirror в /arch, а также САМ после MINOR/MAJOR bump CLAUDE.md (канон-ревизия, новое правило через /intake)"
version: 1.0.0
---

# codex-mirror — зеркало общего канона для Codex

Боль (найдена 25.07.2026): CLAUDE.md пережил ревизию v2 22.07, а `~/.codex/AGENTS.md` тихо остался июньским — **Codex месяц работал по устаревшим правилам**, и сверщик того времени ослеп на той же ревизии. Лечение: зеркало **версионное** (сравниваем версии, не форму), сторож кричит ночью, а этот скилл — дешёвая кнопка «пересобрать», чтобы крик не превращался в вечернюю ручную работу.

Роли (АК-47): **скрипт** двигает байты и всё проверяет; **я** пишу только текст новых правил. Руками не перепечатывать файл и не считать байты на глаз.

Движок: `python %USERPROFILE%\.claude\scripts\codex_mirror.py <check|backup|stamp|publish|selftest>`

## Шаг 0 — RECALL + рамки
- Память: [[canon-versioning-and-drift-watchdog]] (класс «сторож умер молча вместе с объектом»), [[codex-cli-install]], [[any-llm-vault-actor]], [[claude-md-compression-contract]].
- Зеркало = **канон-правка** → только машина Антона в живой сессии; ведомые receive-only ([[machine-governance-leader-follower]]).
- Кап **48 КиБ** (поднят 06.08 с 32 КиБ, «+» Антона). Зеркало = выжимка + указатели, НЕ копия CLAUDE.md — DR 29.06: раздутый файл ХУЖЕ пустого, кап держит эту дисциплину.
- ⚠️ Два разных числа, не путать: **CAP** в движке = наш ВИДИМЫЙ гейт; `project_doc_max_bytes` в `~/.codex/config.toml` = ТИХИЙ обрез Codex CLI (без строки — дефолт 32 КиБ, и всё сверх него срезается молча, первым умирает CODEX-БЛОК в конце). Гейт `readable` в `publish` теперь читает реальный конфиг. Поднимаешь CAP — сперва подними настройку, иначе вернёшь тихий обрез.

## Шаг 1 — Что именно устарело
```
python %USERPROFILE%\.claude\scripts\codex_mirror.py check
```
Печатает версии обеих сторон, остаток до капа и **дельту из `CLAUDE.CHANGELOG.md`** — ровно те записи, что появились после версии зеркала. Это и есть список работы; читать целиком CLAUDE.md не нужно.
- `VERDICT: OK` → выходим, делать нечего.
- `PATCH lag only` → зелёно по дизайну; вписываем, только если микро-правка меняет ПОВЕДЕНИЕ (пороги, гейты), а не формулировку.
- `REBUILD` → идём дальше.

## Шаг 2 — Страховка
```
python %USERPROFILE%\.claude\scripts\codex_mirror.py backup
```
Снапшот в `~/.codex/_backup/AGENTS.md.pre-<версия>-<дата-время>`. Откат = скопировать обратно.

## Шаг 3 — Вписать дельту (единственный шаг, где думаю я)
Для каждой записи дельты:
1. Найти в зеркале **соответствующий §** (нумерация зеркала = нумерация CLAUDE.md, поэтому §8.4 канона живёт в §8.4 зеркала).
2. Вписать правило в стиле зеркала: жирный `**§X.Y ...**` + суть в 1-3 предложения + указатель на канон в волте. Тела не копировать.
3. Правило про людей/внешку (Библия) — одной строкой с указателем; правило про **хуки** Claude — переводить в **принцип**, хуков у Codex нет.
   ⚠️ **СКИЛЛЫ — НЕ ПЕРЕВОДИТЬ В ПРИНЦИП** (замер 11.09.2026): у Codex 0.147+ есть РОДНАЯ полка `~/.codex/skills`, и все наши скиллы примонтированы туда junction'ами (`codex_skills_bridge.py`, §C8 зеркала). Правило со скиллом-дверью пишется Codex'у как есть, с именем скилла. Прежняя формулировка «у Codex скиллов нет» была протухшим claim и держалась месяцами — она же стояла строкой 7 самого зеркала.
4. Если правило целиком про меня-Codex (роль ревьюера, грабли Windows, защищённые зоны) — его дом **CODEX-БЛОК C1-C6**, не §-часть.

⚠️ **Следи за запасом** — `check` печатает его и кричит ниже 1 КБ. Запас кончился → новое влезает только в обмен: ужать самый раздутый абзац ТОЙ ЖЕ §-секции, не выкидывая правил. Не влезает даже так → полная ревизия зеркала (как 25.07: 137 КБ → 32.7 КБ), а не «чуть-чуть за кап».
📌 Замер 28.07 — как выглядит настоящий упор в кап: дельта на 5 КБ при 3 байтах запаса съела ТОП-20 (свернулся в дайджест) и все примеры-инциденты; правила уцелели, но зеркало обеднело. Это и был сигнал, что кап пора поднимать, а не резать канон дальше.

## Шаг 4 — Штамп + публикация
```
python %USERPROFILE%\.claude\scripts\codex_mirror.py stamp
python %USERPROFILE%\.claude\scripts\codex_mirror.py publish
```
`stamp` переписывает строку `> MIRRORS: ...` из ЖИВОГО канона (версия, дата, md5, хост) — руками её не трогать. `publish` — гейты (кап · штамп vs канон · 17 якорей `## §0..§10` + `### C1..C6`), потом копия в `$IMPORTS_ROOT\codex-canon\`, md5-сверка и прогон `lint_agents_mirror.py`. Любой FAIL = ничего не скопировано, чиним и повторяем.

## Шаг 5 — Доказательство и дома
- Живой прогон Codex: `codex exec -s read-only --skip-git-repo-check "процитируй §<новый номер> из своих инструкций"` — читает ли он новое правило на самом деле.
- Сторонние глаза по правилу /tt: `secondop.py t3 --ritual tt` (Codex сам как ломатель) — если менялся движок, а не только текст зеркала.
- Узел с Codex, но не хаб: там же прогнать `lint_agents_mirror.py` локально (строка в `codex-onboard-checklist.md`).
- Правило поменяло КОНТРАКТ коллаборации (что Codex может/не может) → обновить `~/.codex/CODEX-COLLABORATION.md` + копию в шаре, а не только зеркало.

## Границы и принятые ограничения
- ⛔ Не менять этим скиллом CLAUDE.md (это `/intake` для правила и `/canon-revision` для структуры); зеркало едет ЗА каноном, никогда впереди.
- ⛔ Не запускать на чужих машинах: канон пересобирает только хаб Антона.
- **Принято:** правка тела зеркала БЕЗ смены штампа сторожем не ловится (governance receive-only держит эту дыру закрытой организационно). Второго сторожа не строим — [[gate-implement-critical-only]].
- Кап и якоря — истина в коде движка (`CAP`, `ANCHORS`); расхождение кода с этим текстом = баг кода.
- Родня: `/arch` (ночная рельса, где живёт сторож) · `/secondop` (Codex как ревьюер) · `/canon-revision` (ревизия самого канона) · `/follower-onboard` (новый узел).