How the pieces connect
The server does not need repository access. It identifies a project and stores only the structured collaboration record scoped to that project.
1. Share the project
Start from a repository that already contains a committed .pact/project.json.
export PACT_TEAM_ADMIN_TOKEN="your-private-admin-token"
pact team share \
--url https://pact.example.com \
--member "Tim"The Team endpoint is written to .pact/project.json. The owner credential stays in the ignored .pact/state/team-auth.json file.
2. Invite a collaborator
# Owner
pact team invite --expires 86400
# Collaborator, after cloning or pulling the repository
pact team accept --invite "$PACT_TEAM_INVITE" --member "Steve"The invitation is private, expires, and can be used once. Each member receives a distinct credential.
3. Declare each agent's work
Clone A
pact team join \
--runtime codex \
--objective "Update authentication" \
--surface file://src/auth \
--surface contract://SessionResponseClone B
pact team join \
--runtime claude \
--objective "Adapt the UI" \
--surface file://src/ui \
--surface contract://SessionResponsePACT detects the branch, base revision, and current HEAD. Save the returned session IDs.
4. Publish, synchronize, and leave
pact team publish \
--session ses_... \
--type activity.reported \
--subject file://src/auth/session.mjs \
--data '{"summary":"Added token rotation"}'
pact team sync --session ses_...
pact team status
pact team leave --session ses_... --outcome completed --summary "Tests pass"Handoffs move through detected → delivered → acknowledged → implemented → verified → resolved. Verification requires an evidence reference; the service rejects invalid state jumps.