{
  "scale": "VAAS-1.0",
  "product": {
    "name": "Koble",
    "agentName": "KobIA",
    "url": "https://app.koble.es"
  },
  "statementVersion": "1.1",
  "date": "2026-08-26",
  "maxLevelOffered": 4,
  "vendorReservedLevels": [
    5,
    6
  ],
  "defaultLevel": 0,
  "whoMayChange": {
    "roles": [
      "admin del espacio"
    ],
    "vendorMayChangeUnilaterally": false,
    "notes": "El espacio se autogestiona hasta V3. V4 lo concede el equipo de Koble a petición del cliente; Koble no sube el nivel de nadie por su cuenta."
  },
  "riskCriteria": {
    "low": "Interna, reversible desde la propia auditoría y sin efecto fuera del espacio.",
    "medium": "Interna y reversible, pero con efecto sobre datos que el equipo da por buenos (estados del CRM, altas de contacto).",
    "high": "Dinero, documentos fiscales o algo que sale hacia fuera y no se puede retirar.",
    "uncataloguedAction": "high"
  },
  "actionCatalogue": [
    {
      "action": "addDealTodo",
      "risk": "low",
      "reversible": "yes",
      "undoMechanism": "Borrar el punto del checklist"
    },
    {
      "action": "addTag",
      "risk": "low",
      "reversible": "yes",
      "undoMechanism": "Quitar la etiqueta"
    },
    {
      "action": "addTaskChecklistItem",
      "risk": "low",
      "reversible": "yes",
      "undoMechanism": "Borrar el punto del checklist"
    },
    {
      "action": "assignConversation",
      "risk": "low",
      "reversible": "yes",
      "undoMechanism": "Devolver la conversación a quien la tenía"
    },
    {
      "action": "cancelCalendarEvent",
      "risk": "medium",
      "reversible": "with-effort",
      "undoMechanism": "Volver a crear el evento con los mismos datos"
    },
    {
      "action": "changeContactStatus",
      "risk": "medium",
      "reversible": "yes",
      "undoMechanism": "Devolver el estado anterior"
    },
    {
      "action": "clockInOut",
      "risk": "high",
      "reversible": "with-effort",
      "undoMechanism": "Corregir la jornada desde el control horario (queda registrado quién y por qué)"
    },
    {
      "action": "commentOnTask",
      "risk": "low",
      "reversible": "yes",
      "undoMechanism": "Borrar el mensaje del hilo de la tarea"
    },
    {
      "action": "createCalendarEvent",
      "risk": "low",
      "reversible": "yes",
      "undoMechanism": "Borrar el evento"
    },
    {
      "action": "createContact",
      "risk": "medium",
      "reversible": "yes",
      "undoMechanism": "Borrar el contacto"
    },
    {
      "action": "createDeal",
      "risk": "medium",
      "reversible": "yes",
      "undoMechanism": "Borrar la oportunidad recién creada"
    },
    {
      "action": "createDocument",
      "risk": "high",
      "reversible": "no",
      "undoMechanism": "Una factura emitida no se borra: se rectifica con otro documento"
    },
    {
      "action": "createProject",
      "risk": "low",
      "reversible": "yes",
      "undoMechanism": "Borrar el proyecto"
    },
    {
      "action": "createRecurringTask",
      "risk": "medium",
      "reversible": "with-effort",
      "undoMechanism": "Borrar la serie y las tareas que ya hubiera generado"
    },
    {
      "action": "createTask",
      "risk": "low",
      "reversible": "yes",
      "undoMechanism": "Borrar la tarea"
    },
    {
      "action": "createTaskFromConversation",
      "risk": "low",
      "reversible": "yes",
      "undoMechanism": "Borrar la tarea"
    },
    {
      "action": "createWebProject",
      "risk": "low",
      "reversible": "yes",
      "undoMechanism": "Borrar el proyecto web"
    },
    {
      "action": "markNotificationsRead",
      "risk": "low",
      "reversible": "yes",
      "undoMechanism": "Devolver a no leídos exactamente los avisos que se marcaron"
    },
    {
      "action": "moveCalendarEvent",
      "risk": "low",
      "reversible": "yes",
      "undoMechanism": "Devolver el evento a su hora anterior"
    },
    {
      "action": "moveConversationStage",
      "risk": "medium",
      "reversible": "yes",
      "undoMechanism": "Devolver la oportunidad a su etapa anterior"
    },
    {
      "action": "organizeCompanyContacts",
      "risk": "medium",
      "reversible": "with-effort",
      "undoMechanism": "Deshacer relación por relación"
    },
    {
      "action": "postInternalNote",
      "risk": "low",
      "reversible": "yes",
      "undoMechanism": "Borrar la nota del hilo"
    },
    {
      "action": "reconcileBankTransaction",
      "risk": "high",
      "reversible": "with-effort",
      "undoMechanism": "Deshacer la conciliación a mano"
    },
    {
      "action": "registerPayment",
      "risk": "high",
      "reversible": "with-effort",
      "undoMechanism": "Anular el cobro registrado"
    },
    {
      "action": "relateContacts",
      "risk": "low",
      "reversible": "yes",
      "undoMechanism": "Borrar la relación"
    },
    {
      "action": "requestAbsence",
      "risk": "medium",
      "reversible": "with-effort",
      "undoMechanism": "Retirar la solicitud mientras siga pendiente"
    },
    {
      "action": "resolveWebComment",
      "risk": "low",
      "reversible": "yes",
      "undoMechanism": "Devolver el comentario a pendiente"
    },
    {
      "action": "saveAgentMemory",
      "risk": "low",
      "reversible": "yes",
      "undoMechanism": "Borrar el recuerdo"
    },
    {
      "action": "scheduleFollowup",
      "risk": "low",
      "reversible": "yes",
      "undoMechanism": "Borrar el seguimiento programado"
    },
    {
      "action": "sendPaymentReminder",
      "risk": "high",
      "reversible": "no",
      "undoMechanism": "Un correo enviado no se puede retirar"
    },
    {
      "action": "snoozeConversation",
      "risk": "low",
      "reversible": "yes",
      "undoMechanism": "Devolver la conversación a la bandeja"
    },
    {
      "action": "toggleDealTodo",
      "risk": "low",
      "reversible": "yes",
      "undoMechanism": "Devolver el punto al estado que tenía"
    },
    {
      "action": "toggleRecurringTask",
      "risk": "medium",
      "reversible": "yes",
      "undoMechanism": "Volver a activarla (o a pausarla) como estaba"
    },
    {
      "action": "toggleTaskChecklistItem",
      "risk": "low",
      "reversible": "yes",
      "undoMechanism": "Devolver el punto al estado que tenía"
    },
    {
      "action": "updateContact",
      "risk": "low",
      "reversible": "yes",
      "undoMechanism": "Restaurar los valores previos guardados en la auditoría"
    },
    {
      "action": "updateConversationStatus",
      "risk": "medium",
      "reversible": "yes",
      "undoMechanism": "Devolver el estado anterior"
    },
    {
      "action": "updateDealValue",
      "risk": "low",
      "reversible": "yes",
      "undoMechanism": "Devolver el importe anterior"
    },
    {
      "action": "updateProject",
      "risk": "low",
      "reversible": "yes",
      "undoMechanism": "Restaurar los valores previos guardados en la auditoría"
    },
    {
      "action": "updateRecurringTask",
      "risk": "medium",
      "reversible": "yes",
      "undoMechanism": "Restaurar los valores previos guardados en la auditoría"
    },
    {
      "action": "updateTask",
      "risk": "low",
      "reversible": "yes",
      "undoMechanism": "Restaurar los valores previos guardados en la auditoría"
    },
    {
      "action": "updateWebProject",
      "risk": "low",
      "reversible": "yes",
      "undoMechanism": "Restaurar los valores previos guardados en la auditoría"
    }
  ],
  "humanRequestedActions": {
    "rule": "La escalera V0–V4 mide la INICIATIVA del agente: lo que hace sin que nadie se lo pida. Una acción que un miembro del equipo le pide en el chat, y para la que su rol ya tiene permiso, tiene humano en el bucle por construcción —es esa persona actuando por lenguaje natural en vez de por botón— y se ejecuta sin depender del nivel.",
    "surfaces": [
      {
        "surface": "Chat del panel (sesión autenticada)",
        "executesUpTo": "medium"
      },
      {
        "surface": "WhatsApp del equipo (identidad por teléfono)",
        "executesUpTo": "low"
      }
    ],
    "ceiling": "El techo invariante NO cede ante una orden directa: el riesgo alto y las acciones de `invariantCeiling` siguen esperando aprobación humana en la bandeja, desde cualquier superficie y en cualquier nivel.",
    "audit": "Queda en `proposed_actions` con `autoExecuted: false` y `reviewedBy` = quien la pidió, porque no fue autonomía. El recuento de `exercisedAutonomy` solo cuenta lo que el agente comprometió por su cuenta."
  },
  "invariantCeiling": [
    {
      "action": "clockInOut",
      "reason": "Requiere criterio humano en todos los niveles."
    },
    {
      "action": "createDocument",
      "reason": "Emitir una factura es un hecho fiscal (VeriFactu): no se borra, se rectifica."
    },
    {
      "action": "reconcileBankTransaction",
      "reason": "Casar un movimiento bancario con una factura decide qué está cobrado."
    },
    {
      "action": "registerPayment",
      "reason": "Apuntar un cobro cambia el estado fiscal de la factura."
    },
    {
      "action": "sendPaymentReminder",
      "reason": "Un correo de reclamación a un cliente no se puede des-enviar."
    }
  ],
  "undoWindowDays": 7,
  "irreversibleActions": [
    "createDocument",
    "sendPaymentReminder"
  ],
  "auditRecord": {
    "fields": [
      "toolName",
      "args",
      "title",
      "reasoning",
      "riskLevel",
      "autoExecuted",
      "status",
      "result",
      "undoData",
      "reviewedBy",
      "reviewedAt",
      "createdAt"
    ],
    "location": "Tabla `proposed_actions`, visible en Asistente › Propuestas.",
    "retention": "Mientras viva el espacio: no se purga.",
    "readableBy": [
      "admin del espacio",
      "equipo de Koble"
    ]
  },
  "gates": {
    "locations": [
      "src/lib/ai/action-risk.ts (clasificación, techo invariante y ventana de deshacer)",
      "src/lib/ai/autonomy.ts (escalera y niveles mínimos de cada comportamiento)",
      "src/lib/actions/agent-autonomy.ts (quién puede cambiar el nivel)"
    ],
    "classificationTest": "src/lib/ai/action-risk.test.ts",
    "ladderVsGatesTest": "src/lib/ai/autonomy.test.ts"
  },
  "descent": {
    "latency": "Inmediata: el nivel se lee de la base en cada ejecución, no se cachea. La siguiente acción ya se decide con el nivel nuevo.",
    "workInFlight": "Las misiones en curso se paran con el freno de mano; las propuestas ya generadas se quedan en la bandeja, que es donde no ejecutan nada.",
    "killSwitch": "Bajar a V0 desde Asistente › Autonomía deja el agente en solo consulta. Además, ninguna acción del techo invariante se ejecuta sola en ningún nivel, y por debajo de V3 no se auto-ejecuta nada."
  },
  "conformsToProperties": [
    "P1",
    "P2",
    "P3",
    "P4",
    "P5",
    "P6",
    "P7"
  ],
  "deployedDistribution": {
    "V3": 1,
    "V0": 2
  },
  "exercisedAutonomy": {
    "asOf": "2026-09-24",
    "autonomousActionsCommitted": 35,
    "byAction": {
      "updateTask": 2,
      "addTag": 3,
      "createTask": 5,
      "scheduleFollowup": 15,
      "updateContact": 10
    },
    "window": "2026-08-06 to 2026-09-12",
    "undoExercised": 0,
    "missionsRun": 0,
    "proposals": {
      "total": 205,
      "dismissed": 0,
      "pending": 1,
      "autoExecuted": 35,
      "dismissalsWithRecordedReason": 0
    },
    "note": "Un nivel concedido no es un nivel ejercido: esto es lo que KobIA ha comprometido de verdad, no lo que la configuración permite."
  }
}