service-omni-supervisor-surface-deploy
About service-omni-supervisor-surface-deploy
A Salesforce skill that adds supported action and tab rows to an existing OmniSupervisorConfig. It is for administrators configuring the supervisor view, and inserts only missing reference-free types while preserving existing rows and order.
Key features
- 01Adds supported supervisor actions and tabs
- 02Detects a unique config automatically
- 03Inserts only missing types
- 04Appends rows without changing existing order
- 05Blocks unsupported reference-dependent types
Use cases
- 01Populating an existing supervisor surface
- 02Adding requested actions and tabs without duplicates
- 03Previewing intended changes before writing
Install
Copy the command and run it in a terminal.
npx skills add https:/ / github.com/ forcedotcom/ sf-skills --skill service-omni-supervisor-surface-deployAfter installing, type/service-omni-supervisor-surface-deployin Claude Code to confirm it loaded.
Bundled files
References and scripts installed along with SKILL.md.
references/api-notes.mdscripts/deploy-and-report.shscripts/tests/_bootstrap.pytest_supervisor_surface_contracts.pyDetails
From the project READMEservice-omni-supervisor-surface-deploy
Populate the Omni-Channel Supervisor surface — the action buttons and tabs a supervisor sees — on an existing OmniSupervisorConfig. OmniSupervisorConfigAction and OmniSupervisorConfigTab are createable child sObjects (OmniSupervisorConfigId, a *Type picklist, and DisplayOrder), so the surface is populated with plain Data API inserts against the parent config's Id rather than by re-deploying the whole OmniSupervisorConfig metadata document. That keeps this leaf independent of service-omni-supervisor-config-deploy (which owns the user/queue companions inside the metadata file) and lets it run idempotently — it inserts only the types that are missing.
Inputs
bash scripts/deploy-and-report.sh <org-alias> [config_developer_name]
org-alias(required) — must resolve viasf org display --target-org <alias>.config_developer_name(optional) — theOmniSupervisorConfig.DeveloperNameto populate. Omit it when the org has exactly one config; the skill resolves it. With multiple configs and no name, the skill blocks and lists them.
Env overrides (both CSV of picklist values; defaults are the reference-free standard set):
SUPERVISOR_ACTIONS— defaultAllAgents.ChangeQueues,AllAgents.ChangeSkills,AllAgents.ChangeGroups,AllAgents.AssignLearning,QueuesBacklog.ManageQueues.SUPERVISOR_TABS— defaultWallboard,Agents,QueuesBacklog,AssignedWork,SkillsBacklog.PLAN_ONLY=1— report intent (existing vs. requested) and stop before any write.
Preconditions and safety
- Target org authenticated via
sfCLI, Service Cloud license present,sfCLI ≥ 2.139.6. - An
OmniSupervisorConfigexists — provisioned byservice-omni-supervisor-config-deploy. If none exists (or the named one is absent), the skill blocks with atarget_skillpointer. - Production guardrail: the script computes
safe_to_writeasIsSandboxORTrialExpirationDate != nullOROrganizationTypein {Developer Edition, Base Edition}, and blocks with no override when it is false.
Run
bash scripts/deploy-and-report.sh <org-alias> [config_developer_name]
It resolves the parent config, reads the surface rows already present, inserts only the missing action/tab types (appending DisplayOrder after the current maximum), and emits JSON to stdout.
Behavior
Reference-free types only. The companion rows expose no reference field, so only self-contained types can be inserted headlessly. The skill accepts the standard set (SAFE_ACTIONS / SAFE_TABS in references/api-notes.md) and blocks up front on any type that needs an external reference — *.CustomAction, *.AWSDashboard, FlexipageType, AIAgents, AgentforceSDR — pointing you to Setup. Requesting a type outside the supported vocabulary also blocks before any write.
Idempotency. The requested types are diffed against the rows already on the config; existing types are reported as reused and never re-inserted, missing types are inserted and reported as created. status is created when anything was inserted, otherwise reused. Re-running the skill unchanged makes no writes.
Ordering. New rows are appended: DisplayOrder starts one above the current maximum for that companion type, preserving any ordering already configured in Setup.
Output contract
A single JSON object to stdout. status is one of created, reused, blocked, or (with PLAN_ONLY=1) action_needed. The object also carries config (developer_name, id), actions and tabs (each with requested, created, reused, count), manual_actions, and blocking_issue (null unless status: blocked).
Org-side spot-check:
SELECT OmniSupervisorActionType, DisplayOrder FROM OmniSupervisorConfigAction WHERE OmniSupervisorConfigId = :configId ORDER BY DisplayOrder
SELECT OmniSupervisorTabType, DisplayOrder FROM OmniSupervisorConfigTab WHERE OmniSupervisorConfigId = :configId ORDER BY DisplayOrder
Limitations
- Populates only the reference-free standard action and tab types. Custom actions, FlexiPage tabs, AWS dashboards, and AI-agent surfaces need an external reference and must be configured in Setup.
- Does not create, rename, or delete the parent
OmniSupervisorConfig, its user/queue companions, or supervisor users/permission sets. - Does not remove surface rows — it only adds missing ones (no destructive reconciliation).
References
| File | When to read |
|---|---|
references/api-notes.md | The full OmniSupervisorActionType / OmniSupervisorTabType vocabulary, which types are reference-free, and companion-row insert semantics |