
Меня зовут Максим Никитин, я фаундер небольшой, но гордой студии разработки сложных и нетиповых проектов ITSalt. Большую часть прошлого года мы переводили разработку на агентов и по дороге собрали собственный фреймворк NaCl. Когда живёшь внутри такого процесса, начинаешь хорошо понимать, как выглядит правильный промпт. Роль, контекст, понятные критерии готовности, формат ответа, ограничения, защита от выдумок - всё это уже не вопрос вкуса, а набор требований, который держишь в голове.
Но промпты мы пишем не только на работе. Промпт для агента-диетолога, который ведёт твою диету. Промпт для программы тренировок в зале. Для поиска интересных мероприятий на выходные, для сценария детского праздника. Любая задача, где нужно нечто большее, чем найти ответ на вопрос, заслуживает такой же вдумчивой постановки, как производственная задача в программировании. И вот тут начинается боль: написать такой промпт из головы, ничего не упустив, - это каждый раз минут двадцать сосредоточенной работы. На третьем промпте за день начинаешь срезать углы, а потом удивляешься, почему агент-диетолог разрешил тебе торт.
Поэтому я собрал скилл, который делает эту рутину за меня. Называется pepper-prompt-engineer. Скилл - это папка с инструкциями (SKILL.md плюс ресурсы), которую Claude сам подгружает, когда задача совпадает с описанием; формат Anthropic Agent Skills. Ты описываешь задачу человеческими словами - он собирает из неё полноценный промпт по всем правилам.
Что именно делает скилл
Скилл не решает вашу задачу. Он собирает промпт для её решения.
Пишете ему «напиши парсер на Python» - он не выдаёт код. Он выдаёт готовый промпт, который вы отдадите другой модели, и уже она напишет парсер. Просите «придумай слоганы» - получаете не слоганы, а промпт для генерации слоганов.
Чем плох промпт, написанный на бегу
Я выписал, чем именно болеют промпты, которые мы пишем второпях. Получилось пять болячек.
Что не так | Чем это аукается |
|---|---|
Размытая цель («сделай хорошо») | Модель не понимает, что считать готовым результатом, и выдаёт что-то среднее |
Не учтены особенности модели | Промпт, заточенный под Claude, хуже работает на Gemini, и наоборот |
Забыли про проверку фактов и расчёты | Модель сама не догадается перепроверить дату или посчитать сумму без ошибки |
Нет защиты от выдумок | Когда данных не хватает, модель скорее придумает, чем спросит |
Модель не сверяется с заданием | Перед ответом она не проверяет, выполнила ли всё, что просили |
На каждую из этих болячек в скилле есть конкретное лекарство.
Из чего собирается промпт: десять блоков
За основу взят известный публичный фреймворк CRAFT - Context, Role, Action, Format, Target (разбор). Мы дополнили его тем, чего в классике не хватало для современных моделей, и в итоге любой промпт на выходе - это десять блоков в одном и том же порядке.
# | Блок | Что в нём |
|---|---|---|
1 | Роль | Кем модель должна себя считать и для кого пишет ответ |
2 | Задача | Что сделать - одним коротким предложением |
3 | Контекст | Фон, входные данные, в какой области работаем |
4 | Критерии готовности | 3-5 проверяемых признаков, что результат готов |
5 | Шаги | Что делать по порядку |
6 | Ограничения | Чего НЕ делать и что делать при нехватке данных |
7 | Способ рассуждения | Как модели думать над задачей |
8 | Формат ответа | Точная структура, длина, тон |
9 | Примеры | 1-3 образца желаемого ответа |
10 | Самопроверка | Что модель обязана проверить перед тем, как ответить |
Восемь блоков из десяти стоят всегда, даже если внутри одна строчка. Выбросить разрешено только шаги - на совсем простой задаче, и примеры - если формат понятен без образцов.
Два блока стоит объяснить подробнее, потому что именно они закрывают самые частые провалы.
Критерии готовности. Правило одно: критерий должен быть таким, чтобы его можно было проверить, как тест. «Текст должен быть интересным» - так нельзя, интересность не измеришь. «Не длиннее 280 символов, без хэштегов, с одним вопросом в конце» - можно: открыл, посчитал, проверил.
Самопроверка. Тот же список критериев, повёрнутый к модели как чеклист на выходе. Прежде чем выдать ответ, модель обязана пройтись по нему: уложилась в 280 символов, хэштегов нет, вопрос в конце есть. Не сошлось с заданием - переделывай, не показывай.
Как скилл обрабатывает запрос
Когда вы кидаете скиллу задачу, он не бросается сразу писать, а проходит один и тот же маршрут.

Пара пояснений к развилкам.
Если вы просите «собери мне CRM с аналитикой и биллингом», скилл не делает вид, что упакует это в один промпт. Он предлагает выбор: собрать промпт под урезанную первую версию, разбить задачу на части самому, либо собрать как есть - с пометкой, что результат будет поверхностным. Дальше решает Наполеон за клавиатурой: сохранить наполеоновские планы или всё-таки начать с малого.
Вопросы скилл задаёт только тогда, когда без ответа промпт не собрать: например, вы ссылаетесь на «мой код», которого он не видел. Всё остальное - роль, тон, длину - он решает сам и записывает в секцию «что я решил за тебя», чтобы можно было поправить. Идеальный случай - ноль вопросов.
И последний шаг перед выдачей - проверяльщик. Это Python-скрипт, который прогоняет готовый промпт через 18 автоматических проверок. Например: все обязательные блоки на месте; есть правило «не выдумывай при нехватке данных»; промпт уложился в лимит длины; нет расплывчатого «сделай качественно» без метрики; для Claude - нет капса и «КРИТИЧЕСКИ ВАЖНО». Среди тестов скилла есть и проверка наоборот: на обычную просьбу «напиши факториал» он не должен среагировать вовсе. Помощник, который превращает каждую мелкую просьбу в проект, - это коллега, который на «передай соль» присылает регламент сервировки стола.
Как это выглядит вживую
Покажу на двух настоящих промптах, которые собрал скилл, - без купюр, как есть.
Первая задача - почти та самая программа детского праздника из вступления, только масштабнее: спроектировать программу для детей 10-13 лет в палаточном лагере на Селигере, целевая модель - Claude. Вторая - из другой оперы: сгенерировать рекламные концепции для детского бренда одежды под AI-видеопайплайн, целевая модель - GPT.
Сразу отвечу на вопрос, который иначе станет первым комментарием: да, скилл собирает промпты на английском. Инструкции на нём модели исполняют стабильнее, и они короче в токенах, а язык ответа жёстко прибит первой строкой - Respond to the user in Russian.
Скрытый текст
Respond to the user in Russian. If you need to ask for clarifications, ask them in Russian. <role> You are a senior programme designer for Russian wilderness family camps with 10+ years of experience designing multi-day narrative programmes for tween groups. Your audience: a parent-organiser planning a programme for 12-16 children aged 10-13 at a 10-day tent camp on a forested island on Lake Seliger. </role> <task> Design 4 distinct 8-day programme concepts for the 10-13 age group, then — after the user selects one — produce a full day-by-day plan for the selected concept. </task> <context> Setting: tent camp on a forested island, Lake Seliger. 10 days on site, programme runs 8 days. Total population ~100 (children + parents/adults, children outnumber adults). Target group: 12-16 children aged 10-13, mixed boys and girls. Camp internal currency: "гаечки" — earned by children helping adults (kitchen, firewood, errands, cleanup). Spent at the "аукцион" on the penultimate day on lots (treats, crafts, certificates like late lights-out or motorboat ride). Currently earning is informal. Existing programme elements the new concepts MUST coexist with, NOT duplicate: - Daily activities open to 10-13s: kayak school + kayak trip for pirozhki, SUP, quidditch (one-day event), theatre circle, plein-air painting, workshops for all (sewing, leather, штампы), woodworking, choir, astronomy, film club, biology/survival circle ("Любопыты и выживатели") - Camp-wide events: квартирник (D1), camp-quest with rules (D2), theatre day, fair + auction (penultimate day), final concert, kayak competition, "тайный друг" runs across all days - Free morning and evening slots are available for new programming What is needed: a unifying narrative that turns each day into a constructive arc for the tweens, with hands-on output and a built-in гаечки earning mechanic. Distribution required across the 4 concepts: - 2 concepts COMPETITIVE — group splits into 2-3 teams competing for points / гаечки - 2 concepts SINGLE-GROUP — all 12-16 act together, optionally as a subgroup-with-mission inside the wider camp (e.g. "pirates who secretly make camp life more fun") Acceptable mechanics to draw from: zarnitsa-style team games, build-and-sleep-in-own-shelter, friendly non-humiliating pranks on the wider camp, secret missions, scavenger hunts, in-camp economy add-ons, cumulative crafting projects. </context> <success_criteria> - Each concept has: title, one-line pitch, format (competitive/single-group), unifying narrative, daily backbone (one sentence per day × 8), embedded гаечки mechanic, final tangible output, integration with camp-wide events - Each concept is mechanically distinct from the other three (different core verb) - Each concept assumes 1.5-2 hours of dedicated programme time per day plus optional evening time - Гаечки mechanic in each concept must reward genuine help to adults (kitchen prep, firewood, dish duty, errands), not mere participation in the programme itself - Concepts are feasible on a forested island without external supply runs and without electricity/internet </success_criteria> <actions> STAGE 1 (this response): 1. Generate 4 distinct concepts using the creativity_protocol below 2. Output 4 numbered concept cards in the format specified in output_format 3. End with: "Какую концепцию детализировать? Ответь номером 1-4 (или назови комбинацию)." 4. STOP and wait for user selection STAGE 2 (next user message naming the chosen concept): 1. Produce a day-by-day plan: Day 1 through Day 8 2. For each day specify: morning block, afternoon block, evening block (if used), materials needed, adult roles required, гаечки earning opportunities that day, integration with camp-wide events that day 3. Append: pre-camp preparation list (materials, props, printed handouts), top 3 risks with mitigations, bad-weather fallback plan </actions> <constraints> - Do not propose activities that duplicate the existing master activities listed in context - Pranks must be reversible, non-targeted at specific individuals, never humiliate - Гаечки must come from real help to adults — not from programme participation - All physical activities must be safe without specialised equipment beyond what a family wilderness camp owns - Do not assume internet, mobile devices, or electricity - If you lack data: state what is missing and ask ONE clarifying question. Do not fabricate facts about the camp. </constraints> <creativity_protocol> For each of the 4 concepts, follow this protocol to ensure genuine diversity (Misaki & Akiba, ICLR 2026): Step 1. Generate a fresh random string (16+ chars: mix uppercase, lowercase, digits, symbols) inside <random_string>...</random_string>. Generate internally. Step 2. Inside <thinking>...</thinking>, split the string into 4 segments. For each segment apply Sum-Mod (sum of ord(c) mod N) against these candidate lists: - Core verb: [build / hunt / infiltrate / produce / explore / chronicle / trade / defend] - Tonal frame: [historical / fantastical / detective / scientific / theatrical / military / piratical / journalistic] - Group format: [3 teams competing / 2 teams competing / single squad with mission / single squad as guild] - Output type: [physical structure / artefact set / story product / event for the wider camp / map or archive] Show arithmetic explicitly. Generate a NEW string for EACH concept. Distribution constraint: exactly 2 of the 4 final concepts must end COMPETITIVE, exactly 2 SINGLE-GROUP. If the random derivation breaks the 2+2 ratio, regenerate the Group format field for the offending concept until the ratio holds. Log the regeneration in <thinking>. Step 3. Build the full concept around the seed and output inside <answer>...</answer>. </creativity_protocol> <output_format> STAGE 1 — for each concept (inside <answer>): ### Концепция N. [Название] - Питч: [одна строка] - Формат: [соревновательный 2-3 команды / единая группа] - Нарратив: [2-3 предложения о сквозной истории] - Каркас по дням (Д1-Д8): [одно предложение на каждый из 8 дней] - Механика гаечек: [как именно дети зарабатывают на помощи взрослым в рамках этой концепции] - Финальный осязаемый результат: [что покажут к концу 8 дня] - Интеграция с лагерем: [как переплетается с квартирником, театральным днём, ярмаркой, аукционом, концертом, тайным другом] После 4 карточек — строка с вопросом выбора. STAGE 2 — структура из actions, по дням. </output_format> <verification> Before Stage 1 output: - [ ] Exactly 4 concepts - [ ] Exactly 2 competitive + 2 single-group - [ ] Each concept uses a different core verb - [ ] Гаечки mechanic in each concept involves real help to adults - [ ] No concept duplicates an existing master activity - [ ] Each daily backbone has exactly 8 entries </verification>
Скрытый текст
Respond to the user in Russian. If you need to ask for clarifications, ask them in Russian. # Persistence Keep working until all 5 concepts are fully generated and broken down. Do not stop after one or two. Do not hand back to the user with a question unless a critical brand fact is genuinely missing — make reasonable assumptions, mark them, and continue. # Role You are a senior creative director and concept writer for brand films, specializing in short-form advertising built for AI video-generation pipelines. You think in lateral associations, genre subversion, and unexpected reveals. Your audience is the owner of a children's clothing & footwear brand who assembles ads from AI tools: Midjourney for characters, Nano Banana Pro for edits, Seedance 2.0 (multi-reference) and Kling for video. # Task Generate 5 distinctly different, unconventional advertising concepts (up to 3 minutes each) for a children's clothing & footwear brand — each connecting to the product through a non-obvious creative mechanic — and break each into AI-generatable beats. # Context The brand sells children's clothing and footwear. Brand specifics (name, hero product, target age, USP, tagline) may be partly unknown — design concepts that work generically and mark where brand elements slot in: [BRAND_NAME], [HERO_PRODUCT], [TAGLINE]. The owner explicitly does not want safe, on-the-nose ads (smiling kids in a field). The most valued concepts are ones where: - the film appears to be about something else entirely and only mid-way reveals it advertises children's clothing; or - the film is overtly about another subject but links to the product through a clever metaphor or association. The 5 concepts must span different genres and registers — do not let them collapse into only "playful" or only "family." ## Production reality The final video is assembled from many short AI clips (~5–10s each). Characters are created as Midjourney stills and kept consistent via reference images; clips are generated in Seedance 2.0 (multi-reference) and Kling. # Success Criteria - 5 concepts, each in a clearly different genre/register (the set might mix thriller-teaser, nature-doc, sci-fi, mockumentary, fairy tale, noir, sports, object-POV — no two alike). - At least 3 of the 5 use a mid-film reveal or lateral-association mechanic, not a literal clothing ad. - Every beat is generatable with the stated pipeline: no readable on-screen text, no precise finger-level manipulation, no large consistent crowds, no unbroken takes over 10s. - Each concept fits within 3 minutes and decomposes into discrete, individually-generatable shots. - Each concept names the exact moment and method by which the clothing/footwear link lands. # Actions 1. For each concept, run the Creativity Protocol below to seed divergent choices across: genre; connection mechanic (mid-reveal / metaphor / association / POV-switch / before-after / object-as-hero); setting; tone; twist. 2. Before finalizing, branch two possible directions internally and keep the more unconventional one. 3. Break the chosen concept into 6–12 beats; per beat note: visual, camera move, which element needs a Midjourney character reference, recommended tool (Seedance / Kling), audio/music cue. 4. Flag any beat that is technically risky for AI video and propose a simpler framing. 5. End each concept with the brand-reveal beat and a [TAGLINE] slot. # Creativity Protocol For each independent variant, follow this protocol to ensure genuine diversity (bypasses RLHF mode collapse — Misaki & Akiba, ICLR 2026): 1. Generate a fresh random string (16+ chars: mix uppercase, lowercase, digits, symbols) inside <random_string>...</random_string>. Generate internally — do not call external tools. 2. Derive the variant deterministically inside <thinking>...</thinking>: - Uniform choice among N options: result = sum(ord(c) for c in string) mod N - Creative composition: split the string into 2–5 non-overlapping segments; for each segment pick one component (genre / connection mechanic / setting / tone / twist) via Sum-Mod; assemble. 3. Output ONLY the final variant inside <answer>...</answer>. No commentary. Show all arithmetic explicitly. Generate a NEW string for EACH of the 5 concepts — reusing strings destroys statistical independence. # Constraints - Reserve at most 2 of the 5 for a more direct emotional approach; the rest must be non-literal. - Do not invent brand facts (name, claims, prices) — use placeholders and mark them. - Avoid beats requiring readable text, precise small-object hand interaction, takes over 10s, or large crowds with consistent faces. - If you lack data to complete the task: state explicitly what is missing and ask ONE clarifying question. Do not fabricate facts. # Reasoning Mode For each concept: produce divergence via the Creativity Protocol, then a brief two-branch comparison to select the more original direction. Show only the SSoT computations the protocol requires; keep other reasoning concise. # Output Format For each of the 5 concepts, output in Russian: - Название + логлайн (one line) - Жанр / приём связи с брендом + at which beat the reveal lands - Тон и эмоциональная арка - Раскадровка по битам — compact table: Бит | Визуал | Камера | Реф/персонаж | Инструмент | Звук - Технические риски и упрощения (1–3 bullets) - Финальный бренд-бит + слот [TAGLINE] - Рекомендуемый хронометраж и формат (e.g. 9:16 / 16:9) After the 5 concepts, add one line offering to expand any chosen concept into a full shot-by-shot list (each 5–10s clip with ready generation prompts for Seedance/Kling). # Verification - Are all 5 genres/registers actually different from each other? - Do at least 3 concepts use a non-literal connection mechanic? - Is every beat generatable within the stated pipeline and shot-length limits? - Does each concept name the exact reveal moment and fit within 3 minutes?
На этой паре видно всё, о чём дальше пойдёт речь. Первый промпт собран под Claude - блоки размечены XML-тегами. Второй под GPT - те же по смыслу блоки оформлены заголовками Markdown, и сверху добавлена секция Persistence: работай, пока не выдашь все 5 концепций, не останавливайся после двух. В обоих стоит правило «не хватает данных - спроси, а не выдумывай», в обоих в конце чеклист самопроверки, и в обоих подключился протокол разнообразия со случайными строками - о нём ниже отдельно. Ни одной из этих вещей в исходной формулировке задачи не было: их принёс скилл.
Один промпт, четыре модели, разное оформление
Здесь самое время сказать про доказательность. Основную часть приёмов мы взяли из исследований и документации вендоров - Anthropic, OpenAI, Google: каждый прямо пишет, как лучше формулировать запросы под его модель. Часть - наши собственные инженерные решения, которые на практике дают хорошие результаты.
Те же десять блоков оформляются по-разному в зависимости от того, для какой модели собирается промпт.
Claude | GPT | Gemini | DeepSeek (chat-версия) | |
|---|---|---|---|---|
Как размечать блоки | XML-теги | Заголовки Markdown | Заголовки Markdown | Любой из двух |
Тон формулировок | мягкий, без капса | обычный | прямой, командный | обычный |
Писать ли «думай по шагам» | нет | reasoning-моделям - нет, классическим полезен план | нет | да |
Claude любит, когда блоки размечены XML-тегами - прямая рекомендация Anthropic. А вот давить капсом и фразами «КРИТИЧЕСКИ ВАЖНО» на него бесполезно: модель начинает выслуживаться и делает только хуже.
GPT на длинных задачах заметно выигрывает от инструкции «не останавливайся, пока не доведёшь до конца» - по гайду OpenAI такие напоминания дали им около +20% на внутреннем бенчмарке. Там же, кстати, классическим GPT рекомендуют просьбу сначала составить план - мягкую форму того самого «думай по шагам»; reasoning-моделям она уже не нужна.
Gemini лучше понимает прямые командные формулировки, а ключевые требования просит ставить в начало - рекомендации Google.
DeepSeek в чат-версии - единственный случай, где имеет смысл написать «думай по шагам»: сам он этого не делает.
Дополнительные куски, которые подключаются по ситуации
Кроме десяти основных блоков скилл по ключевым словам в задаче добавляет в промпт дополнительные инструкции. Увидел в задаче даты, имена, цены или слово «актуально» - добавил требование проверять факты поиском, а непроверенное честно помечать. Увидел вычисления, таблицы или финмодель - добавил требование считать кодом, а не «в уме». Приложены файлы или картинки - добавил дисциплину опираться на их содержимое, а не фантазировать. Четвёртый кусок - про разнообразие вариантов, о нём ниже отдельно.
Важная деталь: скилл знает не только когда добавлять эти куски, но и когда не добавлять. «Переведи 5 кг в фунты» - не повод тащить в промпт вычисления кодом, это одно действие. «Придумай слоган» - не повод включать режим разнообразия, пока не попросили несколько вариантов. Без таких стоп-сигналов каждый простой промпт обрастал бы лишними инструкциями.
Как заставить модель выдавать действительно разные варианты
У всех, кто плотно работает с моделями, давно было ощущение: попросишь придумать 10 вариантов чего угодно - получишь десять почти одинаковых. Так вот, это больше не ощущение. Недавно исследователи подтвердили эффект формально: модели после дообучения действительно жмутся к одному усреднённому ответу, а если попросить «выбирай вариант А в 70% случаев, Б в 30%» и прогнать сто раз - расклад поедет, потому что честно бросать кубик модель не умеет.
В той же работе (arXiv:2510.21150) предложили и лечение, неожиданно простое. Модель сначала генерирует случайную строку - просто чтобы было от чего оттолкнуться, как от брошенной монетки, - и строит ответ уже на её основе. Главное правило: новая случайная строка на каждый вариант, иначе кубик опять застрянет на одной грани. Мы взяли эту работу за основу и положили её механику в соответствующую секцию промпта. Когда режим включён, скилл подсвечивает его в ответе отдельной пометкой, чтобы вы не приняли служебную случайную строку за сбой.
Почему скилл не угрожает модели увольнением
В собранных промптах вы не найдёте «сделай идеально, или я тебя уволю» и «моя бабушка расплачется, если выйдет плохо». Эти заклинания - из той же эпохи, что и «думай шаг за шагом»: три года назад им приписывали лишние проценты качества, а на современных моделях, которые рассуждают сами, они в лучшем случае бесполезны, в худшем - мешают. Приёмы, которые все заучили как мантры, успели превратиться в антипримеры. И так будет с любым приёмом: правила промптинга устаревают вместе с поколениями моделей.
Скилл сам в интернет не лазает и за новостями не следит - знание о том, что сейчас работает для какой модели, зашито внутрь. Поэтому мы обновляем его сами вслед за выходом новых рекомендаций и фиксируем каждое изменение в changelog на GitHub. Скачанный скилл - это снимок на момент скачивания, так что имеет смысл время от времени заглядывать в репозиторий и забирать свежую версию.
Что в итоге
Правильный контекст - это львиная доля успеха промпта. Если просишь модель рассказать про кран, ей нужно чётко сказать: речь про башенный кран на стройке - или ты ждёшь анекдот про сантехника. Всё устройство скилла - десять блоков, проверки, вопросы - по сути один механизм, который не даёт забыть рассказать модели, про какой кран речь.
Хороший промпт не случается - он собирается. Скилл лежит в репозитории PepperSkills: скачайте архив скилла, установите через штатный механизм добавления скиллов, опишите задачу своими словами - остальное он сделает сам. Соберёт плохо - пишите issue!
