Install Hydrate.
One binary. Two hooks. A doctor that tells you exactly where you stand before you write a single prompt.
Install
brew install getHydrate/hydrate/hydrate
hydrate doctor
hydrate install-hooks
hydrate doctor
Run hydrate doctor first to confirm the binary works, then hydrate install-hooks
to wire the Claude Code hooks, then hydrate doctor again to verify the full setup.
Verify before you install
Pipe-curl-to-shell is fine when the upstream is auditable. Every Hydrate release publishes the artefacts, the checksums, and the source side-by-side so you can verify before running anything.
Source
All binaries are built from github.com/SeamusWaldron/hydrate via GitHub Actions. The release workflow lives at .github/workflows/release.yml — single file, no hidden steps.
SHA-256 checksums
Every release ships a SHA256SUMS file alongside the tarballs. Verify with shasum -a 256 -c SHA256SUMS before extracting. The Homebrew formula pins the SHA per platform; brew install verifies it automatically.
Reproducible artefacts
Linux and macOS tarballs are built with CGO_ENABLED=0 and stripped (-s -w ldflags). Run our release workflow on a fork to get byte-identical binaries.
What the install script does
brew install writes the binary to /opt/homebrew/bin/hydrate (or /usr/local/bin/hydrate on Intel). Nothing else.
hydrate setup is the step that touches your machine: it creates ~/.hydrate/ for the local store, wires hook entries into ~/.claude/settings.json (Claude Code), ~/.codex/config.toml (Codex), or ~/.vibe/hooks.toml (Vibe), and starts the local hydrate-server daemon on localhost:24312. Every step is skippable; review with hydrate setup --dry-run first.
# Verify a release tarball before installing manually
TAG=v0.4.4
PLAT=darwin-arm64 # or linux-amd64, etc.
cd /tmp
curl -fsSL -O https://github.com/getHydrate/hydrate-public/releases/download/$TAG/hydrate-$TAG-$PLAT.tar.gz
curl -fsSL -O https://github.com/getHydrate/hydrate-public/releases/download/$TAG/SHA256SUMS
shasum -a 256 -c SHA256SUMS --ignore-missing
# Expected: hydrate-v0.4.4-darwin-arm64.tar.gz: OK
Code signing for macOS Gatekeeper and Windows Authenticode is on the roadmap and tracked at /roadmap. Until then, macOS users who download the tarball directly will need to clear the quarantine bit with xattr -d com.apple.quarantine ~/.local/bin/hydrate. The Homebrew install path is unaffected.
What hydrate doctor checks
Seventeen checks. Exit code 0 means "Ready." This is the install gate, not marketing.
PreCompact and SessionStart together survive Claude Code's auto-compaction: when the context window fills, Hydrate writes a recovery snapshot before Claude compacts; the next session restores it automatically.
Output on a clean Free install:
- hydrate binary installed (/opt/homebrew/bin/hydrate)
- hydrate-server binary installed (/opt/homebrew/bin/hydrate-server)
- hydrate-mcp binary installed (/opt/homebrew/bin/hydrate-mcp)
- ~/.hydrate/ owned by current user
- ~/.hydrate/data.db writable
- local hydrate-server reachable (http://localhost:49849)
- ~/.hydrate/server.key present (mode 0600)
- ~/.claude.json parseable
- UserPromptSubmit hook installed
- Stop hook installed
- PreCompact hook installed
- SessionStart hook installed
- MCP server "hydrate" configured
- /hydrate, /hydrate-last, /hydrate-project commands installed
- MCP reachable with configured api.key
- License: Free
- License tier matches binary (Free)
claude
/hydrate-last
Paths show your real install locations (Homebrew default /opt/homebrew/bin/).
The port after reachable is the live daemon port — 49849 is the
default; a free-port hop is possible. hydrate doctor --json is available
for scripts.
First run
Start a Claude Code session and rehydrate:
claude
/hydrate-last /hydrate-last pulls the most recent distilled session for the current project.
On a brand-new install there's nothing to rehydrate — that's expected. The Stop hook will
start capturing facts from this session forward.
Verification
If hydrate doctor ends with Ready. and your first
claude session prompts the UserPromptSubmit hook silently (no errors,
no banner), you're done.
Configuring other agents
Hydrate ships a stdio MCP server (hydrate-mcp) alongside
the main binary. Every MCP-capable client speaks to the same local
Hydrate daemon. The load-bearing consequence: a fact you write from
a Claude Code session is the same fact that surfaces from a Cursor
or Codex hydrate_recall call ten minutes later — one
local store, one canon, no extra account. The local API key in
~/.hydrate/api.key is read automatically; no PAT, no
env var to set.
Note: Hydrate's UserPromptSubmit / Stop /
PreCompact / SessionStart hooks are Claude
Code only. From any other agent, the MCP tool surface
(hydrate_recall, hydrate_canon_list,
hydrate_facts_list, and the others) is what you reach
for. Same memory, different read path.
Claude Desktop · macOS / Windows
Edit Claude Desktop's MCP config, then restart the app.
Path (macOS): ~/Library/Application Support/Claude/claude_desktop_config.json
Path (Windows): %APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"hydrate": {
"command": "hydrate-mcp"
}
}
} Restart Claude Desktop, then ask: "Use hydrate_recall to find what you know about my current project." If Claude calls the tool and answers from your facts, the wiring works.
Codex CLI · macOS / Linux / Windows
Edit Codex's config file. Codex auto-loads servers from the
mcp_servers tables on every launch.
Path: ~/.codex/config.toml
[mcp_servers.hydrate]
command = "hydrate-mcp"
args = []
Restart Codex (codex reads the config on launch), then
ask: "Call hydrate_recall and tell me what's pinned for this
project." If Codex returns facts you set up elsewhere, the
cross-vendor read path works.
Cursor · macOS / Windows / Linux
Settings → Features → MCP → Add new global MCP server. Or edit ~/.cursor/mcp.json directly:
{
"mcpServers": {
"hydrate": {
"command": "hydrate-mcp"
}
}
}
Cursor shows hydrate in the MCP servers list with a green dot when it can spawn the binary. Try: "Recall everything you know about this codebase from Hydrate."
Cline · VS Code extension
Open Cline → MCP Servers tab → Edit MCP Settings. Cline opens its cline_mcp_settings.json in a tab — add the server entry:
{
"mcpServers": {
"hydrate": {
"command": "hydrate-mcp",
"disabled": false,
"autoApprove": []
}
}
} autoApprove: [] keeps every Hydrate tool call confirmation-gated; populate it once you trust the workflow. First prompt: "Call hydrate_recall with the topic 'auth flow' and summarise."
Windsurf · macOS / Windows / Linux
Settings → Cascade → Model Context Protocol Servers → Edit. Or edit ~/.codeium/windsurf/mcp_config.json directly:
{
"mcpServers": {
"hydrate": {
"command": "hydrate-mcp"
}
}
} Reload Windsurf (Cmd/Ctrl-Shift-P → Reload Window). Cascade lists the tool under MCP servers; ask: "Pull project canon from Hydrate."
Zed · macOS / Linux
Edit Zed's settings — Cmd-, on macOS, Ctrl-, on Linux — and add a context server entry:
{
"context_servers": {
"hydrate": {
"command": {
"path": "hydrate-mcp",
"args": []
}
}
}
} Open Zed's assistant panel, start a thread, and ask: "Use the hydrate context server to recall what we decided about retries." If the assistant returns facts from your store, the registration worked. See Zed's context-server docs if the key name has changed in a newer release.
All five clients run the same hydrate-mcp binary against
the same local daemon. No account, no PAT, no per-tool credentials —
the local API key in ~/.hydrate/api.key is read at
spawn time. See /docs/integrations
for the full integration matrix.
Privacy
- Local SQLite database by default
- Captured session summaries and extracted facts
- No cloud sync unless you enable it
- No raw transcript sharing in Hydration Packs
- Team memory is a git repo you control
Full privacy posture: see the privacy box on the homepage and /privacy.
Uninstall
hydrate uninstall-hooks
Your memory at ~/.hydrate/ is preserved and can be restored with
hydrate install-hooks.
Troubleshooting
If hydrate doctor fails on a check, here's what it means:
- hydrate binary installed
- The hydrate CLI is not on your $PATH. Re-run brew install or check that /opt/homebrew/bin is on $PATH.
- hydrate-server / hydrate-mcp binary installed
- A companion binary is missing. brew reinstall hydrate puts them back.
- ~/.hydrate/ owned by current user
- The data directory is owned by a different user (often root from an old sudo install). chown -R "$USER" ~/.hydrate.
- ~/.hydrate/data.db writable
- The SQLite store can't be opened for writes. Check disk space and directory permissions.
- local hydrate-server reachable
- The background daemon is not running on its port. Run hydrate install-hooks again — it starts the server.
- ~/.hydrate/server.key present
- The local API key is missing or has wrong permissions. Reinstall the hooks to regenerate it at mode 0600.
- ~/.claude.json parseable
- Your Claude Code config has invalid JSON. Open it and fix the syntax, or delete it to let Claude Code regenerate.
- UserPromptSubmit / Stop hook installed
- The hook isn't wired into ~/.claude.json. Run hydrate install-hooks.
- MCP server "hydrate" configured
- The MCP server entry is missing from your Claude Code config. hydrate install-hooks writes it.
- slash commands installed
- /hydrate, /hydrate-last, /hydrate-project files aren't in ~/.claude/commands/. hydrate install-hooks installs them.
- MCP reachable with configured api.key
- The MCP server is configured but can't authenticate to the local daemon. Reinstall hooks to refresh the key.
- License / License tier matches binary
- Licence state on disk disagrees with the running binary. Re-run hydrate license activate or, for Free, hydrate install-hooks.