Документация settings.json
Настройте выполнение хуков Claude Code, разрешения, события, тайм-ауты, среду выполнения Python, валидацию и слоистую приоритетность настроек для экосистемы Apothem.
Область применения. Этот документ описывает файл подключения хуков (
settings.json) адаптера Claude Code. Другие harness используют собственные нативные поверхности настроек — см.site/content/docs/harnesses/<harness>.mdxдля эквивалентной точки входа конфигурации каждого адаптера.
Обзор
settings.json настраивает выполнение хуков Claude Code для экосистемы Apothem.
Он объявляет, какие хуки срабатывают на какие события, их тайм-ауты и поверхность
разрешений верхнего уровня. Apothem поставляет один канонический шаблон, потому что Claude Code
загружает ~/.claude/settings.json на всех поддерживаемых платформах.
Среда выполнения только для Python
Каждый настроенный хук использует exec-форму команды Claude Code.
Поставляемый шаблон несёт токен ${HARNESS_ROOT}:
{
"type": "command",
"command": "python",
"args": ["${HARNESS_ROOT}/apothem/hooks/dispatch.py", "PreToolUse", "pretooluse-write"]
}apothem install отрисовывает токен в абсолютный путь корня harness
(форма с прямым слешем, действительная в Windows, macOS и Linux), так что установленный
settings.json напрямую вызывает диспетчер, материализованный в
~/.claude/.apothem/support/hooks/dispatch.py. Диспетчер и
гейт соответствия (~/.claude/.apothem/support/conformity/gate.py, с его schema-фикстурами
рядом в ~/.claude/.apothem/support/schemas/) — это самостоятельные скрипты стандартной
библиотеки — на хосте не требуется импортируемый пакет apothem, и один
шаблон обслуживает каждую платформу.
Схема конфигурации хуков
Разрешения
"permissions": {
"allow": ["Read", "Glob", "Grep"]
}Инструменты, отсутствующие в allow, требуют явного одобрения для каждого вызова или разрешения на уровне рабочего пространства.
Инструменты только для чтения предварительно одобрены; операции записи (Write, Edit, NotebookEdit,
Bash) проходят через валидатор PreToolUse.
События хуков
Значения тайм-аутов отражают канонические бюджеты событий хуков — таблица ниже воспроизводит их для удобства читателя; канонический источник имеет приоритет.
| Событие | Триггер | Тайм-аут | Назначение | Мандат |
|---|---|---|---|---|
| SessionStart | Новая сессия Claude Code | 30 секунд | Инициализировать контекст, прочитать память, проверить состояние плана | CM-14 |
| PreToolUse | Перед Write/Edit/NotebookEdit/Bash | 10 секунд | Валидировать соответствие CM-7 + frontmatter | CM-7, CM-22 |
| PreCompact | Перед уплотнением контекста | 30 секунд | Экстернализировать неэкстернализованное состояние | CM-24 §2.3 |
| PostCompact | После уплотнения контекста | 30 секунд | Перезагрузиться из экстернализованного состояния | CM-24 §6.2 |
| Stop | Выход из сессии | 60 секунд | Экстернализация в конце сессии | CM-14/CM-22/CM-24/CM-26 |
dispatch.py дополнительно принимает UserPromptSubmit и Notification в своём
белом списке событий. Ни одно не подключено в поставляемых шаблонах; добавьте блок matcher с тем же
шаблоном локатора + диспетчеризации, чтобы включить его.
Поля верхнего уровня
| Поле | Назначение | Обязательно |
|---|---|---|
permissions | Объект с массивом allow, перечисляющим предварительно одобренные имена инструментов (по умолчанию инструменты только для чтения) | да |
hooks | Карта имени события → массив блоков {matcher, hooks[]}; см. События хуков ниже | да |
model | Селектор модели, разрешаемый хостом. Псевдоним или полный идентификатор допустим, когда оператор выбирает его установить. | опционально |
defaultShell | Оболочка по умолчанию для вызовов инструмента Bash. Apothem не устанавливает это в общем шаблоне. | опционально |
autoUpdatesChannel | Канал обновлений Claude Code. Apothem не устанавливает это в общем шаблоне. | опционально |
effortLevel | Усилие рассуждения по умолчанию (low, medium, high, max) | опционально |
Валидация
Три валидатора покрывают поверхность хуков с возрастающей строгостью:
# Структурный + гигиена Python (быстро, офлайн)
python scripts/dev/validate_hooks.py
# Полная экосистема (структура + frontmatter + делегированные проверки хуков)
python scripts/dev/validate_ecosystem.py
# Состязательный обход (штурмует каждую настроенную команду хука деградированными входами)
python scripts/dev/chaos_pass.pyВсе три должны завершиться с кодом 0 перед коммитом изменений хуков или настроек.
Разовый дымовой тест одного события:
python src/apothem/hooks/dispatch.py --event-name SessionStartОжидаемый вывод: однострочный JSON-конверт, содержащий hookSpecificOutput.
Частые проблемы
SessionStart истекает по тайм-ауту
Чаще всего локатор find-python обнаруживает заглушку Microsoft Store и
не может разрешить настоящий интерпретатор. Проверьте:
python src/apothem/hooks/dispatch.py --event-name SessionStartЕсли команда печатает действительный JSON-конверт, но панель Claude Code показывает тайм-аут,
повысьте timeout события в settings.json. Если команда падает на уровне оболочки,
установите настоящий CPython 3.10+ и убедитесь, что он находится в PATH или обнаруживается локатором.
Каждый Write/Edit блокируется
PreToolUse помечает внутренние термины плана в содержимом, записываемом вне корня установки harness (~/.claude/ для адаптера Claude Code).
Просмотрите содержимое на предмет нарушений CM-7 (см.
src/apothem/rules/persistent-conventions-vigilance.md). Только доменный язык для
артефактов кодовой базы.
settings.json не загружается
Claude Code читает ~/.claude/settings.json. Убедитесь, что Apothem установлен в
ожидаемый корень harness, и перезапустите сессию после изменения файла.
Хуки молча ничего не делают
Контракт хука — «всегда завершаться с 0, всегда выдавать действительный JSON». Если интерпретатор не может
быть найден, локатор возвращает пустоту, и команда становится no-op. Запустите chaos_pass.py,
чтобы подтвердить, что каждый настроенный хук возвращает действительный конверт — он ловит деградированные
пути разрешения, которые скрыла бы живая сессия.
Слоистая приоритетность
Claude Code разрешает эффективный объект настроек, компонуя три слоя в возрастающем порядке приоритета:
| Уровень | Расположение | Закоммичено? | Обоснование |
|---|---|---|---|
| 1. Система | Значения по умолчанию harness, скомпилированные в сам Claude Code | н/п (под контролем поставщика) | Пол; каждый оператор наследует одну и ту же базовую линию. |
| 2. Проект | <harness-root>/settings.json | ✅ Закоммичено | Общие для проекта соглашения: хуки, разрешения, серверы MCP, подключение строки состояния. Шаблон исходников Apothem находится внутри директории templates адаптера Claude Code. |
| 3. Локально для пользователя | <harness-root>/settings.local.json (gitignored) — шаблонизирован как settings.local.example.json в корне репозитория | ❌ Gitignored | Специфичные для оператора переопределения: токены API, локальные пути машины, опциональные функции. |
Значения более высокого уровня переопределяют значения более низкого уровня на уровне листового ключа — когда
и слой проекта, и слой локально-для-пользователя объявляют запись permissions.allow, берётся
объединение; когда оба объявляют скаляр вроде theme, побеждает значение локально-для-пользователя. Точная
семантика слияния по ключам принадлежит harness Claude Code.
Создание локального переопределения пользователя
- Скопируйте
settings.local.example.json(корень репозитория) в<harness-root>/settings.local.json. Имя файлаsettings.local.jsonсоответствует шаблону.gitignore, поэтому файл никогда не попадает в систему контроля версий. - Отредактируйте локальную копию — оставьте только ключи для переопределения; harness компонует слои, поэтому отсутствующие ключи наследуются из слоя проекта.
- Перед сохранением убедитесь, что файл разбирается как действительный JSON — harness отклоняет некорректный JSON при старте сессии.
Настройки
Конфигурация harness Claude Code в settings.json, охватывающая разрешения инструментов, подключение хуков, переменные окружения и шаблоны строки состояния.
Соглашения об именовании
Предписывает имена файлов в kebab-case, формат ключей frontmatter, именование веток с префиксами типа и семантику числовых префиксов для упорядоченных последовательностей артефактов.