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

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:

ModeWhere facts liveWhen 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

PathPurpose
~/.hydrate/teams/<team-id>/Dedicated git clone of the memory remote (memory mode)
.hydrate/project.ymlInline fact store committed in the codebase (inline mode)
~/.hydrate/data.dbLocal store updated with pulled facts

Troubleshooting

SymptomLikely causeFix
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