Julian Henry

ghee: Terminal Shortcuts Library

3 min read

ghee is a shell shortcut manager: 617 aliases and functions across 32 modules, plus a Python/Rich fuzzy TUI. Source it into bash or zsh and the everyday CLI gets shorter.

It is MIT licensed. The search CLI alone is also on PyPI as ghee-cli (commands ghee and g); the aliases come from the shell install below.

Coverage includes Git, Docker, Kubernetes, AWS, GCP, Terraform, Heroku/Vercel/Fly/Railway, GitHub CLI, npm/yarn/pnpm, Python/pip/uv/poetry, Rust, Go, Redis, Postgres, MongoDB, Nginx, systemd, tmux, networking, recon, AI/LLM helpers, media tools, and more.

The Greatest Hits

gg "fix the auth bug"     # git add . && git commit -m "..." && git push
gs                        # git status
gd                        # git diff
gb                        # git branch
gco feature               # git checkout feature
gpr "title"               # push branch, create GitHub PR via gh
gsquash 3 "msg"           # squash last 3 commits into one
gwip                      # commit everything as WIP
gunwip                    # undo the last WIP commit
presto                    # nuclear option: wipe git history (with confirmation)

Docker:

dps                       # docker ps
dcu                       # docker compose up -d
dcd                       # docker compose down
dex container bash        # docker exec -it container bash

Kubernetes:

kgp                       # kubectl get pods
kl pod-name               # kubectl logs -f pod-name
kex pod-name bash         # kubectl exec -it pod-name -- bash

Package managers. Note pni, not pi, for pnpm (the shorter pi is already the name of another command-line tool):

ni                        # npm install
yi                        # yarn install
pni                       # pnpm install

You do not memorize all 617. You memorize the ones you use. For the rest, there is G.

The G Command

Best-guess

G 'docker logs'

Fuzzy-match a raw command or a vague description to the closest shortcut and show what it runs. Enter copies the alias to the clipboard; r runs the command instead.

Add / remove customs

G -a olist 'ollama list'
G -rm olist
G ls

Customs live in ~/.ghee-custom, survive updates, and are searchable like builtins. Clash detection asks before you shadow a system command or overwrite an existing ghee alias.

Interactive Rich TUI

G

Clears the screen and opens a Rich search prompt: type a query and press Enter to list the 15 best matches with the command each one runs; q quits. Needs Python 3.8+ and the rich package (the installer creates a ghee-venv for you).

Other useful entry points: G update, G info docker, G -q 'find large files' (optional Ollama), G --sync <gist_url>.

Every key in the G registry resolves to a real shortcut, and CI checks that it stays that way.

Setup

git clone https://github.com/juleshenry/ghee.git
cd ghee
./setup-ghee
source ~/.zshrc   # or ~/.bashrc

Detects bash/zsh, backs up your RC, wires bin/ + tools/ onto $PATH, sources modules/*.sh. Uninstall with ./setup-ghee --remove.

Extra Tools

Also in the box:

kash: file-backed function cache decorator (functools.cache, but stored as JSON on disk so it survives process restarts).

autosave-git-recursively.py: walk a tree and auto-commit/push every git repo (cron-friendly).

repoinspector.py: aggregate open issues across a GitHub user’s public repos.

Why Not Just Oh My Zsh?

  1. Scope. Oh My Zsh spreads its aliases across per-tool plugins that you enable one at a time. ghee is one registry that covers the whole toolchain.
  2. G. Searchable registry + TUI + custom shortcuts. Every built-in entry carries a description, so you can search by what a shortcut does, not only by its name or command.
  3. Shape. Modular modules/*.sh registry, Python TUI when you want it, plain aliases when you do not. Works on bash and zsh.
Cite this post
@misc{henry2026ghee,
  author       = {Henry, Julian},
  title        = {ghee: Terminal Shortcuts Library},
  year         = {2026},
  month        = {April},
  howpublished = {\url{https://juleshenry.github.io/blog/2026/04/13/ghee}},
  note         = {Blog post}
}