Loading...
Loading...
Resolve missing ITSM Intelligence invocable actions so a Fulfiller NGA agent can activate. Reads which of the four Core Fulfiller persona permsets (IncidentFulfiller, ProblemFulfillerPermSet, ChangeRequestFulfillerPermSet, ReleaseManagerPermSet) are provisioned, then assigns the running user the selected persona (plus backing PSL when license-gated) so svc_itsm_intelligence__* actions surface; hands off to service-itsm-agentic-setup-agentforce-studio-validate if none are provisioned. Use when the Fulfiller agent-configure skill reports missing actions on activate, when 'Invocable action svc_itsm_intelligence__X does not exist' surfaces, or when a user asks to grant themselves Fulfiller prompt-template access. DO NOT TRIGGER for Employee-agent access, Agentforce for IT Service toggles, agent creation, CMDB access, or generic permset assignment.
npx skill4agent add forcedotcom/sf-skills service-itsm-agentic-setup-itsm-agentforce-permset-assignsvc_itsm_intelligence__*source:target: generatePromptResponse://.../services/data/v67.0/actions/custom/generatePromptResponseactivate{success:false, messages:[{... "does not exist"}]}references/permset-topology.mdforcesfsf api request restsf data queryPermissionSetPermissionSetAssignmentPermissionSetLicenseAssignsf org assign permsetIncidentFulfillerProblemFulfillerPermSetChangeRequestFulfillerPermSetReleaseManagerPermSetsvc_itsm_intelligence__*/actions/custom/generatePromptResponseservice-itsm-agentic-setup-agentforce-studio-validateservice-itsm-agentic-setup-fulfiller-agent-configureservice-itsm-agentic-setup-cmdb-access-assigndx-org-permission-set-assign/actions/custom/generatePromptResponseservice-itsm-agentic-setup-agentforce-studio-validatesvc_itsm_intelligence__XPermissionSetBashreferences/helper-contracts.mdscripts/classify-permset-availability.mjsneedsPslcandidates[]scripts/resolve-target-user.mjs005…identityscripts/classify-assignment-state.mjsNO-PSLneedsPsl:falsescripts/classify-action-surface.mjs/actions/custom/generatePromptResponsesfsf org display -o <alias>--target-org <alias>nodesf401403404sfsf config get target-orgscripts/resolve-target-user.mjsUsernamecandidates[]AskUserQuestionsf<alias>PermissionSetsf data query \
-q "SELECT Id, Name, Label, LicenseId FROM PermissionSet WHERE Name IN ('IncidentFulfiller','ProblemFulfillerPermSet','ChangeRequestFulfillerPermSet','ReleaseManagerPermSet')" \
--target-org <alias> --json > /tmp/itsm-personas.json 2>/tmp/itsm-personas.err || truePermissionSetforceNamespacePrefixnode "<skill_dir>/scripts/classify-permset-availability.mjs" /tmp/itsm-personas.json{ personasFound, personasMissing, candidates, verdict, reasons }candidates[]{Id, Name, Label, LicenseId, needsPsl}verdict:"ASSIGN"personasFoundAskUserQuestionIdLicenseIdneedsPslverdict:"HAND-OFF"verdict:"CANNOT-CONFIRM"USER_ID()/chatter/users/me403sf api request rest "/services/data/v67.0/" --method GET --target-org <alias> > /tmp/api-root.json 2>/tmp/api-root.err || true
node "<skill_dir>/scripts/resolve-target-user.mjs" /tmp/api-root.json{ userId, identity, verdict, reasons }verdict:"RESOLVED"userIdverdict:"CANNOT-CONFIRM"Usernamesf data query \
-q "SELECT Id, Username, Name, IsActive FROM User WHERE Username = '<username>'" \
--target-org <alias> --json > /tmp/user-lookup.json 2>/tmp/user-lookup.err || truePermissionSetAssignmentIdreferences/cli-invocation.mdneedsPslneedsPsl:truePermissionSetLicenseAssignLicenseIdnode "<skill_dir>/scripts/classify-assignment-state.mjs" /tmp/psa-existing.json /tmp/psla-existing.jsonneedsPsl:falsenode "<skill_dir>/scripts/classify-assignment-state.mjs" /tmp/psa-existing.json NO-PSL{ permsetAssigned, licenseAssigned, needsWrite, verdict, reasons }needsWrite:falseAskUserQuestionneedsPslneedsPsl:true/sobjects/PermissionSetLicenseAssignsf org assign permset --name <permsetName> --on-behalf-of <userId>references/cli-invocation.mdneedsPsl:falsesf org assign permsetReleaseManagerPermSet201success:truesf org assign permset400 DUPLICATE_VALUE400 INSUFFICIENT_ACCESSverdict:"HAND-OFF"AskUserQuestionservice-itsm-agentic-setup-agentforce-studio-validateservice-itsm-agentic-setup-agentforce-studio-validate/actions/custom/generatePromptResponsereferences/helper-contracts.mdreferences/cli-invocation.mdsf api request rest "/services/data/v67.0/actions/custom/generatePromptResponse" \
--method GET --target-org <alias> > /tmp/generate-prompt-response.json 2>/tmp/generate-prompt-response.err || true
node "<skill_dir>/scripts/classify-action-surface.mjs" /tmp/generate-prompt-response.json [expectedActions-csv]{ present, missing, totalItsmActionsSeen, verdict, reasons }SURFACEDPARTIALMISSINGCANNOT-CONFIRMneedsWrite:falseDUPLICATE_VALUE| Constraint | Rationale |
|---|---|
Detect Fulfiller persona presence via the four fixed | The failure signature ("action does not exist" on activate) is identical for AddOn-absent and permset-not-assigned; only the pre-check disambiguates them. The four personas are Core-shipped in namespace |
| Ask the user which persona to assign — never auto-select | A Fulfiller commonly needs only one persona (e.g. Incident). Auto-assigning the first row returned would over-grant |
| All decisions are made by helper scripts, never by prose | Assignment/idempotency logic is deterministic; prose interpretation is not (A9) |
Assign the PSL before the permission set — ONLY when the selected persona's | The permission set is license-backed; the license seat must be held before the assignment sticks. When the selected persona has no |
Read | Different personas can have different license shapes on the same org; falling back to a namespace-wide PSL would POST a wrong |
Resolve the running-user Id via | The identity URL's segment shape ( |
Classify the Phase 4 action surface via | Verify is the gate for reporting SUCCESS vs VERIFY-INCONCLUSIVE; the decision must be deterministic |
Treat | It means the user already has that assignment — idempotent, not an error |
| Never create or edit a permission set | This skill only assigns the standard Fulfiller persona permission set(s); authoring perm sets is out of scope |
| Never install the AddOn / never toggle org-level Agentforce features | That is the |
Verify after write via | The assignment can succeed while the target action surface still doesn't include what the Fulfiller template needs (wrong persona, cache) |
| Confirm-to-write checkpoint before Phase 2d | A permset assign consumes a license seat and takes effect for a live user session |
| Never extract the access token | Use |
| Report exact error text from the CLI response | Enables support to diagnose failures |
scripts/classify-permset-availability.mjspersonasFound[]scripts/resolve-target-user.mjsneedsPsltruefalsepermsetLicenseIdLicenseIdsf data queryscripts/classify-assignment-state.mjsNO-PSLneedsPsl:falseneedsPsl:trueDUPLICATE_VALUEservice-itsm-agentic-setup-agentforce-studio-validatescripts/classify-action-surface.mjsverdict:"SURFACED"ITSM Fulfiller Persona Permset Assignment (via service-itsm-agentic-setup-itsm-agentforce-permset-assign)
Org: <org-alias> (API v67.0)
Target user: <username> (<userId>)
Persona: <Incident | Problem | Change | Release>
PermSet: <DeveloperName>
Personas provisioned on org ...... <comma-separated list | none>
Existing PSL assignment .......... <yes | no | n/a>
Existing permset assignment ...... <yes | no>
Write PSL ........................ <succeeded | already-had | skipped | FAILED>
Write permset .................... <succeeded | already-had | skipped | FAILED>
Verify actions surface ........... <yes | partial | no>
Verdict: ASSIGNED | ALREADY-ASSIGNED | HAND-OFF | VERIFY-INCONCLUSIVE | FAILED
Reason: <plain-language explanation, or empty on success>
Next steps:
- <If ASSIGNED / ALREADY-ASSIGNED: "Re-run service-itsm-agentic-setup-fulfiller-agent-configure — the invocable actions should now surface, and the activate call will succeed.">
- <If HAND-OFF: "No Fulfiller persona is provisioned on this org. Run service-itsm-agentic-setup-agentforce-studio-validate to identify which AddOn needs enabling.">
- <If VERIFY-INCONCLUSIVE: list the observed state verbatim; a session refresh or a different persona may be required>
- <If FAILED: list the observed error verbatim + remediation>FUNCTIONALITY_NOT_ENABLEDDUPLICATE_VALUEsf api request rest| File | When to read |
|---|---|
| Any change to the persona list — the four Core-shipped Fulfiller permsets, their AddOns/PSLs/userPerms, and the fixed-lookup discovery query |
| Every phase — exact |
| The input/output shapes of all four helper scripts ( |