Справочник конфигурации
Каждая настройка Handbooks — её флаг, переменная окружения, ключ в файле конфигурации, тип и значение по умолчанию — сгенерировано из реестра.
Эта страница — перевод сгенерированной страницы. Английский оригинал генерируется командой pnpm run config:docs из реестра настроек и защищён тестом на дрейф; перевод поддерживается вручную — когда меняется оригинал, обновите и его.
Приоритет
Каждая настройка разрешается через одни и те же слои, в порядке убывания приоритета: флаг > окружение шелла > .env > handbook.config.yaml > значение по умолчанию. Побеждает первый слой, который даёт значение, и все нижележащие слои для этой настройки игнорируются. Запустите handbook config — или handbook config --command <name>, чтобы увидеть только одну подкоманду, — чтобы проверить, что на самом деле разрешилось и из какого слоя это пришло.
Именование
Один ключ key в camelCase из реестра управляет всеми тремя поверхностями сразу: флагом, переменной окружения и ключом в файле конфигурации. Префикс с именем команды у любой из них ограничивает эту поверхность одной подкомандой, и это одно и то же преобразование для всех трёх — HANDBOOK_<KEY> становится HANDBOOK_<COMMAND>_<KEY>, а key становится <command>Key, записан ли он плоско или вложенно на один уровень под <command>:. Настройка, помеченная ниже как (с областью видимости), принимает только префиксное имя переменной окружения, потому что её смысл меняется от команды к команде (--out, --lang в пакете skill).
Начальная загрузка
Три настройки верхнего уровня указывают на слои выше и сами находятся вне реестра, разрешаясь один раз до всех остальных настроек — именно поэтому ни одну из них нельзя задать тем, что она загружает: ключ --env внутри handbook.config.yaml, строка --env-file внутри .env или ключ --config внутри того же файла остались бы просто некому прочитать.
--env <name>(илиHANDBOOK_ENV) выбирает каскад для конкретного окружения — единственная из трёх, у которой есть и флаг, и форма переменной окружения, поскольку она называет окружение, а не указывает на один конкретный файл.--env-file <path>загружает ровно этот один файл, минуя каскад ниже.--config <path>называет один конкретный файл конфигурации, минуя поиск с учётом окружения, описанный ниже (по умолчанию: ближайший файл семействаhandbook.config.yaml, найденный подъёмом вверх от рабочей директории с остановкой на границе репозитория).
Каскад .env
Без --env-file CLI загружает каскад файлов .env* вместо одного фиксированного файла, в порядке убывания приоритета. Существующее правило applyEnvFile — никогда не перекрывать уже заданный ключ — это и есть то, что превращает каскад просто в «вызови их в таком порядке, побеждает первый файл, задавший ключ»:
| # | файл | кто | область | в коммите? |
|---|---|---|---|---|
| 1 | окружение шелла | — | — | всегда побеждает |
| 2 | .env.<name>.local | личное | только это окружение | нет (в gitignore) |
| 3 | .env.<name> | командное | только это окружение | да |
| 4 | .env.local | личное | каждое окружение | нет (в gitignore) |
| 5 | .env | командное | базовый уровень | да |
Строки 2 и 3 применяются только тогда, когда --env/HANDBOOK_ENV называет окружение. Если не задано ни то ни другое, загружаются только строки 4 и 5 — ровно то, что загружалось до появления этого каскада, поэтому существующая настройка без .env.local не увидит вообще никаких изменений.
Поиск файла конфигурации с окружением
Если не считать --config, поиск по-прежнему поднимается вверх от рабочей директории и останавливается на границе репозитория, но в каждой посещённой директории он теперь сначала проверяет handbook.config.<name>.{yaml,yml,json} (только когда окружение названо), а уже потом обычный handbook.config.yaml и прочие — поэтому именованный файл всегда побеждает обычный файл, лежащий в той же директории, даже если обычный файл есть на уровне, более близком к рабочей директории. Если окружение не названо, поиск не меняется.
Запустите handbook config, чтобы увидеть, какое окружение активно и какие именно файлы оно загрузило, в порядке приоритета — каскад поверх четырёх слоёв значений — это слишком много возможных источников, чтобы держать их в голове, а слой, который эта команда не может показать, ничем не отличается от слоя, который не работает.
Разобранный пример для readWorkers (флаг --read-workers <n>, по умолчанию 12):
| поверхность | плоская | с областью видимости generate |
|---|---|---|
| env | HANDBOOK_READ_WORKERS | HANDBOOK_GENERATE_READ_WORKERS |
ключ handbook.config.yaml | readWorkers | generateReadWorkers |
Формы для файла конфигурации взаимозаменяемы: плоский readWorkers: ... и вложенный generate: { readWorkers: ... } означают одно и то же, потому что файл уплощается тем же camelCase-склеиванием, прежде чем его прочитают.
analyze
| ключ | флаг | env | тип | по умолчанию | описание |
|---|---|---|---|---|---|
logLevel | — | HANDBOOK_LOG_LEVEL | enum (debug|info|warn|error|silent) | info | детализация логов; -v/--verbose и -q/--quiet — сокращения для debug/error |
source | --source <dir> | HANDBOOK_SOURCE | path | обязательно | корень исходников; обязателен для analyze/generate/plan/apply, в остальных случаях необязателен (свежесть хешей для validate/skill и дерево, которому принадлежит резервная копия, для rollback) |
work | --work <dir> | HANDBOOK_WORK | path | обязательно | рабочий каталог с артефактами pipeline; необязателен для skill, где он добавляет coverage.json |
lang | --lang <lang> | HANDBOOK_LANG | enum (auto, плюс любой зарегистрированный язык) | auto | язык исходников; auto определяет и объединяет все зарегистрированные языки |
generate
| ключ | флаг | env | тип | по умолчанию | описание |
|---|---|---|---|---|---|
logLevel | — | HANDBOOK_LOG_LEVEL | enum (debug|info|warn|error|silent) | info | детализация логов; -v/--verbose и -q/--quiet — сокращения для debug/error |
llmApiKey | — | HANDBOOK_LLM_API_KEY, OPENAI_API_KEY | string | "" (пусто) | ключ API для конечной точки LLM; используйте EMPTY для локальных конечных точек без ключа. Никогда не флаг и никогда не допускается в файле конфигурации |
llmProvider | --provider <name> | HANDBOOK_LLM_PROVIDER, OPENAI_PROVIDER | enum (openai|anthropic|gemini) | openai | формат обмена с LLM; 'openai' покрывает любую OpenAI-совместимую конечную точку (то есть большинство из них) |
llmModel | --model <id> | HANDBOOK_LLM_MODEL, OPENAI_MODEL | string | gpt-4o-mini | идентификатор модели |
llmBaseUrl | --base-url <url> | HANDBOOK_LLM_BASE_URL, OPENAI_BASE_URL | string | https://api.openai.com/v1 | любая OpenAI-совместимая конечная точка (хостинг, vLLM, LiteLLM, прокси); URL со встроенными учётными данными отклоняется в файле конфигурации, который попадает в коммиты |
llmMaxTokens | --max-tokens <n> | HANDBOOK_LLM_MAX_TOKENS, OPENAI_MAX_TOKENS | int | 16000 | максимум выходных токенов на запрос |
llmTimeout | --timeout <sec> | HANDBOOK_LLM_TIMEOUT, OPENAI_TIMEOUT | int | 300 | дедлайн на запрос в секундах; зависший вызов повторяется, а не держит фазу в заложниках |
llmMaxRetries | --llm-retries <n> | HANDBOOK_LLM_MAX_RETRIES | int | 6 | число повторных попыток на запрос; 0 означает единственную попытку |
llmRetryBackoff | --llm-retry-backoff <sec> | HANDBOOK_LLM_RETRY_BACKOFF | int | 3 | базовая задержка между повторами, в секундах |
llmConcurrency | --llm-concurrency <n> | HANDBOOK_LLM_CONCURRENCY | int | 16 | глобальный предел одновременных запросов через одного клиента |
llmExtraBody | — | HANDBOOK_LLM_EXTRA_BODY, OPENAI_EXTRA_BODY | json | — | вендорские поля, подмешиваемые в тело каждого запроса; поля model/messages/token переопределить нельзя. Форма произвольная, поэтому трактуется как секрет: никогда не флаг и никогда не допускается в файле конфигурации |
source | --source <dir> | HANDBOOK_SOURCE | path | обязательно | корень исходников; обязателен для analyze/generate/plan/apply, в остальных случаях необязателен (свежесть хешей для validate/skill и дерево, которому принадлежит резервная копия, для rollback) |
work | --work <dir> | HANDBOOK_WORK | path | обязательно | рабочий каталог с артефактами pipeline; необязателен для skill, где он добавляет coverage.json |
lang | --lang <lang> | HANDBOOK_LANG | enum (auto, плюс любой зарегистрированный язык) | auto | язык исходников; auto определяет и объединяет все зарегистрированные языки |
phase | --phase <spec> | HANDBOOK_PHASE | string | all | all | 1 | 2 | 2a | 2b | 2c | 3 или список через запятую |
strategy | --strategy <s> | HANDBOOK_STRATEGY | enum (file|member) | — | file (по умолчанию) или member; незаданное сохраняет стратегию, записанную в рабочем каталоге |
skeleton | --skeleton <path> | HANDBOOK_SKELETON | path | — | написанный пользователем skeleton.yaml, обязателен для стратегии member |
narrateLang | --narrate-lang <l> | HANDBOOK_NARRATE_LANG | enum (en|zh) | en | язык прозы |
detail | --detail <d> | HANDBOOK_DETAIL | enum (brief|deep) | brief | глубина карточек |
synthMode | --synth-mode <m> | HANDBOOK_SYNTH_MODE | enum (oneshot|doctor) | oneshot | режим синтеза скелета |
maxDoctorRounds | --max-doctor-rounds <n> | HANDBOOK_MAX_DOCTOR_ROUNDS | int | 6 | раунды сходимости доктора |
readWorkers | --read-workers <n> | HANDBOOK_READ_WORKERS | int | 12 | параллельные пакеты карточек |
readBatchSize | --read-batch-size <n> | HANDBOOK_READ_BATCH_SIZE | int | — | файлов на пакет карточек; незаданное означает 1 для --detail deep и 8 для brief |
maxCharsPerFile | --max-chars-per-file <n> | HANDBOOK_MAX_CHARS_PER_FILE | int | 0 | обрезать каждый файл до n символов; 0 означает без ограничения |
assignBatchSize | --assign-batch-size <n> | HANDBOOK_ASSIGN_BATCH_SIZE | int | 25 | карточек на пакет назначения |
assignWorkers | --assign-workers <n> | HANDBOOK_ASSIGN_WORKERS | int | 12 | параллельные пакеты назначения |
organizeWorkers | --organize-workers <n> | HANDBOOK_ORGANIZE_WORKERS | int | 8 | параллельные вызовы организации этапов |
narrateWorkers | --narrate-workers <n> | HANDBOOK_NARRATE_WORKERS | int | 8 | параллельные вызовы повествования |
resume | --resume | HANDBOOK_RESUME | bool | false | пропускать файлы, у которых уже есть готовая карточка |
refresh | --refresh | HANDBOOK_REFRESH | bool | false | игнорировать кеши phase 3 |
llmCache | --llm-cache | HANDBOOK_LLM_CACHE | bool | false | кешировать сырые ответы LLM в /phase3/cache; отключается флагом --refresh |
render
| ключ | флаг | env | тип | по умолчанию | описание |
|---|---|---|---|---|---|
logLevel | — | HANDBOOK_LOG_LEVEL | enum (debug|info|warn|error|silent) | info | детализация логов; -v/--verbose и -q/--quiet — сокращения для debug/error |
work | --work <dir> | HANDBOOK_WORK | path | обязательно | рабочий каталог с артефактами pipeline; необязателен для skill, где он добавляет coverage.json |
title | --title <title> | HANDBOOK_TITLE | string | System Handbook | заголовок руководства для отрендеренных результатов |
out | --out <dir> | HANDBOOK_RENDER_OUT (с областью видимости) | path | — | расположение результата; render по умолчанию использует /handbook, plan пишет файл, skill пишет каталог |
html | --html | HANDBOOK_HTML | bool | false | дополнительно отрендерить многостраничный HTML-сайт в /html |
htmlSingle | --html-single | HANDBOOK_HTML_SINGLE | bool | false | дополнительно отрендерить одну самодостаточную HTML-страницу |
agentSite | --agent-site | HANDBOOK_AGENT_SITE | bool | false | дополнительно отрендерить локаторный индекс для агентов в /agent |
llmsTxt | --llms-txt | HANDBOOK_LLMS_TXT | bool | false | дополнительно записать llms.txt и llms-full.txt рядом с markdown |
sourceBaseUrl | --source-base-url <url> | HANDBOOK_SOURCE_BASE_URL | string | — | связывать карточки файлов с исходником по адресу / |
skill
| ключ | флаг | env | тип | по умолчанию | описание |
|---|---|---|---|---|---|
logLevel | — | HANDBOOK_LOG_LEVEL | enum (debug|info|warn|error|silent) | info | детализация логов; -v/--verbose и -q/--quiet — сокращения для debug/error |
source | --source <dir> | HANDBOOK_SOURCE | path | — | корень исходников; обязателен для analyze/generate/plan/apply, в остальных случаях необязателен (свежесть хешей для validate/skill и дерево, которому принадлежит резервная копия, для rollback) |
work | --work <dir> | HANDBOOK_WORK | path | — | рабочий каталог с артефактами pipeline; необязателен для skill, где он добавляет coverage.json |
out | --out <dir> | HANDBOOK_SKILL_OUT (с областью видимости) | path | обязательно | расположение результата; render по умолчанию использует /handbook, plan пишет файл, skill пишет каталог |
handbook | --handbook <dir> | HANDBOOK_SKILL_HANDBOOK (с областью видимости) | path | обязательно | каталог отрендеренного руководства; обязателен для skill, необязательный контекст для plan |
name | --name <slug> | HANDBOOK_NAME | string | обязательно | slug скилла (строчные буквы и дефисы) |
project | --project <name> | HANDBOOK_PROJECT | string | — | человекочитаемое имя проекта для текста |
agentDir | --agent-dir <dir> | HANDBOOK_AGENT_DIR | path | — | отрендеренный сайт-локатор для агентов; поставляется в references/agent/ |
bodyLang | --lang <l> | HANDBOOK_SKILL_BODY_LANG (с областью видимости) | enum (en|zh) | en | язык тела SKILL.md; фронтматтер остаётся английским для маршрутизации |
validate
| ключ | флаг | env | тип | по умолчанию | описание |
|---|---|---|---|---|---|
logLevel | — | HANDBOOK_LOG_LEVEL | enum (debug|info|warn|error|silent) | info | детализация логов; -v/--verbose и -q/--quiet — сокращения для debug/error |
source | --source <dir> | HANDBOOK_SOURCE | path | — | корень исходников; обязателен для analyze/generate/plan/apply, в остальных случаях необязателен (свежесть хешей для validate/skill и дерево, которому принадлежит резервная копия, для rollback) |
skill | --skill <dir> | HANDBOOK_SKILL | path | обязательно | каталог скилла для проверки |
plan
| ключ | флаг | env | тип | по умолчанию | описание |
|---|---|---|---|---|---|
logLevel | — | HANDBOOK_LOG_LEVEL | enum (debug|info|warn|error|silent) | info | детализация логов; -v/--verbose и -q/--quiet — сокращения для debug/error |
llmApiKey | — | HANDBOOK_LLM_API_KEY, OPENAI_API_KEY | string | "" (пусто) | ключ API для конечной точки LLM; используйте EMPTY для локальных конечных точек без ключа. Никогда не флаг и никогда не допускается в файле конфигурации |
llmProvider | --provider <name> | HANDBOOK_LLM_PROVIDER, OPENAI_PROVIDER | enum (openai|anthropic|gemini) | openai | формат обмена с LLM; 'openai' покрывает любую OpenAI-совместимую конечную точку (то есть большинство из них) |
llmModel | --model <id> | HANDBOOK_LLM_MODEL, OPENAI_MODEL | string | gpt-4o-mini | идентификатор модели |
llmBaseUrl | --base-url <url> | HANDBOOK_LLM_BASE_URL, OPENAI_BASE_URL | string | https://api.openai.com/v1 | любая OpenAI-совместимая конечная точка (хостинг, vLLM, LiteLLM, прокси); URL со встроенными учётными данными отклоняется в файле конфигурации, который попадает в коммиты |
llmMaxTokens | --max-tokens <n> | HANDBOOK_LLM_MAX_TOKENS, OPENAI_MAX_TOKENS | int | 16000 | максимум выходных токенов на запрос |
llmTimeout | --timeout <sec> | HANDBOOK_LLM_TIMEOUT, OPENAI_TIMEOUT | int | 300 | дедлайн на запрос в секундах; зависший вызов повторяется, а не держит фазу в заложниках |
llmMaxRetries | --llm-retries <n> | HANDBOOK_LLM_MAX_RETRIES | int | 6 | число повторных попыток на запрос; 0 означает единственную попытку |
llmRetryBackoff | --llm-retry-backoff <sec> | HANDBOOK_LLM_RETRY_BACKOFF | int | 3 | базовая задержка между повторами, в секундах |
llmConcurrency | --llm-concurrency <n> | HANDBOOK_LLM_CONCURRENCY | int | 16 | глобальный предел одновременных запросов через одного клиента |
llmExtraBody | — | HANDBOOK_LLM_EXTRA_BODY, OPENAI_EXTRA_BODY | json | — | вендорские поля, подмешиваемые в тело каждого запроса; поля model/messages/token переопределить нельзя. Форма произвольная, поэтому трактуется как секрет: никогда не флаг и никогда не допускается в файле конфигурации |
source | --source <dir> | HANDBOOK_SOURCE | path | обязательно | корень исходников; обязателен для analyze/generate/plan/apply, в остальных случаях необязателен (свежесть хешей для validate/skill и дерево, которому принадлежит резервная копия, для rollback) |
out | --out <dir> | HANDBOOK_PLAN_OUT (с областью видимости) | path | — | расположение результата; render по умолчанию использует /handbook, plan пишет файл, skill пишет каталог |
handbook | --handbook <dir> | HANDBOOK_PLAN_HANDBOOK (с областью видимости) | path | — | каталог отрендеренного руководства; обязателен для skill, необязательный контекст для plan |
request | --request <text> | HANDBOOK_REQUEST | string | обязательно | запрос на изменение на естественном языке |
maxTurns | --max-turns <n> | HANDBOOK_MAX_TURNS | int | 30 | бюджет ходов агента |
apply
| ключ | флаг | env | тип | по умолчанию | описание |
|---|---|---|---|---|---|
logLevel | — | HANDBOOK_LOG_LEVEL | enum (debug|info|warn|error|silent) | info | детализация логов; -v/--verbose и -q/--quiet — сокращения для debug/error |
source | --source <dir> | HANDBOOK_SOURCE | path | обязательно | корень исходников; обязателен для analyze/generate/plan/apply, в остальных случаях необязателен (свежесть хешей для validate/skill и дерево, которому принадлежит резервная копия, для rollback) |
plan | --plan <file> | HANDBOOK_PLAN | path | обязательно | файл плана, созданный командой handbook plan |
dryRun | --dry-run | HANDBOOK_DRY_RUN | bool | false | только проверка, никогда не записывать |
backupRoot | --backup-root <dir> | HANDBOOK_BACKUP_ROOT | path | — | куда попадают резервные копии; по умолчанию /.handbook-patches |
rollback
| ключ | флаг | env | тип | по умолчанию | описание |
|---|---|---|---|---|---|
logLevel | — | HANDBOOK_LOG_LEVEL | enum (debug|info|warn|error|silent) | info | детализация логов; -v/--verbose и -q/--quiet — сокращения для debug/error |
source | --source <dir> | HANDBOOK_SOURCE | path | — | корень исходников; обязателен для analyze/generate/plan/apply, в остальных случаях необязателен (свежесть хешей для validate/skill и дерево, которому принадлежит резервная копия, для rollback) |
backup | --backup <dir> | HANDBOOK_BACKUP | path | обязательно | каталог резервной копии, содержащий manifest.json |
force | --force | HANDBOOK_FORCE | bool | false | восстанавливать даже файлы, изменившиеся после патча |
resync
| ключ | флаг | env | тип | по умолчанию | описание |
|---|---|---|---|---|---|
logLevel | — | HANDBOOK_LOG_LEVEL | enum (debug|info|warn|error|silent) | info | детализация логов; -v/--verbose и -q/--quiet — сокращения для debug/error |
llmApiKey | — | HANDBOOK_LLM_API_KEY, OPENAI_API_KEY | string | "" (пусто) | ключ API для конечной точки LLM; используйте EMPTY для локальных конечных точек без ключа. Никогда не флаг и никогда не допускается в файле конфигурации |
llmProvider | --provider <name> | HANDBOOK_LLM_PROVIDER, OPENAI_PROVIDER | enum (openai|anthropic|gemini) | openai | формат обмена с LLM; 'openai' покрывает любую OpenAI-совместимую конечную точку (то есть большинство из них) |
llmModel | --model <id> | HANDBOOK_LLM_MODEL, OPENAI_MODEL | string | gpt-4o-mini | идентификатор модели |
llmBaseUrl | --base-url <url> | HANDBOOK_LLM_BASE_URL, OPENAI_BASE_URL | string | https://api.openai.com/v1 | любая OpenAI-совместимая конечная точка (хостинг, vLLM, LiteLLM, прокси); URL со встроенными учётными данными отклоняется в файле конфигурации, который попадает в коммиты |
llmMaxTokens | --max-tokens <n> | HANDBOOK_LLM_MAX_TOKENS, OPENAI_MAX_TOKENS | int | 16000 | максимум выходных токенов на запрос |
llmTimeout | --timeout <sec> | HANDBOOK_LLM_TIMEOUT, OPENAI_TIMEOUT | int | 300 | дедлайн на запрос в секундах; зависший вызов повторяется, а не держит фазу в заложниках |
llmMaxRetries | --llm-retries <n> | HANDBOOK_LLM_MAX_RETRIES | int | 6 | число повторных попыток на запрос; 0 означает единственную попытку |
llmRetryBackoff | --llm-retry-backoff <sec> | HANDBOOK_LLM_RETRY_BACKOFF | int | 3 | базовая задержка между повторами, в секундах |
llmConcurrency | --llm-concurrency <n> | HANDBOOK_LLM_CONCURRENCY | int | 16 | глобальный предел одновременных запросов через одного клиента |
llmExtraBody | — | HANDBOOK_LLM_EXTRA_BODY, OPENAI_EXTRA_BODY | json | — | вендорские поля, подмешиваемые в тело каждого запроса; поля model/messages/token переопределить нельзя. Форма произвольная, поэтому трактуется как секрет: никогда не флаг и никогда не допускается в файле конфигурации |
work | --work <dir> | HANDBOOK_WORK | path | обязательно | рабочий каталог с артефактами pipeline; необязателен для skill, где он добавляет coverage.json |
title | --title <title> | HANDBOOK_TITLE | string | System Handbook | заголовок руководства для отрендеренных результатов |
case | --case <dir> | HANDBOOK_CASE | path | обязательно | каталог кейса: edited/ + plan.md + change.diff |
useLlm | --no-llm | HANDBOOK_USE_LLM | bool | true | задайте false для только структурного обновления, с прозой, помеченной устаревшей |
refreshRendered | --no-render | HANDBOOK_REFRESH_RENDERED | bool | true | задайте false, чтобы не обновлять уже отрендеренные результаты в /handbook |
corrections | --corrections <file> | HANDBOOK_CORRECTIONS | path | — | сообщённый агентом corrections.jsonl; его файлы расширяют набор для обновления |
cardDetail | --detail <d> | HANDBOOK_RESYNC_CARD_DETAIL (с областью видимости) | enum (brief|deep) | — | глубина для перегенерированных карточек; незаданное соответствует существующему руководству |
proseLang | --narrate-lang <l> | HANDBOOK_RESYNC_PROSE_LANG (с областью видимости) | enum (en|zh) | — | язык прозы для перегенерированных карточек; незаданное соответствует существующему руководству |
studio
| ключ | флаг | env | тип | по умолчанию | описание |
|---|---|---|---|---|---|
logLevel | — | HANDBOOK_LOG_LEVEL | enum (debug|info|warn|error|silent) | info | детализация логов; -v/--verbose и -q/--quiet — сокращения для debug/error |
llmApiKey | — | HANDBOOK_LLM_API_KEY, OPENAI_API_KEY | string | "" (пусто) | ключ API для конечной точки LLM; используйте EMPTY для локальных конечных точек без ключа. Никогда не флаг и никогда не допускается в файле конфигурации |
llmProvider | --provider <name> | HANDBOOK_LLM_PROVIDER, OPENAI_PROVIDER | enum (openai|anthropic|gemini) | openai | формат обмена с LLM; 'openai' покрывает любую OpenAI-совместимую конечную точку (то есть большинство из них) |
llmModel | --model <id> | HANDBOOK_LLM_MODEL, OPENAI_MODEL | string | gpt-4o-mini | идентификатор модели |
llmBaseUrl | --base-url <url> | HANDBOOK_LLM_BASE_URL, OPENAI_BASE_URL | string | https://api.openai.com/v1 | любая OpenAI-совместимая конечная точка (хостинг, vLLM, LiteLLM, прокси); URL со встроенными учётными данными отклоняется в файле конфигурации, который попадает в коммиты |
llmMaxTokens | --max-tokens <n> | HANDBOOK_LLM_MAX_TOKENS, OPENAI_MAX_TOKENS | int | 16000 | максимум выходных токенов на запрос |
llmTimeout | --timeout <sec> | HANDBOOK_LLM_TIMEOUT, OPENAI_TIMEOUT | int | 300 | дедлайн на запрос в секундах; зависший вызов повторяется, а не держит фазу в заложниках |
llmMaxRetries | --llm-retries <n> | HANDBOOK_LLM_MAX_RETRIES | int | 6 | число повторных попыток на запрос; 0 означает единственную попытку |
llmRetryBackoff | --llm-retry-backoff <sec> | HANDBOOK_LLM_RETRY_BACKOFF | int | 3 | базовая задержка между повторами, в секундах |
llmConcurrency | --llm-concurrency <n> | HANDBOOK_LLM_CONCURRENCY | int | 16 | глобальный предел одновременных запросов через одного клиента |
llmExtraBody | — | HANDBOOK_LLM_EXTRA_BODY, OPENAI_EXTRA_BODY | json | — | вендорские поля, подмешиваемые в тело каждого запроса; поля model/messages/token переопределить нельзя. Форма произвольная, поэтому трактуется как секрет: никогда не флаг и никогда не допускается в файле конфигурации |
port | --port <n> | HANDBOOK_PORT | int | 4860 | порт для прослушивания |
host | --host <addr> | HANDBOOK_HOST | string | 127.0.0.1 | адрес привязки; остаётся на loopback, пока вы его не зададите (контейнерам нужен 0.0.0.0). Защита от CSRF всё равно требует заголовок Host с loopback |
stateDir | --state-dir <dir> | HANDBOOK_STATE_DIR | path | — | где живут studio.json и управляемые рабочие каталоги; по умолчанию $HOME/.handbook-studio |
config
| ключ | флаг | env | тип | по умолчанию | описание |
|---|---|---|---|---|---|
logLevel | — | HANDBOOK_LOG_LEVEL | enum (debug|info|warn|error|silent) | info | детализация логов; -v/--verbose и -q/--quiet — сокращения для debug/error |
forCommand | --command <name> | HANDBOOK_FOR_COMMAND | string | — | показать только настройки, применимые к этой подкоманде; её слои env/файл/умолчание здесь доступны для осмотра, а собственные флаги этой команды — нет (передавайте их самой команде) |
json | --json | HANDBOOK_JSON | bool | false | машиночитаемый вывод |
check | --check | HANDBOOK_CHECK | bool | false | только проверка; ненулевой код возврата, если что-то неверно или отсутствует |
Справочник CLI
Каждая подкоманда, каждый флаг, его переменная окружения и значение по умолчанию — а также то, что каждая команда записывает и с каким кодом возврата завершается.
Переменные окружения
Каждая переменная, которую читает Handbooks, правило именования, которое их порождает, каскад .env и те, что никогда не должны попадать в файл конфигурации.