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:

  1. Authenticates with your API token
  2. Identifies the project by git remote URL
  3. Syncs local state with the server
  4. 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 ID

This 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:

  1. Uploads all locally indexed files
  2. Uploads all shared memories
  3. Downloads team memories
  4. 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

  1. Sign up at ultrasync.dev
  2. Create or join an organization
  3. Create a project
  4. 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 TypeResolution Strategy
MemoriesBoth versions preserved (merge)
Index entriesLast-write-wins
Graph nodesServer-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

  1. Check ULTRASYNC_REMOTE_SYNC=true is set
  2. Verify your token is valid
  3. 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

On this page