Cómo está pensado Kanb
Kanb coordina varios agentes de IA trabajando sobre un proyecto real. Esta página explica cómo funciona por dentro y, más importante, por qué cada pieza es como es. No hace falta saber programar para leerla: cada sección abre con la idea en una frase y después baja al detalle.
Qué es Kanb
La idea en una frase Un tablero que planifica y reparte trabajo entre varios agentes de IA, observa lo que hacen y guarda evidencia de todo — funcionando en tu computadora, sin que tus credenciales salgan de ella.
Cuando alguien trabaja con agentes de IA en serio, aparecen tres problemas que ninguna herramienta de tareas resuelve. El primero es que no se sabe qué está pasando: un agente corre en una terminal, otro en otra, y no hay un lugar que muestre el estado real. El segundo es que el gasto es invisible hasta que la cuota se agota. El tercero es que nada queda registrado: cuando el trabajo termina, no hay rastro verificable de qué se decidió ni por qué.
Kanb existe para eso. Es un plano de control: no ejecuta la inteligencia, la coordina. Los agentes siguen siendo Claude, Codex o el que prefieras; Kanb es quien reparte el trabajo, mira lo que ocurre, mide el consumo y guarda la evidencia.
Tres compromisos que no se negocian
- Local primero. La base de datos vive en tu máquina y es la autoridad. Los servicios en la nube son opcionales y nunca mandan sobre lo local.
- Neutral entre proveedores. Ningún agente es especial. Agregar uno nuevo no debería tocar el núcleo.
- La aprobación humana es final. Un agente puede proponer, ejecutar y reportar. No puede aprobar su propio trabajo ni saltarse un límite.
El modelo de ejecución
La idea en una frase Kanb separa qué se quiere lograr de qué se pidió ejecutar y de qué proceso realmente arrancó, porque confundirlos es lo que hace que un sistema pierda trabajo o lo duplique.
La mayoría de las herramientas tienen un solo concepto: «la tarea». Kanb tiene cuatro niveles, y la distinción no es burocracia — cada uno responde una pregunta distinta que el sistema necesita poder contestar después de un reinicio, un corte de luz o un proceso que murió sin avisar.
El nivel que más cuesta entender es el último, y es el más importante. Un Dispatch es lo que pediste: «resolvé este bug con Claude». Una ProcessIncarnation es un arranque concreto de un proceso del sistema operativo. Si el proceso muere y hay que reintentar, nace una encarnación nueva — pero la petición sigue siendo la misma. Sin esa separación, un reintento parece trabajo nuevo, y el consumo se cuenta dos veces.
Por qué importa para quien no programa: es la diferencia entre «pedí una pizza» y «el repartidor salió». Si el repartidor se accidenta y sale otro, no pediste dos pizzas. Un sistema que confunde ambas cosas te cobra dos veces.
Arquitectura
La idea en una frase Una sola aplicación de escritorio manda; el teléfono solo mira y aprueba; la nube es opcional y nunca es la fuente de verdad.
El reparto de autoridad es deliberado. El escritorio ejecuta porque es donde están los CLIs y los archivos. El móvil nunca ejecuta — puede aprobar lo que el escritorio propone, pero no puede iniciar trabajo. Y la sincronización, si la contratás, intercambia eventos versionados con bandeja de salida, identificadores globales y resolución explícita de conflictos. Copiar filas entre bases en las dos direcciones está prohibido: es la receta clásica para que dos dispositivos se peleen por quién tiene razón.
Conexión con proveedores
La idea en una frase Kanb usa tu CLI ya instalado y autenticado, en vez de pedirte credenciales para guardarlas él.
La decisión más importante de seguridad del producto es una que no se tomó: Kanb no custodia tus credenciales de suscripción. Cuando ejecuta a Claude, lanza el CLI de Claude que ya tenés instalado y autenticado. El token nunca pasa por Kanb.
| Tipo de conexión | Cómo funciona | Dónde vive la credencial |
|---|---|---|
| subscription-cli camino principal | Kanb lanza el CLI del proveedor como proceso hijo, con argumentos fijos y entorno mínimo. | En el CLI. Kanb nunca la lee, guarda, reenvía ni renueva. |
| api-key secundario | Solo para proveedores sin CLI usable, o si preferís facturación por uso. | En el llavero del sistema operativo. Nunca en SQLite, ni en el disco del proyecto, ni en la interfaz. |
| local tercero | Modelos que corren en tu propia máquina. | No hay credencial, ni cuota, ni costo. |
La consecuencia práctica: si Kanb fuera comprometido mañana, quien entre no encuentra tus tokens de suscripción, porque nunca estuvieron ahí.
Ciclo de vida de un trabajo
La idea en una frase Un trabajo atraviesa estados explícitos, y cuando Kanb no sabe qué pasó lo dice — en vez de adivinar.
La regla que gobierna todo el diagrama es una sola:
nunca se sintetiza certeza desde una señal ausente. Si Kanb pidió
arrancar un proceso y no recibió confirmación, el estado no es «falló» ni «corrió» —
es start_unknown, y alguien tiene que reconciliarlo. Un sistema que
adivina en ese punto es un sistema que algún día mata un proceso que estaba
trabajando bien, o cobra dos veces el mismo trabajo.
Toda transición deja un recibo: un registro que solo se agrega, nunca se edita. Si algo estuvo mal, se agrega un recibo que lo corrige; la historia no se reescribe. Eso es lo que hace que el historial sirva como evidencia.
Propiedad y cerebro dividido
La idea en una frase Si dos instancias de Kanb creen mandar sobre el mismo proceso al mismo tiempo, pueden destruir trabajo. Hay una barrera diseñada exactamente para eso.
El problema se llama cerebro dividido y no es teórico: pasa cuando la aplicación se reinicia mientras un agente sigue corriendo, o cuando alguien abre Kanb dos veces. Si ambas creen ser dueñas del proceso, una puede matarlo mientras la otra le manda trabajo.
Cada vez que la propiedad cambia de manos, un contador —la generación— sube. Toda operación lleva ese número escrito. Una orden emitida por un dueño vencido llega con un número viejo y se rechaza, tanto en la base de datos como al borde del proceso real. Y hay una regla adicional que evita el error opuesto: tomar la propiedad no borra lo que hizo el dueño anterior. Un trabajo que quedó en estado incierto hay que reconciliarlo o abandonarlo explícitamente; no se puede ignorar.
Y si Kanb encuentra un agente que no lanzó él
Pasa: reiniciás la aplicación y quedó un proceso corriendo, o algo se ejecutó por fuera. Kanb clasifica lo que encuentra en categorías explícitas —instalado, mío y activo, mío y retomable, ajeno observado, desconocido— y actúa distinto en cada caso.
La regla dura es esta: un proceso que Kanb no lanzó no se adopta nunca automáticamente. Retomar uno propio exige que esté asentado y que haya evidencia de que efectivamente era suyo. Para los ajenos no hay ruta de adopción en absoluto — no es que esté desactivada por configuración, es que no existe el camino en el código.
La razón de ser tan estricto: un identificador de proceso se recicla y el nombre de un ejecutable se falsifica sin esfuerzo. Cualquier sistema que adopte procesos basándose en esas señales termina, tarde o temprano, mandándole trabajo a algo que no es lo que cree.
Consumo y cuota
La idea en una frase Kanb mide lo que gastás leyendo el sistema de otro, así que trata ese dato como una observación —con su fecha y su nivel de confianza— y nunca como una verdad.
Ningún proveedor publica un contador oficial de cuota para herramientas externas. Lo que hay son señales indirectas. Kanb las usa, pero es explícito sobre lo que son: toda medición lleva de dónde salió, cuánta confianza merece y cuándo se observó.
| Canal | Qué mide | Confiabilidad |
|---|---|---|
| run_usage | Consumo atribuible a una ejecución que Kanb lanzó. | Alta — Kanb la presenció. |
| quota_observation | Foto del estado de cuota de una cuenta o ventana. | Mejor esfuerzo. Puede estar vieja. |
| usage_estimate | Heurística versionada, visiblemente etiquetada como estimación. | Aproximada por diseño. |
Los tres canales nunca se mezclan en un solo número. Sumar una medición real con una estimación produce una cifra que parece precisa y no lo es — y sobre esa cifra alguien tomaría decisiones de gasto.
Cuatro reglas que se siguen de ahí
- La utilización siempre significa consumido, normalizada entre 0 y 1. Un proveedor que reporta «lo que queda» se invierte en el borde, una sola vez.
- Una lectura vieja se marca como vieja. No se presenta como fresca.
- Si el formato del proveedor cambia y el lector falla, falla cerrado: reporta desconocido, no un número inventado.
- Ante la duda, el respaldo son los datos de las ejecuciones propias, no una exploración más agresiva del sistema ajeno.
De dónde sale el dato, y qué no se hace para conseguirlo
Kanb obtiene consumo por tres vías, y las tres están acotadas a propósito.
- Lo que Kanb presencia. Cuando lanza un agente, lee el consumo del flujo que ese proceso emite. Es la vía más confiable porque no depende de interpretar el sistema de nadie.
- Sondeo por línea de comandos. Kanb puede preguntarle al CLI del proveedor por sus ventanas de cuota, con argumentos fijos, tope de salida y un intervalo mínimo entre consultas. Sin ninguna llamada de red propia — hay una prueba automática que falla si alguien agrega un cliente HTTP a ese módulo.
- Importar histórico, solo si vos lo autorizás. Kanb puede leer transcripciones locales para recuperar consumo anterior a su instalación. Requiere consentimiento explícito y por ruta: no explora tu disco buscando nada.
Del histórico se extraen únicamente contadores y marcas de tiempo. El contenido de las conversaciones no se lee, ni se guarda, ni se registra — y no por disciplina, sino porque no existe un campo ni una columna donde pueda entrar.
Qué modelos y cuentas hay disponibles
Kanb también enumera qué modelos y cuentas expone cada runtime instalado, para no tener que preguntártelo. De una cuenta guarda una referencia opaca, nunca la identidad ni la credencial. Y distingue explícitamente entre lo que un proveedor declara y lo que Kanb verificó: hoy, para los dos proveedores incluidos, la información es declarada y así aparece marcada.
Control de admisión
La idea en una frase Antes de gastar, Kanb decide si el trabajo puede correr — y esa decisión es una función pura, sin red, sin reloj y sin base de datos, para poder probarla entera.
Esta es la lógica más consecuente del sistema: es lo que impide que un agente consuma tu cuota del mes sin freno. Por eso está diseñada como una función pura: recibe la política, las ventanas de consumo, la petición y la hora, y devuelve un veredicto. No hace llamadas de red, no lee el reloj —el tiempo se le inyecta— y no sabe nada de proveedores. Se puede probar exhaustivamente sin conexión ni subprocesos.
soft-block es donde vive la promesa de que la aprobación humana es
final. hard-block es el único que ningún agente puede sortear.
La decisión sutil está en el último recuadro. Si no hay telemetría —porque el proveedor no publica nada o porque la lectura falló— el veredicto por defecto permite. La alternativa sería bloquear ante la duda, y eso convertiría cualquier fallo de lectura en una parálisis total del producto por una medición que quizás nunca existió.
Seguridad
La idea en una frase La interfaz no tiene privilegios propios: cada operación es un comando estrecho que no sirve para otra cosa.
Kanb es una aplicación de escritorio con una interfaz web adentro. Ese diseño tiene un riesgo conocido: si alguien logra inyectar código en la interfaz, hereda todo lo que la interfaz pueda hacer. La respuesta habitual —habilitar complementos genéricos para base de datos o terminal— es exactamente lo que Kanb no hace.
| Enfoque | Qué le da a un atacante | Decisión |
|---|---|---|
| Complemento de SQL genérico | Ejecutar cualquier consulta: control total de la base del workspace. | descartado |
| Permiso de ejecutar en terminal | Ejecutar cualquier programa local con tus permisos. | descartado |
| Comandos estrechos, uno por operación | Exactamente esa operación y nada más. No se puede reutilizar. | adoptado |
Un comando como «registrar esta observación de consumo» no se puede convertir en otra cosa. Comodidad para quien programa no vale entregarle a un atacante una herramienta de propósito general.
Lo que se sostiene alrededor
- Los procesos se lanzan con argumentos fijos, sin terminal intermedia, con entorno mínimo y sin que la interfaz pueda influir en la ruta, los argumentos ni las variables.
- Toda salida de un agente es dato no confiable. Se valida con lista blanca y tope de tamaño; lo que excede se rechaza sin siquiera intentar leerlo.
- Los secretos no entran en la base, ni en registros, ni en recibos, ni en capturas, ni en la memoria del asistente. Se usan referencias, no valores.
- Leer archivos tuyos requiere consentimiento explícito por ruta. Kanb no explora tu disco buscando nada.
Protocolo y sincronización
La idea en una frase Los comandos y eventos que cruzan entre dispositivos están versionados y son públicos, para que la app y cualquier servicio futuro no puedan interpretarlos distinto.
Kanb publica un protocolo versionado con los esquemas de comandos, eventos y recibos. No es documentación: es un contrato con suite de conformidad, y cualquier implementación tiene que pasarla para decir que lo cumple.
Esa decisión salió de un problema real. Dos partes del sistema —una en Rust, otra en TypeScript— implementaron la misma frase de una especificación escrita en prosa y la entendieron distinto. Las dos pasaban sus propias pruebas. Solo chocaron al integrarse. La conclusión fue que un contrato en prosa se interpreta; un contrato ejecutable se cumple o no.
Cómo llegaría una orden desde el teléfono
El transporte todavía no existe, pero el contrato sí, y define el camino que una orden remota tendrá que recorrer. Cada comando entrante se trata como no confiable y se revalida entero contra el contrato antes de tocar nada durable. Si llega con una generación de propiedad vencida, se rechaza — nunca se aplica «por las dudas».
El vocabulario de comandos es cerrado por construcción: aprobar, pausar, cancelar y reintentar. No hay forma de que llegue algo fuera de esa lista, y no incluye iniciar trabajo nuevo, porque el teléfono no ejecuta. Reusar una clave de idempotencia con un contenido distinto se rechaza, que es lo que impide que una orden repetida se aplique dos veces.
El protocolo tiene su propia licencia, y es más permisiva que la del resto de Kanb: Apache-2.0, mientras la aplicación es AGPL-3.0. Es deliberado. Un protocolo que nadie puede implementar sin adoptar obligaciones de copyleft no es un protocolo público — y como la suite de conformidad es el mecanismo con el que cualquier implementación demuestra que cumple, esa suite también tiene que poder correrla un tercero. Podés construir un cliente, un adaptador o un servicio compatible con Kanb bajo los términos que quieras.
Licencia y modelo
La idea en una frase Kanb es libre y su código es público. Lo que se cobra no es el programa: es una excepción a las obligaciones de su licencia, para las organizaciones que no pueden aceptarlas.
Kanb se publica bajo AGPL-3.0. Es una licencia libre con una condición: quien modifique Kanb y lo ponga a disposición de otros por red está obligado a publicar sus modificaciones. Eso impide que alguien tome el trabajo, lo cierre y lo ofrezca como servicio sin devolver nada.
El código es abierto porque la inspeccionabilidad es parte del producto. Kanb corre en tu máquina, lanza procesos y —con tu consentimiento explícito— lee transcripciones. «Confiá en mí» no es vendible a código cerrado desde esa posición.
| Parte | Licencia | Por qué |
|---|---|---|
| La aplicación | AGPL-3.0 | Auditable por quien la instala; protegida contra ser cerrada por un tercero. |
protocol/ | Apache-2.0 | Para que cualquiera implemente clientes o servicios compatibles sin adoptar copyleft. |
| El servicio gestionado | cerrado | Vive en un repositorio aparte. Nunca es requisito para usar Kanb en local. |
Dónde está el negocio
Muchas organizaciones tienen políticas internas que prohíben usar software con licencia AGPL, incluso puertas adentro. Para ellas Kanb vende una licencia comercial: una excepción a esas obligaciones. Lo gratuito es el programa con copyleft; lo que se cobra es el derecho a usarlo sin él.
Lo que Kanb no vende, y no va a vender: acceso más barato a los modelos. Cada persona sigue necesitando su propia suscripción con su proveedor, exactamente igual que sin Kanb — compartir una cuenta entre varios empleados viola los términos de servicio de los proveedores y expone a quien lo haga a que le suspendan las cuentas. Lo que Kanb aporta es control, límites de gasto y evidencia sobre lo que un equipo consume y aprueba.
Estado de la implementación
La idea en una frase El marco de decisiones está cerrado; la construcción va por la mitad, y esta tabla dice honestamente por dónde.
| Pieza | Estado | Detalle |
|---|---|---|
| Decisiones de arquitectura | cerrado | Trece ADRs aprobados más un modelo de amenazas. |
| Persistencia durable y recibos | construido | Sesiones, dispatches, encarnaciones y recibos que solo se agregan. |
| Protocolo versionado | construido | Con suite de conformidad entre la persistencia y los contratos. |
| Ejecución de agentes | parcial | Lanza, transmite y detiene. Falta conectar el ciclo de vida durable al ejecutor. |
| Aislamiento por trabajo | parcial | Cada trabajo en su copia del repositorio; falta la interfaz. |
| Consumo y cuota | parcial | Se observa y atribuye; el sondeo por CLI está construido, pero ningún proveedor expone hoy un subcomando documentado que lo alimente. |
| Import de consumo histórico | construido | Con consentimiento por ruta y revocación; sin acceso al contenido de las conversaciones. |
| Modelos y capacidades | parcial | Se enumeran y se distingue lo declarado de lo verificado; falta mostrarlo en la interfaz. |
| Clasificación de agentes | parcial | Clasifica y gatea la re-adopción; no explora procesos del sistema todavía. |
| Control de admisión | pendiente | La semántica está decidida; falta implementarla completa. |
| Coordinación multiagente | pendiente | El grafo de dependencias entre trabajos. |
| Sincronización con móvil | parcial | El contrato de comandos y su persistencia local existen y están probados; el transporte no. |
Esta tabla se mantiene deliberadamente honesta. Un producto que promete lo que no tiene es exactamente lo que este diseño intenta evitar en la telemetría — sería raro hacerlo en su propia documentación.
Índice de decisiones
Cada decisión de esta página está registrada como ADR en el repositorio, con su contexto, sus alternativas descartadas y sus consecuencias.
| ADR | Decisión |
|---|---|
| 0001 | Kanb es un plano de control local-first; la aprobación humana es final. |
| 0002 | Cliente abierto y servicio gestionado en repositorios separados, con licencias distintas. |
| 0003 | El escritorio manda, el móvil acompaña, la sincronización usa eventos y bandeja de salida. |
| 0006 | Conectar a través del CLI del usuario, sin custodiar credenciales de suscripción. |
| 0007 | La telemetría de cuota es observada y de mejor esfuerzo, nunca autoritativa. |
| 0008 | El control de admisión es una función pura; sin telemetría, permite. |
| 0009 | Comandos estrechos en vez de complementos de propósito general. |
| 0010 | Propiedad y ciclo de vida durables para las sesiones de agentes. |
| 0011 | Obtener consumo y descubrir runtimes locales sin heredar confianza. |
Kanb es software libre bajo AGPL-3.0, con el directorio protocol/ bajo
Apache-2.0 para que cualquiera pueda implementar clientes compatibles. El código, los
ADRs completos y el modelo de amenazas están en el repositorio público.