desplega-ai/agent-swarm/user-management
Claude Code and agent skill by desplega-ai/agent-swarm
- community
Checking that the SKILL.md file is still in the repository.
How to manage the user registry — creating users for new Slack/GitHub/GitLab/Linear identities, managing aliases, resolving users across platforms. Use when a new human interacts with the swarm or when user identity needs updating.
Install
npx vskill@latest install desplega-ai/agent-swarm/user-managementSKILL.md
User Management
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.
Migration note (2026-05): the old top-level identity fields (slackUserId,linearUserId,githubUsername,gitlabUsername) and the fuzzynamelookup were removed in lockstep with the user-identity refactor. Use the new{kind, externalId}shape instead. Old payloads now fail Zod validation at runtime — there is no compatibility shim.
When to Create Users
Create a new user when:
- An unknown Slack user sends a message to the swarm (
resolve-userwith{kind: "slack", externalId: "<U_X>"}returns no match) - An unknown GitHub user opens an issue or PR that triggers a task
- An unknown GitLab user creates an issue or MR
- An unknown Linear user is assigned to or creates a synced issue
- A human explicitly asks to be registered
Do NOT create duplicate users. Always call resolve-user first — by {kind, externalId} AND, when you have it, by email — to check if the person already exists under a different platform identity.
Tools
Two MCP tools handle user management:
resolve-user — Find an existing user
Looks up a user by an (kind, externalId) pair OR by email (primary or alias). Use this BEFORE creating a new user. Caller MUST supply either (kind + externalId) OR email — empty input is rejected.
Email lookup is case-insensitive and checks the primary email column AND every entry in emailAliases.
manage-user — CRUD operations
Identities are managed via a declarative identities: [{kind, externalId}, ...] array:
- On create: every entry in
identitiesis linked (each emitsidentity_added). - On update:
identitiesis treated as the full desired set. Helper computes a diff against the user's current identities — adds emitidentity_added, removes emitidentity_removed. Omit the field entirely to leave identities untouched.
Workflow: New Slack User
- Receive a message from an unknown Slack user (e.g., external ID
U_NEW123). - Call
resolve-userwith{kind: "slack", externalId: "U_NEW123"}— returns null. - Get the user's Slack profile (name, email) via
slack-reador from the message metadata. - Call
resolve-userwith{email: "<their-email>"}— check if they exist under a different platform. - If found: call
manage-userwithaction: "update", passing the user's FULL identity set including the new Slack entry. - If not found: call
manage-userwithaction: "create", includingname,email, andidentities: [{kind: "slack", externalId: "U_NEW123"}].
Workflow: New GitHub User
- Receive a webhook from an unknown GitHub user (e.g., login
octocat). - Call
resolve-userwith{kind: "github", externalId: "octocat"}— returns null. - Call
manage-userwithaction: "create", including at minimumnameandidentities: [{kind: "github", externalId: "octocat"}]. - If you know their email (from the webhook payload), include it.
Workflow: Linking Identities
When you discover a known user is also active on another platform:
- Call
resolve-userto find them by their known identity. - Call
manage-userwithaction: "update", passing the FULL desiredidentitiesset (existing + the new one).
Example: You know "Jane" by Slack ID, and discover her GitHub login:
Important Notes
manage-useris lead-only — workers cannot use it for any action (the lead check happens before action dispatch). Workers must useresolve-userfor lookups.- The
(kind, externalId)PK onuser_external_idsmeans the same identifier cannot be linked to two different users — a re-link to a different user surfaces as a PK collision (the operator can investigate via the People page merge flow). - Deleting a user clears
requestedByUserIdon all their associated tasks (sets to null). - Email aliases are case-insensitive for resolution. Editing them via
manage-user updateemitsemail_added/email_removedevents per delta. - The
preferredChannelfield defaults to"slack"and can be"slack","email","github","gitlab", or any custom string. dailyBudgetUsdisnull= unlimited.statuslifecycle:invited→active→suspended. The CHECK constraint rejects other values.
Security
- Security scanPassed, 100 of 100Pattern checks on the skill's files.
- Model reviewNot runA model review is scheduled for the next rescan.
Quality evaluation
- Task evaluationNot runNo evaluation yet. Run one in Skill Studio.
Source
- SKILL.md in the repositoryCheckingplugin/pi-skills/user-management/SKILL.md
Popularity
- 7-day trend score
- 0
Not refreshed yet.
Works with
Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.
- Claude Code
- Cursor
- GitHub Copilot
- Windsurf
- Codex
- Gemini CLI
- Cline
- Amp
- Roo Code
- Goose
- Continue
- Kilo Code
- Junie
- Trae
- OpenHands
- Qwen Code
- AI Agent
- Tabnine Chat
- Sourcegraph Cody
- Amazon Q
- Firebase Genkit
- Sweep
- Devin
- Phind
- Mentat
- Claude Desktop
- Aider
- GPT Pilot
- Plandex
- bolt.new
- v0
- Replit Agent
- Anse
- TypingMind
- BetterChatGPT
- LibreChat
- Warp AI
- Pieces
- Fig AI
Embed badge
[](https://verified-skill.com/skills/desplega-ai/agent-swarm/user-management)