feat(skills): добавлен скилл cross-review для ревью моделью другого семейства
- Зачем: два плейбука оркестрации разошлись, а из них на практике нужно только независимое ревью моделью другого семейства. - Что: линзы для ревьюера (по задаче, по коду, форма и вкус, вычитание, план), общий мандат и перепроверка; разбор находок остаётся у автора. Механика запуска вынесена в адаптеры: T3 Code, codex exec, claude -p. Следующие круги ревью идут продолжением сессии того же ревьюера. Старые плейбуки пока не удалены. - Проверка: запуск, запись отчёта и продолжение сессии прогнаны на codex-cli 0.163.0, Claude Code 2.1.302 и в T3 Code; два круга ревью скилла (gpt-6.1-sol, gpt-6-astra), находки исправлены; ссылки и YAML проверены скриптом. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
144bc2515b
commit
158075e059
12 files changed
+658
No files matched your search
@@ -0,0 +1,84 @@
|
||||
# Запуск Claude из командной строки
|
||||
|
||||
Для автора, у которого есть shell и установлен `claude` (Claude Code CLI).
|
||||
Проверено на Claude Code 2.1.302 (Linux, 2026-10-17): запуск с промптом из
|
||||
stdin, запись отчёта, продолжение по id сессии, фоновая сессия.
|
||||
|
||||
## Первый запуск
|
||||
|
||||
```bash
|
||||
# D — обменный каталог с готовым brief.md, S — каталог скилла
|
||||
cat "$D/brief.md" "$S/prompts/mandate.md" "$S/prompts/lens-shape.md" \
|
||||
> "$D/prompt.md"
|
||||
|
||||
cat "$D/prompt.md" | claude -p --permission-mode auto --model opus \
|
||||
--effort high --add-dir "$D" --output-format json \
|
||||
> "$D/out.json" 2> "$D/err.txt"
|
||||
|
||||
jq -r '.session_id, .result, .is_error' "$D/out.json"
|
||||
```
|
||||
|
||||
- **`--model opus`** — псевдоним последней модели Opus, он не устаревает с
|
||||
выходом новых версий. Глубина ревью — `high`; выше — по просьбе
|
||||
пользователя.
|
||||
- **`--permission-mode auto`** разрешает запускать тесты, ходить в сеть и
|
||||
создавать временные файлы; опасные действия отсекает встроенный
|
||||
классификатор. Исходники защищает мандат.
|
||||
- **`--add-dir "$D"`** разрешает запись отчёта в обменный каталог.
|
||||
- **`--output-format json`** возвращает `session_id` для перепроверки,
|
||||
`result` — финальное сообщение, `modelUsage` — фактическую модель и
|
||||
стоимость для отчёта пользователю.
|
||||
|
||||
## Ожидание
|
||||
|
||||
`claude -p` держит процесс до конца ревью, а это часто дольше 10 минут.
|
||||
Если твой инструмент shell столько не ждёт, есть два пути:
|
||||
|
||||
- запусти ту же команду фоном средствами своей среды и жди завершения
|
||||
процесса. Появление `out.json` ничего не значит: перенаправление создаёт
|
||||
пустой файл сразу при запуске;
|
||||
- или запусти фоновую сессию самого Claude:
|
||||
|
||||
```bash
|
||||
claude --bg --permission-mode auto --model opus --effort high \
|
||||
--add-dir "$D" "Прочитай $D/prompt.md и выполни." < /dev/null
|
||||
```
|
||||
|
||||
Команда сразу печатает короткий id. Состояние сессии —
|
||||
`claude agents --json --all` (поля `id`, `sessionId`, `state`); жди
|
||||
`state: done`. Сам `REPORT` ревьюер дописывает по ходу, поэтому его
|
||||
появление тоже не признак конца. `claude logs` выдаёт сырой вывод
|
||||
терминала, агенту он бесполезен. Завершённую сессию останавливай
|
||||
`claude stop <id>`.
|
||||
|
||||
В любом случае перед разбором проверь, что последняя строка `REPORT` —
|
||||
`VERDICT: …`: иначе отчёт неполный.
|
||||
|
||||
## Затраты
|
||||
|
||||
`out.json` содержит `total_cost_usd`, `usage` (токены) и `modelUsage`
|
||||
(разбивка по моделям, включая служебные вызовы).
|
||||
|
||||
## Следующие круги
|
||||
|
||||
Узкая перепроверка или полный проход по новой версии — продолжением той же
|
||||
сессии. Что положить в поручение — в разделе «Следующие круги» SKILL.md.
|
||||
|
||||
```bash
|
||||
cat "$D/recheck-prompt.md" | claude -p --resume <session-id> \
|
||||
--output-format json > "$D/recheck.json" 2> "$D/recheck-err.txt"
|
||||
```
|
||||
|
||||
Модель сохраняется из первого запуска (проверено: продолжение шло на той же
|
||||
Opus). Режим доступа и глубину заново не задавай; сверь, что `session_id` в
|
||||
ответе совпал с исходным. Для фоновой сессии из `--bg` бери её `sessionId`
|
||||
из `claude agents --json --all`.
|
||||
|
||||
## Особенности ревьюеров Claude
|
||||
|
||||
- Однострочный формат находок держат хуже: бывают многострочные записи и
|
||||
развёрнутые подтверждения. Проверь индекс перед разбором.
|
||||
- Видят картинки: графики, скриншоты, выводы ноутбуков. Если проверяемый
|
||||
результат визуальный, это довод за Claude.
|
||||
- Сильнее в механике кода и форме решения: нереализуемые формулировки,
|
||||
мёртвые заглушки, неудачные имена и границы.
|
||||
@@ -0,0 +1,100 @@
|
||||
# Запуск Codex из командной строки
|
||||
|
||||
Для автора, у которого есть shell и установлен `codex`. Проверено на
|
||||
codex-cli 0.163.0 (Linux, 2026-10-17): первый запуск, продолжение по id,
|
||||
запись отчёта в обменный каталог.
|
||||
|
||||
## Перед первым запуском
|
||||
|
||||
На новой машине и после обновления Codex проверь, что команды внутри
|
||||
песочницы вообще выполняются:
|
||||
|
||||
```bash
|
||||
codex sandbox -c 'sandbox_mode="workspace-write"' -- sh -c 'echo SANDBOX_OK'
|
||||
```
|
||||
|
||||
На Linux отказ вида `bwrap: ... Failed RTM_NEWADDR` обычно значит, что
|
||||
AppArmor запрещает непривилегированные user namespaces. Это настройка машины,
|
||||
а не ревью: сообщи пользователю и сошлись на
|
||||
[требования песочницы](https://learn.chatgpt.com/docs/sandboxing#prerequisites).
|
||||
Работающий веб-поиск о песочнице ничего не говорит.
|
||||
|
||||
## Первый запуск
|
||||
|
||||
```bash
|
||||
# D — обменный каталог с готовым brief.md, S — каталог скилла
|
||||
cat "$D/brief.md" "$S/prompts/mandate.md" "$S/prompts/lens-code.md" \
|
||||
> "$D/prompt.md"
|
||||
|
||||
set -o pipefail
|
||||
cat "$D/prompt.md" | codex exec --json --strict-config --approve-for-me \
|
||||
--add-dir "$D" -m <model> -c 'model_reasoning_effort="<effort>"' \
|
||||
-o "$D/final.md" - > "$D/log.jsonl" 2> "$D/err.txt"
|
||||
```
|
||||
|
||||
- **Промпт — каналом через stdin** (`cat … | codex exec … -`): так он
|
||||
доходит в любой среде. Поток событий и ошибки — в файлы; в свой контекст
|
||||
читай только `final.md` и отчёт `REPORT`.
|
||||
- **`--approve-for-me`** даёт песочницу `workspace-write` и сам одобряет
|
||||
выход за неё: сеть, docker, команды вне каталога. Вместе с `-s` он не
|
||||
принимается. Шире — `danger-full-access` — ревьюеру не нужно.
|
||||
- **`--add-dir "$D"`** разрешает запись отчёта в обменный каталог.
|
||||
- **Модель и глубину задавай явно.** Иначе они берутся из
|
||||
`~/.codex/config.toml` и зависят от последней интерактивной сессии
|
||||
пользователя. На 2026-10 для ревью кода обычно лучше всего подходит
|
||||
`gpt-6.1-sol` с глубиной `high`. `gpt-6-astra` с `xhigh` сильнее и
|
||||
заметно дороже: бери её по просьбе пользователя или когда ошибка особенно
|
||||
дорога. Названия моделей быстро устаревают: при сомнении спроси
|
||||
пользователя.
|
||||
- **`--strict-config`** останавливает запуск при неизвестном ключе `-c`.
|
||||
Без него опечатка молча заменяется настройкой по умолчанию.
|
||||
|
||||
## Ожидание
|
||||
|
||||
Ревью идёт от нескольких минут до получаса. Запускай команду фоном средствами
|
||||
своей среды: в Claude Code — Bash с `run_in_background`, без `&` внутри
|
||||
команды; среда разбудит тебя по завершении.
|
||||
|
||||
- **id сессии** — в первой строке лога:
|
||||
`head -1 "$D/log.jsonl" | jq -r .thread_id`. Сохрани его сразу: по нему
|
||||
идут перепроверка и спасение, если процесс умер.
|
||||
- **Признак жизни** — рост `log.jsonl`. Долгая сборка или тесты внутри
|
||||
песочницы событий не пишут, поэтому застывший лог — повод посмотреть, а не
|
||||
приговор.
|
||||
- **Вердикт без находок** проверь по логу: работа это или отписка.
|
||||
`grep -c '"command_execution"' "$D/log.jsonl"` — число выполненных команд.
|
||||
Голое APPROVED при нуле команд перезапускай.
|
||||
|
||||
## Затраты
|
||||
|
||||
Токены по каждому ходу пишутся в лог:
|
||||
`jq -c 'select(.type=="turn.completed") | .usage' "$D/log.jsonl"`.
|
||||
Стоимости в выводе нет.
|
||||
|
||||
## Следующие круги
|
||||
|
||||
Узкая перепроверка или полный проход по новой версии — продолжением той же
|
||||
сессии. Что положить в поручение — в разделе «Следующие круги» SKILL.md.
|
||||
|
||||
```bash
|
||||
cat "$D/recheck-prompt.md" | codex exec resume --json --strict-config \
|
||||
-m <model> -c 'model_reasoning_effort="<effort>"' \
|
||||
-o "$D/recheck-final.md" <thread-id> - \
|
||||
> "$D/recheck-log.jsonl" 2> "$D/recheck-err.txt"
|
||||
```
|
||||
|
||||
- **Только по явному id.** `--last` подхватит последнюю сессию, а при
|
||||
нескольких ревьюерах это может быть чужая.
|
||||
- Песочница и доступ к `$D` принадлежат сессии и сохраняются; ключей `-s`,
|
||||
`--approve-for-me` и `--add-dir` у `resume` нет.
|
||||
- Модель и глубину повтори явно — те же, что при первом запуске: иначе
|
||||
подставятся значения из конфига, а смена глубины внутри сессии сбрасывает
|
||||
кэш.
|
||||
|
||||
## Особенности ревьюеров Codex
|
||||
|
||||
- Мандат и формат отчёта держат надёжно.
|
||||
- Бывает, требуют исправлений сверх цели задачи; в других прогонах все
|
||||
починки выходили соразмерными. Проверяй соразмерность как обычно.
|
||||
- Хорошо ловят уровень требований: недостающие критерии, наблюдаемость,
|
||||
«формально отчитаться можно».
|
||||
@@ -0,0 +1,89 @@
|
||||
# Запуск через T3 Code
|
||||
|
||||
Для автора, который работает внутри T3 Code и видит инструменты
|
||||
`orchestrator_capabilities` и `delegate_task` (имена могут идти с префиксом
|
||||
вроде `mcp__t3-code__`). Приложение само следит за дочерней задачей, будит
|
||||
тебя по её завершении, а пользователь видит ход ревью в отдельном разговоре.
|
||||
Проверено 2026-10-17: Claude → Codex.
|
||||
|
||||
## Выбор модели
|
||||
|
||||
Модель и глубину выбирай по адаптеру семейства ревьюера:
|
||||
[Codex](launch-codex.md#первый-запуск) или
|
||||
[Claude](launch-claude.md#первый-запуск). Вызови `orchestrator_capabilities`,
|
||||
найди у нужного провайдера эту модель (`providerInstanceId`, `model`) и
|
||||
проверь, что она есть в списке. Ключ глубины у провайдеров разный —
|
||||
смотри `options` модели: у Codex это `reasoningEffort`, у Claude —
|
||||
`effort`.
|
||||
|
||||
## Запуск
|
||||
|
||||
Собери `prompt.md` так же, как для командной строки, и передай его путь:
|
||||
|
||||
```json
|
||||
{
|
||||
"task": "Прочитай /tmp/…/prompt.md и выполни.",
|
||||
"target": {
|
||||
"providerInstanceId": "codex",
|
||||
"model": "<model>",
|
||||
"options": { "reasoningEffort": "high" }
|
||||
},
|
||||
"role": "review",
|
||||
"mode": "async",
|
||||
"title": "cross-review: <что проверяем>",
|
||||
"clientRequestId": "<уникальный id этого раунда>"
|
||||
}
|
||||
```
|
||||
|
||||
- **`isolation` не задавай** (по умолчанию — общий checkout). Отдельный
|
||||
worktree строится от последнего коммита, и незакоммиченные правки
|
||||
ревьюер не увидит.
|
||||
- **`runtimeMode` не задавай.** Режимы с подтверждением остановят ревьюера
|
||||
на первом же действии и будут ждать человека в его разговоре. Ограничения
|
||||
задаёт мандат в поручении.
|
||||
- После запуска заверши ход: уведомление о завершении придёт само.
|
||||
`task_status` нужен, только если результат требуется посреди хода.
|
||||
- Итоговое сообщение ревьюера приходит в `summary`; полный отчёт — в файле
|
||||
`REPORT`.
|
||||
|
||||
## Следующие круги
|
||||
|
||||
Следующие круги — узкую перепроверку и полный проход по новой версии —
|
||||
отправляй тому же ревьюеру, в его дочерний разговор, когда предыдущая
|
||||
задача уже завершилась. Это `t3_thread_send`:
|
||||
|
||||
```json
|
||||
{
|
||||
"threadId": "<childThreadId из ответа delegate_task>",
|
||||
"message": "Прочитай /tmp/…/recheck-prompt.md и выполни.",
|
||||
"mode": "auto",
|
||||
"clientRequestId": "<уникальный id этого круга>"
|
||||
}
|
||||
```
|
||||
|
||||
- В дочернем разговоре появляется новая задача со своим `taskId`; по
|
||||
завершении она будит тебя так же, как исходная. Ребёнок помнит свои
|
||||
прошлые ходы (проверено 2026-10-17 на Codex).
|
||||
- Модель, глубина и режим остаются от исходной задачи, поменять их нельзя.
|
||||
- `childThreadId` запиши в реестр сразу после запуска ревью: разговор
|
||||
хранит T3, но его id нужен тебе.
|
||||
- Что положить в поручение круга — в разделе «Следующие круги» SKILL.md.
|
||||
|
||||
Свежий ревьюер — новый `delegate_task` с новым `clientRequestId`. Когда он
|
||||
нужен — там же, в SKILL.md. Если продолжить разговор не удалось, в
|
||||
поручение свежей задачи положи пути к исходному `prompt.md`, отчёту
|
||||
ревьюера и своим резолюциям.
|
||||
|
||||
Системные инструкции T3 и описание `t3_thread_send` говорят об этом
|
||||
по-разному. Первые велят на каждый круг ревью заводить новый
|
||||
`delegate_task` и не продолжать делегированное ревью через
|
||||
`t3_thread_send`. Второе отдаёт `delegate_task` независимым кругам, а
|
||||
продолжение, которому нужен разговор того же ребёнка, отправляет в
|
||||
`childThreadId`. Этот скилл намеренно выбирает продолжение: круги ревью
|
||||
идут по уже набранному контексту ревьюера, а это дешевле и глубже, чем
|
||||
набирать его заново.
|
||||
|
||||
## Затраты
|
||||
|
||||
T3 сообщает только время выполнения. Токены и стоимость видны в выводе
|
||||
командной строки — см. адаптеры Codex и Claude.
|
||||
Reference in new issue
Block a user