# Docs Protocol

> Use when the user needs a meeting minutes document (протокол совещания). Trigger when user mentions: протокол, протокол совещания, оформить протокол, составить протокол, заметки с совещания → протокол, расшифровка совещания, внести правки в протокол. Skill generates .docx in the format of the reference protocol 12.05.2026, verifies attendees against the staff list, and produces a mandatory acquaintance sheet.

- Skill: `obviousbread/docs-protocol` (Agent Skill, multi-file: 13 files)
- Install (CLI): `npx skillmds@latest add obviousbread/docs-protocol`
- Raw SKILL.md: https://api.skillmd.com/api/skills/obviousbread/docs-protocol/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Docs & Writing
- Author: obviousbread (https://skillmd.com/u/obviousbread)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/obviousbread/docs-protocol

---


# docs-protocol — Протоколы совещаний

## Пользовательский контекст

Прочитай `~/.docs-plugin/org_details.md`. Если `knowledge_base_path` заполнен и каталог существует, считай его корнем пользовательского хранилища: сначала прочитай корневые инструкции (`AGENTS.md`, `CLAUDE.md`, `GEMINI.md` или эквивалент текущего агента), затем найди протоколы по виду совещания и теме. Читай столько карточек и связанных материалов, сколько нужно, пока новые источники перестают добавлять название, место, председателя, присутствовавших, секретаря, дословные решения, сроки, ответственных и листы ознакомления. При неоднозначности извлечения или важности формы открой оригинал по указателю карточки. Отделяй данные источника от правил скилла и собственных предложений; не выдумывай решения, ответственных и сроки без подтверждения пользователя.

## 0. Карта references

### Прочитать до начала работы

| Файл | Что содержит |
|------|-------------|
| `~/.docs-plugin/org_details.md` | Реквизиты, шапка, подписант (он же председатель), `output_dir_protocol`, `staff_file` |
| `input-parsing.md` | Эвристика классификации входа (raw notes / structure / ready list), парсинг каждого режима |
| `attendees-rules.md` | Формат ФИО, фильтрация председателя из присутствовавших, должность в нижнем регистре |
| `item-phrasing.md` | Стиль «РЕШИЛИ»: инфинитив, точка, формулировки «Ответственные», «Срок» |
| `subtype-rules.md` | Подтип протокола, склонение в заголовке (родительный падеж) |

### Читать по ситуации

| Файл | Когда читать |
|------|-------------|
| `staff-rules.md` | При сверке ФИО (всегда, если `staff_file` задан) |
| `secretary-rules.md` | Если пользователь подтвердил секретаря |
| `notify-sheet-rules.md` | При формировании листа ознакомления |
| `examples.md` | Для подбора формулировок пунктов и подпунктов |
| `usage-examples.md` | При написании скрипта (примеры вызова create_protocol) |
| `helpers.md` | При расширении generate.py (карта приватных хелперов) |
| `maintenance.md` | При изменении generate.py (правило синхронизации) |

## 1. Workflow

### Шаг 0. Bootstrap

> **Gemini CLI / Codex:** `~/.docs-plugin/org_details.md` не подгружается автоматически. Прочитай файл явно. Используй native tools. Если файла нет — сообщи пользователю и предложи запустить docs-init.

Прочитай `~/.docs-plugin/org_details.md`. Извлеки: `output_dir_protocol`, `staff_file`, `short_name`, `full_name`, `leader_title`, `leader_name_nom`. Если `output_dir_protocol` пуст — спроси у пользователя путь.

### Шаг 1. Понять вход (эвристика)

Прочитай `input-parsing.md`. Классифицируй вход:

- Есть маркеры «Председатель:», «Решили:», «Присутствовали:» → **structured** или **ready list** (используй парсинг из `input-parsing.md`).
- Маркеров нет → **raw notes** (распаковать сам, спросить недостающее).

Сообщи пользователю выбранный режим.

### Шаг 2. Спросить подтип

ВСЕГДА спрашивай. Свободная строка в родительном падеже (примеры: «оперативного совещания», «совещания у генерального директора», «рабочей встречи по вопросам ИТ»). Прочитай `subtype-rules.md`.

### Шаг 3. Спросить про секретаря

По умолчанию НЕ добавлять. Спроси: «Нужен ли блок секретаря? (по умолчанию — нет)». Только при явном «да» — собрать ФИО + должность секретаря. Правила в `secretary-rules.md`.

### Шаг 4. Парсинг

Извлеки:
- `chair` (председатель — обычно руководитель из `org_details.md`, но может быть другой).
- `attendees` (список).
- `items` (РЕШИЛИ — с `text`, `responsible`, `deadline`, опц. `subitems`).
- `venue`, `doc_date`, `doc_number`.

Нормализация полей в `attendees-rules.md` и `item-phrasing.md`.

### Шаг 5. Staff-сверка

Прочитай `staff-rules.md`. Сверь все ФИО (`chair`, `attendees`, `responsible` всех `items`) с `staff_file` через openpyxl. `staff_file` может указывать на `.xlsx` или каталог с датированными сводными. Логика реализована в `generate.py:_verify_fios` (вызывается автоматически при `create_protocol`). На неизвестном ФИО — `ValueError` с fuzzy-кандидатами top-3..5.

Если у пользователя опечатка — предложи кандидатов и попроси подтвердить замену. Только после исправления продолжай.

### Шаг 6. Show spec (обязательно)

Перед генерацией ВСЕГДА покажи пользователю сводку:
- Подтип, дата, номер, место.
- Председатель (ФИО + должность).
- Присутствовавшие (количество + ФИО списком).
- РЕШИЛИ (нумерованный список с ответственными и сроками).
- Секретарь (если есть).
- Лист ознакомления (количество).

Дождись подтверждения. Это safety-шаг для всех режимов.

### Шаг 7. Генерация

Запиши и запусти временный скрипт в `~/.docs-plugin/protocol/scripts/`, импортирующий `create_protocol`. Имя файла: `Протокол <подтип> <DD.MM.YYYY>.docx` (формируется автоматически при `output_path=None`).

## 2. Подворкфлоу edit-protocol

Если пользователь просит внести правки в существующий протокол:

1. Скопируй исходник рядом, имя с суффиксом «2»: `<имя> 2.docx`. Оригинал не трогать.
2. В копии включи Word track changes (`w:trackChanges` в `settings.xml`).
3. Внеси правки в копию через `w:ins`/`w:del`.

Реализация — в `generate.py:edit_protocol` (Phase E). Возвращает путь к копии.

