Atuin Desktop: Runbooks ejecutables
(blog.atuin.sh)- Atuin Desktop es un editor de runbooks local-first que se ve como documentación, pero se ejecuta como una terminal; es una herramienta pensada para convertir procedimientos operativos repetitivos en flujos de trabajo compartibles
- Reúne comandos de shell, consultas a bases de datos y solicitudes HTTP dentro de bloques de script, junto con una terminal integrada, un cliente de base de datos y gráficos de Prometheus
- Si Atuin CLI ofrecía un historial de shell sincronizable y con búsqueda, Desktop lo amplía hacia documentación ejecutable para que el conocimiento del equipo no quede solo en la memoria personal o en el historial
- El equipo de Atuin ya lo usa para releases de CLI, migraciones de infraestructura entre entornos, ejecuciones en staging/prod, y gestión y colaboración sobre consultas a bases de datos en vivo
- Como siguiente paso, planean Team accounts y la función de crear runbooks a partir del historial de shell; actualmente están distribuyendo acceso anticipado
Documentar procedimientos operativos que antes dependían de la memoria personal
- Muchas tareas de infraestructura, cuando ocurre una falla, dependen de unos cuantos comandos que alguien recuerda, y la documentación suele no existir o quedar desactualizada
- Las pistas reales para resolver problemas pueden estar dispersas entre hilos de Slack, documentos de Notion y el historial de shell personal
- Atuin CLI resolvía parte de este problema con un historial de shell sincronizado y con búsqueda, pero los equipos necesitan flujos de trabajo compartibles que vayan más allá del historial
- Atuin Desktop es un editor de runbooks ejecutables creado bajo la premisa de que “los runbooks deben poder ejecutarse”
- La descarga está disponible en la página de descargas
Flujos de trabajo de terminal que se ejecutan dentro de la documentación
- Atuin Desktop está diseñado para ejecutar flujos de trabajo reales de terminal dentro de una interfaz de documento
-
Elementos de trabajo reunidos en un solo lugar
- bloques de script
- terminal integrada
- cliente de base de datos
- gráficos de Prometheus
-
Funciones que ofrece
- Menos cambio de contexto: conecta comandos de shell, consultas a bases de datos y solicitudes HTTP
- Documentación que no se pudre: se ejecuta directamente desde el documento para mantenerse actualizada
- Automatización reutilizable: crea runbooks dinámicos con plantillas estilo Jinja
- Recuerdo inmediato: ofrece autocompletado a partir del historial real de shell
- Local-first, CRDT-powered: lo que se ejecuta en la terminal también se ejecuta en el runbook
- Sincronización y uso compartido con Atuin Hub: mantiene todo al día entre dispositivos y equipos
Casos de uso reales y estado de despliegue
- El equipo de Atuin ya está usando Atuin Desktop en trabajo real
- releases de Atuin CLI
- migraciones de infraestructura entre entornos
- ejecuciones en staging o prod
- gestión y colaboración sobre consultas a bases de datos en vivo
- Entre las próximas funciones están Team accounts y la posibilidad de generar runbooks a partir del historial de shell
- Ya se está distribuyendo, y se puede participar a través de la lista de acceso anticipado
1 comentarios
Opiniones en Hacker News
Si te da curiosidad Emacs, puedes hacer algo similar con org-babel
Un solo archivo de texto plano puede ser a la vez programa y documento/notebook/sitio web, y es un ejemplo convincente de programación literaria
Hay una buena explicación aquí: https://osem.seagl.org/conferences/seagl2019/program/proposa...
Me ayudó muchísimo al estudiar con libros de programación, y cuando luego vuelvo a ver ese programa literario, lo entiendo de nuevo mucho más rápido que cuando leí el libro por primera vez
La parte literaria responde esas preguntas “tontas” que surgen porque no recuerdo al 100% mi razonamiento o mis ideas de ese momento
Claro que tiene una curva de aprendizaje, así que no es para quienes no quieren aprender ese tipo de cosas
También pueden ver el video de la presentación[0] y un repositorio Git[1] con una demo más avanzada
[0]: https://www.youtube.com/watch?v=0g9BcZvQbXU
[1]: https://gitlab.com/spudlyo/orgdemo2
Probé hacer esto hace unos 7 años: https://nurtch.com/
La idea en sí tiene muchas ventajas, y también di una charla relacionada en JupyterCon Paris 2023: https://www.youtube.com/watch?v=TUYY2kHrTzs
Cuando hay código ejecutable dentro de la documentación, la gente quiere aplicar también a los documentos el flujo de revisión de PR, y eso requiere una inversión de equipo mayor que editar una wiki
Es exactamente lo que quería para mi equipo cuando estaba en AWS
Hay muchísimas tareas operativas que son un poco riesgosas para automatizarlas por completo, y esto ofrece un camino para ir convirtiéndolas repetidamente en automatización
Me da curiosidad saber cuándo estuviste en AWS
En los últimos años, en AWS creamos un servicio de plataforma interno para codificar runbooks operativos y ayudar a ejecutarlos automáticamente de forma segura, reduciendo el trabajo operativo rutinario
Atuin Desktop se parece a ese servicio en algunos aspectos, aunque ese servicio interno tenía muchas más funciones
Ejecutaba cosas como consultas de CloudWatch y comandos de AWS CLI con entradas del usuario, pero eliminaba la carga de configuración para obtener credenciales correctas de forma segura y formatear las entradas
Luego lo rehice para que se ejecutara directamente desde GitHub, y aquí hay un ejemplo en el que se invoca una función Lambda desde una wiki de GitHub con entradas de usuario en 4 líneas de código: https://speedrun.nobackspacecrew.com/index.html#invoking-an-...
Era un notebook alojado con integración de IAM
Me pregunto en qué se diferencia de un notebook Jupyter local
¿No se puede hacer esto en un
.ipynbcon!o%?Lo pregunto sinceramente porque no conozco bien esta empresa ni su producto CLI
El camino que empieza con pipenv/pyenv/conda/poetry/uv/dependencies.txt y “ah, para ejecutar este notebook tengo que actualizar Python… bueno, ok” y dos semanas después se convierte en “esa actualización rompió el Ansible viejo y ahora no puedo arreglar 15 servidores que apenas se sostenían” es un infierno
Intento mantener Python lejos de la automatización de base
Los proyectos Python que manejo se rompen al menos una vez al año por problemas de dependencias o runtime, y eso también aplica a Ansible, pipelines de build y cosas como
deploy.pyLos notebooks Jupyter arrastran un árbol enorme de dependencias y requisitos, así que no los usaría para automatizaciones tan críticas y fundamentales
Claro, mi trabajo me obliga a lidiar con demasiadas bases de código, y solo en los últimos dos meses tuve al menos 6 proyectos Python
Algunos requieren Python 2.7, otros una versión abandonada de
lib-something.h, otros están en la punta de lanza, y otros no están documentados pero en la práctica son extremadamente estrictos, del tipo “funciona siempre que no se actualice nada en la máquina de un único desarrollador responsable”Puppet y Chef son igual de malos por ser Ruby y sufren los mismos problemas, aunque Ruby tiene la diferencia de que durante décadas tuvo un solo sistema de gestión de paquetes
Por lo general, siento que Jupyter ofrece tanto scripting flexible como soporte para comandos del sistema operativo
También se puede con
!/%uos.system()Esto se ve muy parecido a https://runme.dev
Me encantan los documentos ejecutables, y creo que todavía no hay suficientes
Se ve interesante
Hace poco empecé a usar https://marimo.io/ como alternativa a notebooks Jupyter, tiene varias mejoras y esto también parece ir en una dirección parecida
Si es local-first, ya está sujeto a la podredumbre (rot)
Eso aplica si no ejecutas todo en contenedores; y si lo ejecutas en contenedores, el hecho de que sea local no importa
Si quieres documentar un runbook, simplemente documenta el runbook
Hay incontables maneras: archivos de texto, documentos de Confluence, grabaciones de pantalla, scripts de shell, etc.
La gente ya no lo está haciendo, y una UI más bonita no hará que de pronto lo hagan más
Personalmente, no quiero pasarme todo el día escribiendo código o documentación para dejar un sistema en el estado X
Quiero llevarlo manualmente al estado X, luego volcar ese estado con una herramienta y, más tarde, volver a ejecutar esa herramienta para crear o imponer ese estado
No quiero describir en código cómo debe llegar la computadora a ese estado, ni quiero usar configuración declarativa, que no deja de ser código con otro nombre
Quiero hacerlo directamente, tomar una snapshot y reproducirla
Debería funcionar en cualquier lugar y en cualquier sistema, sin depender de cosas como vigilar comandos de Bash shell
Un Dockerfile es, en efecto, algo parecido, pero documenta en un archivo los pasos que se siguieron para llegar a ese estado
https://linux.die.net/man/1/autoexpect
Para ese punto, sería mejor contar ya con una descripción declarativa que pueda convertirse automáticamente en los pasos necesarios para llegar al estado X
Usa módulos para tareas comunes, como verificar que un paquete esté instalado, que un archivo exista o que tenga cierto contenido, y es declarativo e idempotente
Me pregunto si esto también será open source, como el CLI de Atuin y el servidor de sincronización
¿Está pensado para convertirse en producto?
Aun así, me alegra que lo hayan anunciado
No termino de entender por qué esto es necesario
¿Alguien puede explicarme qué me estoy perdiendo? ¿Por qué debería usar esto en vez de un simple script de shell?
Estás en un equipo responsable de varias cosas; algunas las conoces muy bien y las tocas seguido, pero de otras apenas sabes que existen y casi nunca las manejas
X, que cae en este último grupo, se rompe
Todas las personas que realmente conocen X están de vacaciones/muertas/en una reunión
Por suerte, hay documentación que explica qué hacer en esta situación
Pero, de alguna manera, esa documentación resulta ser un milagro de mala información: vieja y equivocada
Ese es el problema que intenta resolver
Por lo que he hablado un poco con el creador, la intención se parece más a crear algo a medio camino entre Jupyter Notebooks y Ansible Tower
Es una forma de tener documentación, scripts y métricas cerca entre sí para que sea más fácil entender qué salió mal, cómo arreglarlo y si el arreglo funcionó
[1] Divulgación: ayudo a operar el Discord de atuin
Por eso es “Runbooks That Run”
A algunas personas les gusta cierto flujo de trabajo o de herramientas, así que simplemente lo construyen
Si le sirve a suficiente gente, puede que tenga mercado o puede que no
En proyectos personales uso un proceso de despliegue en PHP solo porque quiero, y resuelve el 60% del trabajo sin que yo tenga que hacerlo aparte
El runbook para eso son tareas incorporadas en la herramienta y está en el mismo repositorio Git que todo el despliegue del servidor
No quiero ponerlo en un lugar arbitrario ni en un script de shell para el que tenga que recordar un comando aparte
Para un programador, el código se vuelve esencialmente autodocumentado si se evita la complejidad y se mantiene un estilo funcional simple
Solo hace falta comentar de vez en cuando las partes que no sean flujos simples, como “crear un usuario de MySQL, rotar la contraseña, reflejar la nueva combinación de usuario/contraseña en los servicios relacionados y eliminar al usuario anterior cuyas credenciales podría tener un empleado despedido, por si falló el bloqueo de la VPN”
La herramienta con la que sueño es una donde todas las herramientas ofrezcan una interfaz de terminal, para poder crear un libro enorme con todo el contexto que tengo en la cabeza
Algo como reunir Jira, Datadog, GitHub, etc. en una sola pantalla
Imagínate tener un framework interno de TUI con componentes para cada servicio interno, y poder ensamblarlos como piezas de Lego para crear un dashboard TUI personalizado
Suena como algo que valdría la pena hacer como proyecto lateral en una empresa; sería un trabajo enorme, pero interesante
En un mundo ideal, todos los servicios, herramientas y aplicaciones ofrecerían una API que yo pudiera usar
Por ejemplo, si la puerta del refrigerador queda abierta demasiado tiempo, detectarlo mediante polling de la API o un webhook, y mandar al Roomba a cerrarla usando la API de Roomba
¿Por qué no? Es el mundo de las API
Parece que el desarrollo lleva un año detenido, pero la idea va por ahí
https://wtfutil.com/