मैंने एक CLI बनाया है जो shell history में दोहराए जाने वाले commands ढूंढकर उन्हें alias/workflow में बदल देता है
(github.com/bssm-oss)पिछले कुछ दिनों में बनाया गया एक छोटा CLI side project साझा कर रहा हूँ.
shell alias अच्छे होते हैं. तेज़, सरल, और हाथ में जल्दी बैठ जाते हैं.
लेकिन मुझे लगा कि alias को लगातार .zshrc में ठूंसते जाने का तरीका ज़्यादा समय तक टिकाऊ नहीं है.
शुरुआत में सब ठीक लगता है.
alias gs='git status -sb'
alias dc='docker compose'
समस्या यह है कि यह लगातार बढ़ता ही जाता है.
git alias, docker alias, pnpm alias, ssh alias, और project-specific alias एक ही फ़ाइल में जमा होते जाते हैं, और बाद में मैं यह भी भूल जाता हूँ कि मैंने क्या-क्या बना रखा है.
alias साफ़ तौर पर productivity के लिए बनाए जाते हैं, लेकिन एक समय बाद वे memory test बन जाते हैं.
इससे भी ज़्यादा अफ़सोस की बात shell history थी.
जो commands और command sequences मैं बार-बार टाइप करता हूँ, वे पहले से ही history में जमा हैं. लेकिन ज़्यादातर shell उन्हें बस पुराने रिकॉर्ड की तरह ही छोड़ देते हैं.
इसीलिए मैंने ganbatte बनाया. इसका binary नाम gnb है.
ganbatte एक CLI है जो shell history का विश्लेषण करके बार-बार चलने वाले commands को alias candidates और दोहराए जाने वाले command sequences को workflow candidates के रूप में सुझाता है.
brew install bssm-oss/tap/ganbatte
gnb suggest # दोहराए जाने वाले commands और workflow candidates ढूंढें
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 उससे ज़्यादा उस दिशा में है जहाँ “मैं जो बार-बार टाइप करता हूँ” उसे दोबारा इस्तेमाल किए जा सकने वाले commands में बदला जाए.
मौजूदा alias भी इम्पोर्ट किए जा सकते हैं.
gnb migrate
बिना arguments के चलाने पर आप TUI में alias और workflow खोज सकते हैं और चला सकते हैं.
gnb
आप global alias और project-specific .ganbatte.toml को अलग-अलग इस्तेमाल कर सकते हैं, और जोखिम भरे commands पर confirmation prompt भी लगाया जा सकता है.
[alias.nuke]
cmd = "git reset --hard HEAD"
confirm = true
एक महत्वपूर्ण बात यह है कि सब कुछ local पर चलता है.
shell history या track log सर्वर पर नहीं भेजे जाते. telemetry, account, cloud sync, या AI command generation जैसी कोई चीज़ नहीं है.
यह अभी भी एक छोटा और थोड़ा rough side project है, लेकिन जो लोग रोज़ terminal में वही commands बार-बार टाइप करते हैं, उनके लिए इसका फ़ायदा तुरंत महसूस हो सकता है, इसलिए इसे साझा कर रहा हूँ.
3 टिप्पणियां
धन्यवाद
आइडिया अच्छा है।
धन्यवाद