Harness - слой, который задаёт модели среду. Какие тулы есть, что знает всегда, какая память переживает
/clear, когда обязана остановиться или спросить.Без harness каждая сессия начинается с нуля:
«Привет, у нас Next.js 15, не трогай .env, тесты гоняем так».
С harness это один раз описывается и работает.
Четыре вопроса, на которые модель сама не ответит:
- Что я могу делать? - тулы и пермишены
- Что знаю всегда? - стек, соглашения, ограничения
- Что делала в прошлый раз? - память между сессиями
- Когда остановиться или спросить? - границы автономии
Окно контекста конечно. И деградирует задолго до формального потолка - на 1M-моделях качество падает уже к 200K (Chroma Research). Anthropic называет это context rot(гниение контекста).
Поэтому знания раскладываем по слоям. Слой - это про цену в токенах и вероятность, что знание окажется в контексте в нужный момент.
Пять слоёв, от дорогого к дешёвому:
1. Каждый turn каждой сессии - `AGENT.md`, `CLAUDE.md`
2. На событие - hooks: `session_start`, `tool_use`, `stop`
3. На контекст - `skills/`, `rules/` с `paths:`
4. Когда позвали - `agents/`, `commands/`, MCP
5. Когда прочитали руками - `docs/`, ADR
Правило «в проекте нет Anthropic API» - слой 1, иначе модель попробует и сломается.
Детали оформления devlog - слой 3, нужны только когда реально пишет.
⸻
Отдельная история - безопасность. Удобно делить на три типа границ.
Trust gate - можно ли это вообще делать. Whitelist действий, заданный до начала работы.
allow: ["Read"] в settings.Information gate - что модель видит прямо сейчас. Это и есть слои выше.
CLAUDE.md - всегда. Skill - после триггера. Devlog - только если явно прочитала.Containment - что сломается, если actor всё-таки ошибся. Не предотвращает ошибку, а сужает blast radius.
- Subagent со свежим контекстом и
tools: [Read, Grep] физически не может писать. - Git worktree изолирует эксперимент.
- Bubblewrap/Seatbelt отделяет процесс от системы.
⸻
В новом гайде Anthropic есть прямая фраза:
«По мере совершенствования моделей разработчикам следует избавляться от лишних вспомогательных элементов, а не усложнять структуру».
Если модель умеет X нативно - не надо расширять harness под X. С каждой новой моделью объём
.claude/ должен сокращаться, а не расти.Удаляй старое, не добавляй лишнее.
P.S.
Пост Валеры по теме
Гайд Anthropic: https://www.anthropic.com/engineering/harness-design-long-running-apps