Install Hydrate.
One binary. Two hooks. A doctor that tells you exactly where you stand before you write a single prompt.
Install
Primary install: Homebrew.
brew install getHydrate/hydrate/hydrate
hydrate doctor
hydrate install-hooks
hydrate doctor
Linuxbrew works the same as macOS Homebrew. Once the binary is on
your PATH, the doctor / install-hooks / doctor sequence
below verifies the full setup.
Other install methods
curl one-liner
curl -fsSL gethydrate.dev/install | sh
hydrate doctor
hydrate install-hooks
hydrate doctor
Downloads the right tarball for your platform from the
latest GitHub release,
verifies its SHA-256 against SHA256SUMS, extracts to
~/.local/bin. Inspect the script at
gethydrate.dev/install before piping if you prefer.
Manual tarball
See Verify before you install
below: full curl + shasum -c walkthrough that gets you
an inspected tarball before extraction.
One file. Double-click to install.
Download Hydrate.msi ~50 MB · always points at the latest release
After the installer finishes, open a new PowerShell window and run
hydrate setup as shown below. Code signing for Windows
Authenticode is on the roadmap: expect a SmartScreen warning on
first run until then.
Other install methods
Silent install (admin / CI)
msiexec /i Hydrate.msi /qb All Windows artefacts
Tarball + ARM64 binaries are in the latest GitHub release.
Then, on every platform:
hydrate setup hydrate setup mints your user id, wires hooks for every
coding-agent runtime on this machine (Claude Code, Codex, Mistral
Vibe), and offers to install the local semantic embedder
(~115 MB). One command, end-to-end.
Verify at any time: hydrate doctor (prints
Ready. on a healthy install). Want every optional knob?
hydrate setup --advanced walks the full wizard (VS Code
extension, beta lock-in, BYOK keys, enterprise registration).
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/getHydrate/hydrate-public 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.8.0
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.8.0-darwin-arm64.tar.gz: OK
Code signing for macOS Gatekeeper and Windows Authenticode is on the 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, which is 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
macOS / Linux
hydrate uninstall-hooks
Removes the Claude Code hook wiring. The binary itself stays
on your PATH; brew uninstall hydrate removes it.
Your memory at ~/.hydrate/ is preserved either way
and can be restored with hydrate install-hooks.
Windows (MSI)
# Stop any user-mode server you've manually started
hydrate server stop -ErrorAction SilentlyContinue
# Uninstall via the MSI file you already have in Downloads
msiexec /x "$env:USERPROFILE\Downloads\Hydrate.msi"
# UAC prompt -> Yes; small GUI dialog appears, click OK
# Verify
Get-Service HydrateServer -ErrorAction SilentlyContinue # expect: nothing
Test-Path "C:\Program Files\Hydrate\" # expect: False
Run from an elevated PowerShell. If the MSI is not in
%USERPROFILE%\Downloads\, point
msiexec /x at wherever it lives, or uninstall
from Settings › Apps › Installed apps
› Hydrate › Uninstall. Your memory at
%USERPROFILE%\.hydrate\ is preserved.
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.