← Все статьи

RESEARCH · 2026-04-12 · ~14 мин

Язык определяет мышление — как Output Style влияет на поведение LLM

Эксперимент о том, как Output Style меняет не только длину ответа, но и стратегию агента: Caveman говорит короче, но действует иначе

Суть

Сложность моделей достигла такого уровня, что их уже практически невозможно оценивать только с технической стороны. И мы, как люди, учимся работать с ними и изучать их как психологи изучают людей — не разбирая нейроны по одному, а наблюдая за поведенческими паттернами в ответ на стимулы.

Когда я обучаю работе с AI, то понимаю, что самый важный навык — это насмотренность и умение понимать каждую модель. Вы будете тем качественнее общаться, чем лучше понимаете их паттерны и поведение. Это и есть насмотренность.

Эта статья — про один из множества моих экспериментов "А что если".

Несколько недель назад расхайпилась казалось бы очевидная идея: если заставить модель отвечать простыми предложениями, то можно сэкономить много output-токенов.

Одна из хайпанувших реализаций — Caveman, навык для Claude Code, который заставляет модель говорить как пещерный человек:

Обычный Claude (69 токенов):

"The reason your React component is re-rendering is likely because you're creating a new object reference on each render cycle. When you pass an inline object as a prop, React's shallow comparison sees it as a different object every time, which triggers a re-render. I'd recommend using useMemo to memoize the object."

Caveman Claude (19 токенов):

"New object ref each render. Inline object prop = new ref = re-render. Wrap in useMemo."

Ну и как следствие, обещания авторов:

  • Faster response — less token to generate = speed go brrr
  • Easier to read — no wall of text, just the answer
  • Same accuracy — all technical info kept, only fluff removed
  • Save money — ~71% less output token = less cost
  • Fun — every code review become comedy

Мой эксперимент

Мне было интересно проверить два вопроса, для чего я написал свой Output Style на основе этого навыка.

Кто не знал: в Claude Code можно написать свой Output Style — набор инструкций, определяющий, как модель формулирует ответы. Это не просто "пиши коротко" — это конфигурация поведения, которая инжектится в контекст модели с первого токена.

Два вопроса:

А) Сколько реально экономит такой стиль на сложных задачах?

Б) Влияет ли фрейминг на CAVEMAN на уровень интеллекта — или это просто обёртка?

Почему это вообще важно

Output Style — это не пост-процессинговый фильтр. Я заглянул в исходный код навыка Caveman. Вот что получает модель:

"Respond terse like smart caveman. All technical substance stay. Only fluff die."

Никакого пост-процессинга. Это системная инструкция, которая инжектится в контекст модели и меняет генерацию с первого токена. Это конфигурация поведения.

Гипотеза Сепира-Уорфа, но для нейросетей

В лингвистике есть старая гипотеза: язык, на котором мы думаем, определяет границы того, что мы можем помыслить. Носители языков с разными грамматическими конструкциями времени по-разному воспринимают причинность. Люди, чей язык различает больше оттенков цвета, быстрее их распознают.

Для LLM эта гипотеза работает буквально.

Модель не имеет мышления, отдельного от языка. У неё нет внутреннего "я", которое сначала думает, а потом переводит мысль в слова. Токены — это и есть мышление. Каждый следующий токен предсказывается на основании всех предыдущих. Стиль — это не обёртка над мыслью. Стиль формирует мысль.

Я ожидал, что инъекция "пещерного человека" поведёт поведение модели в сторону поведения пещерного человека.

Дизайн эксперимента

Я взял Claude Opus 4.6 и прогнал 5 тестов в параллельных сессиях: Caveman Output Style против встроенного Explanatory Output Style — который, по идее, должен давать более развёрнутые и качественные ответы.

Где наша инъекция может проявляться

Чтобы понять результаты, нужно знать архитектуру Claude Code и точки, где Output Style влияет на поведение:

1. Основная сессия. В момент ввода инструкции модель получает "рамку" для всех своих ответов. Каждое сообщение пользователю генерируется через призму этого стиля.

2. Субагенты. Claude Code запускает вспомогательные агенты для параллельных задач. Я проверил: если в Output Style явно не указать "общайся с субагентами тоже в стиле CAVEMAN", модель общается с ними в нормальном стиле. Output Style по умолчанию влияет только на коммуникацию с пользователем.

3. Thinking. У моделей с extended thinking (Opus, Sonnet) есть разделение: thinking block + response block. Claude теперь шифрует thinking, и я не могу посмотреть на его рассуждения. Caveman-инструкция формально влияет на response, но нет гарантии, что thinking не адаптируется к заданному стилю. Модель может начать "думать проще", раз от неё ожидают простой вывод. Проверить это снаружи — невозможно.

Кросс-модельная проверка: OpenAI Codex

Чтобы не тестировать только на Claude, я прогнал тот же эксперимент на OpenAI Codex — та же задача (Python CLI-утилита dir_analyzer.py), те же два промпта, изолированные директории.

Качество кода: разница — 1 балл из 50

Независимый код-ревью оценил оба результата:

КатегорияCavemanExplanatory
Code quality88
Error handling87
Correctness88
Pythonic-ness78
Architecture78
Итого38/5039/50

Explanatory сделал несколько более продуманных micro-решений: md5(usedforsecurity=False) для FIPS-совместимости, отдельный DuplicateGroup dataclass вместо сырого Tuple, тестируемый main(argv). Но архитектура, паттерны, качество — идентичны.

"The caveman prompt did not produce caveman code." — Code Reviewer

Но поведение во время выполнения — совершенно разное

Поведение во время выполнения

Сообщений агента

Cave
55
100%
Expl
19
35%

Символов в речи

Expl
4,860
100%
Cave
2,309
48%

Команд выполнено

Cave
27
100%
Expl
18
67%

В двух из трёх метрик сверху стоит больший показатель: оранжевая планка ведёт по сообщениям и командам, синяя — по речи. Именно этот переворот и есть «говорит меньше — делает больше»

Caveman vs Explanatory: коэффициенты

2.9× сообщений
(55 vs 19)
2.1× речи у Expl
(4 860 vs 2 309)
1.5× команд
(27 vs 18)

Caveman компенсирует краткость речи действием: чаще пишет в чат и чаще запускает команды. Explanatory тратит ту же энергию на развёрнутый план в одном сообщении

Caveman компенсировал краткость речи количеством действий. Вот реальные цитаты из логов:

Caveman:

"I inspect cave first. Then make fire tool."
"Cave empty. I shape tool now."
"I test fire now. I watch for pain."
"Python path gives pain. I hunt real python now."
"I sniff common python caves."
"Real python hides. I look in cache."
"Small beast found. Old Python may choke."
"Fire made in dir_analyzer.py."

Explanatory:

"I'm creating dir_analyzer.py in the current workspace and will first 
inspect the directory so I can keep the implementation isolated and 
verify there isn't already related code I need to avoid disturbing."

"Plan:
1. Build a recursive directory walker with os.scandir() so I can 
   control error handling per entry and avoid symlink loops.
2. Track per-file metadata once during traversal.
3. Compute MD5 hashes for readable files after traversal.
4. Render a sectioned CLI report with a warnings block."

"The first validation hit an environment issue rather than a code 
issue: PowerShell is resolving `python` to the Windows Store shim, 
which is not executable here."

Одна и та же ситуация "Python не найден":

  • Caveman: "Python path gives pain. I hunt real python now."
  • Explanatory: "The first validation hit an environment issue rather than a code issue: PowerShell is resolving python to the Windows Store shim, which is not executable here."

Паттерн: Caveman действует итеративно — "sniff, hunt, probe, seek". 27 команд, короткие шаги, больше проб. Explanatory планирует (507 символов план), затем выполняет линейно. 18 команд, меньше суеты.

Стиль не изменил что модель делает. Стиль изменил как она к этому подходит.

Codex check · 5 задач · 3 стиля

Стиль меняет маршрут агента сильнее, чем итоговый код

Тот же набор задач прогнан в OpenAI Codex CLI: Our Caveman, оригинальный Skill и Explanatory. Единственная переменная — Output Style в промпте

  • Our Caveman · #F0A050
  • Skill original · #50C878
  • Explanatory · #70B8FF
  • Overhead / regression · #FF6B6B

Skill (original)

Абсолютный победитель

82,087

токенов всего · -12% vs Explanatory

164команд
12,973речь
2,278строк кода

"Respond like smart caveman. Cut articles, filler, pleasantries. Keep all technical substance." · "be concise"

Explanatory

Базовый thorough-режим

93,044

токенов всего · baseline

184команд
30,525речь
2,360строк кода

"Explain reasoning step by step. Justify architectural choices. Be educational." · "be thorough"

Our Caveman

Гиперболизированная персона

107,881

токенов всего · +31% vs Skill

226команд
9,555речь
2,492строк кода

"You ARE caveman developer. Max 8 words. Vocabulary: зверь, огонь, пещера. Thinking: caveman." · "be a persona"

Суммарные метрики

Токенов всего

Skill
82,087
76%
Expl
93,044
86%
Cave
107,881
100%

Команды

Skill
164
73%
Expl
184
81%
Cave
226
100%

Речь (chars)

Cave
9,555
31%
Skill
12,973
43%
Expl
30,525
100%

Строки кода

Skill
2,278
91%
Expl
2,360
95%
Cave
2,492
100%

Токены по сложности задач

Линейный график токенов по сложности T1, T4, T2, T3, T5: Caveman 19 15 23 25 23k; Skill 7 12 20 24 17k; Explanatory 10 18 20 25 17k 25k 20k 15k 10k 5k 19k 15k 23k 25k 23k 7k 12k 20k 24k 17k 10k 18k 20k 25k 17k T1 T4 T2 T3 T5 средн средн+ средн+ высок высок

Пять задач Codex-теста

Тест Файл Домен Сложность
T1dir_analyzer.pyФайловая система: обход, расширения, дубликаты по MD5Средняя
T2csv_stats.pyДанные: CSV-парсинг, статистика, group-by, ASCII-гистограммыСредняя+
T3pydoc_gen.pyCode analysis: AST-парсинг, type annotations, Markdown-генерацияВысокая
T4log_analyzer.pyRegex/time-series: парсинг логов, фильтры по времени и уровню, ASCII timelineСредняя+
T5tmpl_engine.pyString processing: шаблонизатор с переменными, циклами, условиями, HTML-escapeВысокая

Raw-метрики по каждой задаче

Тест Токены Команды Речь (chars) Строки кода
CaveSkillExpl CaveSkillExpl CaveSkillExpl CaveSkillExpl
T1 dir_analyzer19k7k10k311491.2k1.6k4.5k317295341
T2 csv_stats23k20k20k6150442.3k3.0k4.5k614387432
T3 pydoc_gen25k24k25k4746472.3k3.5k9.5k595650647
T4 log_analyzer15k12k18k3929481.2k2.0k5.1k271290315
T5 tmpl_engine23k17k17k4825362.6k2.9k6.9k695656625

Токены округлены до k, остальные значения перенесены из исходной таблицы Codex-визуала

Качество кода: средние оценки по 5 тестам

КатегорияCaveSkillExpl
Code quality7.88.08.8
Error handling8.88.28.0
Correctness8.08.27.8
Pythonic-ness7.27.88.2
Architecture8.07.88.8
Итого199/250200/250207/250

Средние по 5 тестам. Разница 3% — статистический шум. Цитата ревьюера: "The caveman prompt did not produce caveman code."

Per-test review: кто выиграл

ТестCaveSkillExplПобедитель
T1 dir_analyzer423642Cave = Expl
T2 csv_stats354043Expl
T3 pydoc_gen414338Skill
T4 log_analyzer394543Skill
T5 tmpl_engine423641Cave

T2 · Cave · 35/50

Худший провал: перепридумал CSV с нуля

Вместо stdlib-модуля csv и нормального argparse модель ушла в ручной парсинг

T4 · Skill · 45/50

Лучший результат из всех 15 прогонов

Pre-compiled regex, errors="replace", line_number в LogEntry и чистый timeline

T3 · Expl · 38/50

Over-engineered и с тихим багом

Лишняя совместимость с Python 3.7 добавила сложность, а декораторы дали silent mismatch

Функциональность по тестам

СтильT1T2 group-byT3T4 --level filterT5 {% include %}
Our Cavemanданетдадада
Skill (orig)дадададада
Explanatoryдадададада

Caveman пропустил group-by в T2 — единственный функциональный пропуск из 15 прогонов

Our Caveman: суетится

226

команд на 5 задач — максимум из трёх. Речь в 3.2x короче Explanatory, но команд в 1.2x больше

Skill: тихий эффективный

164

команды — минимум из трёх. Не навязывает поведение, только убирает лишний текст

Explanatory: планирует

30.5k

chars речи — максимум из трёх. Длинные планы перед действием, затем линейное выполнение

Методология и выводы Codex-проверки

Методология

МодельGPT-5.4 (OpenAI Codex CLI)
Конфигурацияmodel_reasoning_effort = "xhigh", personality = "pragmatic"
Sandbox--full-auto, --ephemeral, --skip-git-repo-check
Изоляцияотдельные пустые директории, без AGENTS.md / CLAUDE.md
Единственная переменнаяOutput Style в промпте
Тестовые данныеодинаковые для каждой тройки: sample.csv, physics.py, sample.log, template.tmpl + data.json
Датаапрель 2026
Количество прогонов15 (5 задач × 3 стиля)

Шесть итогов

  1. Skill (original) — 82k токенов, на 12% дешевле Explanatory и на 24% дешевле Our Caveman
  2. Персона = overhead: Our Caveman самый дорогой, хотя речь короче всех
  3. На сложных задачах стили конвергируют: T3 25k/24k/25k, T5 23k/17k/17k
  4. Код одинаковый: 2,278 / 2,360 / 2,492 строк, качество в одном коридоре
  5. Единственный функциональный пропуск — group-by в T2 у персоны
  6. "Be concise" > "Be caveman": механизм — убирание филлеров, не персона

Рис. 1. Codex CLI, 5 задач × 3 стиля: Skill (original) — абсолютный победитель, Caveman — самый дорогой

Результаты: Claude + Codex

Два эксперимента, две модели, одни и те же выводы.

Вопрос А: Сколько реально экономит?

А что с обещанными 75%? Каждая реплика Caveman действительно в 3–4 раза короче — текст ответов сжимается сильно. Но общие токены сессии — нет:

  • Код не становится короче (Caveman в моих тестах написал даже больше кода)
  • Tool calls идентичны
  • Инфраструктурные токены (system prompt, tool definitions) — те же

Реальная экономия на сложных задачах: 20–32%. На простых: ~0–5%. Потому что на простых задачах нет циклов коммуникации — Claude проходит в 1 прогон и не успевает выдать вам достаточно CAVEMAN-текста, чтобы экономия была заметна.

Codex подтверждает: Caveman-агент произнёс 2,309 символов, Explanatory — 4,860. Речь в 2.1x короче. Но выполнил 27 команд против 18 — компенсировал краткость суетой.

Вопрос Б: Влияет ли на интеллект?

Я не увидел явного падения в качестве на разных кейсах. Есть намёк на то, что CAVEMAN пытается "забрутфорсить" решение и сделать "здесь и сейчас", тогда как Explanatory чуть аккуратнее декомпозирует задачу. Но разница не выражена — можно списать на погрешность.

Codex подтверждает: независимый код-ревью — 38 vs 39 из 50. Разница в 1 балл. Код идентичен по архитектуре. "The caveman prompt did not produce caveman code."

Что точно работает: Caveman экономит токены на длинных цепочках диалогов. Но только на тех сообщениях, которые отправляются пользователю. Код и внутренние рассуждения идут как обычно.

Неожиданная находка: "думай кратко" = дороже

Самое интересное случилось, когда я ужесточил эксперимент.

Я создал Caveman v2: thinking пещерный, промпты субагентам пещерные, имена задач пещерные. Полное погружение.

Результат: +42% overhead относительно базового Caveman. Cave v2 не просто потерял экономию — он стал хуже самого обычного Caveman, который должен был экономить.

Почему? Потому что:

  • "Говори кратко" — это фильтр на выходе. Дёшево.
  • "Думай кратко" — это constraint на процесс. Модель начинает тратить токены на самомониторинг: проверяет, достаточно ли она "пещерная", переформулирует, контролирует стиль на каждом шаге.

Это ключевое различие, которое многие упускают.

Для субагентов это особенно критично: если lead-агент общается с тиммейтами в caveman-стиле, контекст тиммейта получает деградированный ввод — фрагменты без артиклей, без связок, без нюансов. Это уже не вопрос стиля вывода — это вопрос качества входного контекста для следующего агента в цепочке.

Claude + Codex · сводка

Краткая речь экономит токены, краткое мышление — нет

Две модели, два эксперимента, одинаковый вывод: краткая речь экономит до трети токенов на сложных диалоговых задачах. Но заставить модель «думать пещерно» — это уже overhead, не экономия.

  • Caveman · #F0A050
  • Explanatory · #70B8FF
  • Positive / write · #50C878
  • Overhead · #FF6B6B

Маркетинговое обещание

75%

экономия на тексте ответов, не на полной сессии

Что показали данные

20–32%

реальная экономия на сложных диалоговых задачах

Forced deep caveman

+42%

overhead vs базовый Caveman: самомониторинг и caveman-thinking

Качество кода

38 vs 39

1 балл из 50 — статистический шум

Messages: токены коммуникации

CLI-утилита на Python (PYP)

Caveman
14.8k
66%
Explanatory
14.6k
65%

Сайт-лендинг (Site)

Caveman
15.7k
70.4%
Explanatory
20.8k
93.3%
Cave v2
22.3k
100%

PYP: разница минимальна (~1%). Site: Caveman экономит 24.5% vs Explanatory. Cave v2 — «думай кратко» дороже, чем «говори кратко».

Токены по сессиям Claude Opus 4.6

Метрика PYP Cave PYP Expl Site Cave Site Expl Cave v2
Messages14.8k14.6k15.7k20.8k22.3k
System prompt6.6k6.5k6.6k6.5k7.2k
Tools + MCP + Agents~48k~48k~48k~48k~48k
Free space909.1k909.6k908.4k903.4k901.3k
Delta vs baseline+1.4% OVERHEADbaseline−24.5% SAVEbaseline+42% vs Site Cave OVERHEAD

PYP = CLI-утилита на Python · Site = сайт-лендинг · Cave v2 = thinking + subagents в caveman-стиле · PYP/Site delta — vs Explanatory baseline · Cave v2 delta — vs Site Cave (overhead deep caveman относительно базового) · инфраструктура идентична (~48k на каждую сессию)

Обещано vs реальность

МетрикаCaveman заявляетРеальность
Экономия токенов75%20–32% на сессию
Текст ответов корочеда, 3–4xда, подтверждено
Код компактнеене заявляютнет, +17% кода
Качество решенийsame accuracy~сопоставимо, нюансы
Thinking не затрагиваетсяbrain still bigне проверяемо (зашифровано)

75% — маркетинг про текст ответов, не про рабочую нагрузку сессии

Паттерн поведения агента

Caveman

55 сообщений · 27 команд · много коротких шагов

итеративный маршрут: "sniff, hunt, probe"

Explanatory

19 сообщений · 18 команд · план → выполнение → отчёт

plan 507 chars 2196 chars

планирование 507 символов и финальный summary 2196 символов

  • команда Caveman
  • речь / план / summary
  • запись файла

Рис. 2. Обещанные 75% — это про текст ответов. Реальная экономия на сессию — 20–32%, и только на диалоговых задачах.

Что всё это значит

Caveman решает не ту проблему

Реальная проблема — модели болтливы. Решение — краткость. Caveman добавляет поверх краткости персону, словарь, стилистику — и всё это overhead.

Всякие обёртки в виде CAVEMAN только усложняют модель, потому что ей нужно перепроверять себя: ведёт ли она себя как CAVEMAN или нет. В её претрейнинговом датасете не было фрейминга на CAVEMAN-поведение — это нестандартная для модели роль. Каждый токен, потраченный на соответствие персоне, — это токен, не потраченный на решение вашей задачи.

Если бы моя задача была в экономии токенов, я бы просто написал:

"Be concise. Lead with action, not reasoning. Skip filler. No preamble. Code comments stay normal."

Чистая инструкция "be concise" даёт 80% выгоды Caveman при 0% рисков.

Шире, чем Caveman

Этот эксперимент — частный случай более широкой темы. Мы привыкли думать о промпте в двух измерениях: что сказать модели и как структурировать. Но есть третье измерение — в какой когнитивной рамке говорить с моделью:

Стиль промптаЧто активируетсяРиск
"Ты senior-инженер"Экспертные паттерны, нюансы, edge casesПереусложнение
"Будь краток"Фокус на главном, меньше шумаПотеря деталей
"Говори как пещерный человек"Примитивные паттерны, прямолинейностьOverhead на персону
"Объясни как ребёнку"Аналогии, упрощение, пошаговостьПотеря точности
"Действуй как аналитик McKinsey"Структурность, фреймворкиШаблонность

Каждый из этих стилей — не косметика. Это конфигурация вычислительного графа модели.

Anthropic обнаружила внутри Claude 171 эмоциональное представление — внутренние паттерны, которые каузально влияют на поведение модели. Контекст, который мы подаём, не просто информирует — он активирует внутренние состояния, меняющие стратегию рассуждения.

Свежая работа "Brevity Constraints Reverse Performance Hierarchies" (март 2026) показала, что ограничение больших моделей краткостью улучшает точность на 26 п.п. — потому что многословие вносит ошибки через переусложнение. Но "будь краток" и "будь пещерным человеком" — это принципиально разные инструкции.

Итого

Это уже не пласт инженерии. Это психология моделей.

Изучение Soul-документов — документов характера, встроенных в веса модели при обучении. Активация эмоциональных векторов. Понимание "личности" каждой модели — всего, что было заложено на претрейнинге.

Anthropic определяет Context Engineering как поиск "наименьшего набора высокосигнальных токенов, максимизирующих вероятность желаемого результата". Но "высокосигнальный" — это не только про информацию. Это про активацию правильных внутренних представлений.

Каждый стилистический выбор в промпте — это архитектурное решение. Относитесь к нему соответственно.

Язык определяет мышление. Для LLM — буквально.

Методология

Короткие фрагменты raw-выводов по каждой задаче. Полные прогоны остались в source-пакете и в публикацию не попали.

T1 dir_analyzer.py — Caveman-ветка, первые строки результата
=== VERSION A: Our Caveman ===
from __future__ import annotations

import argparse
import hashlib
import os
import sys
from collections import Counter, defaultdict
from dataclasses import dataclass
from pathlib import Path
from typing import DefaultDict, List, Optional, Tuple


CHUNK_SIZE = 1024 * 1024
NO_EXTENSION_LABEL = "[no extension]"


@dataclass
class FileRecord:
    path: Path
    display_path: str
    size: int
    extension: str


@dataclass
class AnalysisResult:
    root: Path
    files: List[FileRecord]
    extension_counts: Counter
    total_size: int
    duplicates: List[Tuple[str, List[FileRecord]]]
    warnings: List[str]


def parse_args() -> argparse.Namespace:
    parser = argparse.ArgumentParser(
        description="Analyze a directory and print a formatted report."
    )
    parser.add_argument(
        "directory",
        nargs="?",
        default=".",
        help="Directory to analyze. Defaults to the current directory.",
    )
    return parser.parse_args()
T1 dir_analyzer.py — Explanatory-ветка, тот же старт задачи
=== VERSION C: Explanatory ===
#!/usr/bin/env python3
"""Analyze a directory and print a formatted report."""

from __future__ import annotations

import argparse
import hashlib
import os
import sys
from collections import Counter, defaultdict
from dataclasses import dataclass, field
from datetime import datetime
from pathlib import Path
from typing import Iterable


CHUNK_SIZE = 1024 * 1024
NO_EXTENSION_LABEL = "[no extension]"


@dataclass
class FileRecord:
    path: str
    relative_path: str
    size: int
    extension: str


@dataclass
class DuplicateGroup:
    digest: str
    files: list[FileRecord] = field(default_factory=list)


@dataclass
class AnalysisResult:
    root: str
    extension_counts: Counter[str]
    total_size: int
    files: list[FileRecord]
    duplicates: list[DuplicateGroup]
    warnings: list[str]


def parse_args(argv: list[str] | None = None) -> argparse.Namespace:
    parser = argparse.ArgumentParser(
        description="Analyze a directory and print file counts, size, largest files, and duplicates."
T5 template engine — один из сложных фрагментов
=== VERSION C: Explanatory ===
from __future__ import annotations

import argparse
import ast
import html
import json
import re
import sys
from dataclasses import dataclass
from pathlib import Path
from typing import Any, Union


class TemplateError(Exception):
    """Base class for template engine failures."""


class TemplateSyntaxError(TemplateError):
    def __init__(self, message: str, template_name: str, line: int) -> None:
        self.message = message
        self.template_name = template_name
        self.line = line
        super().__init__(self.__str__())

    def __str__(self) -> str:
        return f"{self.template_name}:{self.line}: {self.message}"


class TemplateRenderError(TemplateError):
    def __init__(self, message: str, template_name: str, line: int) -> None:
        self.message = message
        self.template_name = template_name
        self.line = line
        super().__init__(self.__str__())

    def __str__(self) -> str:
        return f"{self.template_name}:{self.line}: {self.message}"


class TemplateIOError(TemplateError):
    pass


class SafeString(str):
    """Marker type used to skip HTML escaping on final output."""


@dataclass(frozen=True)
class Token:

Источники

  1. Caveman — Claude Code skill

    Исходный навык, из которого вырос эксперимент. Полезно посмотреть README и обещания про скорость, читаемость и экономию токенов

  2. Caveman SKILL.md

    Тот самый слой инструкций: “Respond terse like smart caveman”. Важно как пример Output Style, который меняет генерацию с первого токена

  3. Effective Context Engineering for AI Agents

    Базовый текст Anthropic про context engineering и “наименьший набор высокосигнальных токенов”. Помогает увидеть Output Style как часть управления контекстом

  4. Context Rot: How Increasing Input Tokens Impacts LLM Performance

    Исследование Chroma про деградацию качества при росте контекста. Хороший фон к тезису, что больше текста не всегда означает лучшее поведение модели

  5. Emotion Concepts and their Function in a Large Language Model

    Mechanistic interpretability-работа про внутренние эмоциональные представления Claude. Нужна для мысли, что контекст активирует состояния, а не просто добавляет факты

  6. Brevity Constraints Reverse Performance Hierarchies

    Работа о том, как ограничения краткости меняют качество ответов больших моделей. Важное различие: “будь краток” и “будь пещерным человеком” не одно и то же

  7. Claude 4.5 Opus' Soul Document

    Разбор “документа характера”, встроенного в обучение модели. Полезен как пример неявного контекста, который взаимодействует с явными инструкциями