Kernl

0.3.0 · · Release en GitHub

Kernl 0.3.0: todo lo que es un agente, en un solo cajón

La oficina 3D de Kernl con varios agentes reunidos y el panel LIVE de la conversación

Todo lo que define a un agente en Kernl —su mandato, su runtime, sus herramientas, sus skills, qué lo despierta— vivía repartido entre un panel soldado al mundo 3D y un segundo panel medio duplicado en la página de agentes. Esta versión lo junta en un solo cajón que montan las dos páginas, y después dedica la mayoría de los commits a llenarlo.

Un solo panel, montado en dos lugares

El agent drawer se extrajo del mundo 3D a su propio shell, con su propio store, y ahora también se monta en la página de agentes. Su árbol carga el mandato, el objetivo por defecto, las herramientas permitidas, las variables, la apariencia y el runtime. Lo del runtime importa: se edita desde el panel mismo, no desde una página de configuración a tres clics de distancia.

Las conexiones, el schedule y los triggers de eventos se unificaron en una sola sección de triggering. Eran tres lugares distintos para contestar una única pregunta: qué arranca este agente.

Skills que se recomiendan solas

Cada agente tiene ahora su pestaña de skills, donde se recomienda, se instala y se asocia en el mismo lugar. Las sugerencias se sirven por HTTP desde un core de scoring que se sacó del cron sugeridor, y las skills del catálogo se puntúan junto a las que el agente ya tiene instaladas. La diferencia no es cosmética: el ranking pasa a contestar qué le conviene aprender a este agente, en vez de qué tiene ya.

También se pueden agregar skills desde una URL de repo sin salir de la pestaña. Para los agentes de tipo script, que no pueden usar skills, la pestaña directamente no aparece.

Conexiones MCP desde el dashboard

Agregás un servidor MCP, iniciás sesión y queda funcionando. Antes era editar un archivo de configuración y reiniciar.

Suma además update in-app en Linux y Windows —macOS ya lo tenía— y el instalador de Windows ahora empaqueta los SDK de agentes y de MCP, así una instalación limpia puede correr un agente sin un toolchain aparte.

Firmado y notarizado, en el orden correcto

Los builds de macOS se firman y notarizan, y el orden es lo que estaba mal. Ahora cada Mach-O anidado se firma antes del bundle que lo sella, el .app se notariza y se staplea antes de entrar al disk image —así abre sin red— y el tarball portable se reempaqueta desde el bundle firmado en vez del sin firmar que se había escrito minutos antes.

El job además falla cuando los seis secrets de Apple están cargados a medias. Antes publicaba una app firmada pero sin notarizar, que Gatekeeper rechaza exactamente igual que una sin firmar. Un release construido sin los secrets sigue saliendo sin firma, pero lo dice.

Lo que estaba roto y no se veía

  • El botón de actualizar de la tienda no actualizaba. Reportaba éxito igual.
  • Todas las herramientas mcp__kernel__* faltaban en las corridas del ejecutor claude_code. La API HTTP del kernel es fail-closed y el servidor MCP la alcanzaba sin header Authorization, así que /mcp respondía 401 y el servidor nunca terminaba de inicializar, en silencio. El agente arrancaba lo mismo, encontraba sólo sus built-ins e improvisaba. Ahora presenta el token que el proceso ya tiene.
  • Una corrida fallida dejaba el hilo de chat mudo. El panel caía a la fila del run sólo cuando el hilo no tenía ningún mensaje del agente, así que de la segunda falla en adelante el error desaparecía por completo: el operador veía su propio mensaje, ninguna respuesta y ningún error. Ahora el motivo se persiste y se muestra como una línea que nombra el control que lo arregla. Un presupuesto de pasos agotado dice qué setting moverle, en lugar de "Reached maximum number of turns (15)".
  • Todos los tags animados de eventos estaban muertos. El ícono nunca llevaba la clase de la que cuelgan sus keyframes, y los keyframes se referenciaban con un nombre que Svelte ya había reescrito. Pulse, spin, shake, wobble, bounce, sparkle y pop no se habían reproducido jamás.
  • Los argumentos de tipo array u objeto que un ejecutor había serializado a string se recuperan, en vez de llegar a la herramienta como "[object Object]".

El indicador de "pensando" también cambió. Era un ⚙️ girando sobre la cabeza del agente, y a distancia de cámara de oficina un glifo rotando se lee como una mota vibrando. Ahora son tres puntos respirando en secuencia dentro de la placa con el nombre, en el color de flujo del agente.

Cómo actualizar

curl -fsSL https://lifekernl.com/install.sh | sh

El mismo comando instala y actualiza. En macOS y Windows el update se hace desde la app. El detalle completo está en el CHANGELOG, y los binarios firmados para rpm, deb, dmg y msi salen en la página del release.

Registro de cambios

Todo lo que define a un agente —su prompt, su runtime, sus herramientas, sus skills, lo que lo despierta— estaba repartido entre un panel soldado al mundo 3D y un segundo panel, medio duplicado, en la página de agentes. Esta versión lo junta todo en un solo cajón que montan las dos páginas, y después dedica la mayoría de sus commits a completarlo.

Agregado

  • El cajón del agente. Un único panel, sacado del mundo 3D a su propio contenedor con su propio store, que también se monta en la página de agentes. Su árbol incluye el mandato, el objetivo por defecto, las herramientas permitidas, las variables, la apariencia y el runtime, que ahora se edita desde el mismo panel en vez de desde una página de configuración a tres clics de distancia.
  • Una pestaña de skills por agente que recomienda, instala y asigna en un solo lugar. Las sugerencias se sirven por HTTP desde un núcleo de puntuación que se sacó del cron del sugeridor, y las skills del catálogo se puntúan junto con las que ya están instaladas, así que el ranking responde "qué debería aprender este agente ahora" y no "qué tiene ya".
  • Skills desde la URL de un repo, que agregás sin salir de la pestaña.
  • Conexiones MCP desde el dashboard: agregás un servidor, iniciás sesión y queda funcionando, sin editar un archivo de configuración ni reiniciar.
  • Actualización desde la app en Linux y Windows, con progreso. macOS ya la tenía.
  • Un diagnóstico de las ejecuciones fallidas del agente, arriba de todo en el panel, con cada falla asociada al control que realmente la arregla.
  • Las cadenas de modelos se convierten entre la lista del panel y las columnas del agente.
  • La capacidad de tool loop aparece en el estado del proveedor de LLM, así un proveedor que no puede manejar un tool loop lo avisa antes de que le apuntes un agente.
  • Mirá cómo dibuja la oficina creativa, desde el cajón del agente.
  • Los builds de macOS salen firmados y notarizados, en el orden correcto. Cada Mach-O anidado se firma antes que el bundle que lo sella, el .app se notariza y se le hace staple antes de entrar en la imagen de disco —así abre sin red— y el tarball portable se vuelve a armar a partir del bundle firmado en lugar del sin firmar que se había escrito minutos antes. Ahora el job falla cuando los seis secretos de Apple están cargados a medias, en vez de publicar una app firmada pero sin notarizar que Gatekeeper rechaza igual que a una sin firmar. Un release armado sin los secretos sale sin firmar, como antes, y lo dice.
  • Soporte del host para renderizado headless, para el puente con Blender que viene como extensión. La imagen del kernel trae las bibliotecas que un render necesita sin pantalla —sobre todo libEGL, cuya ausencia mataba un job después de encolarlo y de armar la escena— y un frame renderizado se puede mostrar con <img src> a través de ?auth=, que no puede mandar un header. La lista de permitidos sigue abarcando una sola ruta: el listado de jobs de al lado sigue rechazando un token en la URL.

Cambiado

  • El dashboard abre con la sesión iniciada en todas las plataformas. El traspaso del token andaba en una y en las demás te dejaba en una pantalla de login para una instancia que acababas de instalar vos mismo.
  • Conexiones, programación y disparadores por evento son una sola sección "disparo". Eran tres lugares para responder una sola pregunta: qué arranca a este agente.
  • El instalador de Windows incluye los SDK de agentes y de MCP, así que una instalación nueva de Windows puede correr un agente sin un toolchain aparte.
  • La pestaña de skills se oculta para los agentes de script, que no pueden usar skills, y el cajón está traducido.
  • El README arranca con la oficina de agentes y un contador de instancias en vivo.
  • Se fue el panel duplicado de skills del agente.
  • El indicador de "pensando" vive en la etiqueta del propio agente. Era un glifo ⚙️ girando sobre la cabeza del agente: a la distancia de la cámara de la oficina, un glifo que rota se ve como una mancha que vibra. Ahora son tres puntos que respiran en secuencia dentro de la placa con el nombre, en el color de flujo del agente.

Corregido

  • El botón de actualizar de la tienda no actualizaba. Informaba éxito.
  • Faltaban todas las herramientas mcp__kernel__* en una ejecución de claude_code. La API HTTP del kernel es fail-closed y el servidor MCP le pegaba sin header Authorization, así que /mcp respondía 401 y el servidor nunca terminaba de inicializarse, en silencio. El agente arrancaba igual, encontraba solo sus herramientas integradas e improvisaba. Ahora presenta el token que el proceso ya tiene.
  • Una ejecución fallida dejaba el hilo del chat en silencio. El panel recurría a la fila de la ejecución solo cuando el hilo no tenía ningún mensaje del agente, así que a partir de la segunda falla el error desaparecía por completo: el operador veía su propio mensaje, ninguna respuesta y ningún error. Ahora el motivo se persiste como lo hace el ejecutor nativo, y se muestra como una línea que nombra el control que realmente lo arregla: si se agotó el presupuesto de pasos, te dice qué ajuste lo mueve, en vez de "Reached maximum number of turns (15)".
  • Ninguna etiqueta de evento animada funcionaba. El ícono nunca llevaba la clase de la que cuelgan sus keyframes, y los keyframes se referenciaban con un nombre que Svelte ya había reescrito, así que pulse, spin, shake, wobble, bounce, sparkle y pop no se habían reproducido ni una vez.
  • Los argumentos de tipo array y objeto que un ejecutor había serializado como strings se recuperan, en vez de llegarle a la herramienta como "[object Object]".
  • La detección de re-autenticación de Google matcheaba errores del SDK de Claude Code y pedía volver a iniciar sesión sin arreglar nada; ahora matchea las firmas de error del propio kernel.
  • La coerción de las cadenas de modelos convertía los valores que no eran string en undefined en lugar de strings, y ahora usa un centinela explícito de string vacío.
  • El store del cajón: seed() desactualizado, rollback de patch por campo, campos en vuelo pisados cuando se volvía a sembrar el cajón, escrituras que no se conciliaban contra la fila guardada, y un listener de menú que se perdía en cada apertura.
  • La clasificación del estado de las skills, cómo se muestra el costo desconocido y la tokenización de texto con acentos.
  • Los controles de la cadena quedan deshabilitados mientras se escribe la cadena.