service-omni-command-center-analyze
Decide, without changing anything, which supervisor experience an org should use and what to do next. Command Center for Service V2 is gated on three independent dimensions — org capability (release gater), the CommandCenterForServiceV2 org preference (whose ON-flip seeds the CommandCenterForServiceV2_L FlexiPage and registers the V2 tab), and the per-supervisor CommandCenterForServiceUser permission. A single boolean cannot express that, so this skill returns an explicit state plus the recommended follow-up skill (e.g. service-omni-supervisor-config-deploy for the classic path). It is the entry point of the Command Center flow — service-omni-channel-setup-coordinate runs it first — and is safe to run on any org, including production, because it only reads.
Inputs
bash scripts/analyze.sh <org-alias> [supervisor_username_or_id]
org-alias (required).
supervisor_username_or_id (optional). A Username (…@…) or 15/18-char User Id (005…). When given, the per-user CommandCenterForServiceUser permission is evaluated; when omitted, the permission dimension is reported as not-checked and readiness is org-level only.
Preconditions and safety
- Target org authenticated via
sf CLI, Service Cloud license, sf CLI ≥ 2.139.6.
- Read-only — no
safe_to_write guard is needed; the skill issues only SOQL/Tooling queries.
Run
analyze.sh gathers observable signals and maps them to a state:
| Signal |
Source |
Meaning |
| V2 capability |
SELECT Id FROM PermissionSet WHERE PermissionsCommandCenterForServiceUser = true probe |
If the user-permission column does not exist on the org schema, V2 is not available. |
| Seeded FlexiPage |
Tooling: FlexiPage where DeveloperName='CommandCenterForServiceV2_L' |
Present ⇒ the org preference was enabled and the page was seeded. |
| V2 tab |
TabDefinition (best-effort) |
Cross-checks the seed; a seed/tab mismatch indicates a partial provision. |
| Supervisor permission |
PermissionSetAssignment joined on PermissionSet.PermissionsCommandCenterForServiceUser |
Whether the named supervisor can use V2. |
| Legacy config |
Tooling: OmniSupervisorConfig count |
Informational for the classic path. |
Behavior
States and recommended next action:
| State |
Meaning |
Recommended skill |
v2_ready |
Capability + seed present (and supervisor has permission, if checked) |
verify only (coordinator proceeds to V2 verification) |
v2_permission_missing |
V2 enabled but the named supervisor lacks CommandCenterForServiceUser |
Manual — assign CommandCenterForServiceUser (headless-capable via PermissionSet; packaging pending) |
v2_seed_incomplete |
Capability present but the FlexiPage/tab provisioning is inconsistent |
Manual — re-check in Setup → Omni-Channel → Supervisor Settings (no supported public write API) |
v2_available_not_enabled |
Org supports V2 but the preference is off |
Manual — enable in Setup → Omni-Channel → Supervisor Settings (no supported Metadata/Tooling write API) |
legacy_selected |
V2 capability absent |
service-omni-supervisor-config-deploy |
ambiguous |
A required signal could not be read through a supported API |
none — blocks, do not guess |
ambiguous is the only state that exits non-zero: the review's rule is to block rather than infer when state cannot be proven read-only. All other states exit 0 with status:"detected".
Output contract
A single JSON object: status (detected | blocked), state (one of the six above), recommended_action, recommended_skill, signals (v2_capability, seed_flexipage_present, v2_tab_present, supervisor{identifier,checked,has_command_center_permission}, legacy_omnisupervisorconfig_count), manual_actions, blocking_issue.
Limitations
- The
CommandCenterForServiceV2 org preference has no supported public read; its state is inferred from the seeded FlexiPage (the platform seeds on the ON-flip). This is called out in signals and is why a bare capability-without-seed reads as v2_available_not_enabled.
- The release gater cannot be read directly; capability is inferred from the presence of the user-permission column on the org schema.
- Tab detection is best-effort; when the tab query cannot run,
v2_tab_present is "unknown" and state is derived from the remaining signals.
- Read-only: it never enables V2, seeds pages, assigns permissions, or deploys config.
References
| File |
When to read |
references/api-notes.md |
The three-dimensional V2 gate, why each signal is a proxy, and the exact queries used |
1---2name: service-omni-command-center-analyze3description: Use to analyze whether an org should use Command Center for Service V2 or classic Omni Supervisor and recommend the next action without making changes. Triggers: detect Command Center V2 versus classic, check supervisor readiness, choose a supervisor experience, diagnose Command Center availability, assess Omni Supervisor setup. Do not use to enable V2, assign permissions, or deploy configuration.4---5
6# service-omni-command-center-analyze
7
8Decide, **without changing anything**, which supervisor experience an org should use and what to do next. Command Center for Service V2 is gated on three independent dimensions — org **capability** (release gater), the **`CommandCenterForServiceV2` org preference** (whose ON-flip seeds the `CommandCenterForServiceV2_L` FlexiPage and registers the V2 tab), and the per-supervisor **`CommandCenterForServiceUser`** permission. A single boolean cannot express that, so this skill returns an explicit **state** plus the recommended follow-up skill (e.g. `service-omni-supervisor-config-deploy` for the classic path). It is the entry point of the Command Center flow — `service-omni-channel-setup-coordinate` runs it first — and is safe to run on any org, including production, because it only reads.
9
10## Inputs
11
12```bash
13bash scripts/analyze.sh <org-alias> [supervisor_username_or_id]
14```
15
16- `org-alias` (required).
17- `supervisor_username_or_id` (optional). A Username (`…@…`) or 15/18-char User Id (`005…`). When given, the per-user `CommandCenterForServiceUser` permission is evaluated; when omitted, the permission dimension is reported as not-checked and readiness is org-level only.
18
19## Preconditions and safety
20
21- Target org authenticated via `sf` CLI, Service Cloud license, `sf` CLI ≥ 2.139.6.
22- **Read-only** — no `safe_to_write` guard is needed; the skill issues only SOQL/Tooling queries.
23
24## Run
25
26`analyze.sh` gathers observable signals and maps them to a state:
27
28| Signal | Source | Meaning |
29|---|---|---|
30| V2 capability | `SELECT Id FROM PermissionSet WHERE PermissionsCommandCenterForServiceUser = true` probe | If the user-permission column does not exist on the org schema, V2 is not available. |
31| Seeded FlexiPage | Tooling: `FlexiPage` where `DeveloperName='CommandCenterForServiceV2_L'` | Present ⇒ the org preference was enabled and the page was seeded. |
32| V2 tab | `TabDefinition` (best-effort) | Cross-checks the seed; a seed/tab mismatch indicates a partial provision. |
33| Supervisor permission | `PermissionSetAssignment` joined on `PermissionSet.PermissionsCommandCenterForServiceUser` | Whether the named supervisor can use V2. |
34| Legacy config | Tooling: `OmniSupervisorConfig` count | Informational for the classic path. |
35
36## Behavior
37
38**States and recommended next action:**
39
40| State | Meaning | Recommended skill |
41|---|---|---|
42| `v2_ready` | Capability + seed present (and supervisor has permission, if checked) | verify only (coordinator proceeds to V2 verification) |
43| `v2_permission_missing` | V2 enabled but the named supervisor lacks `CommandCenterForServiceUser` | Manual — assign `CommandCenterForServiceUser` (headless-capable via PermissionSet; packaging pending) |
44| `v2_seed_incomplete` | Capability present but the FlexiPage/tab provisioning is inconsistent | Manual — re-check in Setup → Omni-Channel → Supervisor Settings (no supported public write API) |
45| `v2_available_not_enabled` | Org supports V2 but the preference is off | Manual — enable in Setup → Omni-Channel → Supervisor Settings (no supported Metadata/Tooling write API) |
46| `legacy_selected` | V2 capability absent | `service-omni-supervisor-config-deploy` |
47| `ambiguous` | A required signal could not be read through a supported API | none — **blocks**, do not guess |
48
49`ambiguous` is the only state that exits non-zero: the review's rule is to block rather than infer when state cannot be proven read-only. All other states exit 0 with `status:"detected"`.
50
51## Output contract
52
53A single JSON object: `status` (`detected` | `blocked`), `state` (one of the six above), `recommended_action`, `recommended_skill`, `signals` (`v2_capability`, `seed_flexipage_present`, `v2_tab_present`, `supervisor{identifier,checked,has_command_center_permission}`, `legacy_omnisupervisorconfig_count`), `manual_actions`, `blocking_issue`.
54
55## Limitations
56
57- The `CommandCenterForServiceV2` org preference has no supported public read; its state is **inferred** from the seeded FlexiPage (the platform seeds on the ON-flip). This is called out in `signals` and is why a bare capability-without-seed reads as `v2_available_not_enabled`.
58- The release gater cannot be read directly; capability is inferred from the presence of the user-permission column on the org schema.
59- Tab detection is best-effort; when the tab query cannot run, `v2_tab_present` is `"unknown"` and state is derived from the remaining signals.
60- Read-only: it never enables V2, seeds pages, assigns permissions, or deploys config.
61
62## References
63
64| File | When to read |
65|---|---|
66| `references/api-notes.md` | The three-dimensional V2 gate, why each signal is a proxy, and the exact queries used |