BETA In open beta. Install live. Lock $5/mo for your first 12 months. See pricing →
Install

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 doctor
  • 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)
Ready.
Next:
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 → MCPAdd 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 ServersEdit. Or edit ~/.codeium/windsurf/mcp_config.json directly:

{
  "mcpServers": {
    "hydrate": {
      "command": "hydrate-mcp"
    }
  }
}

Reload Windsurf (Cmd/Ctrl-Shift-PReload 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.