Working with a Team
How 3+ developers collaborate on the same project — what's shared, what's per-user, and how new teammates get set up in under a minute.
Sprintra's data model is simple: project state is shared, identity is per-user.
| Data | Scope | Where it lives |
|---|---|---|
| Features, stories, decisions, sprints | Shared | Sprintra DB (project_id keyed) |
| Project state portion of briefing | Shared | Generated per call |
| “Your last session”, “Your assigned” | Per-user | Filtered by user_id from token |
| MCP token | Per-user | ~/.sprintra/config.json |
.sprintra/project.json | Shared (committed) | Repo file |
| Activity attribution (who-did-what) | Per-user | agent_actions.agent_id |
| Plugin install (~/.claude/plugins/...) | Per-machine | Local install dir |
The team lead binds the repo to a Sprintra project once (creates .sprintra/project.json) and commits it. Every teammate who clones the repo automatically gets the project link.
# Team lead (one time, then commit): npx @sprintra/cli@latest link --project=proj-XXXXXXXX git add .sprintra/project.json git commit -m "chore: bind repo to Sprintra project proj-XXXXXXXX" git push # Each teammate clones — auto-detects on first Claude Code session: git clone <repo> cd <repo> cat .sprintra/project.json # already there from the clone npx @sprintra/cli@latest login # one-time per machine — paste their personal token claude # next session shows [sprintra] briefing automatically
The marker file contains only project_id + project_key — no secrets. Safe to commit.
Each teammate authenticates as themselves with their own MCP token. Token scope = (user, org, optionally specific projects).
npx @sprintra/cli@latest login on their machine and pastes the token/api/me and caches user identity (user_id, email, display_name) in ~/.sprintra/config.jsonTokens NEVER live in the repo. Each user's token stays on their machine.
Sprintra has 7 built-in roles with descending permissions:
Roles are assigned per-org or per-project at app.sprintra.io/org/settings. Custom roles available on Team and Enterprise plans.
For teams that don't use Sprintra Cloud, run ONE shared Sprintra server somewhere all teammates can reach (LAN, Tailscale, or a small VPS) and have everyone point their client at it via SPRINTRA_API_URL.
# On the host machine (e.g. team lead's Mac mini):
npx create-sprintra@latest team-server
cd team-server
HOST=0.0.0.0 PORT=4000 npm start
# Find the LAN IP: ipconfig getifaddr en0 (Mac) or hostname -I (Linux)
# On each teammate's machine:
echo '{"apiUrl":"http://<lan-ip>:4000","token":"<shared-or-per-user-token>"}' > ~/.sprintra/config.json# Install Tailscale on host + all teammates' machines (https://tailscale.com)
# Host runs server bound to 0.0.0.0:
HOST=0.0.0.0 PORT=4000 npm start
# Teammates find host's tailnet hostname (e.g. team-server.<tailnet>.ts.net)
# Set apiUrl in each teammate's config.json:
echo '{"apiUrl":"http://team-server.your-tailnet.ts.net:4000","token":"..."}' > ~/.sprintra/config.json# Run Sprintra in Docker on a small VPS (Hetzner, Fly.io, Railway):
# Then teammates point at the public URL with HTTPS:
echo '{"apiUrl":"https://sprintra.your-company.com","token":"..."}' > ~/.sprintra/config.jsonFor self-hosted authentication, you can use Better Auth (built-in), static MCP tokens, or your own SSO. Enterprise customers get custom auth integration.
Once Phase 5 hooks are installed (PostToolUse + Stop + SessionEnd), every action attributable to a user via their MCP token. Visible in two places:
The PostToolUse hook captures every Claude Code tool call (Read, Edit, Write, Bash, MCP). Personal data stays per-user (Sprintra never sees your file contents — only the file path + tool name).
Q: Can two teammates work on the same story simultaneously?
Yes. Both see “in_progress” on the briefing. Sprintra doesn't lock — it's a coordination tool, not a collaboration editor. Use comments or assignee field to coordinate.
Q: What if a teammate edits .sprintra/project.json with the wrong project?
Their briefing will be wrong (different project state). The dashboard's admin tools can spot this; in practice, the marker is committed once and rarely changes.
Q: How is data isolated between teams / orgs?
Multi-tenant from the ground up — every entity is org-scoped at the database level. MCP tokens carry the org binding and Sprintra rejects cross-org requests. See /security.
Q: Does the SessionStart hook work in Claude Desktop?
No — Claude Desktop doesn't support SessionStart hooks (platform limitation). The MCP server still works there. Briefing has to be requested manually: ask Claude to “use sprintra to give me a briefing”.
Q: Can I have a monorepo with multiple Sprintra projects?
Yes — put a .sprintra/project.json in each subdirectory. The SessionStart hook walks UP from cwd to find the nearest one.
Need help setting up your team? support@sprintra.io — or jump in our Discord community.