Referencia de configuración
Todos los ajustes de Handbooks, con su flag, variable de entorno, clave del archivo de configuración, tipo y valor por defecto — generado a partir del registro.
Esta página es la traducción de una página generada. El original en inglés lo genera pnpm run config:docs a partir del registro de ajustes y está protegido por una prueba de deriva; esta traducción se mantiene a mano: cuando cambie el original, actualízala también.
Precedencia
Cada ajuste se resuelve a través de las mismas capas, de mayor a menor prioridad: flag > shell env > .env > handbook.config.yaml > por defecto. Gana la primera capa que aporta un valor, y todas las capas por debajo se ignoran para ese ajuste. Ejecuta handbook config — o handbook config --command <name> para ver un único subcomando — para comprobar qué se resolvió realmente y de qué capa procede.
Nomenclatura
Una sola key en camelCase dentro del registro gobierna las tres superficies a la vez: un flag, una variable de entorno y una clave del archivo de configuración. Anteponer a cualquiera de ellas el nombre de un comando acota esa superficie a un único subcomando, y es la misma transformación en las tres — HANDBOOK_<KEY> pasa a ser HANDBOOK_<COMMAND>_<KEY>, y key pasa a ser <command>Key, tanto si se escribe de forma plana como anidada un nivel bajo <command>:. Un ajuste marcado como (acotado) más abajo solo acepta el nombre de variable de entorno con prefijo, porque su significado cambia según el comando (--out, --lang en el paquete skill).
Arranque
Tres ajustes de nivel superior apuntan a las capas anteriores y quedan ellos mismos fuera del registro, resueltos una sola vez antes que cualquier otro ajuste — que es también la razón por la que ninguno de ellos puede establecerse desde aquello que cargan: una clave --env dentro de handbook.config.yaml, una línea --env-file dentro de .env o una clave --config dentro de ese mismo archivo no tendrían ya nada que las leyera.
--env <name>(oHANDBOOK_ENV) selecciona una cascada por entorno — el único de los tres con forma de flag y de variable de entorno a la vez, ya que nombra un entorno en lugar de apuntar a un archivo concreto.--env-file <path>carga exactamente ese archivo, saltándose la cascada de más abajo.--config <path>nombra un archivo de configuración concreto, saltándose el descubrimiento sensible al entorno de más abajo (por defecto: el archivo de la familiahandbook.config.yamlmás cercano, encontrado subiendo desde el directorio de trabajo actual y deteniéndose en el límite del repositorio).
La cascada de .env
Sin --env-file, la CLI carga una cascada de archivos .env* en lugar de un único archivo fijo, de mayor a menor precedencia. La regla ya existente de applyEnvFile — nunca sobrescribir una clave ya establecida — es lo que hace que una cascada no sea más que "llámalo en este orden; gana el primer archivo que establece una clave":
| # | archivo | quién | ámbito | ¿versionado? |
|---|---|---|---|---|
| 1 | entorno del shell | — | — | siempre gana |
| 2 | .env.<name>.local | personal | solo este entorno | no (ignorado por git) |
| 3 | .env.<name> | equipo | solo este entorno | sí |
| 4 | .env.local | personal | todos los entornos | no (ignorado por git) |
| 5 | .env | equipo | línea base | sí |
Las filas 2 y 3 solo se aplican cuando --env/HANDBOOK_ENV nombra un entorno. Sin ninguno de los dos establecido, solo se cargan las filas 4 y 5 — exactamente lo que se cargaba antes de que esta cascada existiera, de modo que una instalación existente sin .env.local no ve ningún cambio.
Descubrimiento del archivo de configuración con un entorno
--config aparte, el descubrimiento sigue subiendo desde el directorio de trabajo actual y deteniéndose en el límite del repositorio, pero en cada directorio visitado comprueba ahora primero si existe handbook.config.<name>.{yaml,yml,json} (solo cuando se nombra un entorno) antes que el handbook.config.yaml sin más y compañía — de modo que un archivo con nombre siempre gana a un archivo sin nombre situado en ese mismo directorio, incluso cuando existe un archivo sin nombre en un nivel más cercano al directorio de trabajo actual. Si no se nombra ningún entorno, el descubrimiento no cambia.
Ejecuta handbook config para ver qué entorno está activo y exactamente qué archivos cargó, en orden de precedencia — una cascada sobre cuatro capas de valores son demasiadas fuentes posibles como para seguirlas de memoria, y una capa que este comando no puede mostrar no se diferencia en nada de una capa que no funciona.
Ejemplo práctico para readWorkers (flag --read-workers <n>, valor por defecto 12):
| superficie | plano | acotado a generate |
|---|---|---|
| env | HANDBOOK_READ_WORKERS | HANDBOOK_GENERATE_READ_WORKERS |
clave de handbook.config.yaml | readWorkers | generateReadWorkers |
Las formas del archivo de configuración son intercambiables: un readWorkers: ... plano y un generate: { readWorkers: ... } anidado significan lo mismo, porque el archivo se aplana con la misma unión camelCase antes de leerse.
analyze
| clave | flag | env | tipo | por defecto | descripción |
|---|---|---|---|---|---|
logLevel | — | HANDBOOK_LOG_LEVEL | enum (debug|info|warn|error|silent) | info | verbosidad del log; -v/--verbose y -q/--quiet son atajos de debug/error |
source | --source <dir> | HANDBOOK_SOURCE | path | obligatorio | raíz del código fuente; obligatoria para analyze/generate/plan/apply, opcional en el resto (frescura de hashes para validate/skill, y el árbol al que pertenece una copia de seguridad para rollback) |
work | --work <dir> | HANDBOOK_WORK | path | obligatorio | directorio de trabajo que contiene los artefactos del pipeline; opcional para skill, donde añade coverage.json |
lang | --lang <lang> | HANDBOOK_LANG | enum (auto, más cualquier lenguaje registrado) | auto | lenguaje del código fuente; auto detecta y fusiona todos los lenguajes registrados |
generate
| clave | flag | env | tipo | por defecto | descripción |
|---|---|---|---|---|---|
logLevel | — | HANDBOOK_LOG_LEVEL | enum (debug|info|warn|error|silent) | info | verbosidad del log; -v/--verbose y -q/--quiet son atajos de debug/error |
llmApiKey | — | HANDBOOK_LLM_API_KEY, OPENAI_API_KEY | string | "" (vacío) | clave de API para el endpoint del LLM; usa EMPTY para endpoints locales sin clave. Nunca es un flag y nunca se permite en el archivo de configuración |
llmProvider | --provider <name> | HANDBOOK_LLM_PROVIDER, OPENAI_PROVIDER | enum (openai|anthropic|gemini) | openai | formato de transporte del LLM; 'openai' cubre cualquier endpoint compatible con OpenAI (la mayoría lo son) |
llmModel | --model <id> | HANDBOOK_LLM_MODEL, OPENAI_MODEL | string | gpt-4o-mini | identificador del modelo |
llmBaseUrl | --base-url <url> | HANDBOOK_LLM_BASE_URL, OPENAI_BASE_URL | string | https://api.openai.com/v1 | cualquier endpoint compatible con OpenAI (alojado, vLLM, LiteLLM, un proxy); una URL con credenciales incrustadas se rechaza en el archivo de configuración, que se sube al repositorio |
llmMaxTokens | --max-tokens <n> | HANDBOOK_LLM_MAX_TOKENS, OPENAI_MAX_TOKENS | int | 16000 | máximo de tokens de salida por petición |
llmTimeout | --timeout <sec> | HANDBOOK_LLM_TIMEOUT, OPENAI_TIMEOUT | int | 300 | plazo por petición en segundos; una llamada atascada se reintenta en lugar de dejar que mantenga una fase como rehén |
llmMaxRetries | --llm-retries <n> | HANDBOOK_LLM_MAX_RETRIES | int | 6 | intentos de reintento por petición; 0 significa un único intento |
llmRetryBackoff | --llm-retry-backoff <sec> | HANDBOOK_LLM_RETRY_BACKOFF | int | 3 | backoff base entre reintentos, en segundos |
llmConcurrency | --llm-concurrency <n> | HANDBOOK_LLM_CONCURRENCY | int | 16 | límite global de peticiones concurrentes a través de un mismo cliente |
llmExtraBody | — | HANDBOOK_LLM_EXTRA_BODY, OPENAI_EXTRA_BODY | json | — | campos del proveedor fusionados en el cuerpo de cada petición; los campos model/messages/token no se pueden sobrescribir. De formato libre, así que se trata como un secreto: nunca es un flag y nunca se permite en el archivo de configuración |
source | --source <dir> | HANDBOOK_SOURCE | path | obligatorio | raíz del código fuente; obligatoria para analyze/generate/plan/apply, opcional en el resto (frescura de hashes para validate/skill, y el árbol al que pertenece una copia de seguridad para rollback) |
work | --work <dir> | HANDBOOK_WORK | path | obligatorio | directorio de trabajo que contiene los artefactos del pipeline; opcional para skill, donde añade coverage.json |
lang | --lang <lang> | HANDBOOK_LANG | enum (auto, más cualquier lenguaje registrado) | auto | lenguaje del código fuente; auto detecta y fusiona todos los lenguajes registrados |
phase | --phase <spec> | HANDBOOK_PHASE | string | all | all | 1 | 2 | 2a | 2b | 2c | 3, o una lista separada por comas |
strategy | --strategy <s> | HANDBOOK_STRATEGY | enum (file|member) | — | file (por defecto) o member; si no se establece, se conserva la estrategia registrada en el directorio de trabajo |
skeleton | --skeleton <path> | HANDBOOK_SKELETON | path | — | skeleton.yaml escrito por el usuario, obligatorio para la estrategia member |
narrateLang | --narrate-lang <l> | HANDBOOK_NARRATE_LANG | enum (en|zh) | en | idioma de la prosa |
detail | --detail <d> | HANDBOOK_DETAIL | enum (brief|deep) | brief | profundidad de las fichas |
synthMode | --synth-mode <m> | HANDBOOK_SYNTH_MODE | enum (oneshot|doctor) | oneshot | modo de síntesis del esqueleto |
maxDoctorRounds | --max-doctor-rounds <n> | HANDBOOK_MAX_DOCTOR_ROUNDS | int | 6 | rondas de convergencia de doctor |
readWorkers | --read-workers <n> | HANDBOOK_READ_WORKERS | int | 12 | lotes de fichas concurrentes |
readBatchSize | --read-batch-size <n> | HANDBOOK_READ_BATCH_SIZE | int | — | archivos por lote de fichas; si no se establece, significa 1 para --detail deep y 8 para brief |
maxCharsPerFile | --max-chars-per-file <n> | HANDBOOK_MAX_CHARS_PER_FILE | int | 0 | trunca cada archivo a n caracteres; 0 significa sin límite |
assignBatchSize | --assign-batch-size <n> | HANDBOOK_ASSIGN_BATCH_SIZE | int | 25 | fichas por lote de asignación |
assignWorkers | --assign-workers <n> | HANDBOOK_ASSIGN_WORKERS | int | 12 | lotes de asignación concurrentes |
organizeWorkers | --organize-workers <n> | HANDBOOK_ORGANIZE_WORKERS | int | 8 | llamadas concurrentes de organización de etapas |
narrateWorkers | --narrate-workers <n> | HANDBOOK_NARRATE_WORKERS | int | 8 | llamadas de narración concurrentes |
resume | --resume | HANDBOOK_RESUME | bool | false | omite los archivos que ya tienen una ficha completada |
refresh | --refresh | HANDBOOK_REFRESH | bool | false | ignora las cachés de Phase 3 |
llmCache | --llm-cache | HANDBOOK_LLM_CACHE | bool | false | cachea las respuestas crudas del LLM en /phase3/cache; se desactiva con --refresh |
render
| clave | flag | env | tipo | por defecto | descripción |
|---|---|---|---|---|---|
logLevel | — | HANDBOOK_LOG_LEVEL | enum (debug|info|warn|error|silent) | info | verbosidad del log; -v/--verbose y -q/--quiet son atajos de debug/error |
work | --work <dir> | HANDBOOK_WORK | path | obligatorio | directorio de trabajo que contiene los artefactos del pipeline; opcional para skill, donde añade coverage.json |
title | --title <title> | HANDBOOK_TITLE | string | System Handbook | título del handbook para las salidas renderizadas |
out | --out <dir> | HANDBOOK_RENDER_OUT (acotado) | path | — | ubicación de salida; render usa por defecto /handbook, plan escribe un archivo, skill escribe un directorio |
html | --html | HANDBOOK_HTML | bool | false | renderiza además el sitio HTML multipágina en /html |
htmlSingle | --html-single | HANDBOOK_HTML_SINGLE | bool | false | renderiza además una única página HTML autocontenida |
agentSite | --agent-site | HANDBOOK_AGENT_SITE | bool | false | renderiza además el índice localizador para agentes en /agent |
llmsTxt | --llms-txt | HANDBOOK_LLMS_TXT | bool | false | escribe además llms.txt y llms-full.txt junto al markdown |
sourceBaseUrl | --source-base-url <url> | HANDBOOK_SOURCE_BASE_URL | string | — | enlaza las fichas de archivo con el código fuente en / |
skill
| clave | flag | env | tipo | por defecto | descripción |
|---|---|---|---|---|---|
logLevel | — | HANDBOOK_LOG_LEVEL | enum (debug|info|warn|error|silent) | info | verbosidad del log; -v/--verbose y -q/--quiet son atajos de debug/error |
source | --source <dir> | HANDBOOK_SOURCE | path | — | raíz del código fuente; obligatoria para analyze/generate/plan/apply, opcional en el resto (frescura de hashes para validate/skill, y el árbol al que pertenece una copia de seguridad para rollback) |
work | --work <dir> | HANDBOOK_WORK | path | — | directorio de trabajo que contiene los artefactos del pipeline; opcional para skill, donde añade coverage.json |
out | --out <dir> | HANDBOOK_SKILL_OUT (acotado) | path | obligatorio | ubicación de salida; render usa por defecto /handbook, plan escribe un archivo, skill escribe un directorio |
handbook | --handbook <dir> | HANDBOOK_SKILL_HANDBOOK (acotado) | path | obligatorio | directorio del handbook renderizado; obligatorio para skill, contexto opcional para plan |
name | --name <slug> | HANDBOOK_NAME | string | obligatorio | slug de la skill (minúsculas y guiones) |
project | --project <name> | HANDBOOK_PROJECT | string | — | nombre legible del proyecto para la prosa |
agentDir | --agent-dir <dir> | HANDBOOK_AGENT_DIR | path | — | sitio localizador para agentes ya renderizado; se incluye en references/agent/ |
bodyLang | --lang <l> | HANDBOOK_SKILL_BODY_LANG (acotado) | enum (en|zh) | en | idioma del cuerpo de SKILL.md; el frontmatter permanece en inglés para el enrutado |
validate
| clave | flag | env | tipo | por defecto | descripción |
|---|---|---|---|---|---|
logLevel | — | HANDBOOK_LOG_LEVEL | enum (debug|info|warn|error|silent) | info | verbosidad del log; -v/--verbose y -q/--quiet son atajos de debug/error |
source | --source <dir> | HANDBOOK_SOURCE | path | — | raíz del código fuente; obligatoria para analyze/generate/plan/apply, opcional en el resto (frescura de hashes para validate/skill, y el árbol al que pertenece una copia de seguridad para rollback) |
skill | --skill <dir> | HANDBOOK_SKILL | path | obligatorio | directorio de la skill que se va a validar |
plan
| clave | flag | env | tipo | por defecto | descripción |
|---|---|---|---|---|---|
logLevel | — | HANDBOOK_LOG_LEVEL | enum (debug|info|warn|error|silent) | info | verbosidad del log; -v/--verbose y -q/--quiet son atajos de debug/error |
llmApiKey | — | HANDBOOK_LLM_API_KEY, OPENAI_API_KEY | string | "" (vacío) | clave de API para el endpoint del LLM; usa EMPTY para endpoints locales sin clave. Nunca es un flag y nunca se permite en el archivo de configuración |
llmProvider | --provider <name> | HANDBOOK_LLM_PROVIDER, OPENAI_PROVIDER | enum (openai|anthropic|gemini) | openai | formato de transporte del LLM; 'openai' cubre cualquier endpoint compatible con OpenAI (la mayoría lo son) |
llmModel | --model <id> | HANDBOOK_LLM_MODEL, OPENAI_MODEL | string | gpt-4o-mini | identificador del modelo |
llmBaseUrl | --base-url <url> | HANDBOOK_LLM_BASE_URL, OPENAI_BASE_URL | string | https://api.openai.com/v1 | cualquier endpoint compatible con OpenAI (alojado, vLLM, LiteLLM, un proxy); una URL con credenciales incrustadas se rechaza en el archivo de configuración, que se sube al repositorio |
llmMaxTokens | --max-tokens <n> | HANDBOOK_LLM_MAX_TOKENS, OPENAI_MAX_TOKENS | int | 16000 | máximo de tokens de salida por petición |
llmTimeout | --timeout <sec> | HANDBOOK_LLM_TIMEOUT, OPENAI_TIMEOUT | int | 300 | plazo por petición en segundos; una llamada atascada se reintenta en lugar de dejar que mantenga una fase como rehén |
llmMaxRetries | --llm-retries <n> | HANDBOOK_LLM_MAX_RETRIES | int | 6 | intentos de reintento por petición; 0 significa un único intento |
llmRetryBackoff | --llm-retry-backoff <sec> | HANDBOOK_LLM_RETRY_BACKOFF | int | 3 | backoff base entre reintentos, en segundos |
llmConcurrency | --llm-concurrency <n> | HANDBOOK_LLM_CONCURRENCY | int | 16 | límite global de peticiones concurrentes a través de un mismo cliente |
llmExtraBody | — | HANDBOOK_LLM_EXTRA_BODY, OPENAI_EXTRA_BODY | json | — | campos del proveedor fusionados en el cuerpo de cada petición; los campos model/messages/token no se pueden sobrescribir. De formato libre, así que se trata como un secreto: nunca es un flag y nunca se permite en el archivo de configuración |
source | --source <dir> | HANDBOOK_SOURCE | path | obligatorio | raíz del código fuente; obligatoria para analyze/generate/plan/apply, opcional en el resto (frescura de hashes para validate/skill, y el árbol al que pertenece una copia de seguridad para rollback) |
out | --out <dir> | HANDBOOK_PLAN_OUT (acotado) | path | — | ubicación de salida; render usa por defecto /handbook, plan escribe un archivo, skill escribe un directorio |
handbook | --handbook <dir> | HANDBOOK_PLAN_HANDBOOK (acotado) | path | — | directorio del handbook renderizado; obligatorio para skill, contexto opcional para plan |
request | --request <text> | HANDBOOK_REQUEST | string | obligatorio | la petición de cambio en lenguaje natural |
maxTurns | --max-turns <n> | HANDBOOK_MAX_TURNS | int | 30 | presupuesto de turnos del agente |
apply
| clave | flag | env | tipo | por defecto | descripción |
|---|---|---|---|---|---|
logLevel | — | HANDBOOK_LOG_LEVEL | enum (debug|info|warn|error|silent) | info | verbosidad del log; -v/--verbose y -q/--quiet son atajos de debug/error |
source | --source <dir> | HANDBOOK_SOURCE | path | obligatorio | raíz del código fuente; obligatoria para analyze/generate/plan/apply, opcional en el resto (frescura de hashes para validate/skill, y el árbol al que pertenece una copia de seguridad para rollback) |
plan | --plan <file> | HANDBOOK_PLAN | path | obligatorio | archivo de plan producido por handbook plan |
dryRun | --dry-run | HANDBOOK_DRY_RUN | bool | false | solo verifica, nunca escribe |
backupRoot | --backup-root <dir> | HANDBOOK_BACKUP_ROOT | path | — | dónde van las copias de seguridad; por defecto /.handbook-patches |
rollback
| clave | flag | env | tipo | por defecto | descripción |
|---|---|---|---|---|---|
logLevel | — | HANDBOOK_LOG_LEVEL | enum (debug|info|warn|error|silent) | info | verbosidad del log; -v/--verbose y -q/--quiet son atajos de debug/error |
source | --source <dir> | HANDBOOK_SOURCE | path | — | raíz del código fuente; obligatoria para analyze/generate/plan/apply, opcional en el resto (frescura de hashes para validate/skill, y el árbol al que pertenece una copia de seguridad para rollback) |
backup | --backup <dir> | HANDBOOK_BACKUP | path | obligatorio | directorio de copia de seguridad que contiene manifest.json |
force | --force | HANDBOOK_FORCE | bool | false | restaura incluso los archivos que cambiaron después del parche |
resync
| clave | flag | env | tipo | por defecto | descripción |
|---|---|---|---|---|---|
logLevel | — | HANDBOOK_LOG_LEVEL | enum (debug|info|warn|error|silent) | info | verbosidad del log; -v/--verbose y -q/--quiet son atajos de debug/error |
llmApiKey | — | HANDBOOK_LLM_API_KEY, OPENAI_API_KEY | string | "" (vacío) | clave de API para el endpoint del LLM; usa EMPTY para endpoints locales sin clave. Nunca es un flag y nunca se permite en el archivo de configuración |
llmProvider | --provider <name> | HANDBOOK_LLM_PROVIDER, OPENAI_PROVIDER | enum (openai|anthropic|gemini) | openai | formato de transporte del LLM; 'openai' cubre cualquier endpoint compatible con OpenAI (la mayoría lo son) |
llmModel | --model <id> | HANDBOOK_LLM_MODEL, OPENAI_MODEL | string | gpt-4o-mini | identificador del modelo |
llmBaseUrl | --base-url <url> | HANDBOOK_LLM_BASE_URL, OPENAI_BASE_URL | string | https://api.openai.com/v1 | cualquier endpoint compatible con OpenAI (alojado, vLLM, LiteLLM, un proxy); una URL con credenciales incrustadas se rechaza en el archivo de configuración, que se sube al repositorio |
llmMaxTokens | --max-tokens <n> | HANDBOOK_LLM_MAX_TOKENS, OPENAI_MAX_TOKENS | int | 16000 | máximo de tokens de salida por petición |
llmTimeout | --timeout <sec> | HANDBOOK_LLM_TIMEOUT, OPENAI_TIMEOUT | int | 300 | plazo por petición en segundos; una llamada atascada se reintenta en lugar de dejar que mantenga una fase como rehén |
llmMaxRetries | --llm-retries <n> | HANDBOOK_LLM_MAX_RETRIES | int | 6 | intentos de reintento por petición; 0 significa un único intento |
llmRetryBackoff | --llm-retry-backoff <sec> | HANDBOOK_LLM_RETRY_BACKOFF | int | 3 | backoff base entre reintentos, en segundos |
llmConcurrency | --llm-concurrency <n> | HANDBOOK_LLM_CONCURRENCY | int | 16 | límite global de peticiones concurrentes a través de un mismo cliente |
llmExtraBody | — | HANDBOOK_LLM_EXTRA_BODY, OPENAI_EXTRA_BODY | json | — | campos del proveedor fusionados en el cuerpo de cada petición; los campos model/messages/token no se pueden sobrescribir. De formato libre, así que se trata como un secreto: nunca es un flag y nunca se permite en el archivo de configuración |
work | --work <dir> | HANDBOOK_WORK | path | obligatorio | directorio de trabajo que contiene los artefactos del pipeline; opcional para skill, donde añade coverage.json |
title | --title <title> | HANDBOOK_TITLE | string | System Handbook | título del handbook para las salidas renderizadas |
case | --case <dir> | HANDBOOK_CASE | path | obligatorio | directorio del caso: edited/ + plan.md + change.diff |
useLlm | --no-llm | HANDBOOK_USE_LLM | bool | true | ponlo en false para una actualización solo estructural, con la prosa marcada como obsoleta |
refreshRendered | --no-render | HANDBOOK_REFRESH_RENDERED | bool | true | ponlo en false para omitir la actualización de las salidas ya renderizadas en /handbook |
corrections | --corrections <file> | HANDBOOK_CORRECTIONS | path | — | corrections.jsonl reportado por el agente; sus archivos amplían el conjunto a actualizar |
cardDetail | --detail <d> | HANDBOOK_RESYNC_CARD_DETAIL (acotado) | enum (brief|deep) | — | profundidad de las fichas regeneradas; si no se establece, coincide con el handbook existente |
proseLang | --narrate-lang <l> | HANDBOOK_RESYNC_PROSE_LANG (acotado) | enum (en|zh) | — | idioma de la prosa para las fichas regeneradas; si no se establece, coincide con el handbook existente |
studio
| clave | flag | env | tipo | por defecto | descripción |
|---|---|---|---|---|---|
logLevel | — | HANDBOOK_LOG_LEVEL | enum (debug|info|warn|error|silent) | info | verbosidad del log; -v/--verbose y -q/--quiet son atajos de debug/error |
llmApiKey | — | HANDBOOK_LLM_API_KEY, OPENAI_API_KEY | string | "" (vacío) | clave de API para el endpoint del LLM; usa EMPTY para endpoints locales sin clave. Nunca es un flag y nunca se permite en el archivo de configuración |
llmProvider | --provider <name> | HANDBOOK_LLM_PROVIDER, OPENAI_PROVIDER | enum (openai|anthropic|gemini) | openai | formato de transporte del LLM; 'openai' cubre cualquier endpoint compatible con OpenAI (la mayoría lo son) |
llmModel | --model <id> | HANDBOOK_LLM_MODEL, OPENAI_MODEL | string | gpt-4o-mini | identificador del modelo |
llmBaseUrl | --base-url <url> | HANDBOOK_LLM_BASE_URL, OPENAI_BASE_URL | string | https://api.openai.com/v1 | cualquier endpoint compatible con OpenAI (alojado, vLLM, LiteLLM, un proxy); una URL con credenciales incrustadas se rechaza en el archivo de configuración, que se sube al repositorio |
llmMaxTokens | --max-tokens <n> | HANDBOOK_LLM_MAX_TOKENS, OPENAI_MAX_TOKENS | int | 16000 | máximo de tokens de salida por petición |
llmTimeout | --timeout <sec> | HANDBOOK_LLM_TIMEOUT, OPENAI_TIMEOUT | int | 300 | plazo por petición en segundos; una llamada atascada se reintenta en lugar de dejar que mantenga una fase como rehén |
llmMaxRetries | --llm-retries <n> | HANDBOOK_LLM_MAX_RETRIES | int | 6 | intentos de reintento por petición; 0 significa un único intento |
llmRetryBackoff | --llm-retry-backoff <sec> | HANDBOOK_LLM_RETRY_BACKOFF | int | 3 | backoff base entre reintentos, en segundos |
llmConcurrency | --llm-concurrency <n> | HANDBOOK_LLM_CONCURRENCY | int | 16 | límite global de peticiones concurrentes a través de un mismo cliente |
llmExtraBody | — | HANDBOOK_LLM_EXTRA_BODY, OPENAI_EXTRA_BODY | json | — | campos del proveedor fusionados en el cuerpo de cada petición; los campos model/messages/token no se pueden sobrescribir. De formato libre, así que se trata como un secreto: nunca es un flag y nunca se permite en el archivo de configuración |
port | --port <n> | HANDBOOK_PORT | int | 4860 | puerto en el que escuchar |
host | --host <addr> | HANDBOOK_HOST | string | 127.0.0.1 | dirección de escucha; se mantiene en loopback salvo que la establezcas (los contenedores necesitan 0.0.0.0). La protección CSRF sigue exigiendo una cabecera Host de loopback |
stateDir | --state-dir <dir> | HANDBOOK_STATE_DIR | path | — | dónde viven studio.json y los directorios de trabajo gestionados; por defecto $HOME/.handbook-studio |
config
| clave | flag | env | tipo | por defecto | descripción |
|---|---|---|---|---|---|
logLevel | — | HANDBOOK_LOG_LEVEL | enum (debug|info|warn|error|silent) | info | verbosidad del log; -v/--verbose y -q/--quiet son atajos de debug/error |
forCommand | --command <name> | HANDBOOK_FOR_COMMAND | string | — | muestra solo los ajustes que se aplican a este subcomando; sus capas de env/archivo/valor por defecto se pueden inspeccionar aquí, pero los flags propios de ese comando no (pásaselos al comando en sí) |
json | --json | HANDBOOK_JSON | bool | false | salida legible por máquina |
check | --check | HANDBOOK_CHECK | bool | false | solo valida; sale con un código distinto de cero si algo es inválido o falta |
Referencia de la CLI
Cada subcomando, cada flag, su variable de entorno y su valor por defecto — además de qué escribe cada comando y con qué código de salida termina.
Variables de entorno
Todas las variables que Handbooks lee, la regla de nombres que las genera, la cascada de .env y cuáles no deben entrar nunca en un archivo de configuración.