# Book Post

> Главы нон-фикшн книги: source-anchored writing, case-driven HBR-структура, конвейер из 9 стадий (writer → факт-чек → голос → корректура → редактура). Триггеры: «напиши главу», «пролог книги», «интерлюдия», «продолжаем книгу».

- Skill: `jhamidun/book-post` (Agent Skill, multi-file: 12 files)
- Install (CLI): `npx skillmds@latest add jhamidun/book-post`
- Raw SKILL.md: https://api.skillmd.com/api/skills/jhamidun/book-post/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: JHamidun (https://skillmd.com/u/jhamidun)
- Updated: 2026-09-22
- Page: https://skillmd.com/skills/jhamidun/book-post

---


# Book Post Writer — глава нон-фикшн книги

Пишет главы книги так, чтобы **ни одно утверждение не появилось «из головы модели»**:
каждый факт, цифра, история и цитата привязаны к файлу-источнику.

Голос автора берётся из `~/.claude/voice-sample.md`, сведения об авторе — из
`~/.claude/author-profile.md`. Шаблоны обоих — в `~/.claude/templates/`.
Файлов нет — скажи об этом прямо и попроси заполнить; не выдумывай автора сам.

## Что понадобится

| Нужно | Обязательно? | Где взять |
|---|---|---|
| Каталог книги (структура ниже) | да | создаёшь сам, путь в `BOOK_ROOT` |
| `~/.claude/voice-sample.md` | да | шаблон `~/.claude/templates/voice-sample.md` |
| `~/.claude/author-profile.md` | да | шаблон `~/.claude/templates/author-profile.md` |
| `references/privacy-decisions.md` | да, до первой главы | шаблон лежит рядом — заполняешь под свою книгу |
| Claude CLI (подписка) | для writer/fact-checker | уже есть, если читаешь это |
| Codex CLI (подписка ChatGPT) | нет, опционально | `npm i -g @openai/codex && codex login` — нужен только чтобы дешёвые проходы (голос, корректура) не съедали лимит Claude. Без него всё работает через Claude: `--provider claude` |

Скрипты не требуют `npm install` — только Node stdlib.

## 🛑 ПРАВИЛО №0 — НИКАКОЙ ОТСЕБЯТИНЫ

Родилось из сорванной книги: модель выдумала персонажа с именем и городом, несуществующее
исследование «MIT 2024» и личные ситуации автора — книгу пришлось бросить. Подтвердилось на
конвейере: субагенты на задачах «добавь две стороны медали» и «добавь сенсорные детали»
массово изобретают конкретные числа («320 часов on-prem», «18 миллионов сверху») и сцены
(«ладони пахли холодным чаем»). Каждое такое добавление проверяй руками против `ANCHORS.md`.

1. **Ничего «из головы AI».** Только из: `chapters/<slug>/ANCHORS.md` (Tier 1: личные истории
   автора), `SOURCES.md` (Tier 2: проверенные открытые источники), `MATERIALS.md` + `extracted/`
   (Tier 3: ранее опубликованные материалы автора).
2. **Зона запрета (не выдумывать никогда):** быт и день автора; детство, родители, семья
   (только из `ANCHORS.md`); конкретные цифры из практики автора без подтверждения; имена
   клиентов и коллег; персонажи-архетипы, которых нет в материалах; синтетические сенсорные
   детали для типовых сцен.
3. **Ни одной цифры без источника** — статистика с атрибуцией: «По данным McKinsey State of AI 2026, …».
4. **Ни одной цитаты, которую не произносил реальный человек.** Каждое лицо цитируется максимум 1 раз в книге.
5. **Ни одного куска кода** — книга не учебник, технические детали описанием.
6. **Промпты субагентов обязаны явно запрещать фабрикацию:** «НЕ добавляй числа из практики
   автора, которых нет в ANCHORS/SOURCES — только качественные формулировки», «НЕ выдумывай
   сенсорные детали для сцен вне ANCHORS.md», «при сомнении — качественное описание, не число».

## 🛑 ПРАВИЛО №0.5 — БЕЗОПАСНОСТЬ ЛИЧНЫХ ДАННЫХ

Перед сборкой каждой главы прогоняй файл главы через детектор утечек:

```bash
python ~/.claude/skills/leak-scan/scripts/leak_scan.py "$BOOK_ROOT/chapters/<slug>"
```

Ищет ID мессенджеров, почты, ключи, IP серверов, локальные пути, а по твоему
`~/.claude/leak-scan-identity.json` — ещё и твои личные имена и домены (см. навык `leak-scan`).
Найдено → BLOCK до явного решения автора. Пустой словарь идентичности — не «чисто»,
а «не проверяли»: заведи его до первой главы.

## 🛑 ПРАВИЛО №0.6 — PRIVACY DECISION TREE

**Это решение автора, а не модели.** До первой главы заполни `references/privacy-decisions.md`
(шаблон лежит рядом): кого можно называть прямо, кого анонимизировать, какие цифры публичны,
а какие нет, насколько подробно раскрывается место жительства.

Каждая глава сверяется с этим файлом. Файл пустой → писать личные истории нельзя:
спроси автора, не додумывай. Правки задним числом («уберём фамилию на вычитке») не работают —
текст к тому моменту уже уходил в субагенты, в логи и в черновики.

## 🛑 ПРАВИЛО №0.7 — ЕДИНЫЙ ТЕРМИН

Выбери один вариант написания сквозного термина книги и запиши его в `STYLE_GUIDE.md`
(пример решения: в теле — латиницей «AI», на обложке — «ИИ», ремарка во Введении:
«Я пишу AI (произносится „эй-ай"), это то же самое, что ИИ»).
Voice-keeper и корректор **не «исправляют»** выбранный вариант на другой — это не опечатка.

## АРХИТЕКТУРА КНИГИ

Корень книги — `BOOK_ROOT`. По умолчанию `~/book`; свой путь задаётся переменной окружения
(`export BOOK_ROOT=~/Documents/my-book`) — её читают все скрипты навыка.

```
$BOOK_ROOT/
├── CONCEPT.md / ARCHITECTURE.md / STYLE_GUIDE.md / SOURCES_MASTER.md
├── extracted/                  ← atomic content units: stories/ insights/ facts/ quotes/ frameworks/
├── chapters/<slug>/            ← по единице на главу, пролог, интерлюдии, эпилог, манифест
│   ├── OUTLINE.md  SOURCES.md  MATERIALS.md  ANCHORS.md (опц.)  DRAFT.md → FINAL.md
└── workflow/                   ← вспомогательные скрипты автора (скелеты, распределение, покрытие)
```

Каталога ещё нет — создай минимум `CONCEPT.md`, `STYLE_GUIDE.md` и одну папку главы
с `OUTLINE.md`; остальное дописывается по ходу. Пустой `ARCHITECTURE.md` лучше
выдуманного: без него writer спросит, с ним — сочинит.

## ПРОЦЕСС ОДНОЙ ГЛАВЫ — 9 СТАДИЙ

```
0. PRE-CHECK      — есть OUTLINE.md, SOURCES.md (≥8 источников), MATERIALS.md (≥10 units)
1. ANCHORS check  — нет ANCHORS.md → работаем без Tier 1; глава с высокой долей личного
                    → БЛОКИРОВАТЬ pipeline, запросить узкий ANCHORS у автора
2. WRITER         — DRAFT.md из OUTLINE+SOURCES+MATERIALS+ANCHORS; длина = target_words
                    из frontmatter OUTLINE; структура case-driven HBR (6 частей, ниже)
3. FACT-CHECKER   — цифры в SOURCES? истории в ANCHORS/extracted/stories? цитаты
                    атрибуцированы? нет выдуманного? → PASS / PASS-WITH-CAVEATS / BLOCK + FACT-REPORT.md
4. VOICE-KEEPER   — читает VOICE_CORPUS (ниже), применяет голос автора, проходит анти-ИИ
                    паттерны в порядке workflow + чек-лист мастерства → EDIT-NOTES.md
5. PROOFREADER    — 4 прохода: NBSP (\xa0→пробел) → орфография → пунктуация → типографика
6. EDITOR         — структура, ритм, заголовок, переходы; header-block schema; цитаты
                    одного лица ≤1; упоминания своего продукта в теле ≤2; убирает source-trace
7. SECURITY-AUDIT — leak_scan.py на FINAL.md; найдено → BLOCK
8. CROSS-CHAPTER  — ссылки на другие главы валидны (series:slug → реальные FINAL.md,
                    не «см. главу X» в подвешенном виде)
9. FINAL          — DRAFT.md → FINAL.md, статус ready_for_assembly
```

**Race condition:** один `FINAL.md` = один writer одновременно. Параллелить только разные главы.

## КАК WRITER СОБИРАЕТ ГЛАВУ

**Чтение в строгом порядке:** `OUTLINE.md` → `MATERIALS.md` → каждый `extracted/` юнит из него →
`SOURCES.md` → `ANCHORS.md` (если есть) → `STYLE_GUIDE.md` → 2-3 уже написанные соседние
`FINAL.md` (consistency).

**6-частная структура:** 1) зачин (story из ANCHORS или `extracted/stories/`) → 2) разбор →
3) фреймворк (один именованный принцип в **жирном**) → 4) применение → 5) side-block
«Если вы не руководитель» → 6) закрытие личным наблюдением, не «выводами».

**Source-tracing обязателен** — каждое утверждение помечается HTML-комментарием в `DRAFT.md`
(editor уберёт в конце; это даёт fact-checker'у автоматическую проверку):

```markdown
По данным McKinsey, 78% компаний внедряют AI, но только 20% видят эффект.
<!-- source: SOURCES.md → McKinsey State of AI 2025 -->
```

**Длина:** target_words ±10%. Перебрал — сокращай из середины, не из конца. Не растягивать.

## VOICE_CORPUS (обязательно для voice-keeper)

Читать каждый раз, в этом порядке:

1. `~/.claude/voice-sample.md` — **голос автора**: его собственные тексты и правила. Это источник истины.
2. `$BOOK_ROOT/STYLE_GUIDE.md` — решения по этой конкретной книге (термины, обращение, тон).
3. `~/.claude/skills/author-voice/anti-ai-tells.md` — паттерны ИИ-почерка с правилом приоритета.
4. `~/.claude/skills/author-voice/writing-craft.md` и `writing-craft-v2.md` — ремесло текста.

Вспомогательные (по необходимости): `~/.claude/skills/de-ai-ify/SKILL.md`.

**Приоритет при противоречии:** голос автора (`voice-sample.md`) > решения книги (`STYLE_GUIDE.md`) >
удаление ИИ-следов (`anti-ai-tells.md`) > мастерство (`writing-craft` → v2). Голос главнее техники.

**НЕ переносить из вспомогательных:** из `de-ai-ify` — англоязычные buzzword-листы, если книга
русская; из навыков постинга — формат соцсетей (короткие абзацы, эмодзи, разговорные вставки);
из `writing-craft` — нейтральный тон и запрет на «я», если голос автора построен на первом лице
(исключения перечислены в самом `writing-craft.md`); откуда угодно — CTA и хуки.

## КАСКАД ВЕРСИЙ (никогда не перезаписывать)

Каждый редакторский проход создаёт **новый файл**, не перезаписывает предыдущий — это diff,
rollback и сравнение:

- Базовая цепочка: `DRAFT.md` → `DRAFT.voice-pass.md` → `DRAFT.proofread.md` (+ `FACT-REPORT.md`) → `FINAL.md`.
- Post-FINAL полировка создаёт `DRAFT.v8.md` … `DRAFT.v13.N.md` — это отдельный навык
  `book-polish-pipeline` (если установлен); запускается, когда у всех глав есть `FINAL.md` и факт-чек PASS.
- Сборщик книги подхватывает наивысшую версию: `v13.2 → v13 → … → v8 → proofread → voice-pass → DRAFT`.
- Откат — `mv DRAFT.v13.md DRAFT.v13.bak` (не удалять).

Frontmatter каждой версии: `chapter, title, status, draft_version, last_updated, voice_passes,
craft_pass/craft_pass_v2 (+даты), materials_used`.

## VOICE_PROMPT_TABOO

В промптах voice-keeper НЕ использовать (триггерят отказ по Usage Policy): "critical review",
"paranoid", "exploit", "attack vector", "kill", "destroy", "weaponize".
Нейтрально: «полировка стиля», «синхронизация с голосом», «edge case».

## ОТЛИЧИЯ ОТ СТАТЬИ В БЛОГ

| Параметр | Статья | Книга |
|----------|--------|-------|
| Длина единицы | 1500-8000 слов | 500-7000 (по типу единицы) |
| Кодовые блоки | да | НЕТ |
| Эмодзи | редко | НЕТ (кроме манифеста) |
| Цены / лимиты API / скриншоты | можно | НЕТ (устареют) |
| Конкретные модели | можно | редко, с датой; в заголовках — НЕТ |
| Ритм абзацев | 2-4 строки | 4-7 строк (книжный) |
| Source-tracing в DRAFT | опционально | ОБЯЗАТЕЛЬНО |
| Cross-link | series.json | прямые ссылки на FINAL.md |
| Pre-check материалов | нет | ДА (≥10 units, ≥8 sources) |
| ANCHORS-дисциплина | мягко | ЖЁСТКО |

## КОНВЕЙЕР НА CLI (экономим лимиты)

Папка `scripts/` (подробности — `scripts/README.md`). Длинные механические проходы можно
уводить в `codex` CLI (отдельная подписка ChatGPT, свой лимит), тяжёлое смысловое оставлять
Claude. Codex не установлен — ставь `--provider claude` везде, конвейер работает целиком.
Только Node stdlib, без `npm install`.

| Задача | Дефолт | Почему |
|--------|--------|--------|
| Writer (глава с нуля) | claude (главный поток) | книгу пишем главным голосом |
| Voice-keeper | codex | большой объём; модель не любит проходы по своему же тексту |
| Proofreader | codex | механика |
| Fact-checker | claude | точный reasoning против длинных SOURCES |
| Editor | claude | литературная задача |

```bash
export BOOK_ROOT=~/book            # если книга лежит не в ~/book
cd ~/.claude/skills/book-post/scripts
node voice-pass.js --chapter 01-first-chapter                          # → DRAFT.voice-pass.md
node proofread.js --chapter 01-first-chapter --input voice-pass        # → DRAFT.proofread.md
node fact-check.js --chapter 01-first-chapter --input proofread --provider claude  # → FACT-REPORT.md
# PASS → mv $BOOK_ROOT/chapters/<slug>/DRAFT.proofread.md $BOOK_ROOT/chapters/<slug>/FINAL.md
```

Параллельно на все главы (`auto-loop.sh`, стоп — `touch /tmp/book-post.stop`):

```bash
PROVIDER=codex  PASS=voice                        PARALLEL=2 ./auto-loop.sh > /tmp/voice-loop.log 2>&1 &
PROVIDER=codex  PASS=proofread  INPUT=voice-pass  PARALLEL=2 ./auto-loop.sh > /tmp/proofread-loop.log 2>&1 &
PROVIDER=claude PASS=fact-check INPUT=proofread   PARALLEL=2 ./auto-loop.sh > /tmp/factcheck-loop.log 2>&1 &
```

Smoke без расхода лимитов: `node voice-pass.js --chapter <slug> --dry-run` — дампит промпт в tmp и выходит.

**Критические нюансы (оплачены отладкой, не трогать):**
1. `--output-last-message <file>` — иначе codex теряет результат в stdout.
2. Уникальный outFile на каждый вызов — concurrent workers перетрут друг друга.
3. `windowsHide: true` обязательно на Windows — иначе cmd-окно на каждый spawn.
4. `--skip-git-repo-check` — codex без git context.
5. timeout 360-600 с — voice/proofread на главу идут 3-5 минут.
6. Fallback на claude через `isCodexQuotaError()` — codex отдаёт rate-limit без явной ошибки.

## WHEN INVOKED

Триггеры: «напиши главу N», «давай Эпилог», «продолжаем книгу». Действия: прочитать
`CONCEPT.md` + `ARCHITECTURE.md` → `OUTLINE.md` главы → PRE-CHECK (SOURCES status=ready?
MATERIALS ≥10? ANCHORS если требуется? `privacy-decisions.md` заполнен?) → не готово —
заблокировать с конкретным запросом («для главы X нужны: ANCHORS на Y, SOURCES для Z») →
готово — writer и pipeline по стадиям.

## САМОПРОВЕРКА готовой главы

**Структура и материал:**
- [ ] Длина ±10% от target_words
- [ ] ≥1 личная история (ANCHORS или `extracted/stories/`)
- [ ] ≥1 числовой факт с атрибуцией (SOURCES)
- [ ] Один именованный принцип в **жирном**; один pull-quote
- [ ] Side-block «Если вы не руководитель»
- [ ] Личное закрытие, не «выводы»; header-block schema (если применимо)
- [ ] Цитируемые лица ≤1 цитаты; свой продукт в теле ≤2
- [ ] Нет цен, лимитов API, скриншотов; нет имён моделей в заголовках

**Голос и анти-ИИ (`author-voice/anti-ai-tells.md`):**
- [ ] Все паттерны пройдены в порядке приоритета workflow
- [ ] Прочитано вслух — спотыкающиеся места переписаны (тест «второй вдох до точки»)
- [ ] Финал не давит ультиматумом «потом будет поздно»
- [ ] Нет самопохвалы читателю («ты теперь знаешь больше 95%»)
- [ ] В каждом авторском кейсе есть «не сразу / откатил / провалил»

**Мастерство (`author-voice/writing-craft.md`):**
- [ ] Полезное действие главы сформулировано
- [ ] Тест первых предложений абзацев пройден
- [ ] Пример-картинка минимум раз на 300 слов
- [ ] Возражение читателя названо и закрыто
- [ ] Конкретное действие в конце (не «изучите», а «откройте, напишите»)
- [ ] Формула −10% ко второму драфту (мостики, оговорки, повторы убраны)

**Финал:**
- [ ] NBSP нормализованы; leak-scan PASS
- [ ] Source-tracing комментарии удалены editor'ом
- [ ] Cross-chapter ссылки валидны
- [ ] Сверено с `references/privacy-decisions.md`

## СВЯЗАННЫЕ НАВЫКИ

| Навык | Когда |
|---|---|
| `book-post` (этот) | initial write: DRAFT → voice → proofread → FINAL одной главы |
| `author-voice` | корпус ремесла и анти-ИИ-чеклист (см. VOICE_CORPUS) |
| `de-ai-ify` | точечная чистка русского текста от ИИ-клише |
| `leak-scan` | стадия 7, проверка на утечки перед FINAL |
| `book-fact-checker` (агент) | финальный факт-чек книги; отделяет UNKNOWN (нужен автор) от VERIFIED (web) |
| `book-polish-pipeline` | post-FINAL полировка v8→v13.N — **если установлен**; без него полируешь вручную |

Цепочка жизни главы: book-post (`FINAL.md`) → полировка (v8+, epub) → обратная связь читателей
(новый паттерн в `anti-ai-tells.md` + версия N+1) → финальный факт-чек.

