Team Sync
Share context and memories across your team
Team Sync
Team sync enables real-time collaboration by synchronizing indexes, memories, and context across team members working on the same repository. When someone discovers an important insight or indexes key files, that knowledge becomes available to the whole team.
How It Works
Connection
When team sync is enabled, ultrasync connects to the sync server via WebSocket:
- Authenticates with your API token
- Identifies the project by git remote URL
- Syncs local state with the server
- Maintains real-time connection for updates
Shared Project Identity
Team members on the same git repository automatically share a project:
git@github.com:yourorg/yourrepo.git → same project IDThis means everyone working on the repo sees the same shared context without any configuration.
What Gets Synced
Index Data
- File embeddings and symbol information
- Enables team-wide semantic search
- New team members can search immediately
Shared Memories
Memories explicitly shared with the team:
share_memory("mem:abc123")Personal memories remain private until shared.
Code Graph
Relationships between code entities:
- Function call graphs
- Import dependencies
- Type relationships
Sync Modes
Initial Sync
On first connect, ultrasync performs a full sync:
- Uploads all locally indexed files
- Uploads all shared memories
- Downloads team memories
- Syncs graph nodes and edges
Incremental Sync
After initial sync, only changes are transmitted:
- New file indexes
- Updated memories
- Graph modifications
Periodic Re-sync
The sync manager periodically re-syncs to catch any missed updates. Default interval is 5 minutes (configurable).
Configuration
Enable Team Sync
Add to your MCP configuration:
{
"env": {
"ULTRASYNC_REMOTE_SYNC": "true",
"ULTRASYNC_SYNC_URL": "https://mcp.ultrasync.dev",
"ULTRASYNC_SYNC_TOKEN": "<your-api-token>"
}
}Get Your Token
- Sign up at ultrasync.dev
- Create or join an organization
- Create a project
- Copy your API token from the dashboard
Privacy Controls
Personal vs Shared
By default, all data is personal:
- Your memories are only visible to you
- Your search history stays private
- Local indexes are yours alone
To share explicitly:
share_memory("mem:abc123")What's Always Private
- Search queries
- File access patterns
- Unshared memories
What Can Be Shared
- Memories (opt-in per memory)
- Index data (automatic when synced)
- Graph relationships (automatic when synced)
Conflict Resolution
When multiple team members modify the same data:
| Data Type | Resolution Strategy |
|---|---|
| Memories | Both versions preserved (merge) |
| Index entries | Last-write-wins |
| Graph nodes | Server-authoritative |
Memories are never lost - conflicting versions are both kept and can be reviewed.
Checking Sync Status
sync_stats()Returns:
- Connection state
- Files and memories synced
- Last sync timestamp
- Any sync errors
Troubleshooting
Not Syncing
- Check
ULTRASYNC_REMOTE_SYNC=trueis set - Verify your token is valid
- Ensure you're in a git repository
Missing Team Data
- Team members must share memories explicitly
- Check that everyone is on the same git remote
- Allow time for initial sync to complete
Connection Issues
The sync client automatically reconnects on failure. Check:
- Network connectivity
- Firewall rules for WebSocket connections
- Token expiration