{
  "meta": {
    "product": "pixel.ceo",
    "schema": "pixelceo.reference/1",
    "appVersion": "0.5.1",
    "commit": "86a25914",
    "generatedAt": "2026-09-30T03:34:37-06:00",
    "counts": {
      "settings": 83,
      "internal": 36,
      "shortcuts": 31,
      "commands": 15,
      "engines": 14,
      "files": 13,
      "hooks": 20,
      "ipc": 20,
      "ipcChannelsInCode": 219
    }
  },
  "settings": [
    {
      "id": "s-audience",
      "kind": "setting",
      "key": "audience",
      "title": "Modo sencillo",
      "desc": "Registro de las explicaciones: «non-technical» explica cada concepto con palabras llanas; «technical» muestra flags y jerga de CLI.",
      "type": "enum",
      "tsType": "'technical' | 'non-technical'",
      "default": null,
      "defaultText": "ausente (= technical)",
      "allowed": [
        "technical",
        "non-technical"
      ],
      "labels": null,
      "where": "Ajustes › General › Sistema",
      "settingId": "general.system",
      "file": "config.json",
      "example": {
        "audience": "non-technical"
      },
      "since": "0.3.0",
      "status": "publicada",
      "secret": false,
      "restart": false,
      "derived": false,
      "roadmap": null,
      "source": "src/main/config.ts:192"
    },
    {
      "id": "s-language",
      "kind": "setting",
      "key": "language",
      "title": "Idioma",
      "desc": "Copia del idioma elegido en la interfaz, para que el proceso principal hable el mismo idioma (por ejemplo, la charla de oficina). La interfaz no lo lee de vuelta.",
      "type": "string",
      "tsType": "string",
      "default": null,
      "defaultText": "ausente (= en)",
      "allowed": [
        "en",
        "es",
        "zh-CN",
        "ar"
      ],
      "labels": null,
      "where": "Ajustes › General › Idioma",
      "settingId": "general.language",
      "file": "config.json",
      "example": {
        "language": "es"
      },
      "since": "0.4.6",
      "status": "publicada",
      "secret": false,
      "restart": false,
      "derived": false,
      "roadmap": null,
      "source": "src/main/config.ts:208"
    },
    {
      "id": "s-harnessHome",
      "kind": "setting",
      "key": "harnessHome",
      "title": "Carpeta de la colmena",
      "desc": "Carpeta donde el piso guarda agentes, buzones, tareas y memoria. Cambiarla reinicia la app.",
      "type": "string | null",
      "tsType": "string | null",
      "default": null,
      "defaultText": "null",
      "allowed": [
        "ruta absoluta",
        "null"
      ],
      "labels": null,
      "where": "Ajustes › General › Carpeta de la colmena",
      "settingId": "general.home",
      "file": "config.json",
      "example": {
        "harnessHome": "C:/Users/ana/pixelceo/web-principal"
      },
      "since": "0.1.1",
      "status": "publicada",
      "secret": false,
      "restart": false,
      "derived": false,
      "roadmap": null,
      "source": "src/main/config.ts:210"
    },
    {
      "id": "s-alwaysOpenLastHive",
      "kind": "setting",
      "key": "alwaysOpenLastHive",
      "title": "Abrir la última colmena",
      "desc": "Salta el selector de colmenas al arrancar y abre la carpeta de siempre. Si la carpeta ya no existe, vuelve a preguntar.",
      "type": "boolean",
      "tsType": "boolean",
      "default": false,
      "defaultText": "false",
      "allowed": [
        "true",
        "false"
      ],
      "labels": null,
      "where": "Ajustes › General › Al abrir",
      "settingId": "general.launch",
      "file": "config.json",
      "example": {
        "alwaysOpenLastHive": true
      },
      "since": "0.4.6",
      "status": "publicada",
      "secret": false,
      "restart": false,
      "derived": false,
      "roadmap": null,
      "source": "src/main/config.ts:231"
    },
    {
      "id": "s-quitSaveAndClose",
      "kind": "setting",
      "key": "quitSaveAndClose",
      "title": "Guardar y cerrar sin preguntar",
      "desc": "Al cerrar la ventana empieza «Guardar y cerrar» sin mostrar el diálogo. «Cerrar ahora» siempre pregunta.",
      "type": "boolean",
      "tsType": "boolean",
      "default": false,
      "defaultText": "false",
      "allowed": [
        "true",
        "false"
      ],
      "labels": null,
      "where": "Ajustes › General › Al cerrar",
      "settingId": "general.close",
      "file": "config.json",
      "example": {
        "quitSaveAndClose": true
      },
      "since": "0.4.14",
      "status": "publicada",
      "secret": false,
      "restart": false,
      "derived": false,
      "roadmap": null,
      "source": "src/main/config.ts:236"
    },
    {
      "id": "s-registeredRepos",
      "kind": "setting",
      "key": "registeredRepos",
      "title": "Proyectos registrados",
      "desc": "Carpetas guardadas como proyecto para elegirlas rápido al contratar.",
      "type": "string[]",
      "tsType": "string[]",
      "default": [],
      "defaultText": "[]",
      "allowed": [
        "string[]"
      ],
      "labels": null,
      "where": "Asistente «Agregar agente» › Proyecto",
      "settingId": null,
      "file": "config.json",
      "example": {
        "registeredRepos": [
          "C:/code/web",
          "C:/code/api"
        ]
      },
      "since": "0.1.1",
      "status": "publicada",
      "secret": false,
      "restart": false,
      "derived": false,
      "roadmap": null,
      "source": "src/main/config.ts:243"
    },
    {
      "id": "s-autoMode",
      "kind": "setting",
      "key": "autoMode",
      "title": "Modo automático (compatibilidad)",
      "desc": "Campo derivado de autonomyLevel (autoMode = nivel ≠ ask). Escribe autonomyLevel; este se sincroniza solo.",
      "type": "boolean",
      "tsType": "boolean",
      "default": true,
      "defaultText": "true",
      "allowed": [
        "true",
        "false"
      ],
      "labels": null,
      "where": "Ajustes › Autonomía y reglas › Autonomía",
      "settingId": "autonomy.mode",
      "file": "config.json",
      "example": {
        "autoMode": false
      },
      "since": "0.1.1",
      "status": "publicada",
      "secret": false,
      "restart": false,
      "derived": true,
      "roadmap": null,
      "source": "src/main/config.ts:251"
    },
    {
      "id": "s-autonomyLevel",
      "kind": "setting",
      "key": "autonomyLevel",
      "title": "Nivel de autonomía",
      "desc": "Cuánto hace un agente sin preguntar. «ask» se detiene a pedir permiso; «auto» no pregunta y mantiene el sandbox del CLI; «full» quita también el sandbox. Se aplica al reiniciar cada agente.",
      "type": "enum",
      "tsType": "AutonomyLevel",
      "default": "auto",
      "defaultText": "\"auto\"",
      "allowed": [
        "ask",
        "auto",
        "full"
      ],
      "labels": {
        "ask": "Preguntar primero",
        "auto": "Autónomo",
        "full": "Sin restricciones"
      },
      "where": "Ajustes › Autonomía y reglas › Autonomía",
      "settingId": "autonomy.mode",
      "file": "config.json",
      "example": {
        "autonomyLevel": "ask"
      },
      "since": "0.4.8",
      "status": "publicada",
      "secret": false,
      "restart": false,
      "derived": false,
      "roadmap": null,
      "source": "src/main/config.ts:261"
    },
    {
      "id": "s-orchestratorMaySpawn",
      "kind": "setting",
      "key": "orchestratorMaySpawn",
      "title": "Quién puede contratar",
      "desc": "Si el coordinador puede contratar agentes por su cuenta. Apagado, sus peticiones esperan en spawn-requests/ hasta que lo actives.",
      "type": "boolean",
      "tsType": "boolean",
      "default": false,
      "defaultText": "false",
      "allowed": [
        "true",
        "false"
      ],
      "labels": null,
      "where": "Ajustes › Autonomía y reglas › Quién puede contratar",
      "settingId": "autonomy.hiring",
      "file": "config.json",
      "example": {
        "orchestratorMaySpawn": true
      },
      "since": "0.4.5",
      "status": "publicada",
      "secret": false,
      "restart": false,
      "derived": false,
      "roadmap": null,
      "source": "src/main/config.ts:271"
    },
    {
      "id": "s-defaultCommand",
      "kind": "setting",
      "key": "defaultCommand",
      "title": "Comando por defecto",
      "desc": "Comando que se lanza al contratar si no eliges otro.",
      "type": "string",
      "tsType": "string",
      "default": "claude",
      "defaultText": "\"claude\"",
      "allowed": [
        "nombre de binario"
      ],
      "labels": null,
      "where": "Asistente «Agregar agente» › Proyecto",
      "settingId": null,
      "file": "config.json",
      "example": {
        "defaultCommand": "codex"
      },
      "since": "0.1.1",
      "status": "publicada",
      "secret": false,
      "restart": false,
      "derived": false,
      "roadmap": null,
      "source": "src/main/config.ts:273"
    },
    {
      "id": "s-defaultModel",
      "kind": "setting",
      "key": "defaultModel",
      "title": "Modelo por defecto",
      "desc": "Modelo de cada agente nuevo que no elige uno propio. Vacío = el del CLI.",
      "type": "string",
      "tsType": "string",
      "default": "claude-fable-5",
      "defaultText": "\"claude-fable-5\"",
      "allowed": [
        "id de modelo del catálogo",
        "vacío"
      ],
      "labels": null,
      "where": "Ajustes › Equipo y modelos › Modelo por defecto",
      "settingId": "agents.defaultModel",
      "file": "config.json",
      "example": {
        "defaultModel": "claude-fable-5"
      },
      "since": "0.1.5",
      "status": "publicada",
      "secret": false,
      "restart": false,
      "derived": false,
      "roadmap": null,
      "source": "src/main/config.ts:275"
    },
    {
      "id": "s-godProvider",
      "kind": "setting",
      "key": "godProvider",
      "title": "Motor del coordinador",
      "desc": "Qué CLI piensa por el coordinador. Solo motores que leen el buzón del equipo.",
      "type": "enum",
      "tsType": "AgentProvider",
      "default": "claude",
      "defaultText": "\"claude\"",
      "allowed": [
        "claude",
        "codex",
        "antigravity",
        "qwen"
      ],
      "labels": null,
      "where": "Ajustes › Equipo y modelos › Motor del coordinador",
      "settingId": "agents.coordinator",
      "file": "config.json",
      "example": {
        "godProvider": "codex"
      },
      "since": "0.3.0",
      "status": "publicada",
      "secret": false,
      "restart": false,
      "derived": false,
      "roadmap": null,
      "source": "src/main/config.ts:279"
    },
    {
      "id": "s-godModel",
      "kind": "setting",
      "key": "godModel",
      "title": "Modelo del coordinador",
      "desc": "Modelo del coordinador. Vacío = el recomendado por el motor.",
      "type": "string",
      "tsType": "string",
      "default": "claude-opus-4-8",
      "defaultText": "\"claude-opus-4-8\"",
      "allowed": null,
      "labels": null,
      "where": "Ajustes › Equipo y modelos › Motor del coordinador",
      "settingId": "agents.coordinator",
      "file": "config.json",
      "example": {
        "godModel": "claude-opus-4-8"
      },
      "since": "0.3.0",
      "status": "publicada",
      "secret": false,
      "restart": false,
      "derived": false,
      "roadmap": null,
      "source": "src/main/config.ts:282"
    },
    {
      "id": "s-mcpDefaults",
      "kind": "setting",
      "key": "mcpDefaults",
      "title": "Servidores MCP por defecto",
      "desc": "Consentimiento por servidor del catálogo MCP. Los de solo lectura vienen activados; los de escritura o con secreto, apagados.",
      "type": "object",
      "tsType": "{ [id: string]: { enabled: boolean } }",
      "default": null,
      "defaultText": "Sembrado desde el catálogo MCP",
      "allowed": [
        "{ idCatalogo: { enabled: boolean } }"
      ],
      "labels": null,
      "where": "Ajustes › Conexiones › Servidores MCP",
      "settingId": "connections.mcp",
      "file": "config.json",
      "example": {
        "mcpDefaults": {
          "github": {
            "enabled": true
          }
        }
      },
      "since": "0.3.0",
      "status": "publicada",
      "secret": false,
      "restart": false,
      "derived": false,
      "roadmap": null,
      "source": "src/main/config.ts:286"
    },
    {
      "id": "s-semanticMemory",
      "kind": "setting",
      "key": "semanticMemory",
      "title": "Memoria semántica",
      "desc": "Índice semántico (MemPalace) sobre la memoria de los agentes. No hace nada si MemPalace no está instalado.",
      "type": "boolean",
      "tsType": "boolean",
      "default": true,
      "defaultText": "true",
      "allowed": [
        "true",
        "false"
      ],
      "labels": null,
      "where": "Ajustes › Memoria › Memoria semántica",
      "settingId": "memory.semantic",
      "file": "config.json",
      "example": {
        "semanticMemory": false
      },
      "since": "0.1.1",
      "status": "publicada",
      "secret": false,
      "restart": false,
      "derived": false,
      "roadmap": null,
      "source": "src/main/config.ts:288"
    },
    {
      "id": "s-embeddingModel",
      "kind": "setting",
      "key": "embeddingModel",
      "title": "Modelo de embeddings",
      "desc": "«minilm» es ligero; «embeddinggemma», multilingüe.",
      "type": "enum",
      "tsType": "'minilm' | 'embeddinggemma'",
      "default": "minilm",
      "defaultText": "\"minilm\"",
      "allowed": [
        "minilm",
        "embeddinggemma"
      ],
      "labels": null,
      "where": "Ajustes › Memoria › Memoria semántica",
      "settingId": "memory.semantic",
      "file": "config.json",
      "example": {
        "embeddingModel": "embeddinggemma"
      },
      "since": "0.1.1",
      "status": "publicada",
      "secret": false,
      "restart": false,
      "derived": false,
      "roadmap": null,
      "source": "src/main/config.ts:290"
    },
    {
      "id": "s-missions",
      "kind": "setting",
      "key": "missions",
      "title": "Misiones programadas",
      "desc": "Lista de misiones recurrentes (standup horario, latido, compactado de mantenimiento). El interruptor «Compactado programado» enciende la misión compact-maintenance.",
      "type": "ScheduledMission[]",
      "tsType": "ScheduledMission[]",
      "default": null,
      "defaultText": "[ops-standup] (standup horario)",
      "allowed": [
        "ScheduledMission[]"
      ],
      "labels": null,
      "where": "Ajustes › General › Mantenimiento",
      "settingId": "general.maintenance",
      "file": "config.json",
      "example": {
        "missions": null
      },
      "since": "0.1.6",
      "status": "publicada",
      "secret": false,
      "restart": false,
      "derived": false,
      "roadmap": null,
      "source": "src/main/config.ts:292"
    },
    {
      "id": "s-costCapTokens",
      "kind": "setting",
      "key": "costCapTokens",
      "title": "Presupuesto de tokens del piso",
      "desc": "Tope total de tokens (entrada + salida + caché) de todos los agentes activos. Al pasarlo salta el cortacircuitos.",
      "type": "number",
      "tsType": "number",
      "default": null,
      "defaultText": "ausente (= sin tope)",
      "allowed": [
        "entero > 0",
        "vacío = sin tope"
      ],
      "labels": null,
      "where": "Ajustes › Autonomía y reglas › Presupuesto y cortacircuitos",
      "settingId": "autonomy.breaker",
      "file": "config.json",
      "example": {
        "costCapTokens": 5000000
      },
      "since": "0.2.0",
      "status": "publicada",
      "secret": false,
      "restart": false,
      "derived": false,
      "roadmap": null,
      "source": "src/main/config.ts:313"
    },
    {
      "id": "s-agentTokenCaps",
      "kind": "setting",
      "key": "agentTokenCaps",
      "title": "Tope de tokens por agente",
      "desc": "Tope de tokens de trabajo por agente (sin lecturas de caché). Se fija en la tarjeta de cada agente.",
      "type": "object",
      "tsType": "Record<string, number>",
      "default": null,
      "defaultText": "ausente",
      "allowed": [
        "{ idAgente: entero }"
      ],
      "labels": null,
      "where": "Centro de mando › tarjeta del agente",
      "settingId": null,
      "file": "config.json",
      "example": {
        "agentTokenCaps": {
          "ana-dev": 800000
        }
      },
      "since": "0.2.0",
      "status": "publicada",
      "secret": false,
      "restart": false,
      "derived": false,
      "roadmap": null,
      "source": "src/main/config.ts:319"
    },
    {
      "id": "s-browserAccess",
      "kind": "setting",
      "key": "browserAccess",
      "title": "Navegador",
      "desc": "Qué agentes pueden usar tu Chrome por las vías oficiales (Claude in Chrome, chrome-devtools-mcp). Ausente = todo apagado.",
      "type": "BrowserAccessSettings",
      "tsType": "BrowserAccessSettings",
      "default": null,
      "defaultText": "ausente",
      "allowed": [
        "{ claudeChrome, codexMode, scope: \"selected\" | \"all\", agents }"
      ],
      "labels": null,
      "where": "Ajustes › Conexiones › Navegador (Chrome)",
      "settingId": "connections.browser",
      "file": "config.json",
      "example": {
        "browserAccess": null
      },
      "since": "0.5.0",
      "status": "publicada",
      "secret": false,
      "restart": false,
      "derived": false,
      "roadmap": null,
      "source": "src/main/config.ts:326"
    },
    {
      "id": "s-maxTurns",
      "kind": "setting",
      "key": "maxTurns",
      "title": "Límite de turnos",
      "desc": "Se pasa a cada agente como --max-turns. Vacío = sin tope. Freno grueso, independiente del cortacircuitos.",
      "type": "number",
      "tsType": "number",
      "default": null,
      "defaultText": "ausente (= sin tope)",
      "allowed": [
        "entero ≥ 1",
        "vacío"
      ],
      "labels": null,
      "where": "Ajustes › Equipo y modelos › Límites",
      "settingId": "agents.limits",
      "file": "config.json",
      "example": {
        "maxTurns": 60
      },
      "since": "0.2.0",
      "status": "publicada",
      "secret": false,
      "restart": false,
      "derived": false,
      "roadmap": null,
      "source": "src/main/config.ts:329"
    },
    {
      "id": "s-maxConcurrentWorkers",
      "kind": "setting",
      "key": "maxConcurrentWorkers",
      "title": "Workers simultáneos",
      "desc": "Máximo de workers efímeros a la vez; el resto espera en cola.",
      "type": "number",
      "tsType": "number",
      "default": 4,
      "defaultText": "4",
      "allowed": [
        "entero ≥ 1"
      ],
      "labels": null,
      "where": "Solo en config.json",
      "settingId": null,
      "file": "config.json",
      "example": {
        "maxConcurrentWorkers": 2
      },
      "since": "0.3.0",
      "status": "publicada",
      "secret": false,
      "restart": false,
      "derived": false,
      "roadmap": null,
      "source": "src/main/config.ts:332"
    },
    {
      "id": "s-workerIdleTimeoutMinutes",
      "kind": "setting",
      "key": "workerIdleTimeoutMinutes",
      "title": "Inactividad de un worker",
      "desc": "Minutos sin salida antes de cerrar un worker. Mide inactividad, no tiempo total.",
      "type": "number",
      "tsType": "number",
      "default": 20,
      "defaultText": "20",
      "allowed": [
        "entero ≥ 1"
      ],
      "labels": null,
      "where": "Solo en config.json",
      "settingId": null,
      "file": "config.json",
      "example": {
        "workerIdleTimeoutMinutes": 30
      },
      "since": "0.3.0",
      "status": "publicada",
      "secret": false,
      "restart": false,
      "derived": false,
      "roadmap": null,
      "source": "src/main/config.ts:336"
    },
    {
      "id": "s-integrations",
      "kind": "setting",
      "key": "integrations",
      "title": "Servicios conectados",
      "desc": "Endpoints REST con etiqueta que los workers usan a través del intermediario de secretos. Solo metadatos: el secreto vive cifrado aparte.",
      "type": "IntegrationRecord[]",
      "tsType": "IntegrationRecord[]",
      "default": [],
      "defaultText": "[]",
      "allowed": [
        "IntegrationRecord[]"
      ],
      "labels": null,
      "where": "Ajustes › Conexiones › Servicios conectados",
      "settingId": "connections.integrations",
      "file": "config.json",
      "example": {
        "integrations": []
      },
      "since": "0.3.0",
      "status": "publicada",
      "secret": false,
      "restart": false,
      "derived": false,
      "roadmap": null,
      "source": "src/main/config.ts:341"
    },
    {
      "id": "s-defaultWorkerTokenCap",
      "kind": "setting",
      "key": "defaultWorkerTokenCap",
      "title": "Tope de tokens por worker",
      "desc": "Tope por worker efímero. 0 = sin tope.",
      "type": "number",
      "tsType": "number",
      "default": 0,
      "defaultText": "0",
      "allowed": [
        "entero ≥ 0"
      ],
      "labels": null,
      "where": "Solo en config.json",
      "settingId": null,
      "file": "config.json",
      "example": {
        "defaultWorkerTokenCap": 400000
      },
      "since": "0.3.0",
      "status": "publicada",
      "secret": false,
      "restart": false,
      "derived": false,
      "roadmap": null,
      "source": "src/main/config.ts:356"
    },
    {
      "id": "s-circuitBreaker",
      "kind": "setting",
      "key": "circuitBreaker",
      "title": "Cortacircuitos",
      "desc": "Umbrales de la escalera guiar → limitar → detener. hardStop permite matar la terminal al saltar.",
      "type": "CircuitBreakerConfig",
      "tsType": "CircuitBreakerConfig",
      "default": {
        "enabled": true,
        "hardStop": false,
        "repeatedToolLimit": 8,
        "errorStormLimit": 5,
        "tokenVelocityPerMin": 60000
      },
      "defaultText": "{\"enabled\":true,\"hardStop\":false,\"repeatedToolLimit\":8,\"errorStormLimit\":5,\"tokenVelocityPerMin\":60000}",
      "allowed": [
        "{ enabled, hardStop, repeatedToolLimit, errorStormLimit, tokenVelocityPerMin }"
      ],
      "labels": null,
      "where": "Ajustes › Autonomía y reglas › Presupuesto y cortacircuitos",
      "settingId": "autonomy.breaker",
      "file": "config.json",
      "example": {
        "circuitBreaker": {
          "enabled": true,
          "hardStop": true,
          "repeatedToolLimit": 8,
          "errorStormLimit": 5,
          "tokenVelocityPerMin": 60000
        }
      },
      "since": "0.2.0",
      "status": "publicada",
      "secret": false,
      "restart": false,
      "derived": false,
      "roadmap": null,
      "source": "src/main/config.ts:358"
    },
    {
      "id": "s-knowledgeGraph",
      "kind": "setting",
      "key": "knowledgeGraph",
      "title": "Grafo de conocimiento",
      "desc": "Tus documentos, consultables por los agentes con la CLI kg. Apagado no toca nada.",
      "type": "KnowledgeGraphConfig",
      "tsType": "KnowledgeGraphConfig",
      "default": {
        "enabled": false
      },
      "defaultText": "{\"enabled\":false}",
      "allowed": [
        "{ enabled: boolean, rootPath?: string }"
      ],
      "labels": null,
      "where": "Ajustes › Memoria › Grafo de conocimiento",
      "settingId": "memory.knowledge",
      "file": "config.json",
      "example": {
        "knowledgeGraph": {
          "enabled": true
        }
      },
      "since": "0.2.7",
      "status": "publicada",
      "secret": false,
      "restart": false,
      "derived": false,
      "roadmap": null,
      "source": "src/main/config.ts:360"
    },
    {
      "id": "s-notifications",
      "kind": "setting",
      "key": "notifications",
      "title": "Notificaciones del sistema",
      "desc": "Aviso nativo del sistema cuando un agente termina o te espera.",
      "type": "boolean",
      "tsType": "boolean",
      "default": false,
      "defaultText": "false",
      "allowed": [
        "true",
        "false"
      ],
      "labels": null,
      "where": "Ajustes › General › Notificaciones",
      "settingId": "general.notifications",
      "file": "config.json",
      "example": {
        "notifications": true
      },
      "since": "0.1.6",
      "status": "publicada",
      "secret": false,
      "restart": false,
      "derived": false,
      "roadmap": null,
      "source": "src/main/config.ts:362"
    },
    {
      "id": "s-strongKeepalive",
      "kind": "setting",
      "key": "strongKeepalive",
      "title": "Mantener despierto",
      "desc": "Mientras haya agentes vivos, impide que el equipo se suspenda, para que misiones y terminales sigan a tiempo. Gasta batería.",
      "type": "boolean",
      "tsType": "boolean",
      "default": false,
      "defaultText": "false",
      "allowed": [
        "true",
        "false"
      ],
      "labels": null,
      "where": "Ajustes › General › Sistema",
      "settingId": "general.system",
      "file": "config.json",
      "example": {
        "strongKeepalive": true
      },
      "since": "0.3.0",
      "status": "publicada",
      "secret": false,
      "restart": false,
      "derived": false,
      "roadmap": null,
      "source": "src/main/config.ts:369"
    },
    {
      "id": "s-visitorMode",
      "kind": "setting",
      "key": "visitorMode",
      "title": "Modo visitante",
      "desc": "Oculta terminales, hilos, trazas, git y el Centro de mando detrás de un aviso; la oficina sigue a la vista. No cambia lo que hacen los agentes.",
      "type": "boolean",
      "tsType": "boolean",
      "default": false,
      "defaultText": "false",
      "allowed": [
        "true",
        "false"
      ],
      "labels": null,
      "where": "Ajustes › General › Privacidad",
      "settingId": "general.privacy",
      "file": "config.json",
      "example": {
        "visitorMode": true
      },
      "since": "0.4.6",
      "status": "publicada",
      "secret": false,
      "restart": false,
      "derived": false,
      "roadmap": null,
      "source": "src/main/config.ts:383"
    },
    {
      "id": "s-softwareEconomyEnabled",
      "kind": "setting",
      "key": "softwareEconomyEnabled",
      "title": "Ahorro de software",
      "desc": "Si Chromium cae a render por software, redibuja el piso solo cuando algo cambia.",
      "type": "boolean",
      "tsType": "boolean",
      "default": false,
      "defaultText": "false",
      "allowed": [
        "true",
        "false"
      ],
      "labels": null,
      "where": "Ajustes › Oficina y ambiente › Rendimiento",
      "settingId": "ambience.performance",
      "file": "config.json",
      "example": {
        "softwareEconomyEnabled": true
      },
      "since": "0.4.6",
      "status": "publicada",
      "secret": false,
      "restart": false,
      "derived": false,
      "roadmap": null,
      "source": "src/main/config.ts:387"
    },
    {
      "id": "s-perfMode",
      "kind": "setting",
      "key": "perfMode",
      "title": "Perfil de rendimiento",
      "desc": "«auto» elige «Ligero» con poca RAM o sin GPU; «normal» y «light» lo fuerzan.",
      "type": "enum",
      "tsType": "PerfMode",
      "default": "auto",
      "defaultText": "\"auto\"",
      "allowed": [
        "auto",
        "normal",
        "light"
      ],
      "labels": {
        "auto": "Automático",
        "normal": "Normal",
        "light": "Ligero"
      },
      "where": "Ajustes › Oficina y ambiente › Perfil de rendimiento",
      "settingId": "ambience.perfProfile",
      "file": "config.json",
      "example": {
        "perfMode": "light"
      },
      "since": "0.5.0",
      "status": "publicada",
      "secret": false,
      "restart": false,
      "derived": false,
      "roadmap": null,
      "source": "src/main/config.ts:390"
    },
    {
      "id": "s-gpuIgnoreBlocklist",
      "kind": "setting",
      "key": "gpuIgnoreBlocklist",
      "title": "Ignorar la lista negra de GPU",
      "desc": "Añade --ignore-gpu-blocklist al arrancar. Requiere reiniciar.",
      "type": "boolean",
      "tsType": "boolean",
      "default": false,
      "defaultText": "false",
      "allowed": [
        "true",
        "false"
      ],
      "labels": null,
      "where": "Ajustes › Oficina y ambiente › Perfil de rendimiento",
      "settingId": "ambience.perfProfile",
      "file": "config.json",
      "example": {
        "gpuIgnoreBlocklist": true
      },
      "since": "0.5.0",
      "status": "publicada",
      "secret": false,
      "restart": true,
      "derived": false,
      "roadmap": null,
      "source": "src/main/config.ts:393"
    },
    {
      "id": "s-gpuAllowSwiftShader",
      "kind": "setting",
      "key": "gpuAllowSwiftShader",
      "title": "WebGL por CPU (SwiftShader)",
      "desc": "Añade --enable-unsafe-swiftshader. Lento pero funciona sin GPU. Requiere reiniciar.",
      "type": "boolean",
      "tsType": "boolean",
      "default": false,
      "defaultText": "false",
      "allowed": [
        "true",
        "false"
      ],
      "labels": null,
      "where": "Ajustes › Oficina y ambiente › Perfil de rendimiento",
      "settingId": "ambience.perfProfile",
      "file": "config.json",
      "example": {
        "gpuAllowSwiftShader": true
      },
      "since": "0.5.0",
      "status": "publicada",
      "secret": false,
      "restart": true,
      "derived": false,
      "roadmap": null,
      "source": "src/main/config.ts:396"
    },
    {
      "id": "s-floorInspectionEnabled",
      "kind": "setting",
      "key": "floorInspectionEnabled",
      "title": "Inspección del piso",
      "desc": "Clic de solo lectura sobre la oficina para ver qué hay en cada punto.",
      "type": "boolean",
      "tsType": "boolean",
      "default": false,
      "defaultText": "false",
      "allowed": [
        "true",
        "false"
      ],
      "labels": null,
      "where": "Ajustes › Piso › En el piso",
      "settingId": "floor.behaviour",
      "file": "config.json",
      "example": {
        "floorInspectionEnabled": true
      },
      "since": "0.4.6",
      "status": "publicada",
      "secret": false,
      "restart": false,
      "derived": false,
      "roadmap": null,
      "source": "src/main/config.ts:398"
    },
    {
      "id": "s-stationActivityEnabled",
      "kind": "setting",
      "key": "stationActivityEnabled",
      "title": "Visitas a estaciones",
      "desc": "Los agentes caminan a la estación que corresponde a la herramienta que usan de verdad.",
      "type": "boolean",
      "tsType": "boolean",
      "default": true,
      "defaultText": "true",
      "allowed": [
        "true",
        "false"
      ],
      "labels": null,
      "where": "Ajustes › Piso › En el piso",
      "settingId": "floor.behaviour",
      "file": "config.json",
      "example": {
        "stationActivityEnabled": false
      },
      "since": "0.4.6",
      "status": "publicada",
      "secret": false,
      "restart": false,
      "derived": false,
      "roadmap": null,
      "source": "src/main/config.ts:400"
    },
    {
      "id": "s-originalCastEnabled",
      "kind": "setting",
      "key": "originalCastEnabled",
      "title": "Operadores originales",
      "desc": "Elenco original de operadores.",
      "type": "boolean",
      "tsType": "boolean",
      "default": false,
      "defaultText": "false",
      "allowed": [
        "true",
        "false"
      ],
      "labels": null,
      "where": "Ajustes › Oficina y ambiente › Personajes",
      "settingId": "ambience.characters",
      "file": "config.json",
      "example": {
        "originalCastEnabled": true
      },
      "since": "0.4.6",
      "status": "publicada",
      "secret": false,
      "restart": false,
      "derived": false,
      "roadmap": null,
      "source": "src/main/config.ts:401"
    },
    {
      "id": "s-limezuCastEnabled",
      "kind": "setting",
      "key": "limezuCastEnabled",
      "title": "Personajes pixel",
      "desc": "Usa el elenco pixel prediseñado en las oficinas que lo admiten; apagado dibuja el elenco procedural.",
      "type": "boolean",
      "tsType": "boolean",
      "default": true,
      "defaultText": "true",
      "allowed": [
        "true",
        "false"
      ],
      "labels": null,
      "where": "Ajustes › Oficina y ambiente › Personajes",
      "settingId": "ambience.characters",
      "file": "config.json",
      "example": {
        "limezuCastEnabled": false
      },
      "since": "0.4.7",
      "status": "publicada",
      "secret": false,
      "restart": false,
      "derived": false,
      "roadmap": null,
      "source": "src/main/config.ts:404"
    },
    {
      "id": "s-celebrityParodiesEnabled",
      "kind": "setting",
      "key": "celebrityParodiesEnabled",
      "title": "Parodias de famosos",
      "desc": "Pack experimental de parodias. Solo cuenta un true explícito; los agentes ya contratados conservan su aspecto.",
      "type": "boolean",
      "tsType": "boolean",
      "default": false,
      "defaultText": "false",
      "allowed": [
        "true",
        "false"
      ],
      "labels": null,
      "where": "Ajustes › Oficina y ambiente › Personajes",
      "settingId": "ambience.characters",
      "file": "config.json",
      "example": {
        "celebrityParodiesEnabled": true
      },
      "since": "0.4.8",
      "status": "publicada",
      "secret": false,
      "restart": false,
      "derived": false,
      "roadmap": null,
      "source": "src/main/config.ts:411"
    },
    {
      "id": "s-legendsCastEnabled",
      "kind": "setting",
      "key": "legendsCastEnabled",
      "title": "Leyendas históricas",
      "desc": "Pack experimental de genios históricos con nombre de juego de palabras. Solo cuenta un true explícito.",
      "type": "boolean",
      "tsType": "boolean",
      "default": false,
      "defaultText": "false",
      "allowed": [
        "true",
        "false"
      ],
      "labels": null,
      "where": "Ajustes › Oficina y ambiente › Personajes",
      "settingId": "ambience.characters",
      "file": "config.json",
      "example": {
        "legendsCastEnabled": true
      },
      "since": "0.5.1",
      "status": "proximamente",
      "secret": false,
      "restart": false,
      "derived": false,
      "roadmap": null,
      "source": "src/main/config.ts:417"
    },
    {
      "id": "s-originalHabitatsEnabled",
      "kind": "setting",
      "key": "originalHabitatsEnabled",
      "title": "Hábitats originales",
      "desc": "Hábitats originales en el piso.",
      "type": "boolean",
      "tsType": "boolean",
      "default": false,
      "defaultText": "false",
      "allowed": [
        "true",
        "false"
      ],
      "labels": null,
      "where": "Ajustes › Oficina y ambiente › Rendimiento",
      "settingId": "ambience.performance",
      "file": "config.json",
      "example": {
        "originalHabitatsEnabled": true
      },
      "since": "0.4.6",
      "status": "publicada",
      "secret": false,
      "restart": false,
      "derived": false,
      "roadmap": null,
      "source": "src/main/config.ts:418"
    },
    {
      "id": "s-roomModulesEnabled",
      "kind": "setting",
      "key": "roomModulesEnabled",
      "title": "Habitaciones modulares",
      "desc": "En pausa. Apagado oculta «Construir»; las salas guardadas no se borran.",
      "type": "boolean",
      "tsType": "boolean",
      "default": false,
      "defaultText": "false",
      "allowed": [
        "true",
        "false"
      ],
      "labels": null,
      "where": "Ajustes › Oficina y ambiente › Rendimiento",
      "settingId": "ambience.performance",
      "file": "config.json",
      "example": {
        "roomModulesEnabled": true
      },
      "since": "0.4.7",
      "status": "publicada",
      "secret": false,
      "restart": false,
      "derived": false,
      "roadmap": null,
      "source": "src/main/config.ts:422"
    },
    {
      "id": "s-uiMotionEnabled",
      "kind": "setting",
      "key": "uiMotionEnabled",
      "title": "Movimiento de interfaz",
      "desc": "Animaciones de la interfaz. Forma parte de «Vida de oficina».",
      "type": "boolean",
      "tsType": "boolean",
      "default": true,
      "defaultText": "true",
      "allowed": [
        "true",
        "false"
      ],
      "labels": null,
      "where": "Ajustes › Oficina y ambiente › Rendimiento",
      "settingId": "ambience.performance",
      "file": "config.json",
      "example": {
        "uiMotionEnabled": false
      },
      "since": "0.4.6",
      "status": "publicada",
      "secret": false,
      "restart": false,
      "derived": false,
      "roadmap": null,
      "source": "src/main/config.ts:423"
    },
    {
      "id": "s-workMotionEnabled",
      "kind": "setting",
      "key": "workMotionEnabled",
      "title": "Gestos de trabajo",
      "desc": "Gestos de los personajes mientras trabajan. Forma parte de «Vida de oficina».",
      "type": "boolean",
      "tsType": "boolean",
      "default": true,
      "defaultText": "true",
      "allowed": [
        "true",
        "false"
      ],
      "labels": null,
      "where": "Ajustes › Oficina y ambiente › Rendimiento",
      "settingId": "ambience.performance",
      "file": "config.json",
      "example": {
        "workMotionEnabled": false
      },
      "since": "0.4.6",
      "status": "publicada",
      "secret": false,
      "restart": false,
      "derived": false,
      "roadmap": null,
      "source": "src/main/config.ts:424"
    },
    {
      "id": "s-boutiqueLightingEnabled",
      "kind": "setting",
      "key": "boutiqueLightingEnabled",
      "title": "Luces de ambiente",
      "desc": "Luz de tarde y de noche según la hora.",
      "type": "boolean",
      "tsType": "boolean",
      "default": null,
      "defaultText": "ausente (= false)",
      "allowed": [
        "true",
        "false"
      ],
      "labels": null,
      "where": "Ajustes › Oficina y ambiente › Vida de oficina, clima y luces",
      "settingId": "ambience.environment",
      "file": "config.json",
      "example": {
        "boutiqueLightingEnabled": true
      },
      "since": "0.4.6",
      "status": "publicada",
      "secret": false,
      "restart": false,
      "derived": false,
      "roadmap": null,
      "source": "src/main/config.ts:426"
    },
    {
      "id": "s-movementCoordinationEnabled",
      "kind": "setting",
      "key": "movementCoordinationEnabled",
      "title": "Coordinación de movimiento",
      "desc": "Coordina los paseos para que los agentes no se crucen ni se amontonen.",
      "type": "boolean",
      "tsType": "boolean",
      "default": true,
      "defaultText": "true",
      "allowed": [
        "true",
        "false"
      ],
      "labels": null,
      "where": "Ajustes › Piso › En el piso",
      "settingId": "floor.behaviour",
      "file": "config.json",
      "example": {
        "movementCoordinationEnabled": false
      },
      "since": "0.4.6",
      "status": "publicada",
      "secret": false,
      "restart": false,
      "derived": false,
      "roadmap": null,
      "source": "src/main/config.ts:429"
    },
    {
      "id": "s-autoUpdate",
      "kind": "setting",
      "key": "autoUpdate",
      "title": "Actualizaciones automáticas",
      "desc": "Busca al arrancar y cada ~6 h y descarga en segundo plano. Instalar siempre lo decides tú.",
      "type": "boolean",
      "tsType": "boolean",
      "default": true,
      "defaultText": "true",
      "allowed": [
        "true",
        "false"
      ],
      "labels": null,
      "where": "Ajustes › Acerca de › Actualizaciones automáticas",
      "settingId": "about.auto",
      "file": "config.json",
      "example": {
        "autoUpdate": false
      },
      "since": "0.3.4",
      "status": "publicada",
      "secret": false,
      "restart": false,
      "derived": false,
      "roadmap": null,
      "source": "src/main/config.ts:434"
    },
    {
      "id": "s-multiWindow",
      "kind": "setting",
      "key": "multiWindow",
      "title": "Nuevo piso en otra ventana",
      "desc": "Muestra «New Floor» (Ctrl+Shift+N) para abrir otro piso en su propia ventana.",
      "type": "boolean",
      "tsType": "boolean",
      "default": true,
      "defaultText": "true",
      "allowed": [
        "true",
        "false"
      ],
      "labels": null,
      "where": "Solo en config.json",
      "settingId": null,
      "file": "config.json",
      "example": {
        "multiWindow": false
      },
      "since": "0.2.7",
      "status": "publicada",
      "secret": false,
      "restart": false,
      "derived": false,
      "roadmap": null,
      "source": "src/main/config.ts:452"
    },
    {
      "id": "s-floorTabsEnabled",
      "kind": "setting",
      "key": "floorTabsEnabled",
      "title": "Pisos en pestañas",
      "desc": "Experimental. Una ventana con una pestaña por piso, cada una con su carpeta, agentes y conexiones. Se lee al arrancar.",
      "type": "boolean",
      "tsType": "boolean",
      "default": null,
      "defaultText": "ausente (= false)",
      "allowed": [
        "true",
        "false"
      ],
      "labels": null,
      "where": "Ajustes › Oficina y ambiente › Perfil de rendimiento",
      "settingId": "ambience.perfProfile",
      "file": "config.json",
      "example": {
        "floorTabsEnabled": true
      },
      "since": "0.5.0",
      "status": "publicada",
      "secret": false,
      "restart": true,
      "derived": false,
      "roadmap": "Pasa a «Funciones experimentales» en Ajustes › General (0.5.2).",
      "source": "src/main/config.ts:457"
    },
    {
      "id": "s-restoreTeamOnLaunch",
      "kind": "setting",
      "key": "restoreTeamOnLaunch",
      "title": "Restaurar el equipo al abrir",
      "desc": "Vuelve a lanzar las terminales del equipo al abrir el piso.",
      "type": "boolean",
      "tsType": "boolean",
      "default": true,
      "defaultText": "true",
      "allowed": [
        "true",
        "false"
      ],
      "labels": null,
      "where": "Solo en config.json",
      "settingId": null,
      "file": "config.json",
      "example": {
        "restoreTeamOnLaunch": false
      },
      "since": "0.4.6",
      "status": "publicada",
      "secret": false,
      "restart": false,
      "derived": false,
      "roadmap": null,
      "source": "src/main/config.ts:461"
    },
    {
      "id": "s-autoStartGodOnLaunch",
      "kind": "setting",
      "key": "autoStartGodOnLaunch",
      "title": "Arrancar el coordinador al abrir",
      "desc": "Lanza la terminal del coordinador al abrir el piso.",
      "type": "boolean",
      "tsType": "boolean",
      "default": true,
      "defaultText": "true",
      "allowed": [
        "true",
        "false"
      ],
      "labels": null,
      "where": "Solo en config.json",
      "settingId": null,
      "file": "config.json",
      "example": {
        "autoStartGodOnLaunch": false
      },
      "since": "0.4.6",
      "status": "publicada",
      "secret": false,
      "restart": false,
      "derived": false,
      "roadmap": null,
      "source": "src/main/config.ts:463"
    },
    {
      "id": "s-terminalTheme",
      "kind": "setting",
      "key": "terminalTheme",
      "title": "Tema de la terminal",
      "desc": "Se copia a la sesión de cada agente Claude para que su paleta combine. No toca tu configuración global de Claude.",
      "type": "enum",
      "tsType": "'light' | 'dark'",
      "default": null,
      "defaultText": "ausente",
      "allowed": [
        "light",
        "dark"
      ],
      "labels": null,
      "where": "Solo en config.json",
      "settingId": null,
      "file": "config.json",
      "example": {
        "terminalTheme": "dark"
      },
      "since": "0.2.2",
      "status": "publicada",
      "secret": false,
      "restart": false,
      "derived": false,
      "roadmap": null,
      "source": "src/main/config.ts:467"
    },
    {
      "id": "s-telemetryEnabled",
      "kind": "setting",
      "key": "telemetryEnabled",
      "title": "Estadísticas de uso",
      "desc": "Estadísticas anónimas de uso. Una compilación sin clave o con DO_NOT_TRACK nunca envía nada.",
      "type": "boolean",
      "tsType": "boolean",
      "default": true,
      "defaultText": "true",
      "allowed": [
        "true",
        "false"
      ],
      "labels": null,
      "where": "Ajustes › General › Privacidad",
      "settingId": "general.privacy",
      "file": "config.json",
      "example": {
        "telemetryEnabled": false
      },
      "since": "0.4.2",
      "status": "publicada",
      "secret": false,
      "restart": false,
      "derived": false,
      "roadmap": null,
      "source": "src/main/config.ts:472"
    },
    {
      "id": "s-officeTheme",
      "kind": "setting",
      "key": "officeTheme",
      "title": "Tema de la oficina",
      "desc": "El mapa donde trabaja el equipo. Los temas de series solo se aceptan con tvShowOffices; custom:<uuid> es un tema importado.",
      "type": "enum",
      "tsType": "'office-r10' | 'open-studio' | 'office' | 'friends' | 'brooklyn99' | 'siliconvalley' | 'got' | 'hogwarts' | 'isometric' | 'chronos-foundry' | 'daylight-atelier' | 'boutique-station' | 'boutique-studio' | 'loft-industrial' | 'torre-corporativa' | 'estudio-creativo' | `custom:${string}`",
      "default": "office-r10",
      "defaultText": "\"office-r10\"",
      "allowed": [
        "office-r10",
        "open-studio",
        "office",
        "isometric",
        "chronos-foundry",
        "daylight-atelier",
        "boutique-station",
        "boutique-studio",
        "loft-industrial",
        "torre-corporativa",
        "estudio-creativo",
        "custom:<uuid>"
      ],
      "labels": null,
      "where": "Ajustes › Oficina y ambiente › Tema de la oficina",
      "settingId": "ambience.officeTheme",
      "file": "config.json",
      "example": {
        "officeTheme": "torre-corporativa"
      },
      "since": "0.2.7",
      "status": "publicada",
      "secret": false,
      "restart": false,
      "derived": false,
      "roadmap": null,
      "source": "src/main/config.ts:483"
    },
    {
      "id": "s-officeStatusStyle",
      "kind": "setting",
      "key": "officeStatusStyle",
      "title": "Estilo de estado",
      "desc": "Cómo se ve un agente trabajando: «holo», etiqueta holográfica con la herramienta real; «aura», brillo y chispas sin texto. Cambia en vivo.",
      "type": "enum",
      "tsType": "'holo' | 'aura'",
      "default": "holo",
      "defaultText": "\"holo\"",
      "allowed": [
        "holo",
        "aura"
      ],
      "labels": {
        "holo": "Holograma",
        "aura": "Aura y chispas"
      },
      "where": "Ajustes › Oficina y ambiente › Estilo de estado",
      "settingId": "ambience.statusStyle",
      "file": "config.json",
      "example": {
        "officeStatusStyle": "aura"
      },
      "since": "0.4.8",
      "status": "publicada",
      "secret": false,
      "restart": false,
      "derived": false,
      "roadmap": null,
      "source": "src/main/config.ts:492"
    },
    {
      "id": "s-officeChatterEnabled",
      "kind": "setting",
      "key": "officeChatterEnabled",
      "title": "Charla de oficina",
      "desc": "Diálogos en el café entre agentes, basados en su trabajo real. Apagado, el café queda en silencio.",
      "type": "boolean",
      "tsType": "boolean",
      "default": true,
      "defaultText": "true",
      "allowed": [
        "true",
        "false"
      ],
      "labels": null,
      "where": "Ajustes › Oficina y ambiente › Charla de oficina",
      "settingId": "ambience.chatter",
      "file": "config.json",
      "example": {
        "officeChatterEnabled": false
      },
      "since": "0.4.6",
      "status": "publicada",
      "secret": false,
      "restart": false,
      "derived": false,
      "roadmap": null,
      "source": "src/main/config.ts:512"
    },
    {
      "id": "s-chatterProvider",
      "kind": "setting",
      "key": "chatterProvider",
      "title": "Motor de la charla",
      "desc": "«local» genera los diálogos sin red ni tokens; «claude-hidden» usa una sesión oculta de Claude de tu suscripción; «openai-compatible» usa cualquier endpoint /chat/completions.",
      "type": "enum",
      "tsType": "'claude-hidden' | 'openai-compatible' | 'local'",
      "default": "local",
      "defaultText": "\"local\"",
      "allowed": [
        "local",
        "claude-hidden",
        "openai-compatible"
      ],
      "labels": {
        "local": "Local (gratis)",
        "claude-hidden": "Claude oculto",
        "openai-compatible": "Compatible con OpenAI"
      },
      "where": "Ajustes › Oficina y ambiente › Charla de oficina",
      "settingId": "ambience.chatter",
      "file": "config.json",
      "example": {
        "chatterProvider": "openai-compatible"
      },
      "since": "0.4.6",
      "status": "publicada",
      "secret": false,
      "restart": false,
      "derived": false,
      "roadmap": null,
      "source": "src/main/config.ts:546"
    },
    {
      "id": "s-chatterBaseUrl",
      "kind": "setting",
      "key": "chatterBaseUrl",
      "title": "Endpoint de la charla",
      "desc": "Raíz o URL completa de /chat/completions para la ruta openai-compatible. Solo http(s).",
      "type": "string",
      "tsType": "string",
      "default": null,
      "defaultText": "ausente",
      "allowed": [
        "http(s)://…"
      ],
      "labels": null,
      "where": "Ajustes › Oficina y ambiente › Charla de oficina",
      "settingId": "ambience.chatter",
      "file": "config.json",
      "example": {
        "chatterBaseUrl": "http://localhost:11434/v1"
      },
      "since": "0.4.6",
      "status": "publicada",
      "secret": false,
      "restart": false,
      "derived": false,
      "roadmap": null,
      "source": "src/main/config.ts:550"
    },
    {
      "id": "s-chatterApiKey",
      "kind": "setting",
      "key": "chatterApiKey",
      "title": "Clave de la charla",
      "desc": "Credencial Bearer del endpoint. Nunca llega al renderizador: config:get la elimina.",
      "type": "string",
      "tsType": "string",
      "default": null,
      "defaultText": "vacío",
      "allowed": null,
      "labels": null,
      "where": "Ajustes › Oficina y ambiente › Charla de oficina",
      "settingId": "ambience.chatter",
      "file": "config.json",
      "example": {
        "chatterApiKey": "••••"
      },
      "since": "0.4.6",
      "status": "publicada",
      "secret": true,
      "restart": false,
      "derived": false,
      "roadmap": null,
      "source": "src/main/config.ts:558"
    },
    {
      "id": "s-chatterTokenBudgetPerHour",
      "kind": "setting",
      "key": "chatterTokenBudgetPerHour",
      "title": "Tope de tokens por hora de la charla",
      "desc": "Tope móvil de una hora para toda la charla. 0 = sin tope (útil con un modelo local).",
      "type": "number",
      "tsType": "number",
      "default": 60000,
      "defaultText": "60000",
      "allowed": [
        "entero ≥ 0"
      ],
      "labels": null,
      "where": "Solo en config.json",
      "settingId": null,
      "file": "config.json",
      "example": {
        "chatterTokenBudgetPerHour": 20000
      },
      "since": "0.4.6",
      "status": "publicada",
      "secret": false,
      "restart": false,
      "derived": false,
      "roadmap": null,
      "source": "src/main/config.ts:568"
    },
    {
      "id": "s-officeChatterLogDays",
      "kind": "setting",
      "key": "officeChatterLogDays",
      "title": "Días de historial de la charla",
      "desc": "Retención de office-chatter.jsonl. Se limita a 1–90 días.",
      "type": "number",
      "tsType": "number",
      "default": 7,
      "defaultText": "7",
      "allowed": [
        "1–90"
      ],
      "labels": null,
      "where": "Solo en config.json",
      "settingId": null,
      "file": "config.json",
      "example": {
        "officeChatterLogDays": 3
      },
      "since": "0.4.6",
      "status": "publicada",
      "secret": false,
      "restart": false,
      "derived": false,
      "roadmap": null,
      "source": "src/main/config.ts:578"
    },
    {
      "id": "s-officeChatterLogMaxKb",
      "kind": "setting",
      "key": "officeChatterLogMaxKb",
      "title": "Tamaño máximo del historial",
      "desc": "Tope en KB de office-chatter.jsonl; se borran primero las líneas más viejas. Se limita a 64 KB–16 MB.",
      "type": "number",
      "tsType": "number",
      "default": 1024,
      "defaultText": "1024",
      "allowed": [
        "64–16384"
      ],
      "labels": null,
      "where": "Solo en config.json",
      "settingId": null,
      "file": "config.json",
      "example": {
        "officeChatterLogMaxKb": 512
      },
      "since": "0.4.6",
      "status": "publicada",
      "secret": false,
      "restart": false,
      "derived": false,
      "roadmap": null,
      "source": "src/main/config.ts:585"
    },
    {
      "id": "s-officeVoicesEnabled",
      "kind": "setting",
      "key": "officeVoicesEnabled",
      "title": "Voces de oficina",
      "desc": "Lee la charla en voz alta con MiniMax TTS. Apagado no hace ninguna petición ni crea audio.",
      "type": "boolean",
      "tsType": "boolean",
      "default": false,
      "defaultText": "false",
      "allowed": [
        "true",
        "false"
      ],
      "labels": null,
      "where": "Ajustes › Oficina y ambiente › Charla de oficina",
      "settingId": "ambience.chatter",
      "file": "config.json",
      "example": {
        "officeVoicesEnabled": true
      },
      "since": "0.4.6",
      "status": "publicada",
      "secret": false,
      "restart": false,
      "derived": false,
      "roadmap": null,
      "source": "src/main/config.ts:600"
    },
    {
      "id": "s-minimaxApiKey",
      "kind": "setting",
      "key": "minimaxApiKey",
      "title": "Clave de MiniMax (voces)",
      "desc": "Clave para las voces. Solo en el proceso principal; Ajustes solo sabe si existe.",
      "type": "string",
      "tsType": "string",
      "default": null,
      "defaultText": "vacío",
      "allowed": null,
      "labels": null,
      "where": "Ajustes › Oficina y ambiente › Charla de oficina",
      "settingId": "ambience.chatter",
      "file": "config.json",
      "example": {
        "minimaxApiKey": "••••"
      },
      "since": "0.4.6",
      "status": "publicada",
      "secret": true,
      "restart": false,
      "derived": false,
      "roadmap": null,
      "source": "src/main/config.ts:608"
    },
    {
      "id": "s-minimaxModel",
      "kind": "setting",
      "key": "minimaxModel",
      "title": "Modelo de voz",
      "desc": "speech-2.6-turbo es rápido y barato; speech-2.6-hd, de más calidad.",
      "type": "string",
      "tsType": "string",
      "default": "speech-2.6-turbo",
      "defaultText": "\"speech-2.6-turbo\"",
      "allowed": [
        "speech-2.6-turbo",
        "speech-2.6-hd"
      ],
      "labels": null,
      "where": "Ajustes › Oficina y ambiente › Charla de oficina",
      "settingId": "ambience.chatter",
      "file": "config.json",
      "example": {
        "minimaxModel": "speech-2.6-hd"
      },
      "since": "0.4.6",
      "status": "publicada",
      "secret": false,
      "restart": false,
      "derived": false,
      "roadmap": null,
      "source": "src/main/config.ts:611"
    },
    {
      "id": "s-officeVoiceMaxPerMinute",
      "kind": "setting",
      "key": "officeVoiceMaxPerMinute",
      "title": "Clips de voz por minuto",
      "desc": "Tope móvil de un minuto, comprobado en el proceso principal. 0 = sin tope.",
      "type": "number",
      "tsType": "number",
      "default": 8,
      "defaultText": "8",
      "allowed": [
        "entero ≥ 0"
      ],
      "labels": null,
      "where": "Solo en config.json",
      "settingId": null,
      "file": "config.json",
      "example": {
        "officeVoiceMaxPerMinute": 6
      },
      "since": "0.4.6",
      "status": "publicada",
      "secret": false,
      "restart": false,
      "derived": false,
      "roadmap": null,
      "source": "src/main/config.ts:625"
    },
    {
      "id": "s-providerBaseUrls",
      "kind": "setting",
      "key": "providerBaseUrls",
      "title": "Endpoints locales por motor",
      "desc": "URL base de Ollama, LM Studio o vLLM para OpenCode, Crush, pi o Qwen. Las claves no viven aquí: van al almacén de secretos.",
      "type": "object",
      "tsType": "Partial<Record<AgentProvider, string>>",
      "default": null,
      "defaultText": "ausente",
      "allowed": [
        "{ motor: \"http(s)://…\" }"
      ],
      "labels": null,
      "where": "Ajustes › Motores y CLIs › Claves y modelos locales",
      "settingId": "engines.apiKeys",
      "file": "config.json",
      "example": {
        "providerBaseUrls": {
          "opencode": "http://localhost:11434/v1"
        }
      },
      "since": "0.3.1",
      "status": "publicada",
      "secret": false,
      "restart": false,
      "derived": false,
      "roadmap": null,
      "source": "src/main/config.ts:637"
    },
    {
      "id": "s-providerDefaultModels",
      "kind": "setting",
      "key": "providerDefaultModels",
      "title": "Modelo por defecto de cada motor",
      "desc": "Precarga el selector de modelo de cada motor.",
      "type": "object",
      "tsType": "Partial<Record<AgentProvider, string>>",
      "default": null,
      "defaultText": "ausente",
      "allowed": [
        "{ motor: \"id-de-modelo\" }"
      ],
      "labels": null,
      "where": "Ajustes › Motores y CLIs › Claves y modelos locales",
      "settingId": "engines.apiKeys",
      "file": "config.json",
      "example": {
        "providerDefaultModels": {
          "crush": "anthropic/claude-sonnet-4-5"
        }
      },
      "since": "0.3.1",
      "status": "publicada",
      "secret": false,
      "restart": false,
      "derived": false,
      "roadmap": null,
      "source": "src/main/config.ts:639"
    },
    {
      "id": "s-slackEnabled",
      "kind": "setting",
      "key": "slackEnabled",
      "title": "Integración con Slack",
      "desc": "Interruptor general de Slack → cola del coordinador.",
      "type": "boolean",
      "tsType": "boolean",
      "default": false,
      "defaultText": "false",
      "allowed": [
        "true",
        "false"
      ],
      "labels": null,
      "where": "Ajustes › Conexiones › Slack",
      "settingId": "connections.slack",
      "file": "config.json",
      "example": {
        "slackEnabled": true
      },
      "since": "0.1.7",
      "status": "publicada",
      "secret": false,
      "restart": false,
      "derived": false,
      "roadmap": null,
      "source": "src/main/config.ts:641"
    },
    {
      "id": "s-slackAllowedUserIds",
      "kind": "setting",
      "key": "slackAllowedUserIds",
      "title": "Usuarios de Slack con acceso directo",
      "desc": "IDs U…/W… que pueden enviar trabajo al coordinador sin aprobación. Vacío = nadie: todo espera en Disparadores.",
      "type": "string[]",
      "tsType": "string[]",
      "default": null,
      "defaultText": "ausente",
      "allowed": [
        "string[]"
      ],
      "labels": null,
      "where": "Ajustes › Conexiones › Slack",
      "settingId": "connections.slack",
      "file": "config.json",
      "example": {
        "slackAllowedUserIds": [
          "U024BE7LH"
        ]
      },
      "since": "0.5.1",
      "status": "proximamente",
      "secret": false,
      "restart": false,
      "derived": false,
      "roadmap": null,
      "source": "src/main/config.ts:651"
    },
    {
      "id": "s-slackPort",
      "kind": "setting",
      "key": "slackPort",
      "title": "Puerto de Slack",
      "desc": "Puerto local del servidor de webhooks de Slack. Vacío = 3847.",
      "type": "number",
      "tsType": "number",
      "default": null,
      "defaultText": "ausente (= 3847)",
      "allowed": [
        "1024–65535",
        "vacío"
      ],
      "labels": null,
      "where": "Ajustes › Conexiones › Slack",
      "settingId": "connections.slack",
      "file": "config.json",
      "example": {
        "slackPort": 3847
      },
      "since": "0.1.7",
      "status": "publicada",
      "secret": false,
      "restart": false,
      "derived": false,
      "roadmap": null,
      "source": "src/main/config.ts:653"
    },
    {
      "id": "s-slackProactivePosting",
      "kind": "setting",
      "key": "slackProactivePosting",
      "title": "Publicar en Slack por iniciativa propia",
      "desc": "Permite avisos iniciados por la app (p. ej. «en cola»). Las respuestas a un hilo de Slack siempre se publican.",
      "type": "boolean",
      "tsType": "boolean",
      "default": false,
      "defaultText": "false",
      "allowed": [
        "true",
        "false"
      ],
      "labels": null,
      "where": "Ajustes › Conexiones › Slack",
      "settingId": "connections.slack",
      "file": "config.json",
      "example": {
        "slackProactivePosting": true
      },
      "since": "0.3.2",
      "status": "publicada",
      "secret": false,
      "restart": false,
      "derived": false,
      "roadmap": null,
      "source": "src/main/config.ts:659"
    },
    {
      "id": "s-freeflowEnabled",
      "kind": "setting",
      "key": "freeflowEnabled",
      "title": "Dictado",
      "desc": "Pulsar para hablar en el compositor, transcrito con Groq. Apagado no hay micrófono ni llamadas.",
      "type": "boolean",
      "tsType": "boolean",
      "default": false,
      "defaultText": "false",
      "allowed": [
        "true",
        "false"
      ],
      "labels": null,
      "where": "Ajustes › Voz › Dictado",
      "settingId": "voice.dictation",
      "file": "config.json",
      "example": {
        "freeflowEnabled": true
      },
      "since": "0.2.7",
      "status": "publicada",
      "secret": false,
      "restart": false,
      "derived": false,
      "roadmap": null,
      "source": "src/main/config.ts:666"
    },
    {
      "id": "s-groqApiKey",
      "kind": "setting",
      "key": "groqApiKey",
      "title": "Clave de Groq",
      "desc": "Tu clave gratuita de Groq para el dictado. Solo se usa en el proceso principal.",
      "type": "string",
      "tsType": "string",
      "default": null,
      "defaultText": "vacío",
      "allowed": null,
      "labels": null,
      "where": "Ajustes › Voz › Dictado",
      "settingId": "voice.dictation",
      "file": "config.json",
      "example": {
        "groqApiKey": "••••"
      },
      "since": "0.2.7",
      "status": "publicada",
      "secret": true,
      "restart": false,
      "derived": false,
      "roadmap": null,
      "source": "src/main/config.ts:670"
    },
    {
      "id": "s-freeflowModel",
      "kind": "setting",
      "key": "freeflowModel",
      "title": "Modelo de dictado",
      "desc": "Modelo Whisper de Groq.",
      "type": "string",
      "tsType": "string",
      "default": "whisper-large-v3-turbo",
      "defaultText": "\"whisper-large-v3-turbo\"",
      "allowed": [
        "whisper-large-v3-turbo",
        "otro id de Groq"
      ],
      "labels": null,
      "where": "Ajustes › Voz › Dictado",
      "settingId": "voice.dictation",
      "file": "config.json",
      "example": {
        "freeflowModel": "whisper-large-v3-turbo"
      },
      "since": "0.2.7",
      "status": "publicada",
      "secret": false,
      "restart": false,
      "derived": false,
      "roadmap": null,
      "source": "src/main/config.ts:672"
    },
    {
      "id": "s-realtimeIdleDisconnectMs",
      "kind": "setting",
      "key": "realtimeIdleDisconnectMs",
      "title": "Cierre por inactividad",
      "desc": "Milisegundos sin voz antes de cortar la sesión de voz en tiempo real. 0 = nunca.",
      "type": "number",
      "tsType": "number",
      "default": 180000,
      "defaultText": "180000",
      "allowed": [
        "entero ≥ 0 (ms)"
      ],
      "labels": null,
      "where": "Ajustes › Voz › Voz en tiempo real",
      "settingId": "voice.realtime",
      "file": "config.json",
      "example": {
        "realtimeIdleDisconnectMs": 120000
      },
      "since": "0.3.2",
      "status": "publicada",
      "secret": false,
      "restart": false,
      "derived": false,
      "roadmap": null,
      "source": "src/main/config.ts:686"
    },
    {
      "id": "s-contextTrigger",
      "kind": "setting",
      "key": "contextTrigger",
      "title": "Compactado y limpieza de contexto",
      "desc": "Dos reglas: compact (encendida, cada 2 h si el contexto pasa del 60 %, 40 % en ventanas de ~1M) y clear (apagada, destructiva).",
      "type": "ContextTriggerConfig",
      "tsType": "ContextTriggerConfig",
      "default": {
        "compact": {
          "enabled": true,
          "everyMs": 7200000,
          "minContextPct": 60,
          "minContextPctLargeWindow": 40,
          "message": "Keep the current task, recent decisions, open questions, and file paths in play. Drop resolved tangents."
        },
        "clear": {
          "enabled": false,
          "everyMs": 7200000,
          "minContextPct": 90,
          "minContextPctLargeWindow": 80,
          "message": ""
        }
      },
      "defaultText": "{\"compact\":{\"enabled\":true,\"everyMs\":7200000,\"minContextPct\":60,\"minContextPctLargeWindow\":40,\"message\":\"Keep the current task, recent decisions, open questions, and file paths in play. Drop resolved tangents.\"},\"clear\":{\"enabled\":false,\"everyMs\":7200000,\"minContextPct\":90,\"minContextPctLargeWindow\":80,\"message\":\"\"}}",
      "allowed": [
        "{ compact: ContextRule, clear: ContextRule }"
      ],
      "labels": null,
      "where": "Centro de mando › Disparadores › Contexto",
      "settingId": null,
      "file": "config.json",
      "example": {
        "contextTrigger": {
          "compact": {
            "enabled": true,
            "everyMs": 7200000,
            "minContextPct": 60,
            "minContextPctLargeWindow": 40,
            "message": "Keep the current task, recent decisions, open questions, and file paths in play. Drop resolved tangents."
          },
          "clear": {
            "enabled": false,
            "everyMs": 7200000,
            "minContextPct": 90,
            "minContextPctLargeWindow": 80,
            "message": ""
          }
        }
      },
      "since": "0.3.8",
      "status": "publicada",
      "secret": false,
      "restart": false,
      "derived": false,
      "roadmap": null,
      "source": "src/main/config.ts:711"
    },
    {
      "id": "s-webhookTriggers",
      "kind": "setting",
      "key": "webhookTriggers",
      "title": "Webhooks",
      "desc": "Un endpoint por llamador, todos en un solo puerto y túnel. Cada uno tiene su secreto, su modo (strict, allow-all, communication-only) y su esquema JSON.",
      "type": "WebhookTrigger[]",
      "tsType": "WebhookTrigger[]",
      "default": [],
      "defaultText": "[]",
      "allowed": [
        "WebhookTrigger[]"
      ],
      "labels": null,
      "where": "Ajustes › Conexiones › Webhooks",
      "settingId": "connections.webhooks",
      "file": "config.json",
      "example": {
        "webhookTriggers": [
          {
            "id": "ci",
            "name": "CI",
            "enabled": true,
            "mode": "strict"
          }
        ]
      },
      "since": "0.3.8",
      "status": "publicada",
      "secret": false,
      "restart": false,
      "derived": false,
      "roadmap": null,
      "source": "src/main/config.ts:714"
    },
    {
      "id": "s-orgTrigger",
      "kind": "setting",
      "key": "orgTrigger",
      "title": "Organización",
      "desc": "Mensajes entre los nodos clon de tu equipo. Hoy solo guarda la configuración; aún no hay transporte.",
      "type": "OrgTriggerConfig",
      "tsType": "OrgTriggerConfig",
      "default": {
        "apiKey": "",
        "enabled": false,
        "mode": "strict"
      },
      "defaultText": "{\"apiKey\":\"\",\"enabled\":false,\"mode\":\"strict\"}",
      "allowed": [
        "{ apiKey, enabled, mode }"
      ],
      "labels": null,
      "where": "Ajustes › Conexiones › Organización",
      "settingId": "connections.organisation",
      "file": "config.json",
      "example": {
        "orgTrigger": {
          "apiKey": "",
          "enabled": false,
          "mode": "strict"
        }
      },
      "since": "0.3.8",
      "status": "publicada",
      "secret": false,
      "restart": false,
      "derived": false,
      "roadmap": null,
      "source": "src/main/config.ts:717"
    },
    {
      "id": "s-minimaxQuotaEnabled",
      "kind": "setting",
      "key": "minimaxQuotaEnabled",
      "title": "Leer la cuota de MiniMax",
      "desc": "Lee el archivo de sesión local de mcode para preguntar a MiniMax cuánta cuota queda. Apagado, pixel.ceo no abre ese archivo.",
      "type": "boolean",
      "tsType": "boolean",
      "default": true,
      "defaultText": "true",
      "allowed": [
        "true",
        "false"
      ],
      "labels": null,
      "where": "Ajustes › Motores y CLIs › CLIs instaladas",
      "settingId": "engines.cliEngines",
      "file": "config.json",
      "example": {
        "minimaxQuotaEnabled": false
      },
      "since": "0.5.1",
      "status": "proximamente",
      "secret": false,
      "restart": false,
      "derived": false,
      "roadmap": null,
      "source": "src/main/config.ts:750"
    },
    {
      "id": "s-reflectEnabled",
      "kind": "setting",
      "key": "reflectEnabled",
      "title": "Condensar memoria",
      "desc": "Condensa los memory.md que crecen demasiado.",
      "type": "boolean",
      "tsType": "boolean",
      "default": true,
      "defaultText": "true",
      "allowed": [
        "true",
        "false"
      ],
      "labels": null,
      "where": "Solo en config.json",
      "settingId": null,
      "file": "config.json",
      "example": {
        "reflectEnabled": false
      },
      "since": "0.2.0",
      "status": "publicada",
      "secret": false,
      "restart": false,
      "derived": false,
      "roadmap": null,
      "source": "src/main/config.ts:754"
    },
    {
      "id": "s-reflectIntervalMs",
      "kind": "setting",
      "key": "reflectIntervalMs",
      "title": "Cada cuánto revisar la memoria",
      "desc": "Intervalo de revisión de los memory.md, en ms.",
      "type": "number",
      "tsType": "number",
      "default": 1800000,
      "defaultText": "1800000",
      "allowed": [
        "entero > 0 (ms)"
      ],
      "labels": null,
      "where": "Solo en config.json",
      "settingId": null,
      "file": "config.json",
      "example": {
        "reflectIntervalMs": 3600000
      },
      "since": "0.2.0",
      "status": "publicada",
      "secret": false,
      "restart": false,
      "derived": false,
      "roadmap": null,
      "source": "src/main/config.ts:756"
    },
    {
      "id": "s-reflectMinBytes",
      "kind": "setting",
      "key": "reflectMinBytes",
      "title": "Tamaño mínimo para condensar",
      "desc": "Nunca condensa un archivo más pequeño que esto.",
      "type": "number",
      "tsType": "number",
      "default": 16384,
      "defaultText": "16384",
      "allowed": [
        "entero ≥ 0 (bytes)"
      ],
      "labels": null,
      "where": "Solo en config.json",
      "settingId": null,
      "file": "config.json",
      "example": {
        "reflectMinBytes": 32768
      },
      "since": "0.2.0",
      "status": "publicada",
      "secret": false,
      "restart": false,
      "derived": false,
      "roadmap": null,
      "source": "src/main/config.ts:766"
    }
  ],
  "commands": [
    {
      "id": "c-hire",
      "kind": "command",
      "title": "Contratar agente",
      "desc": "Abre el asistente «Agregar agente»: rol, personaje, motor, proyecto y contrato.",
      "how": "Ctrl+K › Contratar agente"
    },
    {
      "id": "c-summary",
      "kind": "command",
      "title": "Resumen del día",
      "desc": "Qué hizo cada agente, tokens y gasto.",
      "how": "Ctrl+K › Resumen del día"
    },
    {
      "id": "c-monitor",
      "kind": "command",
      "title": "Abrir el Monitor",
      "desc": "El centro de mando del coordinador.",
      "how": "Ctrl+K › Abrir el Monitor"
    },
    {
      "id": "c-server-room",
      "kind": "command",
      "title": "Sala de servidores",
      "desc": "CPU, memoria y quién consume más.",
      "how": "Ctrl+K › Sala de servidores"
    },
    {
      "id": "c-office-mode",
      "kind": "command",
      "title": "Modo Oficina",
      "desc": "Vuelve a la vista de la oficina.",
      "how": "Ctrl+K › Modo Oficina · o F"
    },
    {
      "id": "c-work-mode",
      "kind": "command",
      "title": "Modo Trabajo",
      "desc": "Cambia a la vista de trabajo.",
      "how": "Ctrl+K › Modo Trabajo · o F"
    },
    {
      "id": "c-theme",
      "kind": "command",
      "title": "Cambiar tema claro u oscuro",
      "desc": "Alterna el tema de la interfaz.",
      "how": "Ctrl+K › Cambiar tema"
    },
    {
      "id": "c-agent-open",
      "kind": "command",
      "title": "Abrir terminal",
      "desc": "Abre la terminal en vivo del agente.",
      "how": "Ctrl+K › nombre del agente"
    },
    {
      "id": "c-agent-pause",
      "kind": "command",
      "title": "Pausar a {nombre}",
      "desc": "Se detiene tras el paso actual.",
      "how": "Ctrl+K › Pausar · o clic derecho en el agente"
    },
    {
      "id": "c-agent-resume",
      "kind": "command",
      "title": "Reanudar a {nombre}",
      "desc": "Retoma un agente en pausa.",
      "how": "Ctrl+K › Reanudar"
    },
    {
      "id": "c-agent-stop",
      "kind": "command",
      "title": "Detener a {nombre} tras este paso",
      "desc": "Termina lo que hace y espera.",
      "how": "Ctrl+K › Detener"
    },
    {
      "id": "c-agent-assign",
      "kind": "command",
      "title": "Asignar misión a {nombre}…",
      "desc": "Describe qué hay que hacer y cuándo estará terminado.",
      "how": "Ctrl+K › Asignar misión"
    },
    {
      "id": "c-agent-message",
      "kind": "command",
      "title": "Enviar mensaje a {nombre}",
      "desc": "Mensaje directo al buzón del agente.",
      "how": "Ctrl+K › Enviar mensaje"
    },
    {
      "id": "c-agent-locate",
      "kind": "command",
      "title": "Ver a {nombre} en la oficina",
      "desc": "La cámara se centra en el personaje.",
      "how": "Ctrl+K › Ver en la oficina"
    },
    {
      "id": "c-agent-restart",
      "kind": "command",
      "title": "Reiniciar la sesión de {nombre}",
      "desc": "Relanza su terminal; aplica un nivel de autonomía nuevo.",
      "how": "Ctrl+K › Reiniciar la sesión"
    }
  ],
  "engines": [
    {
      "id": "e-claude",
      "kind": "command",
      "engine": true,
      "key": "claude",
      "title": "Claude Code",
      "command": "claude",
      "flags": {
        "ask": "",
        "auto": "--permission-mode bypassPermissions",
        "full": "--permission-mode bypassPermissions"
      },
      "modelFlag": "--model",
      "resume": "--resume <id>",
      "install": "npm install -g @anthropic-ai/claude-code",
      "docsUrl": "https://docs.claude.com/en/docs/claude-code",
      "coordinator": true,
      "hooks": "hooks nativos",
      "retired": false,
      "since": "0.2.3",
      "source": "src/shared/agentProvider.ts",
      "desc": ""
    },
    {
      "id": "e-codex",
      "kind": "command",
      "engine": true,
      "key": "codex",
      "title": "Codex · GPT",
      "command": "codex",
      "flags": {
        "ask": "",
        "auto": "-a never -s workspace-write",
        "full": "--dangerously-bypass-approvals-and-sandbox"
      },
      "modelFlag": "--model",
      "resume": "codex resume <id>",
      "install": "npm install -g @openai/codex",
      "docsUrl": "https://github.com/openai/codex",
      "coordinator": true,
      "hooks": "shim de hooks",
      "retired": false,
      "since": "0.2.3",
      "source": "src/shared/agentProvider.ts",
      "desc": ""
    },
    {
      "id": "e-grok",
      "kind": "command",
      "engine": true,
      "key": "grok",
      "title": "Grok · xAI",
      "command": "grok",
      "flags": {
        "ask": "",
        "auto": "--permission-mode bypassPermissions",
        "full": "--permission-mode bypassPermissions"
      },
      "modelFlag": "--model",
      "resume": "--resume <id>",
      "install": null,
      "docsUrl": null,
      "coordinator": false,
      "hooks": "terminal",
      "retired": false,
      "since": "0.3.4",
      "source": "src/shared/agentProvider.ts",
      "desc": ""
    },
    {
      "id": "e-kimi",
      "kind": "command",
      "engine": true,
      "key": "kimi",
      "title": "Kimi Code",
      "command": "kimi",
      "flags": {
        "ask": "",
        "auto": "--auto",
        "full": "--auto"
      },
      "modelFlag": "--model",
      "resume": null,
      "install": null,
      "docsUrl": null,
      "coordinator": false,
      "hooks": "terminal",
      "retired": false,
      "since": "0.3.4",
      "source": "src/shared/agentProvider.ts",
      "desc": ""
    },
    {
      "id": "e-gemini",
      "kind": "command",
      "engine": true,
      "key": "gemini",
      "title": "Gemini CLI",
      "command": "gemini",
      "flags": {
        "ask": "",
        "auto": "--approval-mode=yolo",
        "full": "--approval-mode=yolo"
      },
      "modelFlag": "--model",
      "resume": "--resume <id>",
      "install": "npm install -g @google/gemini-cli",
      "docsUrl": "https://github.com/google-gemini/gemini-cli",
      "coordinator": false,
      "hooks": "terminal",
      "retired": true,
      "since": "0.4.5",
      "source": "src/shared/agentProvider.ts",
      "desc": "Retirado: ningún selector lo ofrece; los agentes antiguos siguen arrancando."
    },
    {
      "id": "e-antigravity",
      "kind": "command",
      "engine": true,
      "key": "antigravity",
      "title": "Antigravity · Gemini",
      "command": "agy",
      "flags": {
        "ask": "",
        "auto": "--dangerously-skip-permissions",
        "full": "--dangerously-skip-permissions"
      },
      "modelFlag": "--model",
      "resume": "--conversation <id>",
      "install": null,
      "docsUrl": null,
      "coordinator": true,
      "hooks": "shim de hooks",
      "retired": false,
      "since": "0.2.3",
      "source": "src/shared/agentProvider.ts",
      "desc": ""
    },
    {
      "id": "e-qwen",
      "kind": "command",
      "engine": true,
      "key": "qwen",
      "title": "Qwen",
      "command": "qwen",
      "flags": {
        "ask": "",
        "auto": "--yolo",
        "full": "--yolo"
      },
      "modelFlag": "--model",
      "resume": null,
      "install": null,
      "docsUrl": null,
      "coordinator": true,
      "hooks": "proxy local",
      "retired": false,
      "since": "0.3.0",
      "source": "src/shared/agentProvider.ts",
      "desc": ""
    },
    {
      "id": "e-opencode",
      "kind": "command",
      "engine": true,
      "key": "opencode",
      "title": "OpenCode",
      "command": "opencode",
      "flags": {
        "ask": "",
        "auto": "",
        "full": ""
      },
      "modelFlag": "--model",
      "resume": null,
      "install": "npm install -g opencode-ai@latest",
      "docsUrl": "https://opencode.ai/docs",
      "coordinator": false,
      "hooks": "terminal",
      "retired": false,
      "since": "0.3.1",
      "source": "src/shared/agentProvider.ts",
      "desc": "Sin flag de autonomía: los permisos van en su propia configuración."
    },
    {
      "id": "e-crush",
      "kind": "command",
      "engine": true,
      "key": "crush",
      "title": "Crush · Charm",
      "command": "crush",
      "flags": {
        "ask": "",
        "auto": "--yolo",
        "full": "--yolo"
      },
      "modelFlag": "--model",
      "resume": "--session <id>",
      "install": "npm install -g @charmland/crush",
      "docsUrl": "https://github.com/charmbracelet/crush",
      "coordinator": false,
      "hooks": "terminal",
      "retired": false,
      "since": "0.3.1",
      "source": "src/shared/agentProvider.ts",
      "desc": ""
    },
    {
      "id": "e-pi",
      "kind": "command",
      "engine": true,
      "key": "pi",
      "title": "Pi",
      "command": "pi",
      "flags": {
        "ask": "",
        "auto": "--approve",
        "full": "--approve"
      },
      "modelFlag": "--model",
      "resume": "--session <id>",
      "install": "npm install -g --ignore-scripts @earendil-works/pi-coding-agent",
      "docsUrl": "https://pi.dev/docs/latest",
      "coordinator": false,
      "hooks": "terminal",
      "retired": false,
      "since": "0.3.1",
      "source": "src/shared/agentProvider.ts",
      "desc": ""
    },
    {
      "id": "e-copilot",
      "kind": "command",
      "engine": true,
      "key": "copilot",
      "title": "Copilot",
      "command": "copilot",
      "flags": {
        "ask": "",
        "auto": "-s --allow-all-tools --no-ask-user",
        "full": "-s --allow-all-tools --no-ask-user"
      },
      "modelFlag": "--model",
      "resume": "--resume <id>",
      "install": "npm install -g @github/copilot",
      "docsUrl": "https://docs.github.com/copilot/concepts/agents/about-copilot-cli",
      "coordinator": false,
      "hooks": "terminal",
      "retired": false,
      "since": "0.3.3",
      "source": "src/shared/agentProvider.ts",
      "desc": ""
    },
    {
      "id": "e-cursor",
      "kind": "command",
      "engine": true,
      "key": "cursor",
      "title": "Cursor",
      "command": "cursor-agent",
      "flags": {
        "ask": "",
        "auto": "--force --trust",
        "full": "--force --trust"
      },
      "modelFlag": "--model",
      "resume": "--resume <id>",
      "install": null,
      "docsUrl": "https://cursor.com/docs/cli/install",
      "coordinator": false,
      "hooks": "terminal",
      "retired": false,
      "since": "0.4.5",
      "source": "src/shared/agentProvider.ts",
      "desc": ""
    },
    {
      "id": "e-minimax",
      "kind": "command",
      "engine": true,
      "key": "minimax",
      "title": "MiniMax Code",
      "command": "mcode",
      "flags": {
        "ask": "",
        "auto": "",
        "full": ""
      },
      "modelFlag": null,
      "resume": "--session <id>",
      "install": "npm install -g @minimax-ai/code",
      "docsUrl": "https://platform.minimax.io/docs",
      "coordinator": false,
      "hooks": "terminal",
      "retired": false,
      "since": "0.4.8",
      "source": "src/shared/agentProvider.ts",
      "desc": "Sin flag de permisos ni de modelo en su TUI."
    },
    {
      "id": "e-hermes",
      "kind": "command",
      "engine": true,
      "key": "hermes",
      "title": "Hermes Agent",
      "command": "hermes",
      "flags": {
        "ask": "",
        "auto": "--yolo --accept-hooks",
        "full": "--yolo --accept-hooks"
      },
      "modelFlag": "--model",
      "resume": "--resume <id>",
      "install": null,
      "docsUrl": "https://github.com/NousResearch/hermes-agent",
      "coordinator": false,
      "hooks": "terminal",
      "retired": false,
      "since": "0.4.8",
      "source": "src/shared/agentProvider.ts",
      "desc": ""
    }
  ],
  "shortcuts": [
    {
      "id": "k-palette",
      "kind": "shortcut",
      "keys": [
        "Ctrl+K",
        "⌘K"
      ],
      "title": "Paleta de comandos",
      "context": "Escritorio en vivo",
      "desc": "Agentes, herramientas, ajustes y acciones. No se abre dentro de una terminal ni del editor de código, donde Ctrl+K es del programa.",
      "source": "src/renderer/src/desktop/live/LiveDesktopShell.tsx"
    },
    {
      "id": "k-mod-k",
      "kind": "shortcut",
      "keys": [
        "Ctrl+Shift+K"
      ],
      "title": "Abrir el menú «Más»",
      "context": "Escritorio en vivo",
      "desc": "Modificador configurable en Ajustes › Piso › Escritorio en vivo: Ctrl+Shift (por defecto), Alt+Shift o apagado.",
      "configurable": true,
      "source": "src/renderer/src/components/settings/sections/FloorSection.tsx"
    },
    {
      "id": "k-mod-o",
      "kind": "shortcut",
      "keys": [
        "Ctrl+Shift+O"
      ],
      "title": "Cambiar a la vista de oficina",
      "context": "Escritorio en vivo",
      "desc": "Modificador configurable en Ajustes › Piso › Escritorio en vivo: Ctrl+Shift (por defecto), Alt+Shift o apagado.",
      "configurable": true,
      "source": "src/renderer/src/components/settings/sections/FloorSection.tsx"
    },
    {
      "id": "k-mod-1",
      "kind": "shortcut",
      "keys": [
        "Ctrl+Shift+1"
      ],
      "title": "Ir a Equipo",
      "context": "Escritorio en vivo",
      "desc": "Modificador configurable en Ajustes › Piso › Escritorio en vivo: Ctrl+Shift (por defecto), Alt+Shift o apagado.",
      "configurable": true,
      "source": "src/renderer/src/components/settings/sections/FloorSection.tsx"
    },
    {
      "id": "k-mod-2",
      "kind": "shortcut",
      "keys": [
        "Ctrl+Shift+2"
      ],
      "title": "Ir a Misiones",
      "context": "Escritorio en vivo",
      "desc": "Modificador configurable en Ajustes › Piso › Escritorio en vivo: Ctrl+Shift (por defecto), Alt+Shift o apagado.",
      "configurable": true,
      "source": "src/renderer/src/components/settings/sections/FloorSection.tsx"
    },
    {
      "id": "k-mod-3",
      "kind": "shortcut",
      "keys": [
        "Ctrl+Shift+3"
      ],
      "title": "Abrir Ajustes",
      "context": "Escritorio en vivo",
      "desc": "Modificador configurable en Ajustes › Piso › Escritorio en vivo: Ctrl+Shift (por defecto), Alt+Shift o apagado.",
      "configurable": true,
      "source": "src/renderer/src/components/settings/sections/FloorSection.tsx"
    },
    {
      "id": "k-mode",
      "kind": "shortcut",
      "keys": [
        "F"
      ],
      "title": "Alternar Oficina ↔ Trabajo",
      "context": "Escritorio en vivo",
      "desc": "Tecla sola. No actúa mientras escribes en una terminal, un campo, un diálogo o el editor.",
      "source": "src/renderer/src/desktop/live/desktopMode.ts"
    },
    {
      "id": "k-settings-search",
      "kind": "shortcut",
      "keys": [
        "Ctrl+K",
        "⌘K"
      ],
      "title": "Buscar en Ajustes",
      "context": "Ajustes abiertos",
      "desc": "Dentro de Ajustes, Ctrl+K enfoca su buscador en vez de abrir la paleta.",
      "source": "src/renderer/src/components/settings/SettingsSheet.tsx"
    },
    {
      "id": "k-settings-save",
      "kind": "shortcut",
      "keys": [
        "Ctrl+S",
        "⌘S"
      ],
      "title": "Guardar cambios de Ajustes",
      "context": "Ajustes abiertos",
      "desc": "Guarda todo lo pendiente de una vez.",
      "source": "src/renderer/src/components/settings/SettingsSheet.tsx"
    },
    {
      "id": "k-palette-nav",
      "kind": "shortcut",
      "keys": [
        "↑",
        "↓"
      ],
      "title": "Moverse por los resultados",
      "context": "Paleta de comandos",
      "desc": "Recorre la lista; da la vuelta al llegar al final."
    },
    {
      "id": "k-palette-run",
      "kind": "shortcut",
      "keys": [
        "Enter"
      ],
      "title": "Ejecutar el resultado",
      "context": "Paleta de comandos",
      "desc": "Cierra la paleta y ejecuta el comando activo."
    },
    {
      "id": "k-palette-filter",
      "kind": "shortcut",
      "keys": [
        "Tab",
        "Shift+Tab"
      ],
      "title": "Cambiar de filtro",
      "context": "Paleta de comandos",
      "desc": "Todo · Agentes · Acciones · Herramientas · Ajustes."
    },
    {
      "id": "k-palette-ends",
      "kind": "shortcut",
      "keys": [
        "Ctrl+Inicio",
        "Ctrl+Fin"
      ],
      "title": "Primero / último resultado",
      "context": "Paleta de comandos",
      "desc": "Salta a los extremos de la lista.",
      "source": "src/renderer/src/commands/CommandPalette.tsx"
    },
    {
      "id": "k-inbox-move",
      "kind": "shortcut",
      "keys": [
        "J",
        "K"
      ],
      "title": "Siguiente / anterior pregunta",
      "context": "Preguntas",
      "desc": "Mueve el foco entre permisos y preguntas pendientes.",
      "source": "src/renderer/src/components/inbox/inboxModel.ts"
    },
    {
      "id": "k-inbox-approve",
      "kind": "shortcut",
      "keys": [
        "A"
      ],
      "title": "Aprobar el permiso",
      "context": "Preguntas",
      "desc": "Solo en tarjetas de permiso con el foco puesto."
    },
    {
      "id": "k-inbox-deny",
      "kind": "shortcut",
      "keys": [
        "D"
      ],
      "title": "Denegar el permiso",
      "context": "Preguntas",
      "desc": "Solo en tarjetas de permiso con el foco puesto."
    },
    {
      "id": "k-inbox-enter",
      "kind": "shortcut",
      "keys": [
        "Enter"
      ],
      "title": "Responder o ver detalle",
      "context": "Preguntas",
      "desc": "En una pregunta abre la respuesta; en un permiso, el detalle."
    },
    {
      "id": "k-send",
      "kind": "shortcut",
      "keys": [
        "Ctrl+Enter",
        "⌘Enter"
      ],
      "title": "Enviar mensaje o misión",
      "context": "Enviar mensaje · Asignar misión",
      "desc": "Envía el texto del cuadro abierto desde el menú del agente.",
      "source": "src/renderer/src/commands/AgentActionsProvider.tsx"
    },
    {
      "id": "k-term-zoom-in",
      "kind": "shortcut",
      "keys": [
        "Ctrl+=",
        "Ctrl++"
      ],
      "title": "Letra más grande",
      "context": "Terminal con foco",
      "desc": "Solo para esa terminal.",
      "source": "src/renderer/src/components/PtyTerminalView.tsx"
    },
    {
      "id": "k-term-zoom-out",
      "kind": "shortcut",
      "keys": [
        "Ctrl+-"
      ],
      "title": "Letra más pequeña",
      "context": "Terminal con foco",
      "desc": "Solo para esa terminal."
    },
    {
      "id": "k-term-zoom-reset",
      "kind": "shortcut",
      "keys": [
        "Ctrl+0"
      ],
      "title": "Restablecer la letra",
      "context": "Terminal con foco",
      "desc": "Vuelve al tamaño por defecto."
    },
    {
      "id": "k-term-find",
      "kind": "shortcut",
      "keys": [
        "Ctrl+Shift+F"
      ],
      "title": "Buscar en la terminal",
      "context": "Terminal con foco",
      "desc": "Abre la barra de búsqueda (motor xterm)."
    },
    {
      "id": "k-pan",
      "kind": "shortcut",
      "keys": [
        "←",
        "→",
        "↑",
        "↓"
      ],
      "title": "Mover la cámara",
      "context": "Oficina",
      "desc": "Con Shift, pasos más largos. No actúa si escribes en un campo.",
      "source": "src/renderer/src/scene/office/OfficeFloor.tsx"
    },
    {
      "id": "k-editor-undo",
      "kind": "shortcut",
      "keys": [
        "Ctrl+Z"
      ],
      "title": "Deshacer",
      "context": "Editor de oficina",
      "desc": "Deshace el último cambio del plano.",
      "source": "src/renderer/src/desktop/live/officeEditor/OfficeEditor.tsx"
    },
    {
      "id": "k-editor-redo",
      "kind": "shortcut",
      "keys": [
        "Ctrl+Y",
        "Ctrl+Shift+Z"
      ],
      "title": "Rehacer",
      "context": "Editor de oficina",
      "desc": "Rehace el cambio deshecho."
    },
    {
      "id": "k-editor-save",
      "kind": "shortcut",
      "keys": [
        "Ctrl+S"
      ],
      "title": "Guardar el plano",
      "context": "Editor de oficina",
      "desc": "Guarda la distribución."
    },
    {
      "id": "k-editor-rotate",
      "kind": "shortcut",
      "keys": [
        "R"
      ],
      "title": "Rotar",
      "context": "Editor de oficina",
      "desc": "Gira el mueble seleccionado."
    },
    {
      "id": "k-editor-delete",
      "kind": "shortcut",
      "keys": [
        "Supr",
        "Retroceso"
      ],
      "title": "Quitar la selección",
      "context": "Editor de oficina",
      "desc": "Borra lo seleccionado."
    },
    {
      "id": "k-editor-esc",
      "kind": "shortcut",
      "keys": [
        "Esc"
      ],
      "title": "Soltar herramienta o salir",
      "context": "Editor de oficina",
      "desc": "Primero suelta la herramienta, luego la selección y al final sale."
    },
    {
      "id": "k-ide-save",
      "kind": "shortcut",
      "keys": [
        "Ctrl+S",
        "⌘S"
      ],
      "title": "Guardar el archivo",
      "context": "IDE",
      "desc": "Guarda el archivo abierto en el editor de código.",
      "source": "src/renderer/src/ide/IdePanel.tsx"
    },
    {
      "id": "k-new-floor",
      "kind": "shortcut",
      "keys": [
        "Ctrl+Shift+N",
        "⌘⇧N"
      ],
      "title": "Nuevo piso en otra ventana",
      "context": "Menú de la app",
      "desc": "Solo con multiWindow activado.",
      "source": "src/main/appMenu.ts"
    }
  ],
  "files": [
    {
      "id": "f-config",
      "kind": "file",
      "path": "<userData>/config.json",
      "title": "Configuración de la app",
      "desc": "Todas las claves de esta referencia (83 documentadas, 36 internas). La app reescribe el archivo completo al guardar Ajustes: edítalo con la app cerrada.",
      "example": "{ \"autonomyLevel\": \"ask\", \"quitSaveAndClose\": true }",
      "source": "src/main/config.ts"
    },
    {
      "id": "f-protocol",
      "kind": "file",
      "path": "<colmena>/hive/PROTOCOL.md",
      "title": "Protocolo de la colmena",
      "desc": "Reglas que lee cada agente: buzones, mensajes, board.md y tasks.json. Lo escribe la app.",
      "source": "src/main/hive.ts"
    },
    {
      "id": "f-registry",
      "kind": "file",
      "path": "<colmena>/hive/registry.json",
      "title": "Registro de agentes",
      "desc": "Quién está en el piso y quién es el coordinador (godId)."
    },
    {
      "id": "f-tasks",
      "kind": "file",
      "path": "<colmena>/hive/tasks.json",
      "title": "Libro de tareas",
      "desc": "Kanban estructurado: todo / doing / blocked / done, con responsable, prioridad y dependencias. Al cerrar una tarjeta, result lleva exactamente tres líneas."
    },
    {
      "id": "f-board",
      "kind": "file",
      "path": "<colmena>/hive/board.md",
      "title": "Plan compartido",
      "desc": "Plan libre del piso. Solo lo edita el coordinador; los demás proponen cambios."
    },
    {
      "id": "f-log",
      "kind": "file",
      "path": "<colmena>/hive/log.jsonl",
      "title": "Registro de eventos",
      "desc": "Registro de solo anexado de lo que pasa en la colmena."
    },
    {
      "id": "f-approval-rules",
      "kind": "file",
      "path": "<colmena>/hive/approval-rules.json",
      "title": "Reglas «Permitir siempre»",
      "desc": "Reglas de aprobación por comando, agente o proyecto. Los comandos peligrosos nunca se aprueban solos.",
      "source": "src/main/approvalRulesStore.ts"
    },
    {
      "id": "f-spawn-requests",
      "kind": "file",
      "path": "<colmena>/hive/spawn-requests/<id>.json",
      "title": "Peticiones de contratación",
      "desc": "El coordinador escribe aquí para lanzar un worker. Requiere objective y cwd; pasa a .done/ o .failed/. Solo se consume con «Quién puede contratar» activado.",
      "example": "{ \"objective\": \"Arregla el test de login\", \"cwd\": \"C:/code/web\", \"isolate\": true }"
    },
    {
      "id": "f-identity",
      "kind": "file",
      "path": "<colmena>/hive/agents/<id>/identity.md",
      "title": "Identidad del agente",
      "desc": "Quién es el agente. Solo lectura: lo escribe la app."
    },
    {
      "id": "f-memory",
      "kind": "file",
      "path": "<colmena>/hive/agents/<id>/memory.md",
      "title": "Memoria del agente",
      "desc": "Memoria a largo plazo; se lee al empezar cada tarea y se condensa si crece demasiado."
    },
    {
      "id": "f-inbox",
      "kind": "file",
      "path": "<colmena>/hive/agents/<id>/inbox/",
      "title": "Buzón de entrada",
      "desc": "Mensajes para el agente. Los atendidos pasan a inbox/.done/."
    },
    {
      "id": "f-outbox",
      "kind": "file",
      "path": "<colmena>/hive/agents/<id>/outbox/<n>.json",
      "title": "Buzón de salida",
      "desc": "Un JSON por mensaje; la app lo entrega y rellena id, from, hops y fechas.",
      "example": "{ \"to\": \"god\", \"act\": \"request\", \"subject\": \"Revisión del PR 88\", \"body\": \"…\" }"
    },
    {
      "id": "f-chatter-log",
      "kind": "file",
      "path": "<colmena>/office-chatter.jsonl",
      "title": "Historial de la charla",
      "desc": "Solo existe si la charla de oficina está activa. Retención: officeChatterLogDays y officeChatterLogMaxKb.",
      "source": "src/main/officeChatLog.ts"
    }
  ],
  "hooks": [
    {
      "id": "h-SubagentStart",
      "kind": "hook",
      "key": "SubagentStart",
      "title": "SubagentStart",
      "desc": "Un subagente nativo empieza.",
      "source": "src/main/hooks.ts"
    },
    {
      "id": "h-SubagentStop",
      "kind": "hook",
      "key": "SubagentStop",
      "title": "SubagentStop",
      "desc": "Un subagente nativo termina.",
      "source": "src/main/hooks.ts"
    },
    {
      "id": "h-PreToolUse",
      "kind": "hook",
      "key": "PreToolUse",
      "title": "PreToolUse",
      "desc": "Antes de cada herramienta: reglas de aprobación y cortacircuitos deciden si pasa.",
      "source": "src/main/hooks.ts"
    },
    {
      "id": "h-Status",
      "kind": "hook",
      "key": "Status",
      "title": "Status",
      "desc": "Línea de estado de Claude Code: ventana de contexto y límites de la suscripción.",
      "source": "src/main/hooks.ts"
    },
    {
      "id": "h-CostSample",
      "kind": "hook",
      "key": "CostSample",
      "title": "CostSample",
      "desc": "Tokens de una respuesta, sintetizados por el proxy local (Qwen).",
      "source": "src/main/hooks.ts"
    },
    {
      "id": "h-PostToolUse",
      "kind": "hook",
      "key": "PostToolUse",
      "title": "PostToolUse",
      "desc": "Herramienta terminada. Una llamada idéntica repetida es la señal de bucle.",
      "source": "src/main/hooks.ts"
    },
    {
      "id": "h-UserPromptSubmit",
      "kind": "hook",
      "key": "UserPromptSubmit",
      "title": "UserPromptSubmit",
      "desc": "Llega un prompt. Reentrega el objetivo solo si cambió.",
      "source": "src/main/hooks.ts"
    },
    {
      "id": "h-PreCompact",
      "kind": "hook",
      "key": "PreCompact",
      "title": "PreCompact",
      "desc": "Antes de compactar el contexto.",
      "source": "src/main/hooks.ts"
    },
    {
      "id": "h-PostCompact",
      "kind": "hook",
      "key": "PostCompact",
      "title": "PostCompact",
      "desc": "Después de compactar; reinicia las medidas del cortacircuitos.",
      "source": "src/main/hooks.ts"
    },
    {
      "id": "h-SessionStart",
      "kind": "hook",
      "key": "SessionStart",
      "title": "SessionStart",
      "desc": "Arranca o se reanuda una sesión. La app entrega roster y objetivo.",
      "source": "src/main/hooks.ts"
    },
    {
      "id": "h-Stop",
      "kind": "hook",
      "key": "Stop",
      "title": "Stop",
      "desc": "Fin de turno: vacía el buzón cuando la sesión queda libre.",
      "source": "src/main/hooks.ts"
    },
    {
      "id": "h-Notification",
      "kind": "hook",
      "key": "Notification",
      "title": "Notification",
      "desc": "El agente espera: distingue «te necesita» de «terminó».",
      "source": "src/main/hooks.ts"
    },
    {
      "id": "h-PostToolUseFailure",
      "kind": "hook",
      "key": "PostToolUseFailure",
      "title": "PostToolUseFailure",
      "desc": "Herramienta fallida.",
      "source": "src/main/hooks.ts"
    },
    {
      "id": "h-PermissionDenied",
      "kind": "hook",
      "key": "PermissionDenied",
      "title": "PermissionDenied",
      "desc": "El CLI negó un permiso.",
      "source": "src/main/hooks.ts"
    },
    {
      "id": "h-HIVE_AUTO_APPROVE",
      "kind": "hook",
      "key": "HIVE_AUTO_APPROVE",
      "title": "HIVE_AUTO_APPROVE",
      "env": true,
      "desc": "Refleja el nivel de autonomía (≠ ask) para los CLIs que lo leen.",
      "source": "src/main/hive.ts"
    },
    {
      "id": "h-HIVE_NODE",
      "kind": "hook",
      "key": "HIVE_NODE",
      "title": "HIVE_NODE",
      "env": true,
      "desc": "Node que usa el shim de hooks.",
      "source": "src/main/hive.ts"
    },
    {
      "id": "h-HIVE_PROXY_API",
      "kind": "hook",
      "key": "HIVE_PROXY_API",
      "title": "HIVE_PROXY_API",
      "env": true,
      "desc": "Forma de API que observa el proxy (OpenAI o Anthropic).",
      "source": "src/main/hive.ts"
    },
    {
      "id": "h-HIVE_PROXY_SESSION",
      "kind": "hook",
      "key": "HIVE_PROXY_SESSION",
      "title": "HIVE_PROXY_SESSION",
      "env": true,
      "desc": "Sesión del proxy local (motores sin hooks).",
      "source": "src/main/hive.ts"
    },
    {
      "id": "h-HIVE_ROOT",
      "kind": "hook",
      "key": "HIVE_ROOT",
      "title": "HIVE_ROOT",
      "env": true,
      "desc": "Ruta de la colmena del piso.",
      "source": "src/main/hive.ts"
    },
    {
      "id": "h-HIVE_SOCK",
      "kind": "hook",
      "key": "HIVE_SOCK",
      "title": "HIVE_SOCK",
      "env": true,
      "desc": "Socket local al que el shim de hooks reenvía cada evento.",
      "source": "src/main/hive.ts"
    }
  ],
  "ipc": [
    {
      "id": "i-webhook-post",
      "kind": "ipc",
      "key": "POST /<id>",
      "title": "Enviar trabajo por webhook",
      "desc": "Cabecera x-md-webhook-secret con el secreto de ese endpoint y cuerpo según su esquema. 200 { ok, token, taskId } si el modo lo deja pasar; 202 { pending: true, token } si espera tu aprobación.",
      "example": "curl -X POST http://127.0.0.1:3849/ci -H \"x-md-webhook-secret: $SECRETO\" -H \"content-type: application/json\" -d '{\"message\":\"Arregla el build\",\"kind\":\"directive\"}'",
      "source": "src/main/webhook.ts"
    },
    {
      "id": "i-webhook-get",
      "kind": "ipc",
      "key": "GET /<id>",
      "title": "Estado de un trabajo",
      "desc": "Cabecera x-md-webhook-token (o ?token=). Devuelve solo esa tarea: { ok, status, title, result? }.",
      "source": "src/main/webhook.ts"
    },
    {
      "id": "i-webhook-schema",
      "kind": "ipc",
      "key": "esquema por defecto",
      "title": "Cuerpo de un webhook",
      "desc": "message es obligatorio; title, kind (directive | communication) y from son opcionales. Editable por endpoint.",
      "example": "{ \"message\": \"Publica la 0.5.1\", \"title\": \"Release\", \"kind\": \"directive\", \"from\": \"ci\" }",
      "source": "src/shared/triggers.ts"
    },
    {
      "id": "i-modes",
      "kind": "ipc",
      "key": "strict · allow-all · communication-only",
      "title": "Modos de confianza",
      "desc": "strict: todo espera tu aprobación (por defecto). allow-all: todo pasa. communication-only: pasa lo informativo; las órdenes esperan.",
      "source": "src/shared/triggers.ts"
    },
    {
      "id": "i-hire-link",
      "kind": "ipc",
      "key": "pixelceo://hire?src=<https-url>",
      "title": "Enlace de contratación",
      "desc": "Abre el asistente con un manifiesto de rol precargado. Solo https (http solo en localhost). Siempre contrata una persona.",
      "source": "src/shared/hire.ts"
    },
    {
      "id": "i-config-get",
      "kind": "ipc",
      "key": "config:get",
      "title": "Leer la configuración",
      "desc": "Sin claves secretas: se eliminan antes de salir del proceso principal.",
      "internal": true,
      "source": "src/preload/index.ts"
    },
    {
      "id": "i-config-update",
      "kind": "ipc",
      "key": "config:update",
      "title": "Guardar un parche de configuración",
      "desc": "Recibe un objeto parcial y persiste el resultado completo.",
      "internal": true,
      "source": "src/preload/index.ts"
    },
    {
      "id": "i-hive-send",
      "kind": "ipc",
      "key": "hive:send",
      "title": "Enviar un mensaje de la colmena",
      "desc": "(msg, from) → entrega al buzón del destinatario.",
      "internal": true,
      "source": "src/preload/index.ts"
    },
    {
      "id": "i-hive-add-task",
      "kind": "ipc",
      "key": "hive:addTask",
      "title": "Crear una tarea",
      "desc": "Añade una tarjeta al libro de tareas.",
      "internal": true,
      "source": "src/preload/index.ts"
    },
    {
      "id": "i-hive-patch-task",
      "kind": "ipc",
      "key": "hive:patchTask",
      "title": "Editar una tarea",
      "desc": "(id, patch) → { ok, error? }.",
      "internal": true,
      "source": "src/preload/index.ts"
    },
    {
      "id": "i-hive-tasks",
      "kind": "ipc",
      "key": "hive:tasks",
      "title": "Leer las tareas",
      "desc": "Devuelve tasks.json.",
      "internal": true,
      "source": "src/preload/index.ts"
    },
    {
      "id": "i-hive-search-memory",
      "kind": "ipc",
      "key": "hive:searchMemory",
      "title": "Buscar en la memoria",
      "desc": "(query, wing) sobre la memoria semántica.",
      "internal": true,
      "source": "src/preload/index.ts"
    },
    {
      "id": "i-pty-spawn",
      "kind": "ipc",
      "key": "pty:spawn",
      "title": "Lanzar una terminal",
      "desc": "Crea el proceso del agente en su pseudo-terminal.",
      "internal": true,
      "source": "src/preload/index.ts"
    },
    {
      "id": "i-pty-write",
      "kind": "ipc",
      "key": "pty:write",
      "title": "Escribir en una terminal",
      "desc": "(id, data).",
      "internal": true,
      "source": "src/preload/index.ts"
    },
    {
      "id": "i-control-pause",
      "kind": "ipc",
      "key": "control:pause",
      "title": "Pausar un agente",
      "desc": "(agentId, on).",
      "internal": true,
      "source": "src/preload/index.ts"
    },
    {
      "id": "i-control-steer",
      "kind": "ipc",
      "key": "control:steer",
      "title": "Guiar a un agente",
      "desc": "(agentId, text): corrige el rumbo a mitad de tarea.",
      "internal": true,
      "source": "src/preload/index.ts"
    },
    {
      "id": "i-control-halt",
      "kind": "ipc",
      "key": "control:halt",
      "title": "Detener un agente",
      "desc": "(agentId).",
      "internal": true,
      "source": "src/preload/index.ts"
    },
    {
      "id": "i-missions-save",
      "kind": "ipc",
      "key": "missions:save",
      "title": "Guardar misiones programadas",
      "desc": "Reemplaza la lista de misiones.",
      "internal": true,
      "source": "src/preload/index.ts"
    },
    {
      "id": "i-triggers-set-context",
      "kind": "ipc",
      "key": "triggers:setContext",
      "title": "Guardar el disparador de contexto",
      "desc": "Reglas compact y clear.",
      "internal": true,
      "source": "src/preload/index.ts"
    },
    {
      "id": "i-update-check",
      "kind": "ipc",
      "key": "update:checkNow",
      "title": "Buscar actualizaciones",
      "desc": "Comprueba el canal de versiones ahora.",
      "internal": true,
      "source": "src/preload/index.ts"
    }
  ],
  "roadmap": [
    {
      "id": "r-experimental",
      "title": "Funciones experimentales en Ajustes › General",
      "version": "0.5.2",
      "desc": "Tarjetas con un interruptor, qué hace cada función y sus contras."
    },
    {
      "id": "r-work-mode",
      "title": "Modo Trabajo con terminales divididas",
      "version": "0.5.2",
      "desc": "Un espacio de trabajo con varias terminales a la vista."
    },
    {
      "id": "r-editor2",
      "title": "Editor de oficina 2.0",
      "version": "0.5.2",
      "desc": "Pisos que empiezan con un solo puesto, tutorial por piso y rotación suave."
    },
    {
      "id": "r-furniture",
      "title": "Muebles interactivos",
      "version": "0.5.2–0.5.3",
      "desc": "Muebles que ayudan a los agentes en su día a día y una mesa de despacho nueva."
    },
    {
      "id": "r-cli-updater",
      "title": "Actualizador de CLIs rehecho",
      "version": "0.5.1",
      "desc": "Un diálogo único para actualizar cada motor."
    },
    {
      "id": "r-sol",
      "title": "GPT-6.1 Sol y nivel de razonamiento por agente",
      "version": "0.5.1",
      "desc": "Nuevo modelo en el selector y refresco de la lista de modelos."
    },
    {
      "id": "r-safety",
      "title": "Parar todo, tope diario y detector de atorados",
      "version": "0.5.2",
      "desc": "Protecciones globales antes de las funciones Pro."
    },
    {
      "id": "r-deeplinks",
      "title": "Enlaces «Hazlo en la app»",
      "version": "sin fecha",
      "desc": "Hoy solo existe pixelceo://hire. Abrir Ajustes o una guía desde la web necesita un enlace nuevo."
    }
  ],
  "internal": [
    {
      "key": "onboardingComplete",
      "tsType": "boolean",
      "default": false,
      "since": "0.1.1",
      "source": "src/main/config.ts:187"
    },
    {
      "key": "recentHives",
      "tsType": "string[]",
      "default": [],
      "since": "0.3.0",
      "source": "src/main/config.ts:214"
    },
    {
      "key": "closingSchedule",
      "tsType": "ClosingSchedule | null",
      "since": "0.5.0",
      "source": "src/main/config.ts:241"
    },
    {
      "key": "opsStandupSeeded",
      "tsType": "boolean",
      "since": "0.1.9",
      "source": "src/main/config.ts:295"
    },
    {
      "key": "heartbeatSeeded",
      "tsType": "boolean",
      "since": "0.2.0",
      "source": "src/main/config.ts:298"
    },
    {
      "key": "compactMaintenanceSeeded",
      "tsType": "boolean",
      "since": "0.3.2",
      "source": "src/main/config.ts:303"
    },
    {
      "key": "costCapUsd",
      "tsType": "number",
      "since": "0.2.0",
      "source": "src/main/config.ts:308"
    },
    {
      "key": "autoDeliveryPausedAgents",
      "tsType": "string[]",
      "since": "0.3.4",
      "source": "src/main/config.ts:322"
    },
    {
      "key": "remoteEnvironments",
      "tsType": "RemoteEnvironment[]",
      "default": [],
      "since": "0.4.6",
      "source": "src/main/config.ts:348"
    },
    {
      "key": "boutiqueEnvironment",
      "tsType": "import('../shared/boutiqueEnvironment').BoutiqueEnvironmentSettings",
      "since": "0.4.6",
      "source": "src/main/config.ts:425"
    },
    {
      "key": "boutiqueUrbanEnabled",
      "tsType": "boolean",
      "since": "0.4.6",
      "source": "src/main/config.ts:427"
    },
    {
      "key": "cliUpdateDismissed",
      "tsType": "Record<string, string>",
      "default": {},
      "since": "0.4.8",
      "source": "src/main/config.ts:443"
    },
    {
      "key": "desktopWorkspaceEnabled",
      "tsType": "boolean",
      "default": true,
      "since": "0.4.6",
      "source": "src/main/config.ts:459"
    },
    {
      "key": "tvShowOffices",
      "tsType": "boolean",
      "default": false,
      "since": "0.2.7",
      "source": "src/main/config.ts:476"
    },
    {
      "key": "officeChatterModel",
      "tsType": "string",
      "default": "claude-haiku-4-5-20251001",
      "since": "0.4.6",
      "source": "src/main/config.ts:516"
    },
    {
      "key": "officeChatterMilestoneModel",
      "tsType": "string",
      "default": "claude-fable-5",
      "since": "0.4.6",
      "source": "src/main/config.ts:521"
    },
    {
      "key": "minimaxEndpoint",
      "tsType": "string",
      "since": "0.4.6",
      "source": "src/main/config.ts:615"
    },
    {
      "key": "minimaxGroupId",
      "tsType": "string",
      "since": "0.4.6",
      "source": "src/main/config.ts:619"
    },
    {
      "key": "officeVoiceOverrides",
      "tsType": "Record<string, string>",
      "since": "0.4.6",
      "source": "src/main/config.ts:631"
    },
    {
      "key": "slackSigningSecret",
      "tsType": "string",
      "since": "0.1.7",
      "source": "src/main/config.ts:643"
    },
    {
      "key": "slackBotToken",
      "tsType": "string",
      "since": "0.1.7",
      "source": "src/main/config.ts:645"
    },
    {
      "key": "slackChannelId",
      "tsType": "string",
      "since": "0.1.7",
      "source": "src/main/config.ts:647"
    },
    {
      "key": "realtimeVoiceEnabled",
      "tsType": "boolean",
      "default": false,
      "since": "0.3.2",
      "source": "src/main/config.ts:681"
    },
    {
      "key": "webhookEnabled",
      "tsType": "boolean",
      "default": false,
      "since": "0.2.3",
      "source": "src/main/config.ts:695"
    },
    {
      "key": "webhookSecret",
      "tsType": "string",
      "since": "0.2.3",
      "source": "src/main/config.ts:700"
    },
    {
      "key": "webhookPort",
      "tsType": "number",
      "since": "0.2.3",
      "source": "src/main/config.ts:704"
    },
    {
      "key": "triggersMigratedV1",
      "tsType": "boolean",
      "default": false,
      "since": "0.3.8",
      "source": "src/main/config.ts:720"
    },
    {
      "key": "lifeSystemsMigratedV1",
      "tsType": "boolean",
      "default": false,
      "since": "0.4.8",
      "source": "src/main/config.ts:724"
    },
    {
      "key": "chatterLocalMigratedV1",
      "tsType": "boolean",
      "default": false,
      "since": "0.4.8",
      "source": "src/main/config.ts:730"
    },
    {
      "key": "autonomyLevelMigratedV1",
      "tsType": "boolean",
      "since": "0.4.8",
      "source": "src/main/config.ts:734"
    },
    {
      "key": "parodiesMigratedV1",
      "tsType": "boolean",
      "since": "0.5.1",
      "source": "src/main/config.ts:737"
    },
    {
      "key": "legendsMigratedV1",
      "tsType": "boolean",
      "since": "0.5.1",
      "source": "src/main/config.ts:740"
    },
    {
      "key": "freeflowOffMigratedV1",
      "tsType": "boolean",
      "since": "0.5.1",
      "source": "src/main/config.ts:743"
    },
    {
      "key": "reflectByteTriggerPct",
      "tsType": "number",
      "default": 50,
      "since": "0.2.0",
      "source": "src/main/config.ts:759"
    },
    {
      "key": "reflectSectionTrigger",
      "tsType": "number",
      "default": 50,
      "since": "0.2.0",
      "source": "src/main/config.ts:761"
    },
    {
      "key": "reflectRecentKeep",
      "tsType": "number",
      "default": 12,
      "since": "0.2.0",
      "source": "src/main/config.ts:763"
    }
  ]
}
