
service-itsm-agentic-setup-uel-user-create
Provision and enable a Unified Employee License (UEL) user in Salesforce with the full entity chain — User, Person Account, PersonContact, and Employee2 — through the Salesforce-hosted headless-360 MCP server. Use when the user asks to create a UEL user, set up a Unified Employee user account, enable an employee under the Unified Employee license, provision an employee with Person Account and Employee2 record, or onboard a new employee onto the Unified Employee profile. Triggers on: create UEL user, set up unified employee, provision unified employee, enable UEL employee, onboard employee user, create person account for employee. DO NOT TRIGGER when: the user asks to create a standard user without UEL, clone an existing user, manage existing user permissions only, assign incident permissions only, reset passwords only, or look up existing users without creation intent.
- Installs
- 1.2K
- Last 24h
- —
- Trending rank
- —
- Security
- Not audited
Install
Works with every agent the skills CLI supports.
npx skills add https://github.com/forcedotcom/sf-skills --skill service-itsm-agentic-setup-uel-user-create- 01
Install
Run the command in your project. The CLI asks which agents to install for.
- 02
Describe the task
Ask your agent for something this skill covers. It loads service-itsm-agentic-setup-uel-user-create automatically when relevant.
- 03
Review the result
The agent follows the SKILL.md steps, scripts and references bundled with the skill.
SKILL.md
The instructions your agent reads when the skill is triggered.
Create and Enable a Unified Employee (UEL) User
Provision an employee under the Unified Employee License (UEL) by creating and linking a User
on the Unified Employee license/profile, a Person Account (with an auto-generated Contact), and
an Employee2 record, then assigning the required permission sets. Every operation runs through
the Salesforce-hosted headless-360 MCP server (server key headless-360) via its four
meta-tools (discover, describe, dispatch_readonly, dispatch). The org is derived from the
OAuth JWT bound to the current MCP session — the skill never handles an org id, alias, or
credentials — so the flow behaves identically against production and sandbox with no per-user
MCP install.
Scope
- In scope: Creating a new UEL User, Person Account, Employee2 record; assigning permission sets; verifying the full chain.
- Out of scope: Standard user creation (non-UEL); cloning existing users; managing existing user permissions only; deactivating users; license assignment changes.
Routes at a glance
Reads dispatch through mcp__headless-360__dispatch_readonly; writes through
mcp__headless-360__dispatch. Both take raw HTTP:
{"url": "<path>", "method": "GET|POST", "body"?: {...}, "queryParams"?: {...}}. Full URL paths and
request/response bodies for every row live in references/mcp-invocation.md; this table lists only
the operation and HTTP method.
| Concern | Method + operation | Notes |
|---|---|---|
| Unified Employee license | GET /query (UserLicense) | Zero rows → stop |
| Unified Employee profile | GET /query (Profile) | Zero rows → stop |
| Person Account record type | GET /query (RecordType, IsPersonType) | Zero rows → stop |
| Employee Hub perm set | GET /query (PermissionSet) | Mandatory; zero rows → stop |
| Employee2 accessible | GET /sobjects/Employee2/describe | 200 = HR module enabled |
| Resolve manager | GET /query (User by Username/Name) | Active users only |
| Create user | POST /sobjects/User | Profile = Unified Employee |
| Assign Employee Hub set | POST /sobjects/PermissionSetAssignment | Mandatory |
| Create Person Account | POST /sobjects/Account | PersonEmail required |
| Read PersonContact | GET /query (Account) | Capture PersonContactId |
| Create Employee2 | POST /sobjects/Employee2 | Use UserId/ContactId field names |
| Verify chain | GET /query | User + Account + Employee2 + perm sets |
Response envelope: describe, /query, and /sobjects/… are all standard REST — the
dispatch* tool returns the HTTP status plus the parsed body: { "status_code": 200, "body": <REST response> }. Read body. A create returns body.id and body.success == true; a query returns
body.records[]. Status codes: 200/201 success; 400 bad body (re-check schema via describe);
401/auth error the MCP session needs re-auth; 404 the endpoint/impl is not present on this org;
500 a downstream dependency issue.
Required Inputs
Collect from the user (ask only what is not already in conversation context):
Identity (required)
| Field | Description |
|---|---|
FirstName | Employee first name |
LastName | Employee last name |
Email | Employee email address |
Credentials & Locale (required)
| Field | Description | Example |
|---|---|---|
Username | Email-formatted, globally unique | jane.doe@company.uel.com |
Alias | Max 8 chars | jdoe |
TimeZoneSidKey | Timezone | America/Los_Angeles |
LocaleSidKey | Locale | en_US |
LanguageLocaleKey | Language | en_US |
EmailEncodingKey | Email encoding | UTF-8 |
Manager (optional)
| Field | Description |
|---|---|
ManagerName or ManagerUsername | Resolve to ManagerId via SOQL |
HR Attributes for Employee2 (required)
| Field | Description |
|---|---|
Department | Employee department |
Location | Employee location |
EmployeeNumber | HR employee number |
Title | Job title |
HireDate | Date format: YYYY-MM-DD |
Permission Sets
Employee Hub Unified Employee User (EmployeeHubEmployeeUser) is always assigned — no other
permission sets belong on a UEL user. If the caller asks for extras (Incident Fulfiller, Case
Agent, or any other fulfiller/agent-role set), decline: those are for fulfillers on the Service
Cloud side, not for requesters who log into the Employee Hub. Point the caller at the
appropriate fulfiller user-create flow instead of extending this one.
Workflow
All steps are sequential. Always read before you write. Every call goes through
mcp__headless-360__* tools. Stop and report if any step fails.
Phase 1 — Preflight & discovery
On any 401 / 403 / 404 from a discover / describe / dispatch / dispatch_readonly call below, halt and surface the raw error — the org or client is not configured correctly. 401 → headless-360 MCP client not authenticated to CORE_ORG_ALIAS (session expired). 403 → executing user is missing one of the required perms (ManageUsers, ManageProfilesPermissionsets, CustomizeApplication, AssignPermissionSets) OR the org lacks the Unified Employee License. 404 → the target sObject / route is not available (HR module / UEL not provisioned — surfaces separately as the five prerequisite checks in step 2).
-
Discover the operations —
mcp__headless-360__discover(query="create User Account Employee2 sObject")andmcp__headless-360__describe(id=<operation_id>)for thePOST /sobjects/User,POST /sobjects/Account, andPOST /sobjects/Employee2operations to confirm they are indexed and pull the input schema. Adiscovermiss does not mean the route is absent — the/sobjects/…REST endpoints are core Data API paths and can be invoked directly withdispatch_readonly/dispatchagainst the exact URL (seereferences/mcp-invocation.md). If a directdispatch_readonlyprobe at the documented path also fails (404), direct the user to the Setup UI. -
Verify all five UEL prerequisites (all read-only
/queryor describe). If any fails, stop and report exactly which prerequisite is missing:- Unified Employee license exists → else "Unified Employee license not found in this org."
- Unified Employee profile exists → else "Unified Employee profile not found. Ensure UEL license is provisioned."
- Active Person Account record type exists → else "No active Person Account record type found. Enable Person Accounts in Setup."
- Employee Hub permission set exists → else "Employee Hub Unified Employee User permission set not found. This is required for UEL provisioning."
- Employee2 describe returns 200 → else "Employee2 sObject not accessible. Ensure the HR module is enabled."
Capture:
UnifiedEmployeeProfileId,PersonAccountRecordTypeId,EmployeeHubPermSetId.
Phase 2 — Resolve references
- Resolve the manager — when the user supplied a manager, query by Username or Name (active
users only). On multiple matches, present options and ask the user to disambiguate. Capture
ManagerId. When no manager was supplied, skip this step. - Check username uniqueness — query
UserbyUsername; any record → stop, username taken.
Phase 3 — Confirm & create the chain
- Confirm the plan — present the full configuration (including HR attributes) and wait for explicit confirmation before any mutation.
- Create the User —
POST /sobjects/Userwith identity, locale,ProfileId=UnifiedEmployeeProfileId, andManagerId(omitManagerIdwhen none). CaptureNewUserId. - Assign the Employee Hub permission set (mandatory) —
POST /sobjects/PermissionSetAssignmentwith{AssigneeId: NewUserId, PermissionSetId: EmployeeHubPermSetId}. If this fails, stop and report the exact error — the set exists (verified) but may be incompatible with the license. - Create the Person Account —
POST /sobjects/AccountwithFirstName,LastName,PersonEmail(required), andRecordTypeId=PersonAccountRecordTypeId. CaptureNewAccountId.PersonEmailmust be set: the Employee2 validation hook rejects the record when the linked PersonContact is missingEmailorLastName. - Verify the PersonContact — query the Account for
IsPersonAccountandPersonContactId. ConfirmIsPersonAccount = trueand capturePersonContactId. If it is null, stop and report failure to generate the PersonContact. - Create the Employee2 record —
POST /sobjects/Employee2withUserId=NewUserId,ContactId=PersonContactId, and the HR attributes. Use the foreign-key field namesUserId/ContactId(not the relationship namesUser/Contact). CaptureNewEmployee2Id.
Phase 4 — Verify & present
- Verify the full chain — query the Account (IsPersonAccount, PersonContactId), the User (IsActive, ProfileId, ManagerId), the Employee2 (UserId, ContactId), and confirm the Employee Hub permission set is the only PermissionSetAssignment (beyond the profile).
- Report using the output format below.
Rules / Constraints
| Constraint | Rationale |
|---|---|
| Verify all five prerequisites before any mutation | Prevents partial state when the org is not configured for UEL |
Always describe before a POST | You need the exact input schema for each sObject |
| Confirm the plan with the user before creating records | Prevents unintended record creation |
PersonEmail is required on Person Account create | The Employee2 validation hook rejects a PersonContact with no Email |
Use UserId/ContactId field names on Employee2 | The API rejects bare IDs under the relationship names |
Employee Hub Unified Employee User is the ONLY permset assigned | UEL users are Employee Hub requesters, not fulfillers/agents — no other permsets are compatible |
| Omit null/empty foreign keys from create bodies | The API rejects an explicit empty ManagerId |
Display the exact error from dispatch* on failure | Helps diagnose issues |
| Never show Salesforce record IDs to the user | Use human-readable names only |
Permissions Required
The executing admin user (the identity behind CORE_ORG_ALIAS) must have:
| Permission | Purpose |
|---|---|
| Manage Internal Users | Create User records |
| Manage Profiles and Permission Sets | Assign permission sets |
| Customize Application | Create Employee2 and Person Account records |
| Assign Permission Sets | Create PermissionSetAssignment records |
Verification Checklist
- Did
discover+describe(id)(or, on adiscovermiss, a directdispatch_readonlyprobe at the documented/sobjects/…path) confirm the User / Account / Employee2 create operations? - Did all five UEL prerequisites pass (license, profile, Person Account RT, Employee Hub set, Employee2)?
- Did you confirm the username is unique and confirm the plan before any mutation?
- Is
Account.IsPersonAccount = truewith a non-nullPersonContactId? - Is
User.IsActive = trueon the Unified Employee profile (and manager, if provided)? - Does
Employee2linkUserIdandContactIdcorrectly? - Is
Employee Hub Unified Employee Userthe only permission set assigned (no fulfiller-side extras)?
Output Format
On failure, display the error from dispatch* exactly as returned.
On success:
UEL User Provisioning Complete (via service-itsm-agentic-setup-uel-user-create)
User:
Name: <FirstName> <LastName>
Username: <Username>
Email: <Email>
Profile: Unified Employee
Manager: <ManagerName> (or "not set")
Status: Active
Person Account:
Account Name: <FirstName> <LastName>
Person Contact: linked
Employee Record:
Department: <Department>
Title: <Title>
Location: <Location>
Employee No: <EmployeeNumber>
Hire Date: <HireDate>
Permission Set Assigned:
- Employee Hub Unified Employee User
Chain: User > Person Account > PersonContact > Employee2 > Employee Hub permset
No record IDs in user-facing output — use human-readable names only.
Reference File Index
| File | When to read |
|---|---|
references/mcp-invocation.md | Every phase — exact mcp__headless-360__* call shapes, the five prerequisite queries, the create bodies for the full chain, response envelope, discovery, and gotchas |
Related Skills
This skill provisions a Unified Employee License (UEL) user with the full entity chain. Two adjacent flows are out of scope: creating a standard (non-UEL) user, and cloning an existing user's full access configuration. Handle those requests separately — this skill does not cover them.
FAQ
What does the service-itsm-agentic-setup-uel-user-create skill do?
Provision and enable a Unified Employee License (UEL) user in Salesforce with the full entity chain — User, Person Account, PersonContact, and Employee2 — through the Salesforce-hosted headless-360 MCP server. Use when the user asks to create a UEL user, set up a Unified Employee user account, enable an employee under the Unified Employee license, provision an employee with Person Account and Employee2 record, or onboard a new employee onto the Unified Employee profile. Triggers on: create UEL user, set up unified employee, provision unified employee, enable UEL employee, onboard employee user, create person account for employee. DO NOT TRIGGER when: the user asks to create a standard user without UEL, clone an existing user, manage existing user permissions only, assign incident permissions only, reset passwords only, or look up existing users without creation intent.
How do I install service-itsm-agentic-setup-uel-user-create?
Run npx skills add https://github.com/forcedotcom/sf-skills --skill service-itsm-agentic-setup-uel-user-create in your project. The skills CLI detects the agents you use and copies the skill into the right folder. For Claude Code you can also place the skill folder at ~/.claude/skills/service-itsm-agentic-setup-uel-user-create/ (personal) or .claude/skills/service-itsm-agentic-setup-uel-user-create/ (project).
Which AI agents can use service-itsm-agentic-setup-uel-user-create?
Any agent that supports the open Agent Skills format (a folder with a SKILL.md file), including Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI, Windsurf, Cline, OpenCode and more.
Is service-itsm-agentic-setup-uel-user-create safe to install?
No partner security audit is available yet. Skills can run commands and scripts, so read the SKILL.md and any bundled files before installing.
Who maintains service-itsm-agentic-setup-uel-user-create?
It is published by forcedotcom in forcedotcom/sf-skills. It has 1,174 recorded installs.
More from forcedotcom/sf-skills
platform-apex-generate
forcedotcom/sf-skills
Primary Apex authoring skill for class generation, refactoring, and review. ALWAYS ACTIVATE when the user mentions Apex, .cls, triggers, or asks to create/refactor a class (service, selector, domain, batch, queueable, schedulable, invocable, DTO, utility, interface, abstract, exception, REST resource). Use this skill for requests involving SObject CRUD, mapping collections, fetching related records, scheduled jobs, batch jobs, trigger design, @AuraEnabled controllers, @RestResource endpoints, custom REST APIs, or code review of existing Apex.
platform-apex-test-generate
forcedotcom/sf-skills
Use to generate and validate Apex test classes with TestDataFactory patterns, bulk testing (251+ records), mocking, assertions, and disciplined test-fix loops. Use when creating Apex test classes (for triggers, services, controllers, batch jobs, queueables, and callouts), improving coverage, debugging or fixing failing Apex tests, or running test/coverage analysis. Triggers on Test.cls files, sf apex run test, coverage reports. Do NOT trigger for production Apex (use platform-apex-generate) or Jest/LWC tests.
platform-apex-test-run
forcedotcom/sf-skills
Apex test execution, coverage analysis, and test-fix loops with 120-point scoring. Use when the user runs Apex tests, checks code coverage, fixes failing tests, or touches Test.cls / Test.cls files. DO NOT TRIGGER when writing Apex production code (use platform-apex-generate), Agentforce agent testing (use agentforce-test), or Jest/LWC tests (use experience-lwc-generate).
platform-apex-logs-debug
forcedotcom/sf-skills
Salesforce debug log analysis and troubleshooting with 100-point scoring. TRIGGER when: user analyzes debug logs, hits governor limits, reads stack traces, or touches .log files from Salesforce orgs. DO NOT TRIGGER when: running Apex tests (use platform-apex-test-run), generating or fixing Apex code (use platform-apex-generate), or Agentforce session tracing (use agentforce-observe).
platform-soql-query
forcedotcom/sf-skills
Use when the user needs SOQL/SOSL authoring or optimization: natural-language-to-query generation, relationship queries, aggregates, query-plan/selectivity analysis, and performance or safety improvements. TRIGGER when the user writes, optimizes, or debugs SOQL/SOSL, touches .soql files, or asks about relationship queries, aggregates, or query performance. DO NOT TRIGGER for bulk data operations (use platform-data-manage), Apex DML logic (use platform-apex-generate), or report/dashboard queries.
platform-metadata-deploy
forcedotcom/sf-skills
Salesforce DevOps automation using sf CLI v2. TRIGGER when: user deploys metadata, validates a deploy or does a dry-run, deploys to a Production org, quick-deploys a validated job ID, ships/promotes to prod, creates/manages scratch orgs or sandboxes, sets up CI/CD pipelines, or troubleshoots deployment errors with sf project deploy. DO NOT TRIGGER when: writing Apex code, building LWC components (use experience-lwc-generate), creating metadata definitions (use platform-custom-object-generate), deleting metadata from an org (use platform-destructive-deploy), or querying org data (use platform-data-manage).
Popular ai & agents skills
google-agents-cli-publish
google/agents-cli
This skill should be used when the user wants to "publish an agent", "publish my ADK agent", "register an agent with Gemini", "publish to Gemini" (formerly Gemini Enterprise), or needs guidance on the agents-cli publish gemini command. Also use when the user wants to "manage agents in Agent Registry", "list/update/delete registered agents", or "register an MCP server". Covers ADK vs A2A registration modes, programmatic and interactive usage, flag reference, auto-detection from deployment metadata, Agent Registry fleet management, and troubleshooting. Part of the agents-cli skills suite. Do NOT use for deployment (use google-agents-cli-deploy).
google-agents-cli-eval
google/agents-cli
This skill should be used when the user wants to "run an evaluation", "evaluate my agent", "evaluate my ADK agent", "write an eval dataset", "analyze eval failures", "compare eval results", "optimize agent", or needs guidance on the Gemini platform eval methodology and the Quality Flywheel. Covers eval metrics, dataset schema, LLM-as-judge scoring, and common failure causes. Applies to any agents-cli project, whatever framework the agent is written in. Do NOT use for agent API code patterns (ADK: use google-agents-cli-adk-code), deployment (use google-agents-cli-deploy), or project scaffolding (use google-agents-cli-scaffold).
skill-creator
anthropics/skills
Create new skills, modify and improve existing skills, and measure skill performance. Use when users want to create a skill from scratch, edit, or optimize an existing skill, run evals to test a skill, benchmark skill performance with variance analysis, or optimize a skill's description for better triggering accuracy.
codex-pet
prime-skills/runcomfy-agent-skills
Codex Pet generator on RunComfy. Build a Codex-compatible Codex Pet spritesheet.webp + pet.json from a single reference image, drop it into ${CODEXHOME:-$HOME/.codex}/pets/ / and Codex picks it up as a custom Codex Pet next to the 8 built-ins. This skill produces the exact Codex Pet atlas Codex expects (1536x1872 PNG/WebP, 8 cols x 9 rows, 192x208 cells, 9 animation states — idle, running-right, running-left, waving, jumping, failed, waiting, running, review). Calls OpenAI GPT Image 2 edit ONCE via the local RunComfy CLI as runcomfy run openai/gpt-image-2/edit to produce a canonical Codex Pet pose, then assembles all 9 animation rows programmatically with ImageMagick micro-transforms — no Codex Pro, no $imagegen, no OPENAIAPIKEY required, only RUNCOMFYTOKEN. Triggers on "codex pet", "create codex pet", "make codex pet", "hatch codex pet", "/hatch image", "desktop pet codex", "codex pets", "spritesheet.webp", or any explicit ask to build a custom pet for OpenAI Codex.
full-output-enforcement
leonxlnx/taste-skill
Overrides default LLM truncation behavior. Enforces complete code generation, bans placeholder patterns, and handles token-limit splits cleanly. Apply to any task requiring exhaustive, unabridged output.
executing-plans
obra/superpowers
Use when executing an implementation plan in the current session as the implementer yourself — your human partner chose inline execution, or no subagent tool is available