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.
- Ничего «из головы AI». Только из:
chapters/<slug>/ANCHORS.md(Tier 1: личные истории автора),SOURCES.md(Tier 2: проверенные открытые источники),MATERIALS.md+extracted/(Tier 3: ранее опубликованные материалы автора). - Зона запрета (не выдумывать никогда): быт и день автора; детство, родители, семья
(только из
ANCHORS.md); конкретные цифры из практики автора без подтверждения; имена клиентов и коллег; персонажи-архетипы, которых нет в материалах; синтетические сенсорные детали для типовых сцен. - Ни одной цифры без источника — статистика с атрибуцией: «По данным McKinsey State of AI 2026, …».
- Ни одной цитаты, которую не произносил реальный человек. Каждое лицо цитируется максимум 1 раз в книге.
- Ни одного куска кода — книга не учебник, технические детали описанием.
- Промпты субагентов обязаны явно запрещать фабрикацию: «НЕ добавляй числа из практики автора, которых нет в ANCHORS/SOURCES — только качественные формулировки», «НЕ выдумывай сенсорные детали для сцен вне ANCHORS.md», «при сомнении — качественное описание, не число».
🛑 ПРАВИЛО №0.5 — БЕЗОПАСНОСТЬ ЛИЧНЫХ ДАННЫХ
Перед сборкой каждой главы прогоняй файл главы через детектор утечек:
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'у автоматическую проверку):
По данным McKinsey, 78% компаний внедряют AI, но только 20% видят эффект.
<!-- source: SOURCES.md → McKinsey State of AI 2025 -->
Длина: target_words ±10%. Перебрал — сокращай из середины, не из конца. Не растягивать.
VOICE_CORPUS (обязательно для voice-keeper)
Читать каждый раз, в этом порядке:
~/.claude/voice-sample.md— голос автора: его собственные тексты и правила. Это источник истины.$BOOK_ROOT/STYLE_GUIDE.md— решения по этой конкретной книге (термины, обращение, тон).~/.claude/skills/author-voice/anti-ai-tells.md— паттерны ИИ-почерка с правилом приоритета.~/.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 | литературная задача |
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):
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 и выходит.
Критические нюансы (оплачены отладкой, не трогать):
--output-last-message <file>— иначе codex теряет результат в stdout.- Уникальный outFile на каждый вызов — concurrent workers перетрут друг друга.
windowsHide: trueобязательно на Windows — иначе cmd-окно на каждый spawn.--skip-git-repo-check— codex без git context.- timeout 360-600 с — voice/proofread на главу идут 3-5 минут.
- 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) → финальный факт-чек.