Get Started
Hash is a shell. It just happens to have an agent on speed dial.
Step 0: Accept the deal
This is an early-stage project with breaking changes.
If you want a polished tool, you should probably wait.
If you want a sharp experiment, hi.
Tested on
| Platform | Terminal | Agent | Status |
|---|---|---|---|
| macOS | Ghostty | Claude Code (ACP) | Primary testing environment |
Other platforms (Linux, Windows), terminals, and agents may work but are untested. SSH is not supported — Hash is designed for local terminal use only.
Step 1: Install
Choose the method that works best for you.
Homebrew (Recommended)
brew install hash
Build from source
Prerequisites: Go 1.23+, C compiler (for SQLite), Git.
On Linux, you also need X11 dev libraries (libx11-dev) for clipboard support.
cd hash
go build -o hash ./cmd/hash
Move hash to somewhere in your PATH:
# or
sudo mv hash /usr/local/bin/
Verify
Step 2: Configure an agent
Hash is agent-agnostic: ACP (stdio) or HTTP.
Create ~/.config/hash/config.toml with one of these:
transport = "stdio"
command = "claude"
transport = "http"
url = "http://localhost:11434/api/generate"
model = "codellama:13b"
Step 3: Use ?? anywhere
Whole command:
Pipe:
Single argument (inline fill):
Step 4: Control context (Ctrl+P)
Before you send anything to the agent, open the context picker and choose what goes in. Rule of thumb: send less than you think. You can always add more.
Step 5: Let it learn the boring fixes
If you keep doing the same "permission denied → chmod +x" dance, Hash will eventually stop making you dance.
Shell integration
Hash emits shell integration escape sequences automatically — no configuration needed.
- OSC 133 — Marks prompt boundaries for easy navigation between commands (jump to previous/next prompt)
- OSC 7 — Reports working directory so new tabs/panes inherit your location
Supported terminals: Ghostty, iTerm2, Kitty, WezTerm, Windows Terminal, VS Code integrated terminal. Terminals without support simply ignore these sequences.