Hydrate Team — shared project memory
After this page: facts and canon from your local Hydrate store sync to a shared git remote,
and teammates' hydrate team pull brings those facts into their sessions automatically.
Prerequisites
- Hydrate Pro installed and working on every team member's machine. See Pro install.
- A git remote accessible to all team members (GitHub private repo, self-hosted GitLab, or a bare repo on a shared machine).
Concepts
Hydrate Team uses a git repository as the sync layer. Two modes:
| Mode | Where facts live | When to use |
|---|---|---|
memory (default) | Dedicated repo at ~/.hydrate/teams/<team-id>/ | Facts stay off the codebase |
inline | .hydrate/project.yml committed inside the code repo | Facts travel with the code |
Both modes push/pull the same SQLite-backed fact and canon records. The git layer handles merges and conflict resolution.
Set up a team (one person, once)
# Create the team (picks a random team ID if --team-id is omitted)
hydrate team init \
--display-name="Acme Backend" \
[email protected]:acme/hydrate-memory.git \
[email protected]
# Confirm the team is ready
hydrate team status Expected output:
Team: t_abc123 (Acme Backend)
Members: 1
Remote: [email protected]:acme/hydrate-memory.git
Last push: never Push your existing facts to the remote:
hydrate team push --all Join as a team member
Each teammate runs this once:
hydrate team clone \
[email protected]:acme/hydrate-memory.git \
[email protected] clone fetches the remote state and merges it into the local store. After this,
hydrate team pull keeps them in sync.
Day-to-day workflow
hydrate team pull # pull teammates' additions before starting work
# ... work normally in Claude Code or Codex ...
hydrate team push # push your session's new facts push and pull are idempotent. Re-running after a push is a no-op.
To sync in both directions at once:
hydrate team sync Managing members
hydrate team members list
hydrate team members add [email protected]
hydrate team members remove [email protected]
hydrate team members promote [email protected] # grant manager role Managers can add/remove members and push canon changes.
What canon looks like when shared
When a teammate pushes a pinned fact, your next pull brings it into your local
store. The next time you open Claude Code, that fact is automatically injected into your
prompts via the UserPromptSubmit hook.
Check what changed in the remote since your last pull:
hydrate team diff-canon Verify
After setup:
hydrate team status Expected:
Team: t_abc123 (Acme Backend)
Members: 2
Remote: [email protected]:acme/hydrate-memory.git
Last push: just now
Last pull: just now
Queued writes: 0 Then confirm facts are visible:
hydrate fact list --project=my-project | head -10 You should see facts contributed by teammates (check the source column).
Inline mode (alternative)
If you want facts to travel with the codebase:
hydrate team init --mode=inline --project=my-project This creates .hydrate/project.yml in the current directory. Commit it:
git add .hydrate/project.yml
git commit -m "chore: add Hydrate inline memory"
Teammates pull facts by pulling the branch — no separate hydrate team pull step
needed. Inline mode is simpler for small teams with a single codebase; memory mode is better
when multiple codebases share facts.
What changed on your machine
| Path | Purpose |
|---|---|
~/.hydrate/teams/<team-id>/ | Dedicated git clone of the memory remote (memory mode) |
.hydrate/project.yml | Inline fact store committed in the codebase (inline mode) |
~/.hydrate/data.db | Local store updated with pulled facts |
Troubleshooting
| Symptom | Likely cause | Fix |
|---|---|---|
hydrate team push fails with "permission denied" | SSH key not authorised for the remote | Add your SSH key to the git remote's access list |
| Teammate does not see pushed facts | They have not pulled | Ask them to run hydrate team pull |
| Merge conflict on pull | Two people added conflicting canon | Run hydrate team diff-canon to see what changed, then hydrate resolve <fact-id> --use=local or --use=enterprise |
hydrate team status shows no remote | Team not initialised on this machine | Run hydrate team clone |
Next steps
- Enterprise install — join a central organisation server instead of a git remote
- Claude Code integration — hook details