srekit
Скаффолдит SRE-артефакты через srekit и помогает заполнить секции по обсуждавшимся в сессии фактам.
Постмортем — отдельный навык srekit-postmortem, сюда не относится.
Когда использовать
- Пользователь хочет один из документов: investigation log, RFC, SLO, EBP, capacity plan, retro, on-call report, changelog, LICENSE.
- Пользователь явно упоминает
srekit (но просит не постмортем).
- В обсуждении есть факты, которые логично оформить как один из этих артефактов (расследование →
task, решение → rfc, договорённость о таргетах → slo). Повторяющийся фикс → отдельный навык srekit-runbook, не сюда.
Не использовать:
- Постмортем → навык
srekit-postmortem.
- Произвольный markdown, который под
srekit не подгоняется. Если шаблон не подходит — лучше написать руками, чем мучить шаблон.
Что делает srekit
Локальный CLI, генерирующий двуязычный (Русский (English)) markdown-каркас с YAML frontmatter из встроенных или пользовательских шаблонов. Содержимое секций срекит не пишет — он только готовит структуру. Наполнение — задача этого навыка.
Полный справочник по флагам каждой команды — в references/commands.md. Здесь — только то, что нужно для рабочего процесса.
Общие флаги для всех генераторов
| Флаг |
Назначение |
--out FILE |
записать в файл |
--stdout |
напечатать в stdout |
--force |
перезаписать существующий файл |
--dry-run |
напечатать что было бы записано, ничего не трогая |
--json |
выдать template-data как JSON (camelCase ключи) вместо рендера — для пайплайнов и интроспекции |
--templates-dir DIR |
использовать пользовательскую директорию шаблонов (на одну команду; иначе берётся из конфига) |
--config FILE |
альтернативный путь к конфигу |
-q, --quiet |
без informational сообщений |
--template FILE (one-shot подмена шаблона) есть только у license — у всех остальных генераторов был удалён в v0.22.0. Если пользователь просит «использовать наш шаблон» — это --templates-dir или templates init/upgrade, не --template.
Рабочий процесс
1. Убедись, что srekit доступен
srekit --version
Если команды нет — сообщи, что нужно поставить (brew install jtprogru/tap/srekit или go install github.com/jtprogru/srekit@latest), и остановись.
2. Выбери команду по интенту
| Пользователь сказал… |
Команда |
| «расследую/investigation/баг», «тейл-латенси на api-gw, нужен лог расследования» |
task (alias sretask) |
| «принимаем решение», «обсуждаем архитектуру», «нужен RFC/ADR» |
rfc |
| «runbook на алерт X», «дежурный должен знать что делать когда…» |
отдельный навык srekit-runbook (не этот) |
| «зафиксируем SLO/SLI», «таргет доступности», «latency objective» |
slo |
| «что делаем при сгорании бюджета», «error budget policy» |
ebp |
| «план ёмкости на год», «capacity planning», «прогноз нагрузки» |
capacity |
| «ретро спринта», «retrospective» |
retro |
| «недельный on-call отчёт», «summary дежурства» |
oncall-report (alias oncall) |
| «CHANGELOG в репо», «keep a changelog» |
changelog |
| «LICENSE для проекта», «MIT/Apache/WTFPL» |
license (alias lic) |
Если интент «хочу задокументировать инцидент» — это всегда postmortem (отдельный навык srekit-postmortem). Команды для live-дока в srekit больше нет — для координации во время инцидента используется IM-инструмент (Slack/PagerDuty), не markdown-файл.
3. Собери обязательные поля
Минимум на команду:
| Команда |
Обязательно |
Дефолты, которые часто стоит подтвердить |
task |
-T/--title |
--path (куда класть; см. шаг 4) |
rfc |
-T/--title |
--status (default proposed), --author/--email |
slo |
--service |
--target (99.9%), --latency (300ms), --window (30d) |
ebp |
--service |
— |
capacity |
--service |
--horizon (1y) |
retro |
--team |
--sprint (today by default; обычно YYYY-WNN или дата) |
oncall-report |
--team |
--start, --end (дефолт — текущая Mon–Sun), --author/--email |
changelog |
— |
--version (0.1.0), --repo (из git remote) |
license |
— |
--type (default wtfpl; обычно нужен mit или apache2), --author/--email, --year |
Стратегия сбора:
- Что прозвучало в диалоге — подставь и подтверди одним сообщением со всеми полями сразу.
- Что не прозвучало — спроси одной репликой с 2-4 пунктами, не плоди отдельные вопросы.
- Не выдумывай timestamps, severity, имена сервисов. Если пользователь сказал «вчера» — переспроси дату/время.
--author/--email (где есть): порядок резолва внутри srekit — флаг → env (SREKIT_AUTHOR, SREKIT_EMAIL) → конфиг → git config user.name/email. Обычно достаточно ничего не передавать, и srekit сам подтянет из git config. Передавай явно, только если контекст диктует другое значение.
4. Определи путь к файлу
Правила в порядке приоритета:
- Конвенция репозитория, если она видна. Поднимайся по дереву от CWD и ищи характерные каталоги:
docs/rfc/, docs/rfcs/, docs/adr/, docs/decisions/ → rfc
docs/slo/, slo/ → slo
docs/oncall/, oncall/ → oncall-report
investigations/, tasks/ → task
retros/, docs/retros/ → retro
- корень репо →
CHANGELOG.md, LICENSE
- Срекит-дефолт, если конвенции нет. Дефолты по командам:
task → investigation-<slug>.md (директория из --path, по умолчанию CWD)
rfc → rfc-<slug>.md
slo → slo-<service>.md
ebp → ebp-<service>.md
capacity → capacity-<service>.md
retro → retro-<team>-<sprint>.md
oncall-report → oncall-<team>-<start>.md
changelog → CHANGELOG.md (в CWD)
license → stdout (если без --out)
Подводный камень с кириллицей в слаге. Сладжификатор srekit плохо работает с кириллическими title — например, -T "Зависание создания дисков" может дать почти пустой slug. Если title кириллический и ты полагаешься на дефолтное имя — лучше передай --out явно с латинским slug'ом. Для команд с <service>/<team> это меньше актуально, потому что service/team-имена обычно латиница.
Дата в имени файла, если по смыслу нужна — добавляй сам через --out. Срекит сам её в имя не вставляет (кроме oncall-report, где она в дефолте уже есть).
Если файл уже существует — спроси перед --force. Возможно, пользователь уже что-то начал.
5. Запусти srekit <cmd>
Один раз — финальной командой, не «попробуем dry-run, потом ещё раз». Покажи команду пользователю текстом перед запуском, чтобы он мог скорректировать поля.
Примеры (минимально-полные вызовы — флаги пропущены, если у них хороший дефолт):
srekit task -T "Tail latency on api-gw" --path ./investigations
srekit rfc -T "Adopt OpenTelemetry" --status proposed --out docs/rfc/rfc-otel.md
srekit slo --service api-gw --target 99.95% --window 30d --latency 200ms --out docs/slo/slo-api-gw.md
srekit ebp --service api-gw --out docs/slo/ebp-api-gw.md
srekit capacity --service api-gw --horizon 1y --out docs/capacity/capacity-api-gw.md
srekit retro --team platform --sprint 2026-W23 --out retros/retro-platform-2026-W23.md
srekit oncall-report --team platform --start 2026-06-01 --end 2026-06-07 --out docs/oncall/oncall-platform-2026-06-01.md
srekit changelog --out CHANGELOG.md
srekit license --type mit --out LICENSE
6. Наполни секции (если уместно)
После скаффолда сразу прочитай созданный файл и предложи наполнение — но только тех секций, по которым в сессии есть факты. Не выдумывай. По секциям, для которых данных нет, ставь GAP-маркер вида <!-- GAP: нужно уточнить у X -->.
Тип наполнения зависит от артефакта:
task — Context / Hypothesis / Evidence / Findings / Action items. Из сессии хорошо ложатся Context (что исследуем и почему) и Evidence (что видим в логах/коммитах). Hypothesis — формулируй явно, как гипотезу, не как факт.
rfc — Context / Decision / Alternatives / Consequences. Альтернативы — реально обсуждавшиеся, со ссылками на сообщения, если уместно. Не придумывай «вторую и третью альтернативу» для красоты.
slo — таргеты, окно, бюджет, SLI-определения. Если SLI не обсуждали — GAP, не выдумывай PromQL.
ebp — пороги (Yellow/Orange/Red), действия, исключения, эскалация. Если в команде есть существующая практика — отрази; нет — оставь шаблонные пороги и пометь GAP.
capacity — baseline, growth assumptions, прогноз, scale triggers, risks. Цифры — только реальные из обсуждения или из систем мониторинга. Без данных — GAP.
retro — Went well / What didn't / Action items. Тут наполнение в основном с команды на ретро, не у тебя; обычно достаточно скаффолда.
oncall-report — pages, incidents, follow-ups. Если в сессии обсуждались конкретные алерты/инциденты недели — подтяни их.
changelog — только структура; конкретные записи пользователь добавляет сам или через release-process. Не сочиняй фейковые [0.1.0] записи.
license — наполнение не нужно, это финальный документ.
Общие правила наполнения (всех артефактов):
- Никаких личных имён. Пиши роли:
oncall, SRE Lead, Platform team, Author. Имена выдают конкретных людей и токсичны в публичных артефактах.
- Blameless для postmortem-смежных артефактов: фокус на системе и процессе, не на действиях людей.
- GAP-маркеры вместо галлюцинаций. Лучше
<!-- GAP: уточнить причину rollback'а у oncall -->, чем выдуманная фраза.
- Timestamps в UTC в теле артефактов (Timeline, Update log). Если в сессии MSK — конвертируй явно.
- Технические идентификаторы (SLO, SLI, PromQL, SEV-N, UTC) — английскими, как в шаблоне.
7. JSON / валидация (опционально)
Все генераторы поддерживают --json — выдаст структуру template-data, которую увидит шаблон (camelCase ключи). Полезно, если пользователь хочет встроить вызов в пайплайн:
srekit slo --service api-gw --target 99.95% --json | jq '.target'
--from FILE / --schema / --validate есть только у postmortem — для round-trip workflow (выдать JSON → отредактировать → отрендерить markdown обратно). У остальных генераторов этого нет, не предлагай.
Конфиг и пользовательские шаблоны
Если в репозитории есть templates_dir (конфиг ~/.config/srekit/config.yaml или env SREKIT_TEMPLATES_DIR) — srekit уже подтянет кастомные шаблоны автоматически. Передавать --templates-dir руками нужно только для one-shot подмены.
Если пользователь хочет завести командные шаблоны под git — это srekit templates init, дальше templates upgrade для синка с embedded-обновлениями. Подробно — srekit templates --help. В обычном flow генерации это не нужно — упоминай только если пользователь явно спросил про кастомизацию.
Антипаттерны
- Не запускать
srekit от лица пользователя в директорию, которой нет (docs/rfc/, runbooks/, investigations/ и т.п.) — сначала mkdir -p. Срекит сам директорию не создаёт.
- Не передавать
--template ни одной команде, кроме license — флаг убран в v0.22.0.
- Не вызывать
--force не спросив, если файл уже есть. В половине случаев у пользователя там черновик.
- Не вызывать срекит дважды (один раз
--dry-run, второй настоящий). Один вызов сразу финальный.
- Не наполнять секции выдуманными деталями. Лучше пустая секция с GAP, чем правдоподобная ложь — в инцидентных артефактах это опасно.
- Не делать постмортем этим навыком. Это
srekit-postmortem.
1---2name: srekit-23description: Скаффолдит SRE-артефакты через CLI `srekit` — investigation log, RFC/ADR, SLO, error budget policy, capacity plan, retro, on-call report, changelog, LICENSE — и наполняет их из контекста сессии без галлюцинаций, с GAP-маркерами. Срабатывай на «сделать/оформить/завести» такой документ, даже без слова srekit. Постмортем — `srekit-postmortem`, runbook — `srekit-runbook`; команды `incident` больше нет.4---56# srekit78Скаффолдит SRE-артефакты через `srekit` и помогает заполнить секции по обсуждавшимся в сессии фактам.910Постмортем — отдельный навык `srekit-postmortem`, сюда не относится.1112## Когда использовать1314- Пользователь хочет один из документов: investigation log, RFC, SLO, EBP, capacity plan, retro, on-call report, changelog, LICENSE.15- Пользователь явно упоминает `srekit` (но просит не постмортем).16- В обсуждении есть факты, которые логично оформить как один из этих артефактов (расследование → `task`, решение → `rfc`, договорённость о таргетах → `slo`). Повторяющийся фикс → отдельный навык `srekit-runbook`, не сюда.1718Не использовать:19- **Постмортем** → навык `srekit-postmortem`.20- Произвольный markdown, который под `srekit` не подгоняется. Если шаблон не подходит — лучше написать руками, чем мучить шаблон.2122## Что делает `srekit`2324Локальный CLI, генерирующий двуязычный (`Русский (English)`) markdown-каркас с YAML frontmatter из встроенных или пользовательских шаблонов. **Содержимое секций срекит не пишет — он только готовит структуру.** Наполнение — задача этого навыка.2526Полный справочник по флагам каждой команды — в [`references/commands.md`](references/commands.md). Здесь — только то, что нужно для рабочего процесса.2728### Общие флаги для всех генераторов2930| Флаг | Назначение |31| --- | --- |32| `--out FILE` | записать в файл |33| `--stdout` | напечатать в stdout |34| `--force` | перезаписать существующий файл |35| `--dry-run` | напечатать что было бы записано, ничего не трогая |36| `--json` | выдать template-data как JSON (camelCase ключи) вместо рендера — для пайплайнов и интроспекции |37| `--templates-dir DIR` | использовать пользовательскую директорию шаблонов (на одну команду; иначе берётся из конфига) |38| `--config FILE` | альтернативный путь к конфигу |39| `-q, --quiet` | без informational сообщений |4041`--template FILE` (one-shot подмена шаблона) **есть только у `license`** — у всех остальных генераторов был удалён в v0.22.0. Если пользователь просит «использовать наш шаблон» — это `--templates-dir` или `templates init/upgrade`, не `--template`.4243## Рабочий процесс4445### 1. Убедись, что `srekit` доступен4647```bash48srekit --version49```5051Если команды нет — сообщи, что нужно поставить (`brew install jtprogru/tap/srekit` или `go install github.com/jtprogru/srekit@latest`), и остановись.5253### 2. Выбери команду по интенту5455| Пользователь сказал… | Команда |56| --- | --- |57| «расследую/investigation/баг», «тейл-латенси на api-gw, нужен лог расследования» | `task` (alias `sretask`) |58| «принимаем решение», «обсуждаем архитектуру», «нужен RFC/ADR» | `rfc` |59| «runbook на алерт X», «дежурный должен знать что делать когда…» | **отдельный навык `srekit-runbook`** (не этот) |60| «зафиксируем SLO/SLI», «таргет доступности», «latency objective» | `slo` |61| «что делаем при сгорании бюджета», «error budget policy» | `ebp` |62| «план ёмкости на год», «capacity planning», «прогноз нагрузки» | `capacity` |63| «ретро спринта», «retrospective» | `retro` |64| «недельный on-call отчёт», «summary дежурства» | `oncall-report` (alias `oncall`) |65| «CHANGELOG в репо», «keep a changelog» | `changelog` |66| «LICENSE для проекта», «MIT/Apache/WTFPL» | `license` (alias `lic`) |6768Если интент «хочу задокументировать инцидент» — это всегда `postmortem` (отдельный навык `srekit-postmortem`). Команды для live-дока в `srekit` больше нет — для координации во время инцидента используется IM-инструмент (Slack/PagerDuty), не markdown-файл.6970### 3. Собери обязательные поля7172Минимум на команду:7374| Команда | Обязательно | Дефолты, которые часто стоит подтвердить |75| --- | --- | --- |76| `task` | `-T/--title` | `--path` (куда класть; см. шаг 4) |77| `rfc` | `-T/--title` | `--status` (default `proposed`), `--author/--email` |78| `slo` | `--service` | `--target` (99.9%), `--latency` (300ms), `--window` (30d) |79| `ebp` | `--service` | — |80| `capacity` | `--service` | `--horizon` (1y) |81| `retro` | `--team` | `--sprint` (today by default; обычно `YYYY-WNN` или дата) |82| `oncall-report` | `--team` | `--start`, `--end` (дефолт — текущая Mon–Sun), `--author/--email` |83| `changelog` | — | `--version` (0.1.0), `--repo` (из git remote) |84| `license` | — | `--type` (default `wtfpl`; обычно нужен `mit` или `apache2`), `--author/--email`, `--year` |8586Стратегия сбора:87- Что прозвучало в диалоге — подставь и подтверди одним сообщением со всеми полями сразу.88- Что не прозвучало — спроси одной репликой с 2-4 пунктами, не плоди отдельные вопросы.89- Не выдумывай timestamps, severity, имена сервисов. Если пользователь сказал «вчера» — переспроси дату/время.9091`--author`/`--email` (где есть): порядок резолва внутри `srekit` — флаг → env (`SREKIT_AUTHOR`, `SREKIT_EMAIL`) → конфиг → `git config user.name/email`. Обычно достаточно ничего не передавать, и `srekit` сам подтянет из git config. Передавай явно, только если контекст диктует другое значение.9293### 4. Определи путь к файлу9495Правила в порядке приоритета:96971. **Конвенция репозитория, если она видна.** Поднимайся по дереву от CWD и ищи характерные каталоги:98 - `docs/rfc/`, `docs/rfcs/`, `docs/adr/`, `docs/decisions/` → `rfc`99 - `docs/slo/`, `slo/` → `slo`100 - `docs/oncall/`, `oncall/` → `oncall-report`101 - `investigations/`, `tasks/` → `task`102 - `retros/`, `docs/retros/` → `retro`103 - корень репо → `CHANGELOG.md`, `LICENSE`1042. **Срекит-дефолт**, если конвенции нет. Дефолты по командам:105 - `task` → `investigation-<slug>.md` (директория из `--path`, по умолчанию CWD)106 - `rfc` → `rfc-<slug>.md`107 - `slo` → `slo-<service>.md`108 - `ebp` → `ebp-<service>.md`109 - `capacity` → `capacity-<service>.md`110 - `retro` → `retro-<team>-<sprint>.md`111 - `oncall-report` → `oncall-<team>-<start>.md`112 - `changelog` → `CHANGELOG.md` (в CWD)113 - `license` → stdout (если без `--out`)114115**Подводный камень с кириллицей в слаге.** Сладжификатор `srekit` плохо работает с кириллическими title — например, `-T "Зависание создания дисков"` может дать почти пустой slug. Если title кириллический и ты полагаешься на дефолтное имя — лучше передай `--out` явно с латинским slug'ом. Для команд с `<service>`/`<team>` это меньше актуально, потому что service/team-имена обычно латиница.116117**Дата в имени файла, если по смыслу нужна** — добавляй сам через `--out`. Срекит сам её в имя не вставляет (кроме `oncall-report`, где она в дефолте уже есть).118119**Если файл уже существует** — спроси перед `--force`. Возможно, пользователь уже что-то начал.120121### 5. Запусти `srekit <cmd>`122123Один раз — финальной командой, не «попробуем dry-run, потом ещё раз». Покажи команду пользователю текстом перед запуском, чтобы он мог скорректировать поля.124125Примеры (минимально-полные вызовы — флаги пропущены, если у них хороший дефолт):126127```bash128srekit task -T "Tail latency on api-gw" --path ./investigations129srekit rfc -T "Adopt OpenTelemetry" --status proposed --out docs/rfc/rfc-otel.md130srekit slo --service api-gw --target 99.95% --window 30d --latency 200ms --out docs/slo/slo-api-gw.md131srekit ebp --service api-gw --out docs/slo/ebp-api-gw.md132srekit capacity --service api-gw --horizon 1y --out docs/capacity/capacity-api-gw.md133srekit retro --team platform --sprint 2026-W23 --out retros/retro-platform-2026-W23.md134srekit oncall-report --team platform --start 2026-06-01 --end 2026-06-07 --out docs/oncall/oncall-platform-2026-06-01.md135srekit changelog --out CHANGELOG.md136srekit license --type mit --out LICENSE137```138139### 6. Наполни секции (если уместно)140141После скаффолда **сразу прочитай созданный файл и предложи наполнение** — но **только тех секций, по которым в сессии есть факты**. Не выдумывай. По секциям, для которых данных нет, ставь GAP-маркер вида `<!-- GAP: нужно уточнить у X -->`.142143Тип наполнения зависит от артефакта:144145- **`task`** — Context / Hypothesis / Evidence / Findings / Action items. Из сессии хорошо ложатся Context (что исследуем и почему) и Evidence (что видим в логах/коммитах). Hypothesis — формулируй явно, как гипотезу, не как факт.146- **`rfc`** — Context / Decision / Alternatives / Consequences. Альтернативы — реально обсуждавшиеся, со ссылками на сообщения, если уместно. Не придумывай «вторую и третью альтернативу» для красоты.147- **`slo`** — таргеты, окно, бюджет, SLI-определения. Если SLI не обсуждали — GAP, не выдумывай PromQL.148- **`ebp`** — пороги (Yellow/Orange/Red), действия, исключения, эскалация. Если в команде есть существующая практика — отрази; нет — оставь шаблонные пороги и пометь GAP.149- **`capacity`** — baseline, growth assumptions, прогноз, scale triggers, risks. Цифры — только реальные из обсуждения или из систем мониторинга. Без данных — GAP.150- **`retro`** — Went well / What didn't / Action items. Тут наполнение в основном с команды на ретро, не у тебя; обычно достаточно скаффолда.151- **`oncall-report`** — pages, incidents, follow-ups. Если в сессии обсуждались конкретные алерты/инциденты недели — подтяни их.152- **`changelog`** — только структура; конкретные записи пользователь добавляет сам или через release-process. Не сочиняй фейковые `[0.1.0]` записи.153- **`license`** — наполнение не нужно, это финальный документ.154155Общие правила наполнения (всех артефактов):156- **Никаких личных имён.** Пиши роли: `oncall`, `SRE Lead`, `Platform team`, `Author`. Имена выдают конкретных людей и токсичны в публичных артефактах.157- **Blameless для postmortem-смежных** артефактов: фокус на системе и процессе, не на действиях людей.158- **GAP-маркеры вместо галлюцинаций.** Лучше `<!-- GAP: уточнить причину rollback'а у oncall -->`, чем выдуманная фраза.159- **Timestamps в UTC** в теле артефактов (Timeline, Update log). Если в сессии MSK — конвертируй явно.160- **Технические идентификаторы** (SLO, SLI, PromQL, SEV-N, UTC) — английскими, как в шаблоне.161162### 7. JSON / валидация (опционально)163164Все генераторы поддерживают `--json` — выдаст структуру template-data, которую увидит шаблон (camelCase ключи). Полезно, если пользователь хочет встроить вызов в пайплайн:165166```bash167srekit slo --service api-gw --target 99.95% --json | jq '.target'168```169170**`--from FILE` / `--schema` / `--validate` есть только у `postmortem`** — для round-trip workflow (выдать JSON → отредактировать → отрендерить markdown обратно). У остальных генераторов этого нет, не предлагай.171172## Конфиг и пользовательские шаблоны173174Если в репозитории есть `templates_dir` (конфиг `~/.config/srekit/config.yaml` или env `SREKIT_TEMPLATES_DIR`) — `srekit` уже подтянет кастомные шаблоны автоматически. Передавать `--templates-dir` руками нужно только для one-shot подмены.175176Если пользователь хочет завести командные шаблоны под git — это `srekit templates init`, дальше `templates upgrade` для синка с embedded-обновлениями. Подробно — `srekit templates --help`. В обычном flow генерации это не нужно — упоминай только если пользователь явно спросил про кастомизацию.177178## Антипаттерны179180- **Не запускать `srekit` от лица пользователя в директорию, которой нет** (`docs/rfc/`, `runbooks/`, `investigations/` и т.п.) — сначала `mkdir -p`. Срекит сам директорию не создаёт.181- **Не передавать `--template`** ни одной команде, кроме `license` — флаг убран в v0.22.0.182- **Не вызывать `--force`** не спросив, если файл уже есть. В половине случаев у пользователя там черновик.183- **Не вызывать срекит дважды** (один раз `--dry-run`, второй настоящий). Один вызов сразу финальный.184- **Не наполнять секции выдуманными деталями.** Лучше пустая секция с GAP, чем правдоподобная ложь — в инцидентных артефактах это опасно.185- **Не делать постмортем** этим навыком. Это `srekit-postmortem`.