Creé una CLI que encuentra comandos repetidos en el historial del shell y los convierte en alias/workflows
(github.com/bssm-oss)Comparto un pequeño side project de CLI que hice durante varios días.
Los alias del shell son buenos. Son rápidos, simples y se vuelven naturales con el uso.
Pero pensé que el enfoque de seguir metiendo alias en .zshrc no era sostenible a largo plazo.
Al principio está bien.
alias gs='git status -sb'
alias dc='docker compose'
El problema es que esto no deja de crecer.
Los alias de git, docker, pnpm, ssh y los alias por proyecto se van acumulando en un solo archivo, y más tarde hasta se me olvida qué había creado.
Los alias claramente se crean para mejorar la productividad, pero en algún momento se convierten en una prueba de memoria.
Lo que más me parecía desperdiciado era el historial del shell.
Los comandos y secuencias de comandos que escribo repetidamente ya están acumulados en el history. Pero la mayoría de los shells lo dejan solo como un registro del pasado.
Por eso hice ganbatte. El nombre del binario es gnb.
ganbatte es una CLI que analiza el historial del shell y recomienda los comandos repetidos como candidatos a alias, y las secuencias de comandos repetidas como candidatos a workflow.
brew install bssm-oss/tap/ganbatte
gnb suggest # encontrar comandos repetidos y candidatos a workflow
gnb migrate # importar alias existentes del shell
gnb # explorar en la TUI
Por ejemplo, algo así.
=== Alias Suggestions ===
1. c = claude
Used 5 times · saves ~25 keystrokes
=== Workflow Suggestions ===
1. git-add
Step 1: git add .
Step 2: git commit -m "update"
Step 3: git push
Applying all suggestions would save ~89 keystrokes based on your history.
Si Atuin recuerda bien “qué fue lo que escribí”, ganbatte está más cerca de convertir “lo que escribo repetidamente” en comandos reutilizables.
También puede importar alias existentes.
gnb migrate
Si lo ejecutas sin argumentos, puedes buscar y ejecutar alias y workflows desde la TUI.
gnb
Puedes separar alias globales y un .ganbatte.toml por proyecto, y también agregar un prompt de confirmación a comandos peligrosos.
[alias.nuke]
cmd = "git reset --hard HEAD"
confirm = true
Lo importante es que todo corre de forma local.
No envía el historial del shell ni el track log a ningún servidor. Tampoco hay telemetry, cuentas, cloud sync ni generación de comandos con IA.
Todavía es un side project pequeño y algo tosco, pero si eres de los que repiten los mismos comandos todos los días en la terminal, creo que se nota de inmediato su utilidad, así que lo comparto.
3 comentarios
Gracias
La idea es buena.
Gracias