Gloss keeps reusable shell commands organized, searchable, and ready when you need them.
I built it because I kept re-searching the same commands and spreading aliases across shell history, notes, and config files. Gloss gives those commands a small local home: descriptions, tags, TUI search, config scanning, and safe managed alias sync.
- Save shell commands with descriptions and tags
- Browse, search, filter, add, edit, and delete entries in a TUI
- Scan zsh/bash configs for aliases, simple functions, and executable scripts
- Import only the scan suggestions you choose
- Add managed aliases without writing to your shell config immediately
- Preview and sync aliases into one dedicated managed block
- Create backups only when sync changes an existing shell file
- Store everything locally under
~/.config/gloss/
- Officially supported: macOS with zsh
- Officially supported: Linux with bash
- Not officially supported yet: Windows
Default shell files:
- zsh β
~/.zshrc - bash β
~/.bashrc - bash scan also includes
~/.bash_aliases
Existing config is never overwritten automatically. You can edit ~/.config/gloss/config.yaml if you want to change shell or scan paths.
curl -fsSL https://raw.githubusercontent.com/Architeg/gloss/main/scripts/install.sh | bashBy default, the script installs Gloss to:
~/.local/bin/glossIf ~/.local/bin is not in your PATH, the installer prints the exact commands to add it.
Install a specific version:
curl -fsSL https://raw.githubusercontent.com/Architeg/gloss/main/scripts/install.sh -o /tmp/gloss-install.sh
VERSION=v0.1.0 bash /tmp/gloss-install.shbrew install Architeg/tap/glossIf Homebrew behaves unexpectedly, check this:
echo "$HOMEBREW_NO_INSTALL_FROM_API"If it returns 1, unset it and retry:
unset HOMEBREW_NO_INSTALL_FROM_API
brew install Architeg/tap/glossYou can also skip Homebrew auto-update during install:
HOMEBREW_NO_AUTO_UPDATE=1 brew install Architeg/tap/glossDownload the correct asset from GitHub Releases.
Example for macOS Apple Silicon:
unzip gloss-darwin-arm64.zip
chmod +x gloss-darwin-arm64
sudo mv gloss-darwin-arm64 /usr/local/bin/gloss
gloss versionLaunch the TUI:
glossOr use direct CLI commands:
gloss help
gloss version
gloss list
gloss list --tag git
gloss scan
gloss add
gloss edit <command>
gloss delete <command>
gloss alias add
gloss alias sync
gloss alias delete <name>Main sections:
- Commands β browse, search, filter, open, add, edit, and delete saved commands
- Add β create a command entry with description and tags
- Scan β review aliases/functions/scripts found in configured scan paths
- Aliases β add, view, preview, sync, and delete managed aliases
- Settings β view shell file, storage path, scan paths, and config path
- Readme β built-in help
Common keys:
β/ββ moveEnterβ open, select, or confirmEscβ go backqβ quit/β search where availableFβ filter where availableSpaceβ toggle scan/import items where available
The Commands screen is the main glossary browser.
You can:
- browse saved entries grouped by tag
- open entry details
- add new entries
- edit existing entries
- delete entries
- search by command/description
- filter by tag
Entries without tags are shown under Untagged.
βββββββββββββββββββββββββββββ Commands βββββββββββββββββββββββββββββ
Search: > substring in command or description
Tag: > exact tag
βΊ Category: Git
βββββββββββββββββββββββ
gs git status
ga git add .
gc git commit -m
gp git push
βΊ Category: Tools
βββββββββββββββββββββββ
nano Open nano editor
serve Start a local static file server
updatebrew brew update && brew upgrade
βΊ Category: Network
βββββββββββββββββββββββ
headers curl -I
pingg ping github.com
myip curl ifconfig.me
dns dig
speed networkQuality
/ Search β F Filter β E Edit β D Delete β A Add β ββ Move β Enter Open β Esc Back β Q Quit Gloss can detect:
- aliases from your configured shell file
- zsh aliases from
~/.zshrc - bash aliases from
~/.bashrcand~/.bash_aliases - simple shell functions
- executable files in configured scan directories
Scan suggestions are selected by default. Use the TUI Scan screen to toggle and import only the entries you want.
Imported scan entries are intentionally added without tags by default. This keeps bulk import fast; you can tag entries later.
Gloss treats managed aliases as normal glossary entries with extra sync behavior.
Add a managed alias:
gloss alias addPreview and sync from the TUI, or sync directly:
gloss alias syncGloss writes aliases only inside this managed block:
# >>> gloss aliases >>>
alias gs="git status"
alias ll="ls -lah"
# <<< gloss aliases <<<When syncing, Gloss will:
- Build the managed alias block
- Replace the existing Gloss-managed block if it exists
- Append the block if it does not exist
- Leave unrelated shell config untouched
If the generated block already matches the shell file, Gloss does not rewrite the file and does not create a backup.
Delete a managed alias:
gloss alias delete <name>Then sync again to remove it from the managed block.
Backups are created only when:
- the shell file already exists
- sync is actually going to modify it
No backup is created when:
- Gloss creates a missing shell file for the first time
- sync detects there is no change to write
Backup names look like this:
~/.zshrc.gloss.bak-20260423-223500
~/.bashrc.gloss.bak-20260423-223500Old Gloss-created backups are pruned automatically.
Gloss stores config and data under:
~/.config/gloss/Typical files:
~/.config/gloss/config.yaml
~/.config/gloss/gloss.dbExample macOS/zsh config:
shell_file: /Users/yourname/.zshrc
storage_path: /Users/yourname/.config/gloss
scan_paths:
- /Users/yourname/.zshrc
use_color: trueExample Linux/bash config:
shell_file: /home/yourname/.bashrc
storage_path: /home/yourname/.config/gloss
scan_paths:
- /home/yourname/.bashrc
- /home/yourname/.bash_aliases
use_color: trueRemove the binary:
rm -f "$HOME/.local/bin/gloss"If installed system-wide:
sudo rm -f /usr/local/bin/glossIf installed with Homebrew:
brew uninstall glossOptional: remove local data and config:
rm -rf "$HOME/.config/gloss"Optional: remove the managed alias block from ~/.zshrc or ~/.bashrc:
# >>> gloss aliases >>>
# ...
# <<< gloss aliases <<<If the install script added Gloss to your PATH, remove this block from your shell config:
# --- Path to Gloss ---
export PATH="$HOME/.local/bin:$PATH"Gloss is not a shell replacement, history analyzer, package manager, AI command explainer, full shell plugin manager, or cloud sync product.
It is a small local utility for documenting, finding, importing, and safely syncing useful shell commands.
Clone the repo:
git clone https://github.com/Architeg/gloss.git
cd glossRun locally:
go run ./cmd/glossBuild:
go build ./cmd/glossCheck version:
go run ./cmd/gloss versionIf Gloss saves you time or becomes part of your workflow, you can share it, give it a star, or support the project here:
Issues, suggestions, and small focused PRs are welcome.
Please keep changes simple, readable, and focused on the core workflow.
Thanks to everyone who contributes to Gloss. β€οΈ
See the contributors graph.
MIT. See LICENSE.

