Criei um CLI que encontra comandos repetidos no histórico do shell e os transforma em alias/workflows
(github.com/bssm-oss)Quero compartilhar um pequeno projeto paralelo de CLI que fiz ao longo de alguns dias.
Alias de shell são ótimos. São rápidos, simples e ficam naturais no dia a dia.
Mas achei que continuar enfiando alias no .zshrc não era algo sustentável no longo prazo.
No começo, tudo bem.
alias gs='git status -sb'
alias dc='docker compose'
O problema é que isso só vai crescendo.
Aliases de git, docker, pnpm, ssh e aliases específicos de projeto vão se acumulando em um único arquivo, e depois de um tempo eu nem lembro mais o que já criei.
Alias claramente existe para aumentar a produtividade, mas em algum momento vira um teste de memória.
O que eu achava ainda mais desperdiçado era o histórico do shell.
Os comandos e sequências de comandos que eu digito repetidamente já estão acumulados no histórico. Mas a maioria dos shells simplesmente deixa isso como um registro do passado.
Foi por isso que criei o ganbatte. O nome do binário é gnb.
ganbatte é um CLI que analisa o histórico do shell e recomenda comandos repetidos como candidatos a alias, e sequências de comandos repetidas como candidatas a workflow.
brew install bssm-oss/tap/ganbatte
gnb suggest # encontrar comandos repetidos e candidatos a workflow
gnb migrate # importar aliases existentes do shell
gnb # explorar pela TUI
Por exemplo, algo assim.
=== 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.
Se o Atuin é ótimo para lembrar “o que eu digitei”, o ganbatte está mais para transformar “o que eu digito repetidamente” em comandos reutilizáveis.
Também dá para importar aliases existentes.
gnb migrate
Se você executar sem argumentos, pode pesquisar e executar aliases e workflows pela TUI.
gnb
Também é possível separar aliases globais e .ganbatte.toml por projeto, e adicionar prompts de confirmação para comandos perigosos.
[alias.nuke]
cmd = "git reset --hard HEAD"
confirm = true
O ponto importante é que tudo roda localmente.
O histórico do shell e os logs de rastreamento não são enviados para nenhum servidor. Também não há telemetry, conta, cloud sync nem geração de comandos por IA.
Ainda é um projeto paralelo pequeno e meio bruto, mas achei que valia compartilhar porque quem repete os mesmos comandos todos os dias no terminal provavelmente vai sentir o valor disso na hora.
3 comentários
Obrigado
A ideia é boa.
Obrigado.