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

PlatformTerminalAgentStatus
macOSGhosttyClaude Code (ACP)Primary testing environment
macOSGhosttyGemini CLI (ACP)Basic ACP interaction (experimental)

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 tap tfcace/hash
brew install hash

Go install

Prerequisites: Go 1.23+, C compiler (for SQLite).

go install github.com/tfcace/hash/cmd/hash@latest

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.

git clone https://github.com/tfcace/hash.git
cd hash
go build -o hash ./cmd/hash

Move hash to somewhere in your PATH:

mv hash ~/.local/bin/
# or
sudo mv hash /usr/local/bin/

Verify

hash --version

Step 2: Configure an agent

Hash is agent-agnostic: ACP (stdio) or HTTP.

Create ~/.config/hash/config.toml with one of these:

~/.config/hash/config.toml (ACP/stdio)
[agent]
command = "claude-code-acp"
~/.config/hash/config.toml (HTTP)
[agent]
transport = "http"
url = "http://localhost:11434/api/generate"
model = "codellama:13b"

Step 3: Use ?? anywhere

Whole command:

?? show me the 10 biggest files in this folder

Pipe:

cat logs.txt | ?? summarize the failure modes

Single argument (inline fill):

git log --sort-by=?? most recent first

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.

Step 6: Report issues with !!

When a command fails and you want to report it, just type !!. It opens an issue template pre-filled with context from the last command.

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.