Referencia de configuración

Esta es la referencia clave por clave de config.toml. El config.toml.example anotado en la raíz del repositorio de Takuto Core es la fuente de verdad — cuando esta página y ese archivo no coincidan, gana el ejemplo.

Los ajustes se recargan al cambiar el archivo (un poller de 5 segundos). Unas pocas claves son solo de arranque y necesitan un reinicio (se indica en línea). Los secretos van en takuto.env, nunca en config.toml — consulta Variables de entorno.

Takuto Core divide la configuración en dos tipos:

  • Bootstrap — necesarios antes de que existan la base de datos/el dashboard, o aplicados solo en el arranque. Edítalos a mano en config.toml antes del primer arranque.
  • Gestionados por la UI — tienen un valor por defecto sensato y normalmente se editan desde una pantalla de Configuración del dashboard. La UI escribe los cambios de vuelta a config.toml, así que el archivo sigue siendo el almacén; un valor fijado aquí es solo un valor por defecto del momento del despliegue.

La columna Scope marca cada clave como Bootstrap o nombra la superficie del dashboard que la gestiona. 🔒 marca las claves sensibles para la seguridad — revísalas antes de cambiarlas en un despliegue compartido.

[general]

Comportamiento global del proceso: modo de ticketing, sondeo, concurrencia, logging.

ClavePor defectoTipoScopeDescripción
ticketing_system"none"stringBootstrap"jira", "github" o "none". Gobierna el poller y el botón + del dashboard.
dry_mode 🔒falseboolBootstrapOmite los efectos secundarios reales de Jira/GitHub (sin asignaciones, transiciones ni pushes). El trabajo local — worktrees, installs, sesiones de agente — sigue ejecutándose. Útil para preparar una definición de workflow antes de salir en vivo.
log_level"info"stringBootstrap (restart)trace, debug, info, warn, error.
worker_image""stringBootstrapImagen de Docker para los containers de workflow aislados cuando DinD está activo. Vacío = detección automática a partir de la imagen de Takuto en ejecución.
workflow_definitions_dir"workflows"stringBootstrap (restart)Ruta escaneada en busca de los workflows *.toml que siembran los valores por defecto de un nuevo usuario/workspace. Los workflows en vivo se editan en el dashboard (Configuration → Workflows); editar el TOML más tarde no cambia los workspaces ya sembrados.
allow_auto_generate_secret_key 🔒trueboolBootstrapCuando es true, el servidor autogenera {data_dir}/secret.key en el primer arranque si no hay ninguna clave presente. Fíjalo en false para aprovisionar la clave por fuera.
poller_owner_username(sin definir)stringBootstrapUsuario propietario de los workflows creados automáticamente por el poller. Cuando no se define, se usa el primer admin no suspendido por orden lexicográfico.
migrate_orphan_workflowsfalseboolBootstrapCuando es true, los workflows restaurados sin propietario (huérfanos previos al multiusuario) se reasignan al propietario del poller resuelto en el arranque.
migrate_orphan_repo_associationstrueboolBootstrapCuando es true, la reconciliación del arranque enlaza los workflows restaurados con su repositorio registrado correspondiente.
poll_interval_secs60intUI: Item PollingSegundos entre sondeos de Jira/GitHub.
pr_merge_poll_interval_secs60intUI: Item PollingSegundos entre sondeos que comprueban si el PR de un workflow se ha mergeado en GitHub. 0 lo desactiva.
max_concurrent_workflows1intUI: Item PollingTamaño del semáforo para las sesiones paralelas de mise/install/agente. Ajústalo a tu CPU y RAM.
max_active_workflows0intUI: Item PollingMáximo de workflows visibles en el dashboard (todas las filas). El poller no inicia tickets nuevos en este límite. 0 replica max_concurrent_workflows.
max_concurrent_manual_workflows0intUI: Item PollingTope de arranques manuales con + que no estén en Done/Stopped/Error. 0 = sin límite.
max_parallel_per_userfalseboolUI: Item PollingCuando es true, el tope de ítems en paralelo por repositorio se cuenta por propietario del workflow; false lo cuenta globalmente.
generate_reportfalseboolUI: Item PollingCuando es true, cada paso del agente añade hallazgos a un informe y un paso final los consolida. Suma tokens.
work_item_log_retention_days7intUI: Item PollingDías de líneas de log de work-item que retener antes de la limpieza. 0 = conservar para siempre.

[jira]

Solo se usa cuando [general] ticketing_system = "jira".

ClavePor defectoTipoScopeDescripción
site""stringBootstrapHost de Jira o URL https:// completa (p. ej. "yourcompany.atlassian.net"). Gobierna la auth por token, la allowlist de egress y el enlace de Jira en el cuerpo del PR.
email""stringBootstrapCorreo de cuenta de Jira de reserva — usado para el token del propietario/acli solo cuando un usuario no ha añadido su propio token de Jira. En caso contrario, las lecturas y escrituras pasan por el propio token REST de Jira de cada usuario.
done_status"Done"stringUI: Item PollingEstado al que Mark as Done transiciona el ticket. Se compara de forma independiente del idioma (por statusCategory), así que un nombre localizado como “Terminé(e)” sigue resolviéndose a “Done”; si falla, el error lista los estados disponibles.
linked_items_in_prompt"full"stringUI: Item Polling"full" | "summary_only" | "omit" — cómo aparece el texto de las issues enlazadas en {ticket_context}.
ticket_context_max_description_bytes0intUI: Item PollingTope para la descripción del ticket principal en {ticket_context}. 0 = sin límite (el valor por defecto).
linked_issue_description_max_bytes0intUI: Item PollingTope por descripción de issue enlazada cuando linked_items_in_prompt = "full". 0 = sin límite (el valor por defecto).

Ahora por usuario y por repositorio: el token de Jira de cada usuario (añadido en Configuration → Ticketing), más las project keys, los item types y el filtro JQL — todo ha salido de config.toml. El token del propietario del despliegue / acli es solo una reserva para los usuarios que no hayan añadido el suyo.

[git]

Todas las claves de [git] son ajustes Bootstrap.

ClavePor defectoTipoScopeDescripción
base_branch"main"stringBootstrapRama desde la que se crea cada worktree.
remote"origin"stringBootstrapRemote de Git usado para fetch, ref base y push.
repo_path"/workspace"stringBootstrapRuta al repo clonado dentro del container. El nombre del workspace se deriva del último componente de esta ruta.

[github]

Autenticación opcional con GitHub App. Cuando se configura, los commits y los PRs se atribuyen a la cuenta bot en lugar de a tu usuario gh personal. Los tres campos (app_id, app_installation_id y una fuente de clave privada) deben fijarse juntos; los errores no son fatales — Takuto Core recurre a la auth gh personal y registra un warning. Permisos de App requeridos: contents (write), pull_requests (write), metadata (read).

ClavePor defectoTipoScopeDescripción
app_id(sin definir)intBootstrapID de la GitHub App.
app_installation_id(sin definir)intBootstrapID de instalación de la App para tu org/repo.
app_private_key 🔒(sin definir)stringBootstrapClave privada RSA codificada en PEM, en línea. Mutuamente excluyente con app_private_key_path. Es preferible mantenerla en takuto.env.
app_private_key_path 🔒(sin definir)stringBootstrapRuta a un archivo PEM con la clave privada de la App.

[web]

El servidor del dashboard.

ClavePor defectoTipoScopeDescripción
host"0.0.0.0"stringBootstrap (restart)Dirección de bind.
port8080intBootstrap (restart)Puerto de bind.
cors_origins 🔒[]arrayBootstrap (restart)Orígenes CORS permitidos. Vacío = autocalcular a partir de host/port. Fíjalos explícitamente detrás de un reverse proxy o un terminador de TLS (p. ej. ["https://takuto.example.com"]).
cookie_secure 🔒(detección automática)boolBootstrapControla el flag Secure en la cookie de sesión. Se detecta automáticamente a partir de cors_origins https:// o una cabecera entrante X-Forwarded-Proto: https. Fíjalo en true al terminar TLS sin esa cabecera; false solo para pruebas locales en HTTP plano.
kick_other_sessions_on_logintrueboolBootstrapCuando es true, un login exitoso borra las sesiones previas del mismo usuario. Fíjalo en false para sesiones concurrentes de escritorio + móvil.

La autenticación es solo multiusuario. En el primer arranque el dashboard te pide crear la cuenta admin inicial. Las claves heredadas de usuario único [web] dashboard_username / dashboard_password se han eliminado — si están presentes en un config.toml antiguo, se ignoran en silencio.

Políticas de sesión (no configurables): TTL de inactividad 24 h; TTL absoluto 30 días; bloqueo de cuenta tras 5 intentos fallidos de login/recuperación en 10 min (el admin lo limpia con POST /api/users/{id}/unlock); rate limit por IP en /api/auth/login y /api/auth/recover de 10 / minuto.

[database]

Donde Takuto guarda usuarios, sesiones y snapshots. Omite la sección (o deja connection vacía) para mantener el valor por defecto de SQLite sin configuración en {data_dir}/takuto.db. Fija connection para usar una PostgreSQL / MariaDB / MySQL externa. Solo se aplica en el reinicio — PUT /api/config no parchea esta sección; los cambios de backend necesitan un reinicio del proceso.

ClavePor defectoTipoScopeDescripción
connection 🔒""stringBootstrap (restart)URL de la base de datos. Vacía → SQLite. Esquemas: sqlite://…, postgres://… / postgresql://…, mysql://… (también cubre MariaDB). La contraseña se redacta en GET /api/config.
local_container(sin definir)boolBootstrap (CLI)Solo CLI. Marca connection como una URL orientada al host (p. ej. localhost:5433) para un container de base de datos en esta máquina. En takuto start, el CLI encuentra ese container, lo conecta a la red de Takuto como takuto_db y reescribe la conexión. El motor ignora esta clave. Consulta Base de datos externa.
max_connections10intBootstrap (restart)Tamaño del pool de conexiones.
acquire_timeout_secs30intBootstrap (restart)Cuánto esperar por una conexión del pool antes de agotar el tiempo.
idle_timeout_secs600intBootstrap (restart)Tiempo de vida de una conexión inactiva.
fail_fast 🔒trueboolBootstrap (restart)Cuando es true, se ejecuta una sonda SELECT 1 de 5 s al arrancar y aborta si el backend es inalcanzable. Cuando es false, registra un warning y recurre a SQLite local para ese proceso.
import_from_sqlitetrueboolBootstrap (restart)En la primera conexión a un backend externo nuevo, copia una sola vez los datos del SQLite local existente (las sesiones expiran, así que los usuarios vuelven a autenticarse). Se omite en reinicios posteriores.

¿Ejecutas la base de datos en un container? Con el CLI, pon local_container = true y da la URL de localhost que usarías desde tu host — takuto start la cablea en la red de Takuto por ti. Ejecutando el motor directamente, el host de connection debe ser alcanzable desde dentro del container de Takuto — usa el nombre del container de la base de datos y su puerto interno (p. ej. takuto_db:5432), no localhost ni el puerto publicado en el host. El recorrido completo está en Base de datos externa.

[agent]

El proveedor de IA para los pasos de workflow que llevan prompt. Cada clave de [agent] se gestiona desde la UI en Configuración → AI Settings; los valores de aquí son los valores por defecto del momento del despliegue.

ClavePor defectoTipoScopeDescripción
provider"claude"stringUI: AI Settings"claude", "cursor", "codex" u "opencode". Cada uno lee su propia sub-tabla [agent.providers.<name>].
available_providerslos cuatroarrayUI: AI SettingsProveedores contra los que los usuarios pueden autenticarse y entre los que pueden cambiar. También determina qué CLIs de agente se instalan en el arranque y qué hosts de proveedor habilita el egress firewall — recórtalo para estrechar ambas cosas.
step_timeout_secs1800intUI: AI SettingsTimeout por paso en segundos. Se aplica a todos los proveedores.
improve_timeout_secs300intUI: AI SettingsTimeout en segundos para la acción de refinamiento de descripción por IA («improve»).
share_conversation_across_stepsfalseboolUI: AI SettingsCompartir una conversación del agente entre los pasos de un flow frente a una sesión nueva por paso.
max_repeated_output_lines8intUI: AI SettingsGuardarraíl de no-progreso. Aborta un paso cuando su salida repite la misma línea sustantiva esta cantidad de veces seguidas. 0 lo desactiva.

Los ajustes por proveedor (modelo, endpoint, ruta de la CLI, args extra) viven en las sub-tablas [agent.providers.<name>]. Campos comunes: model, extra_args, allow_shared_default; Claude/Codex/OpenCode usan base_url, Cursor usa cli.

Instalación de las CLIs de agente y fijación de versión

Las CLIs de agente se instalan en el primer arranque, no vienen horneadas en la imagen. Takuto instala la CLI (claude / codex / opencode / cursor) en el volumen de herramientas compartido la primera vez que arranca un container, para cada proveedor de available_providers.

Por defecto, cada CLI se instala (y se refresca) a la latest en cada arranque. Para fijar una versión concreta, define version en la sub-tabla de ese proveedor:

[agent.providers.claude]
version = "2.1.178"   # omítelo o déjalo vacío para seguir la latest

[agent.providers.codex]
version = "0.9.4"
Valor de versionComportamiento
"2.1.178" (una versión concreta)Instala esa versión exacta; nunca se auto-actualiza.
"" u omitidoInstala/refresca la latest en cada arranque del container.

La fijación funciona para los cuatro proveedores de agente (claude, codex, opencode, cursor).

La CLI de Atlassian (acli) también se instala, pero Atlassian solo sirve latest, así que su fijación [jira] acli_version es orientativa — siempre se instala la latest.

[agent.providers.cursor]

Se usa solo cuando provider = "cursor".

ClavePor defectoTipoScopeDescripción
cli"agent"stringUI: AI SettingsNombre del ejecutable de Cursor Agent o ruta absoluta.
model"Auto"stringUI: AI Settings--model de Cursor Agent. "Auto" o vacío = selección automática.
privacy_modetrueboolUI: AI SettingsEl modo privacy de Cursor. Si lo dejas activado (true), Cursor no conserva tu código ni lo usa para entrenar sus modelos. Ponlo en false solo si tu plan y tu política de Cursor lo permiten — al hacerlo se relajan esas garantías y tu código se envía a Cursor bajo sus términos de datos estándar.
extra_args[]arrayUI: AI SettingsFlags de CLI extra (con deny-list aplicada).

[agent.providers.opencode]

El adaptador de OpenCode (autoalojado, compatible con OpenAI). Se usa solo cuando provider = "opencode". Consulta Modelos autoalojados.

ClavePor defectoTipoScopeDescripción
model""stringUI: AI SettingsId del modelo servido por el endpoint (el <model> en -m self_hosted/<model>). Obligatorio cuando está activo.
base_url""stringUI: AI SettingsURL del endpoint compatible con OpenAI (p. ej. http://lm-studio:1234/v1). Obligatorio cuando está activo.
extra_args[]arrayUI: AI SettingsFlags de CLI extra (con deny-list aplicada).
allow_shared_defaultfalseboolUI: AI SettingsPermite que los usuarios sin un bearer personal recurran al token por defecto del despliegue.
context_limit32768intUI: AI SettingsVentana de contexto máxima (tokens) del modelo autoalojado. Hazla coincidir con la longitud de contexto cargada en tu servidor.
output_limit8192intUI: AI SettingsTokens de salida máximos por respuesta.

Claude y Codex usan sus propias sub-tablas [agent.providers.claude] / [agent.providers.codex] con model, base_url y extra_args, todas editables desde Configuración → AI Settings.

[docker]

Todas las claves de [docker] son Bootstrap (consumidas en el build de la imagen / el compose up).

ClavePor defectoTipoScopeDescripción
build_commands[]arrayBootstrapPasos bash -c opcionales ejecutados durante el build de la imagen.
compose_up_commands[]arrayBootstrapComandos opcionales ejecutados como el usuario takuto tras el preflight en cada docker compose up.

[editor]

El VS Code en el navegador (openvscode-server) y el reenvío dinámico de puertos. Todas las claves de [editor] son Bootstrap.

ClavePor defectoTipoScopeDescripción
ports[]arrayBootstrapPuertos de aplicación a exponer al abrir el editor (p. ej. [3000, 5173, 6006]). Cada uno se mapea a un puerto del host del rango 9100–9200 y se muestra en la tarjeta del workflow.
dynamic_ports10intBootstrapPuertos de reserva preasignados para el reenvío automático del dev-server. 0 lo desactiva.
theme""stringBootstrapTema de color de VS Code; vacío usa el tema por defecto del propio editor (p. ej. "One Dark Pro").
extensions[]arrayBootstrapIDs del marketplace a preinstalar (p. ej. ["esbenp.prettier-vscode"]).
settings{}tableBootstrapAjustes libres de VS Code bajo [editor.settings].

[terminal]

La terminal web (ttyd) dentro del container del editor. Todas las claves de [terminal] son Bootstrap.

ClavePor defectoTipoScopeDescripción
git_editor(sin definir)stringBootstrapPaquete apt (p. ej. "nano", "vim") instalado en cada container del editor; git config core.editor se fija a él.
setup_commands[]arrayBootstrapComandos de shell ejecutados una vez por vida del container del editor (protegidos por un archivo marcador).
startup_commands[]arrayBootstrapComandos de shell ejecutados cada vez que se crea un container del editor nuevo.

[network]

Política de firewall — solo del momento del despliegue. Todas las claves de [network] son Bootstrap.

La allowlist es consciente del proveedor: el firewall habilita automáticamente los hosts de la API del proveedor (o los proveedores) de IA que actives — el [agent].provider activo más todos los proveedores de [agent].available_providers (Claude, Codex/OpenAI, Cursor) y cualquier base_url autoalojado. Con la config por defecto (los cuatro proveedores disponibles) todos los proveedores soportados son alcanzables de fábrica; recorta available_providers para estrechar el firewall a solo los proveedores que uses. Los hosts exactos se resuelven en el momento de aplicar la política mediante el comando takuto egress-hosts del core.

ClavePor defectoTipoScopeDescripción
extra_egress_hosts 🔒[]arrayBootstrapDominios añadidos a la allowlist de egress sobre los valores por defecto integrados (tus proveedores de IA, Atlassian, GitHub, registro de npm, registros detectados en .npmrc). Cada entrada amplía la superficie de ataque — añade solo hosts que confíes en que el agente alcance.
allow_all_https 🔒falseboolBootstrapCuando es true, omite la allowlist y permite todo el HTTPS saliente (443/8443). extra_egress_hosts se ignora. Úsalo solo en entornos de confianza — esto desactiva una de las mitigaciones centrales de Takuto Core.

[provisioning]

Herramientas de CLI extra instaladas en el volumen de herramientas compartido en el arranque, sobre las que vienen horneadas en la imagen. Úsalo para fijar la versión de una herramienta, añadir una que se quitó del horneado, o saltarte una por completo. Bootstrap (aplicado en el arranque). Consulta Extender Takuto Core.

ClavePor defectoTipoScopeDescripción
install_commands[]arrayBootstrapSnippets de shell ejecutados en orden contra el volumen de herramientas. Protegidos por SHA: se reejecutan solo cuando cambia la lista. Cada snippet debe ser idempotente e instalar en $TAKUTO_TOOLS_BIN.

[dev]

Perillas solo para desarrollo. Déjalas comentadas en producción. Todas las claves de [dev] son Bootstrap.

ClavePor defectoTipoScopeDescripción
mock_agentfalseboolBootstrapCuando es true, las sesiones del agente cortocircuitan a un mock con guion — sin proceso real de claude/agent, sin tokens consumidos. Respeta TAKUTO_DEV_MOCK_AGENT=1.
mock_agent_script_path(sin definir)stringBootstrapRuta al archivo del guion del mock. Sin valor por defecto — tmp/mock_script.txt es solo el ejemplo sugerido.
mock_agent_line_delay_ms75intBootstrapRetardo entre líneas de salida del mock.
mock_agent_total_ms5000intBootstrapDuración total de la sesión mock.

Secciones ignoradas

Las siguientes secciones se ignoran por completo al cargar — se registra un warning de arranque para que te enteres, pero su contenido nunca se lee. Salieron de config.toml porque son por usuario y por workspace, y ahora viven solo en la base de datos, editadas desde el dashboard:

  • [commands] — los comandos de inicialización del worktree (antes pre_install, install, pre_workflow, ahora worktree_init_commands) viven en la base de datos, se resuelven por (user, workspace) y se editan desde Configuración → Worktree Settings.
  • [[run_commands]] — los comandos de dev-server de larga duración expuestos como botones de run/stop son por usuario y se configuran desde la misma pestaña de Worktree Settings.
  • [polling] (y [polling.jira] / [polling.github]) — los filtros de sondeo, el flow de auto-inicio y el tope de ítems en paralelo por repo son por usuario y por repositorio, fijados en Configuration → Ticketing. Los límites de todo el despliegue siguen en [general].
  • [jira] project_keys / item_types / jql_filter — también por usuario y por repositorio (la misma pestaña de Ticketing).
  • [general] auto_polling — el sondeo ahora se activa por repositorio; el control de Pause/Resume del dashboard es el interruptor maestro global.

Para [commands] / [[run_commands]] no hay fallback de configuración: si una sección está ausente de la base de datos, el workflow simplemente no ejecuta ningún comando para ella.

Variables de entorno

Los secretos y las anulaciones por host van en takuto.env (montado en /etc/takuto/env). Solo se honran las líneas export VAR=value.

VariablePropósito
ANTHROPIC_API_KEY 🔒API key de Claude — obligatoria para el pipeline headless (Anthropic ya no acepta OAuth de Pro/Max en modo desatendido).
ANTHROPIC_BASE_URLAnula el endpoint de la API de Anthropic (proxy / gateway on-prem).
CLAUDE_CODE_OAUTH_TOKEN 🔒Token de un claude login interactivo. No sirve para el pipeline headless desatendido — usa ANTHROPIC_API_KEY ahí.
CURSOR_API_KEY 🔒Key de Cursor Agent — se salta el preflight interactivo de agent status.
GH_TOKEN 🔒PAT de GitHub (de grano fino, acotado al repo de destino).
TAKUTO_CONFIGRuta a un config.toml alternativo.
TAKUTO_DATA_DIRAnula el directorio de datos persistente (takuto.db, snapshots).
TAKUTO_HOMEAnula la base home usada para calcular TAKUTO_DATA_DIR.
TAKUTO_DEV_MOCK_AGENT1 = fuerza la activación del agente mock (anula [dev] mock_agent).

Ejemplo de takuto.env:

export ANTHROPIC_API_KEY="sk-ant-..."
export GH_TOKEN="github_pat_..."
export ANTHROPIC_BASE_URL="https://custom-proxy.example.com/claude"