How to manage the user registry — creating users for new Slack/GitHub/GitLab identities, managing aliases, resolving users across platforms. Use when a new human interacts with the swarm or when user identity needs updating.
Manage the swarm's user registry — creating, updating, resolving, and listing users. Users link human identities across platforms (Slack, GitHub, GitLab, Linear, email) so the swarm can track who requested work.
Create a new user when:
resolveUser match for their slackUserId)Do NOT create duplicate users. Always call resolve-user first to check if the person already exists under a different platform identity.
Two MCP tools handle user management:
resolve-user — Find an existing userLooks up a user by any platform identity. Use this BEFORE creating a new user.
resolve-user with:
slackUserId: "U12345" # Slack member ID
# OR
githubUsername: "octocat" # GitHub username
# OR
gitlabUsername: "octocat" # GitLab username
# OR
linearUserId: "uuid" # Linear user UUID
# OR
email: "[email protected]" # Primary email or alias
# OR
name: "Jane Doe" # Fuzzy name search (least specific)
Priority order: platform IDs > email > name. Platform IDs are exact matches; email checks aliases (case-insensitive); name is substring match.
manage-user — CRUD operations# Create a new user
manage-user with:
action: "create"
name: "Jane Doe" # Required
email: "[email protected]" # Optional
role: "engineering lead" # Optional, free-form
slackUserId: "U12345" # Optional
githubUsername: "janedoe" # Optional
gitlabUsername: "janedoe" # Optional
linearUserId: "uuid-from-linear" # Optional
emailAliases: ["[email protected]"] # Optional
timezone: "America/New_York" # Optional
notes: "Prefers async communication" # Optional
# List all users
manage-user with:
action: "list"
# Get a specific user
manage-user with:
action: "get"
userId: "<uuid>"
# Update a user (only send fields to change)
manage-user with:
action: "update"
userId: "<uuid>"
githubUsername: "new-username"
# Delete a user
manage-user with:
action: "delete"
userId: "<uuid>"
slackUserId: "U_NEW123")resolve-user with slackUserId: "U_NEW123" — returns nullslack-read or from the message metadataresolve-user with email: "<their-email>" — check if they exist under a different platformmanage-user with action: "update" to add their slackUserIdmanage-user with action: "create" including name, email, and slackUserIdgithubUsername: "octocat")resolve-user with githubUsername: "octocat" — returns nullmanage-user with action: "create" including at minimum name and githubUsernameWhen you discover a known user is also active on another platform:
resolve-user to find them by their known identitymanage-user with action: "update" to add the new platform identityExample: You know "Jane" by Slack ID, and discover her GitHub username:
resolve-user slackUserId: "U_JANE" → returns user with id "abc-123"
manage-user action: "update" userId: "abc-123" githubUsername: "janedoe"
manage-user is lead-only — workers cannot use it for any action (the lead check happens before action dispatch). Workers must use resolve-user for lookups.slackUserId, githubUsername, gitlabUsername, and linearUserId have unique constraints — duplicates will error.requestedByUserId on all their associated tasks (sets to null).preferredChannel field defaults to "slack" and can be "slack", "email", "github", or "gitlab".