Show GN: shell history에서 반복 명령을 찾아 alias/workflow로 바꿔주는 CLI를 만들었습니다

8 hours ago 3

며칠 동안 만든 작은 CLI 사이드프로젝트를 공유합니다.

shell alias는 좋습니다. 빠르고, 단순하고, 손에 익습니다.

근데 alias를 계속 .zshrc에 처박는 방식은 오래 못 간다고 생각했습니다.

처음에는 괜찮습니다.

alias gs='git status -sb' alias dc='docker compose'

문제는 이게 계속 늘어난다는 점입니다.

git alias, docker alias, pnpm alias, ssh alias, 프로젝트별 alias가 한 파일에 쌓이고, 나중에는 제가 뭘 만들어뒀는지도 까먹습니다.
alias는 분명 생산성을 위해 만들었는데, 어느 순간부터 기억력 테스트가 됩니다.

더 아까운 건 shell history였습니다.

제가 반복해서 치는 명령과 명령 시퀀스는 이미 history 안에 쌓여 있습니다. 그런데 대부분의 shell은 그걸 그냥 과거 기록으로만 둡니다.

그래서 ganbatte를 만들었습니다. 바이너리 이름은 gnb입니다.

ganbatte는 shell history를 분석해서 반복 명령은 alias 후보로, 반복되는 명령 시퀀스는 workflow 후보로 추천하는 CLI입니다.

brew install bssm-oss/tap/ganbatte gnb suggest # 반복 명령과 workflow 후보 찾기 gnb migrate # 기존 shell alias 가져오기 gnb # TUI에서 탐색

예를 들면 이런 식입니다.

=== 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.

Atuin이 “내가 뭘 입력했는지”를 잘 기억해준다면, ganbatte는 “내가 반복해서 입력하는 것”을 계속 쓸 수 있는 명령으로 바꿔주는 쪽에 가깝습니다.

기존 alias도 가져올 수 있습니다.

gnb migrate

인자 없이 실행하면 TUI에서 alias와 workflow를 검색하고 실행할 수 있습니다.

gnb

전역 alias와 프로젝트별 .ganbatte.toml을 나눠 쓸 수 있고, 위험한 명령에는 확인 프롬프트를 붙일 수도 있습니다.

[alias.nuke] cmd = "git reset --hard HEAD" confirm = true

중요한 점은 전부 로컬에서 돈다는 것입니다.

shell history나 track log를 서버로 보내지 않습니다. telemetry, 계정, cloud sync, AI 명령 생성도 없습니다.

아직 작고 투박한 사이드프로젝트지만, 매일 터미널에서 같은 명령을 반복 입력하는 사람이라면 바로 체감될 부분이 있을 것 같아서 공유합니다.

GitHub: https://github.com/bssm-oss/ganbatte

Read Entire Article