@salesforce/afv-skills 1.58.0 → 1.60.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (242) hide show
  1. package/package.json +1 -1
  2. package/skills/agentforce-architecture-analyze/SKILL.md +66 -17
  3. package/skills/agentforce-architecture-analyze/assets/cli/show_access_token.yaml +4 -7
  4. package/skills/agentforce-architecture-analyze/references/contract.json +1 -1
  5. package/skills/agentforce-architecture-analyze/scripts/emit_env.py +2 -2
  6. package/skills/agentforce-architecture-analyze/scripts/main.py +40 -44
  7. package/skills/agentforce-architecture-analyze/scripts/rest_client.py +11 -3
  8. package/skills/agentforce-architecture-analyze/scripts/sf_cli.py +77 -10
  9. package/skills/agentforce-architecture-analyze/scripts/tests/test_end_to_end_fixture.py +1 -0
  10. package/skills/agentforce-architecture-analyze/scripts/tests/test_flow_children_inflation.py +1 -0
  11. package/skills/agentforce-architecture-analyze/scripts/tests/test_main_pipeline.py +53 -2
  12. package/skills/agentforce-architecture-analyze/scripts/tests/test_resolve_creds.py +184 -36
  13. package/skills/agentforce-architecture-analyze/scripts/tests/test_rest_client.py +17 -0
  14. package/skills/agentforce-architecture-analyze/scripts/tests/test_sf_cli.py +165 -11
  15. package/skills/agentforce-architecture-analyze/scripts/tests/test_skill_md_pipeline_block.py +319 -0
  16. package/skills/agentforce-bot-upgrade/SKILL.md +3 -1
  17. package/skills/agentforce-d360-analyze/SKILL.md +28 -10
  18. package/skills/agentforce-d360-analyze/scripts/dc.py +200 -50
  19. package/skills/agentforce-d360-analyze/scripts/discover_sessions.py +10 -6
  20. package/skills/agentforce-d360-analyze/scripts/fetch_dc.py +22 -6
  21. package/skills/agentforce-d360-analyze/scripts/resolve_session.py +21 -13
  22. package/skills/agentforce-d360-analyze/scripts/tests/test_dc_and_resolve_session.py +298 -76
  23. package/skills/agentforce-d360-analyze/scripts/tests/test_default_target_org.py +432 -0
  24. package/skills/agentforce-d360-analyze/scripts/tests/test_discover_sessions.py +1 -1
  25. package/skills/agentforce-d360-analyze/scripts/tests/test_resolve_session_main.py +9 -3
  26. package/skills/agentforce-d360-analyze/scripts/tests/test_skill_md_prefix_block.py +176 -0
  27. package/skills/agentforce-generate/SKILL.md +21 -1
  28. package/skills/agentforce-generate/references/known-issues.md +51 -1
  29. package/skills/agentforce-generate/references/legacy-nga-regression-eval.md +547 -0
  30. package/skills/agentforce-generate/references/upgrade-legacy-agent-to-agentscript.md +577 -0
  31. package/skills/agentforce-generate/scripts/upgrade-legacy-nga-analyze.py +404 -0
  32. package/skills/agentforce-generate/scripts/upgrade-legacy-nga-run-trials.sh +58 -0
  33. package/skills/agentforce-persona-generate/SKILL.md +505 -0
  34. package/skills/agentforce-persona-generate/assets/checklist-template.md +100 -0
  35. package/skills/agentforce-persona-generate/assets/persona-encoding-template.md +252 -0
  36. package/skills/agentforce-persona-generate/assets/persona-template.md +229 -0
  37. package/skills/agentforce-persona-generate/assets/sample-dialog-template.md +50 -0
  38. package/skills/agentforce-persona-generate/assets/workshop-outline-template.md +97 -0
  39. package/skills/agentforce-persona-generate/examples/concierge-persona.md +189 -0
  40. package/skills/agentforce-persona-generate/examples/concierge-sample-dialog.md +70 -0
  41. package/skills/agentforce-persona-generate/examples/drover-persona.md +194 -0
  42. package/skills/agentforce-persona-generate/examples/drover-sample-dialog.md +62 -0
  43. package/skills/agentforce-persona-generate/examples/steady-hand-persona.md +188 -0
  44. package/skills/agentforce-persona-generate/examples/steady-hand-sample-dialog.md +68 -0
  45. package/skills/agentforce-persona-generate/examples/yt-persona.md +195 -0
  46. package/skills/agentforce-persona-generate/examples/yt-sample-dialog.md +66 -0
  47. package/skills/agentforce-persona-generate/references/attributions.md +36 -0
  48. package/skills/agentforce-persona-generate/references/interaction-design-notes.md +30 -0
  49. package/skills/agentforce-persona-generate/references/persona-encoding-guide.md +566 -0
  50. package/skills/agentforce-persona-generate/references/persona-framework.md +796 -0
  51. package/skills/agentforce-persona-generate/references/refinement-mappings.md +31 -0
  52. package/skills/agentforce-persona-generate/references/scoring-rubric.md +58 -0
  53. package/skills/agentforce-persona-generate/references/voice-catalog.json +2327 -0
  54. package/skills/agentforce-persona-generate/references/workshop-question-policy.md +90 -0
  55. package/skills/agentforce-persona-generate/references/workshop-scenario-seeds.md +119 -0
  56. package/skills/agentforce-persona-generate/scripts/parse_agent_yaml.py +223 -0
  57. package/skills/consumer-goods-accruals-datakit-deploy/SKILL.md +17 -27
  58. package/skills/consumer-goods-accruals-datakit-deploy/scripts/setup.js +7 -17
  59. package/skills/consumer-goods-accruals-datakit-deploy/scripts/steps/00-check-prerequisites.js +47 -63
  60. package/skills/consumer-goods-accruals-datakit-deploy/scripts/steps/01-download-static-resource.js +10 -13
  61. package/skills/consumer-goods-accruals-datakit-deploy/scripts/steps/02-replace-org-id.js +46 -46
  62. package/skills/consumer-goods-accruals-datakit-deploy/scripts/steps/03-deploy-metadata.js +4 -21
  63. package/skills/consumer-goods-accruals-datakit-deploy/scripts/steps/06-create-dataspace.js +58 -82
  64. package/skills/consumer-goods-accruals-datakit-deploy/scripts/steps/07-deploy-accruals-reports.js +16 -315
  65. package/skills/consumer-goods-accruals-datakit-deploy/scripts/steps/08-deploy-ui.js +9 -24
  66. package/skills/consumer-goods-accruals-datakit-deploy/scripts/steps/09-completion.js +44 -44
  67. package/skills/consumer-goods-accruals-datakit-deploy/scripts/steps/utils.js +11 -63
  68. package/skills/consumer-goods-rtr-datacloud-export-configure/SKILL.md +2 -1
  69. package/skills/consumer-goods-tpe-dashboard-configure/SKILL.md +2 -1
  70. package/skills/consumer-goods-tpe-dashboard-custom-kpi-configure/SKILL.md +2 -1
  71. package/skills/consumer-goods-tpe-datakit-deploy/SKILL.md +2 -1
  72. package/skills/data360-schema-get/SKILL.md +3 -3
  73. package/skills/design-systems-slds-validate/references/report-format.md +1 -1
  74. package/skills/dx-app-analytics-query/SKILL.md +8 -8
  75. package/skills/dx-org-manage/SKILL.md +1 -0
  76. package/skills/dx-org-shape-manage/SKILL.md +1 -0
  77. package/skills/dx-org-snapshot-manage/SKILL.md +172 -0
  78. package/skills/dx-org-snapshot-manage/examples/create_error_output.json +16 -0
  79. package/skills/dx-org-snapshot-manage/examples/create_success_output.json +19 -0
  80. package/skills/dx-org-snapshot-manage/examples/delete_output.json +9 -0
  81. package/skills/dx-org-snapshot-manage/examples/get_output.json +19 -0
  82. package/skills/dx-org-snapshot-manage/examples/list_output.json +36 -0
  83. package/skills/dx-org-snapshot-manage/references/cli_flags.md +179 -0
  84. package/skills/dx-org-snapshot-manage/references/snapshot_usage.md +55 -0
  85. package/skills/dx-org-trial-expiration-check/SKILL.md +1 -1
  86. package/skills/dx-org-trial-expiration-check/scripts/check_expiration.sh +2 -2
  87. package/skills/education-cloud-student-recruitment-agent-configure/SKILL.md +7 -5
  88. package/skills/education-cloud-student-recruitment-agent-configure/references/prerequisites.md +11 -11
  89. package/skills/experience-content-media-image-generate/SKILL.md +83 -0
  90. package/skills/experience-content-media-image-generate/scripts/download-image.sh +84 -0
  91. package/skills/experience-ui-bundle-app-coordinate/SKILL.md +12 -12
  92. package/skills/experience-ui-bundle-app-coordinate/references/phase-completion-validation.md +3 -3
  93. package/skills/experience-ui-bundle-app-coordinate/references/phase-execution-pattern.md +9 -7
  94. package/skills/experience-ui-bundle-app-coordinate/scripts/check-dangling-refs.mjs +132 -0
  95. package/skills/experience-ui-bundle-app-coordinate/scripts/check-hosting-target.mjs +62 -0
  96. package/skills/experience-ui-bundle-app-coordinate/scripts/check-phase-1-complete.mjs +71 -0
  97. package/skills/experience-ui-bundle-app-coordinate/scripts/check-phase-4-complete.mjs +95 -0
  98. package/skills/experience-ui-bundle-app-coordinate/scripts/check-phase-6-ready.mjs +78 -0
  99. package/skills/experience-ui-bundle-app-coordinate/scripts/check-prerequisites.mjs +21 -0
  100. package/skills/experience-ui-bundle-app-coordinate/scripts/check-sfdx-project.mjs +28 -0
  101. package/skills/experience-ui-bundle-custom-app-generate/SKILL.md +3 -1
  102. package/skills/experience-ui-bundle-custom-app-generate/scripts/resolve-uibundle-path.mjs +40 -0
  103. package/skills/experience-ui-bundle-frontend-generate/SKILL.md +7 -5
  104. package/skills/experience-ui-bundle-frontend-generate/scripts/check-preconditions.mjs +70 -0
  105. package/skills/experience-ui-bundle-frontend-generate/scripts/resolve-ui-bundle.mjs +76 -0
  106. package/skills/experience-ui-bundle-frontend-generate/scripts/verify-rules.mjs +115 -0
  107. package/skills/experience-ui-bundle-metadata-generate/SKILL.md +7 -3
  108. package/skills/experience-ui-bundle-metadata-generate/references/angular-metadata-generate.md +1 -1
  109. package/skills/experience-ui-bundle-metadata-generate/references/react-metadata-generate.md +1 -1
  110. package/skills/experience-ui-bundle-metadata-generate/scripts/check-api-version.mjs +43 -0
  111. package/skills/experience-ui-bundle-metadata-generate/scripts/detect-framework.mjs +131 -0
  112. package/skills/experience-ui-bundle-metadata-generate/scripts/verify-bundle-location.mjs +152 -0
  113. package/skills/experience-ui-bundle-mfa-configure/references/branding.md +10 -6
  114. package/skills/external-diagram-mermaid-generate/SKILL.md +12 -12
  115. package/skills/field-service-data-capture-migrate/references/component-mapping.md +1 -1
  116. package/skills/field-service-data-capture-migrate/references/fsm-dc-capability-catalog.md +1 -2
  117. package/skills/field-service-data-capture-migrate/references/known-deploy-errors.md +1 -0
  118. package/skills/field-service-data-capture-migrate/references/transformer-rules.md +1 -1
  119. package/skills/field-service-data-capture-migrate/scripts/transform_flow.py +12 -1
  120. package/skills/field-service-data-capture-migrate/scripts/vendor/build_flow.py +4 -1
  121. package/skills/field-service-setup-orchestrator-get/SKILL.md +0 -1
  122. package/skills/insurance-brokerage-agency-billing-configure/SKILL.md +233 -0
  123. package/skills/insurance-brokerage-agency-billing-configure/references/accounting-setup.md +117 -0
  124. package/skills/insurance-brokerage-agency-billing-configure/references/billing-rules-config.md +237 -0
  125. package/skills/insurance-brokerage-agency-billing-configure/references/billing-settings.md +271 -0
  126. package/skills/insurance-brokerage-agency-billing-configure/references/demo-policy-config.md +138 -0
  127. package/skills/insurance-brokerage-agency-billing-configure/references/org-defaults.md +64 -0
  128. package/skills/insurance-brokerage-agency-billing-configure/references/permissions-config.md +226 -0
  129. package/skills/insurance-brokerage-agency-billing-configure/references/prerequisites.md +142 -0
  130. package/skills/life-sciences-fieldsalesrep-coordinate/SKILL.md +3 -2
  131. package/skills/life-sciences-fieldsalesrep-coordinate/references/stage-5-visit-creation-execution-state-and-recovery.md +3 -3
  132. package/skills/life-sciences-fieldsalesrep-coordinate/references/stage-5-visit-creation-overview.md +68 -45
  133. package/skills/life-sciences-fieldsalesrep-coordinate/references/stage-5-visit-creation-visit-creation-data.md +17 -18
  134. package/skills/life-sciences-kam-coordinate/references/stage-5-data-and-plan-templates-overview.md +16 -3
  135. package/skills/life-sciences-kam-coordinate/references/stage-5-data-creation-data.md +16 -13
  136. package/skills/marketing-message-test/SKILL.md +194 -0
  137. package/skills/marketing-message-test/references/api-contract.md +333 -0
  138. package/skills/omnistudio-callable-apex-generate/SKILL.md +3 -3
  139. package/skills/omnistudio-datamapper-generate/SKILL.md +6 -6
  140. package/skills/omnistudio-datapacks-deploy/SKILL.md +11 -11
  141. package/skills/omnistudio-dependencies-analyze/SKILL.md +5 -5
  142. package/skills/omnistudio-epc-catalog-generate/SKILL.md +6 -6
  143. package/skills/omnistudio-flexcard-generate/SKILL.md +6 -6
  144. package/skills/omnistudio-integration-procedure-generate/SKILL.md +6 -6
  145. package/skills/omnistudio-omniscript-generate/SKILL.md +6 -5
  146. package/skills/platform-apex-logs-debug/SKILL.md +1 -0
  147. package/skills/platform-metadata-deploy/SKILL.md +1 -0
  148. package/skills/platform-models-api-configure/SKILL.md +5 -5
  149. package/skills/platform-soql-query/SKILL.md +1 -0
  150. package/skills/service-itsm-agentic-setup-cmdb-coordinate/SKILL.md +17 -6
  151. package/skills/service-itsm-agentic-setup-incident-sla-configure/SKILL.md +107 -192
  152. package/skills/service-itsm-agentic-setup-incident-sla-configure/assets/attach-milestone-action.json +6 -6
  153. package/skills/service-itsm-agentic-setup-incident-sla-configure/examples/milestone-patterns.md +49 -20
  154. package/skills/service-itsm-agentic-setup-incident-sla-configure/examples/output-templates.md +4 -4
  155. package/skills/service-itsm-agentic-setup-incident-sla-configure/references/mcp-invocation.md +224 -290
  156. package/skills/service-itsm-agentic-setup-incident-sla-configure/references/workflow.md +295 -0
  157. package/skills/service-itsm-incident-priority-configure/SKILL.md +1 -1
  158. package/skills/service-itsm-slack-itservice-configure/SKILL.md +2 -1
  159. package/skills/service-itsm-slack-itservice-configure/references/manage-slack-connection.md +2 -2
  160. package/skills/service-omni-channel-setup-coordinate/SKILL.md +20 -13
  161. package/skills/service-omni-channel-setup-coordinate/scripts/integration-driver.sh +5 -55
  162. package/skills/service-omni-channel-setup-coordinate/scripts/tests/test_omni_contracts.py +0 -38
  163. package/skills/service-omni-command-center-analyze/SKILL.md +2 -3
  164. package/skills/service-omni-command-center-analyze/scripts/analyze.sh +3 -3
  165. package/skills/tableau-next-asset-create/README.md +65 -0
  166. package/skills/tableau-next-asset-create/SKILL.md +409 -0
  167. package/skills/tableau-next-asset-create/references/admin-users.md +149 -0
  168. package/skills/tableau-next-asset-create/references/ai-readiness.md +355 -0
  169. package/skills/tableau-next-asset-create/references/alerts.md +111 -0
  170. package/skills/tableau-next-asset-create/references/build-workflow.md +819 -0
  171. package/skills/tableau-next-asset-create/references/dashboard-authoring.md +302 -0
  172. package/skills/tableau-next-asset-create/references/dashboard-design-principles.md +352 -0
  173. package/skills/tableau-next-asset-create/references/data-transform-gotchas.md +210 -0
  174. package/skills/tableau-next-asset-create/references/data-understanding.md +387 -0
  175. package/skills/tableau-next-asset-create/references/deep-reference-index.md +74 -0
  176. package/skills/tableau-next-asset-create/references/destructive-operations.md +62 -0
  177. package/skills/tableau-next-asset-create/references/edit-dashboard.md +273 -0
  178. package/skills/tableau-next-asset-create/references/edit-visualization.md +529 -0
  179. package/skills/tableau-next-asset-create/references/empty-source-handling.md +104 -0
  180. package/skills/tableau-next-asset-create/references/ingest-and-metric-gotchas.md +638 -0
  181. package/skills/tableau-next-asset-create/references/insight-bundle.md +69 -0
  182. package/skills/tableau-next-asset-create/references/large-flat-file-handling.md +331 -0
  183. package/skills/tableau-next-asset-create/references/schemas/edit-dashboard/_envelope.json +54 -0
  184. package/skills/tableau-next-asset-create/references/schemas/edit-dashboard/_shared-widget-fields.json +122 -0
  185. package/skills/tableau-next-asset-create/references/schemas/edit-dashboard/add_page.json +29 -0
  186. package/skills/tableau-next-asset-create/references/schemas/edit-dashboard/delete_page.json +27 -0
  187. package/skills/tableau-next-asset-create/references/schemas/edit-dashboard/discard_dashboard.json +11 -0
  188. package/skills/tableau-next-asset-create/references/schemas/edit-dashboard/move_widget.json +30 -0
  189. package/skills/tableau-next-asset-create/references/schemas/edit-dashboard/move_widget_to_page.json +30 -0
  190. package/skills/tableau-next-asset-create/references/schemas/edit-dashboard/place_widget_on_page.json +30 -0
  191. package/skills/tableau-next-asset-create/references/schemas/edit-dashboard/remove_widget_from_dashboard.json +16 -0
  192. package/skills/tableau-next-asset-create/references/schemas/edit-dashboard/remove_widget_from_page.json +26 -0
  193. package/skills/tableau-next-asset-create/references/schemas/edit-dashboard/rename_page.json +28 -0
  194. package/skills/tableau-next-asset-create/references/schemas/edit-dashboard/save_dashboard.json +18 -0
  195. package/skills/tableau-next-asset-create/references/schemas/edit-dashboard/undo.json +11 -0
  196. package/skills/tableau-next-asset-create/references/schemas/edit-dashboard/upsert_button_widget.json +69 -0
  197. package/skills/tableau-next-asset-create/references/schemas/edit-dashboard/upsert_container_widget.json +88 -0
  198. package/skills/tableau-next-asset-create/references/schemas/edit-dashboard/upsert_filter_widget.json +146 -0
  199. package/skills/tableau-next-asset-create/references/schemas/edit-dashboard/upsert_metric_widget.json +78 -0
  200. package/skills/tableau-next-asset-create/references/schemas/edit-dashboard/upsert_navigation_widget.json +80 -0
  201. package/skills/tableau-next-asset-create/references/schemas/edit-dashboard/upsert_parameter_widget.json +160 -0
  202. package/skills/tableau-next-asset-create/references/schemas/edit-dashboard/upsert_text_widget.json +103 -0
  203. package/skills/tableau-next-asset-create/references/schemas/edit-dashboard/upsert_visualization_widget.json +68 -0
  204. package/skills/tableau-next-asset-create/references/sdm-tool-reference.md +721 -0
  205. package/skills/tableau-next-asset-create/references/semantic-query-and-enrichment.md +355 -0
  206. package/skills/tableau-next-asset-create/references/shared-gates.md +322 -0
  207. package/skills/tableau-next-asset-create/references/sharing-and-promotion.md +306 -0
  208. package/skills/tableau-next-asset-create/references/tasks/ai-readiness-audit.md +51 -0
  209. package/skills/tableau-next-asset-create/references/tasks/analyze-data.md +48 -0
  210. package/skills/tableau-next-asset-create/references/tasks/build-dashboard.md +66 -0
  211. package/skills/tableau-next-asset-create/references/tasks/build-end-to-end.md +73 -0
  212. package/skills/tableau-next-asset-create/references/tasks/create-data-transform.md +51 -0
  213. package/skills/tableau-next-asset-create/references/tasks/create-viz.md +58 -0
  214. package/skills/tableau-next-asset-create/references/tasks/edit-dashboard.md +80 -0
  215. package/skills/tableau-next-asset-create/references/tasks/edit-sdm.md +106 -0
  216. package/skills/tableau-next-asset-create/references/tasks/edit-viz.md +40 -0
  217. package/skills/tableau-next-asset-create/references/tasks/enrich-model.md +68 -0
  218. package/skills/tableau-next-asset-create/references/tasks/ingest-flat-file.md +68 -0
  219. package/skills/tableau-next-asset-create/references/tasks/manage-alert.md +35 -0
  220. package/skills/tableau-next-asset-create/references/tasks/profile-dataset.md +47 -0
  221. package/skills/tableau-next-asset-create/references/tasks/promote-or-reuse.md +46 -0
  222. package/skills/tableau-next-asset-create/references/tasks/provision-user.md +39 -0
  223. package/skills/tableau-next-asset-create/references/tasks/query-model.md +92 -0
  224. package/skills/tableau-next-asset-create/references/tasks/review-verified-questions.md +42 -0
  225. package/skills/tableau-next-asset-create/references/tasks/share-asset.md +37 -0
  226. package/skills/tableau-next-asset-create/references/verified-questions.md +125 -0
  227. package/skills/tableau-next-asset-create/references/viz-authoring.md +992 -0
  228. package/skills/experience-ui-bundle-app-coordinate/scripts/check-dangling-refs.sh +0 -42
  229. package/skills/experience-ui-bundle-app-coordinate/scripts/check-hosting-target.sh +0 -26
  230. package/skills/experience-ui-bundle-app-coordinate/scripts/check-phase-1-complete.sh +0 -35
  231. package/skills/experience-ui-bundle-app-coordinate/scripts/check-phase-4-complete.sh +0 -47
  232. package/skills/experience-ui-bundle-app-coordinate/scripts/check-phase-6-ready.sh +0 -33
  233. package/skills/experience-ui-bundle-app-coordinate/scripts/check-prerequisites.sh +0 -20
  234. package/skills/experience-ui-bundle-app-coordinate/scripts/check-sfdx-project.sh +0 -15
  235. package/skills/experience-ui-bundle-custom-app-generate/scripts/resolve-uibundle-path.sh +0 -30
  236. package/skills/experience-ui-bundle-frontend-generate/scripts/check-preconditions.sh +0 -37
  237. package/skills/experience-ui-bundle-frontend-generate/scripts/resolve-ui-bundle.sh +0 -66
  238. package/skills/experience-ui-bundle-frontend-generate/scripts/verify-rules.sh +0 -58
  239. package/skills/experience-ui-bundle-metadata-generate/scripts/check-api-version.sh +0 -30
  240. package/skills/experience-ui-bundle-metadata-generate/scripts/detect-framework.sh +0 -73
  241. package/skills/experience-ui-bundle-metadata-generate/scripts/verify-bundle-location.sh +0 -118
  242. package/skills/service-itsm-agentic-setup-incident-sla-configure/assets/predefined-incident-policy.json +0 -102
@@ -0,0 +1,179 @@
1
+ # CLI Flags Reference
2
+
3
+ Complete reference for the scratch org snapshot commands: `sf org create snapshot`, `sf org get snapshot`, `sf org list snapshot`, and `sf org delete snapshot`.
4
+
5
+ > **Global flags (all four commands):** `--json` (format output as JSON — ALWAYS use this) and `--flags-dir <value>` (import flag values from a directory).
6
+ >
7
+ > **Dev Hub flag (all four commands):** `--target-dev-hub` / `-v` — username or alias of the Dev Hub org. Required unless the `target-dev-hub` config variable is already set. There is **no** `--target-org` flag; snapshots are a Dev Hub feature.
8
+ >
9
+ > **API version (all four commands):** `--api-version <value>` — override the API version used for API requests.
10
+
11
+ ---
12
+
13
+ ## `sf org create snapshot`
14
+
15
+ Create a point-in-time copy (metadata and data) of a scratch org.
16
+
17
+ ### Required Flags
18
+
19
+ | Flag | Alias | Description | Example |
20
+ |------|-------|-------------|---------|
21
+ | `--source-org` | `-o` | ID or locally authenticated username/alias of the scratch org to snapshot. Aliases/usernames auto-resolve to the org ID (IDs start with `00D`). | `--source-org my-scratch` |
22
+ | `--name` | `-n` | Unique name of the snapshot. **Max 15 characters** — longer values fail with `STRING_TOO_LONG` (verified live). | `--name Dependencies` |
23
+ | `--target-dev-hub` | `-v` | Dev Hub username or alias. Not required if the `target-dev-hub` config is set. | `--target-dev-hub DevHub` |
24
+
25
+ ### Optional Flags
26
+
27
+ | Flag | Alias | Description | Example |
28
+ |------|-------|-------------|---------|
29
+ | `--description` | `-d` | Description of the snapshot. Document the contents; include a VCS tag or commit ID. | `--description "Contains PackageA v1.1.0"` |
30
+ | `--api-version` | | Override the API version. | `--api-version 66.0` |
31
+
32
+ ### Usage Patterns
33
+
34
+ ```bash
35
+ # Basic snapshot creation (by alias)
36
+ sf org create snapshot --source-org my-scratch --name MySnapshot --json
37
+
38
+ # With a description
39
+ sf org create snapshot --source-org my-scratch --name MySnapshot \
40
+ --description "Baseline with Package v1.2.0" --json
41
+
42
+ # Using the source org ID instead of an alias
43
+ sf org create snapshot --source-org 00D5g00000001XyEAI --name MySnapshot --json
44
+
45
+ # Specify the Dev Hub explicitly
46
+ sf org create snapshot --source-org my-scratch --name NightlyBranch \
47
+ --target-dev-hub NightlyDevHub --json
48
+ ```
49
+
50
+ **Legacy alias:** `sf force org snapshot create`
51
+
52
+ > **Asynchronous:** creation returns a record whose `Status` is `InProgress` (verified live — not `New` or `Pending`). Poll `sf org get snapshot` until `Status` is `Active` before using the snapshot.
53
+
54
+ ---
55
+
56
+ ## `sf org get snapshot`
57
+
58
+ Get details about a snapshot — including its creation status.
59
+
60
+ ### Required Flags
61
+
62
+ | Flag | Alias | Description | Example |
63
+ |------|-------|-------------|---------|
64
+ | `--snapshot` | `-s` | Name or ID of the snapshot to retrieve. IDs start with `0Oo`. | `--snapshot Dependencies` |
65
+ | `--target-dev-hub` | `-v` | Dev Hub username or alias (or default config). | `--target-dev-hub DevHub` |
66
+
67
+ ### Usage Patterns
68
+
69
+ ```bash
70
+ # Get details by name
71
+ sf org get snapshot --snapshot Dependencies --json
72
+
73
+ # Get details by ID
74
+ sf org get snapshot --snapshot 0Oo5g00000001ABCAA --json
75
+
76
+ # Against a specific Dev Hub
77
+ sf org get snapshot --snapshot Dependencies --target-dev-hub SnapshotDevHub --json
78
+ ```
79
+
80
+ **Legacy alias:** `sf force org snapshot get`
81
+
82
+ ---
83
+
84
+ ## `sf org list snapshot`
85
+
86
+ List the scratch org snapshots in a Dev Hub.
87
+
88
+ ### Flags
89
+
90
+ Takes only the Dev Hub flag (`--target-dev-hub` / `-v`) plus the global flags. As an admin you see all snapshots in the Dev Hub; as a user you see only your own unless granted View All.
91
+
92
+ > **No server-side filters** (verified live). `sf org list snapshot` returns every snapshot (subject to your visibility) with no flags to filter by status, date, or expiry. Filter client-side from the `--json` output.
93
+
94
+ ### Usage Patterns
95
+
96
+ ```bash
97
+ # List snapshots in the default Dev Hub
98
+ sf org list snapshot --json
99
+
100
+ # List snapshots in a specific Dev Hub
101
+ sf org list snapshot --target-dev-hub SnapshotDevHub --json
102
+
103
+ # Save the list to a file
104
+ sf org list snapshot --json > tmp/MySnapshotList.json
105
+ ```
106
+
107
+ **Legacy alias:** `sf force org snapshot list`
108
+
109
+ ### Filtering for snapshots expiring soon
110
+
111
+ Each snapshot record carries an `ExpirationDate` (`YYYY-MM-DD`, populated once the snapshot is `Active`; `null` while `InProgress` — verified live). To list snapshots expiring within N days, pipe the JSON through `jq`:
112
+
113
+ ```bash
114
+ # Snapshots expiring within DAYS days, soonest first (negative = already expired).
115
+ DAYS=30
116
+ sf org list snapshot --target-dev-hub SnapshotDevHub --json \
117
+ | jq --argjson days "$DAYS" -r '
118
+ (now | floor) as $now
119
+ | [ .result[]
120
+ | select(.ExpirationDate != null)
121
+ | . + { daysUntilExpiry: ((((.ExpirationDate + "T00:00:00Z") | fromdateiso8601) - $now) / 86400 | floor) }
122
+ | select(.daysUntilExpiry <= $days) ]
123
+ | sort_by(.daysUntilExpiry)
124
+ | if length == 0 then "No snapshots expiring within \($days) day(s)."
125
+ else (.[] | "\(.SnapshotName)\t[\(.Status)]\texpires \(.ExpirationDate)\tin \(.daysUntilExpiry)d") end'
126
+ ```
127
+
128
+ Requires `jq` (>= 1.6) on the PATH alongside `sf`.
129
+
130
+ ---
131
+
132
+ ## `sf org delete snapshot`
133
+
134
+ Delete a scratch org snapshot.
135
+
136
+ ### Required Flags
137
+
138
+ | Flag | Alias | Description | Example |
139
+ |------|-------|-------------|---------|
140
+ | `--snapshot` | `-s` | Name or ID of the snapshot to delete. IDs start with `0Oo`. | `--snapshot BaseSnapshot` |
141
+ | `--target-dev-hub` | `-v` | Dev Hub username or alias (or default config). | `--target-dev-hub DevHub` |
142
+
143
+ ### Optional Flags
144
+
145
+ | Flag | Alias | Description | Example |
146
+ |------|-------|-------------|---------|
147
+ | `--no-prompt` | `-p` | Don't prompt to confirm the deletion (use in scripts/CI). | `--no-prompt` |
148
+ | `--api-version` | | Override the API version. | `--api-version 66.0` |
149
+
150
+ ### Usage Patterns
151
+
152
+ ```bash
153
+ # Delete by ID (prompts for confirmation)
154
+ sf org delete snapshot --snapshot 0Oo5g00000001ABCAA --json
155
+
156
+ # Delete by name without prompting (scripts/CI)
157
+ sf org delete snapshot --snapshot BaseSnapshot --no-prompt --json
158
+
159
+ # Against a specific Dev Hub
160
+ sf org delete snapshot --snapshot BaseSnapshot --target-dev-hub SnapshotDevHub --json
161
+ ```
162
+
163
+ **Legacy alias:** `sf force org snapshot delete`
164
+
165
+ > Without `--no-prompt`, the command asks for confirmation. Declining returns with no result and performs no deletion. Dev Hub admins can delete any snapshot; users can delete only their own unless granted Modify All.
166
+ >
167
+ > **Bulk-delete guardrail:** there is no single command to delete multiple snapshots — each `sf org delete snapshot` call removes one snapshot. Before deleting multiple/all snapshots, or any delete with `--no-prompt`, first run `sf org list snapshot --json`, echo the resolved target names back to the user, and obtain explicit confirmation.
168
+
169
+ ---
170
+
171
+ ## Important Notes
172
+
173
+ - **No update command exists anywhere in the CLI** (verified — `sf org --help` under the `org` topic lists only `create/get/list/delete` for `snapshot`). To rename, redescribe, or change expiration, delete and recreate.
174
+ - **Dev Hub must have Scratch Org Snapshots enabled** — otherwise commands fail with a feature-not-enabled error.
175
+ - **Snapshot name limit (create)** — `--name` is capped at **15 characters** (verified live); a longer value fails with `STRING_TOO_LONG`. Names must also be unique within the Dev Hub.
176
+ - **Source-org auto-resolution (create)** — `--source-org` accepts an org ID (`00D...`), username, or alias; aliases/usernames resolve to the org ID locally.
177
+ - **Snapshot identifier (get/delete)** — `--snapshot` accepts the snapshot name or its ID (`0Oo...`).
178
+ - **Asynchronous creation** — `create` does not wait for the snapshot to finish; use `sf org get snapshot` to poll `Status` until it is `Active`.
179
+ - **Returned fields** — snapshot records expose `Id`, `SnapshotName`, `Description`, `Status`, `SourceOrg`, `CreatedDate`, `LastModifiedDate`, `ExpirationDate`, and `Error` (populated only when `Status` is `Error`), plus the standard sobject `attributes` wrapper on `get`/`list`.
@@ -0,0 +1,55 @@
1
+ # Using Snapshots in Scratch Org Definition Files
2
+
3
+ Snapshot lifecycle (create/get/list/delete) is owned by this skill. Once a snapshot's `Status` is `Active` (checked via `sf org get snapshot` — see `SKILL.md`), reference it by name to create new scratch orgs — that part is owned by the **`dx-org-manage`** skill.
4
+
5
+ ## Scratch Org Definition File Format
6
+
7
+ Use the `snapshot` field instead of `edition` in `project-scratch-def.json`:
8
+
9
+ ```json
10
+ {
11
+ "orgName": "My Company",
12
+ "snapshot": "MySnapshot",
13
+ "features": ["EnableSetPasswordInApi"]
14
+ }
15
+ ```
16
+
17
+ ## Key Differences from Edition-Based Definitions
18
+
19
+ | Field | Edition-based | Snapshot-based |
20
+ |-------|--------------|----------------|
21
+ | Primary field | `"edition": "Developer"` | `"snapshot": "MySnapshot"` |
22
+ | Contents | Empty org with edition defaults | Pre-configured org state (metadata + data) from the snapshot |
23
+
24
+ ## Or via Command Flag
25
+
26
+ ```bash
27
+ sf org create scratch --snapshot MySnapshot --target-dev-hub <alias> --alias <name> --json
28
+ ```
29
+
30
+ ## Common Use Cases
31
+
32
+ ### 1. Package Development
33
+
34
+ ```json
35
+ { "orgName": "Package Dev Org", "snapshot": "Dependencies_v1.2.0" }
36
+ ```
37
+
38
+ ### 2. Testing Baseline
39
+
40
+ ```json
41
+ { "orgName": "Test Baseline", "snapshot": "TestData_Populated" }
42
+ ```
43
+
44
+ ### 3. CI/CD Pipeline
45
+
46
+ ```json
47
+ { "orgName": "CI Scratch Org", "snapshot": "Nightly_Build_Baseline" }
48
+ ```
49
+
50
+ ## Workflow Summary
51
+
52
+ 1. **Create the snapshot** (`dx-org-snapshot-manage`): `sf org create snapshot --source-org <scratch> --name MySnapshot`
53
+ 2. **Poll status** (`dx-org-snapshot-manage`): `sf org get snapshot --snapshot MySnapshot` until `Status` is `Active`
54
+ 3. **Reference in a definition file**: `"snapshot": "MySnapshot"`
55
+ 4. **Create the new scratch org** (`dx-org-manage`): `sf org create scratch --definition-file config/project-scratch-def.json`
@@ -173,7 +173,7 @@ Org IDs of at-risk orgs so the steps are actionable:
173
173
  for LDV orgs. (Salesforce Help article 000387818.)
174
174
  - **Nonprofits:** email your Account Executive with subject "Trial Extension"
175
175
  and the trial-starter email, Org ID, and username; AMER
176
- `PowerOfUsDesk@salesforce.com`, other regions `myaccount@salesforce.com` /
176
+ the Power of Us Desk, other regions My Account support /
177
177
  1-800-NO-SOFTWARE. Works even if already expired. (Article 004754220.)
178
178
  - **Developer Edition:** DE orgs have no subscription clock but are deactivated
179
179
  after prolonged inactivity (~180 days without a login); log in periodically.
@@ -402,8 +402,8 @@ render_renew() {
402
402
  echo " - Email of the customer that started the trial"
403
403
  echo " - Org ID (or your org's name if you can't access the Org ID)"
404
404
  echo " - Username"
405
- echo " AMER: PowerOfUsDesk@salesforce.com"
406
- echo " Other regions: myaccount@salesforce.com or 1-800-NO-SOFTWARE"
405
+ echo " AMER: the Power of Us Desk"
406
+ echo " Other regions: My Account support or 1-800-NO-SOFTWARE"
407
407
  echo " Ref: Salesforce Help article 004754220"
408
408
  echo
409
409
  echo " Developer Edition orgs:"
@@ -1,12 +1,13 @@
1
1
  ---
2
2
  name: education-cloud-student-recruitment-agent-configure
3
- description: "Use this skill to set up and configure the Education Cloud Student Recruitment Agent (SRA) — the packaged Agentforce agent (namespace sturecruitment) that answers admissions FAQs, captures inquiries, registers campus tours, and files applications for prospective students. TRIGGER when the user wants to: create or configure an admissions, recruitment, or enrollment agent, set up the Student Recruitment Agent, deploy SRA to an Experience Cloud site, clone the SRA flows or permission sets, add the SRA subagents (Admissions and Enrollments FAQ; Admissions Application; Campus Tours, Visits, and Events Registration; Request for Information), wire Learning Program grounding, or build the escalation subagent. Guides platform enablement, permissions, grounding, agent creation, and channel deployment — API-first with UI fallback. DO NOT TRIGGER for the Transfer Credit Agent, generic Agentforce authoring (use agentforce-generate), or base Education Cloud domain enablement."
3
+ description: "Use this skill to set up and configure the Education Cloud Student Recruitment Agent (SRA) — the packaged Agentforce agent (namespace sturecruitment) that answers admissions FAQs, captures inquiries, registers campus tours, and files applications for prospective students. TRIGGER when the user wants to: create or configure an admissions, recruitment, or enrollment agent, set up the Student Recruitment Agent, deploy SRA to an Experience Cloud site, clone the SRA flows or permission sets, add the SRA subagents (Admissions and Enrollments FAQ; Admissions Application; Campus Tours, Visits, and Events Registration; Request for Information), wire Learning Program grounding, or build the escalation subagent. Guides platform enablement, permissions, grounding, agent creation, and channel deployment — API-first with UI fallback. DO NOT TRIGGER for the Transfer Credit Agent, generic Agentforce authoring (use agentforce-generate), or base Education Cloud domain enablement (use education-cloud-domain-configure)."
4
4
  metadata:
5
5
  version: "1.0"
6
6
  minApiVersion: "67.0"
7
7
  domains: ["Education"]
8
8
  relatedSkills:
9
9
  - "agentforce-generate"
10
+ - "education-cloud-domain-configure"
10
11
  - "platform-custom-field-generate"
11
12
  - "platform-metadata-deploy"
12
13
  - "platform-sharing-owd-configure"
@@ -30,7 +31,7 @@ metadata:
30
31
 
31
32
  - **In scope**: The full SRA setup sequence — the three platform toggles (Einstein, SRA, Omni-Channel; Agentforce provisioning is a verify-only Step-1 gate, not a toggle the skill flips), the `EducationCloudAiAgentAccess` permission set + OWD/sharing foundation, Learning Program grounding (Data Cloud data stream + hybrid search index + prompt template) and Knowledge/data-library grounding, creating the Service (unauth) and Employee (auth) agents, adding the 4 packaged SRA subagents, building the customer escalation subagent, cloning and configuring the 6 admissions flows (Service path), and deploying to Experience Cloud channels with user verification.
32
33
  - **Out of scope**: The **Transfer Credit Agent** (separate agent, own perms/help — never include its steps); generic Agentforce agent authoring from scratch (see Cross-Skill Integration below); Data Cloud connector plumbing beyond the SRA grounding path; deciding the substance of Knowledge article content — Claude may draft an article for the customer to review, but the customer owns what it says.
33
- - **The EDU foundation is a checked dependency, not an assumption**: SRA depends on base Education Cloud enablement, Person Accounts, R&A domain objects, and Data Cloud. This skill doesn't re-implement base Education Cloud domain enablement, but verifies each piece concretely (step 2a) and only surfaces a gap to the user to *fill what it detects*.
34
+ - **The EDU foundation is a checked dependency, not an assumption**: SRA depends on base Education Cloud enablement, Person Accounts, R&A domain objects, and Data Cloud. This skill doesn't re-implement `education-cloud-domain-configure`, but verifies each piece concretely (step 2a) and only routes there to *fill a gap it detects*.
34
35
 
35
36
  ---
36
37
 
@@ -53,7 +54,7 @@ Defaults unless specified:
53
54
 
54
55
  **Step 0 resolves the org's current API version; Step 1 is a hard prerequisites gate — clear both before touching anything else.** The rest is a linear, sequential set of steps (0–13); confirm before every irreversible or org-shaping action, and end every step with its verify call. (See *Talking to the user* below.)
55
56
 
56
- **Every org-changing step walks a three-tier ladder, then verifies — tier = what runtime you have:** **T1** headless MCP (`dispatch`/`dispatch_readonly`, no shell) · **T2** `sf` CLI (needs a shell) · **T3** Setup UI. Try T1; drop to T2 on a route/allowlist failure; T3 if no shell. Steps carry a best-tier tag; the verify-only preflight (step 1) uses STOP/ASK-USER labels instead. `references/execution-model.md` has the ladder detail — allowlist, route signals, query-routing, API-version policy; read it whenever a tier or route is unclear.
57
+ **Every org-changing step walks a three-tier ladder, then verifies — tier = what runtime you have:** **T1** headless MCP (`dispatch`/`dispatch_readonly`, no shell) · **T2** `sf` CLI (needs a shell) · **T3** Setup UI. Try T1; drop to T2 on a route/allowlist failure; T3 if no shell. Steps carry a best-tier tag; the verify-only preflight (step 1) uses STOP/REDIRECT labels instead. `references/execution-model.md` has the ladder detail — allowlist, route signals, query-routing, API-version policy; read it whenever a tier or route is unclear.
57
58
 
58
59
  **Several steps land on T3 with no tier-1/tier-2 write path at all** (hand the user the Setup path, then verify) — each is tagged inline where it occurs (e.g. `[T3 · ...]` on steps 8, 9a, 12); every other action has a tier-1 path.
59
60
 
@@ -77,11 +78,11 @@ All steps are sequential. Each step is one action + its best tier + a pointer to
77
78
 
78
79
  ### 1 — Verify prerequisites & gates
79
80
 
80
- > **Step 1 is a hard gate — clear it before enabling or building anything.** If a STOP check (external grant the skill can't flip) or an ASK-USER check (foundation the skill doesn't own) fails, **do not start the toggles or the foundation build** — stop and request the grant, or have the user complete the missing Education Cloud foundation setup, then re-verify. **Also confirm now, before saying anything to the customer: `references/customer-narration.md` has been read in full this run (see *Talking to the user* above) — this gate isn't cleared until that's true too.** Don't build permissions/OWD/grounding for an agent that can't exist. Full preflight-gate table and every verify call: `references/prerequisites.md`.
81
+ > **Step 1 is a hard gate — clear it before enabling or building anything.** If a STOP check (external grant the skill can't flip) or a REDIRECT check (foundation the skill doesn't own) fails, **do not start the toggles or the foundation build** — stop and request the grant, or redirect to `education-cloud-domain-configure`, then re-verify. **Also confirm now, before saying anything to the customer: `references/customer-narration.md` has been read in full this run (see *Talking to the user* above) — this gate isn't cleared until that's true too.** Don't build permissions/OWD/grounding for an agent that can't exist. Full preflight-gate table and every verify call: `references/prerequisites.md`.
81
82
 
82
83
  1. **Confirm edition & the Einstein-for-EDU license.** Both are STOP checks — halt if either is missing. (Agentforce provisioning is verified in item 2; Data Cloud in item 2a.)
83
84
  2. **Verify the three SRA gates** — Agentforce provisioning, Education Cloud enabled, and the runtime `orgHasStudentRecruitmentAgentBetaAccess` check (a three-part AND — its exact composition and per-part verify live in `references/prerequisites.md`). Stop if provisioning, the license, or the Gater is missing.
84
- - **2a — Verify the EDU foundation** (don't assume base Education Cloud domain enablement has run): EDU enablement, Person Accounts, R&A domain schema, and Data Cloud. Ask the user to complete the first three, then re-verify; Data Cloud is a Home-Org grant (that's a STOP, not something the user can self-serve).
85
+ - **2a — Verify the EDU foundation** (don't assume `education-cloud-domain-configure` ran): EDU enablement, Person Accounts, R&A domain schema, and Data Cloud. Route the first three to `education-cloud-domain-configure`, then re-verify; Data Cloud is a Home-Org grant (stop, don't redirect).
85
86
 
86
87
  ### 2 — Enable the platform toggles
87
88
 
@@ -159,6 +160,7 @@ This skill configures a live org; no repository files. Expected outputs:
159
160
 
160
161
  | Need | Delegate to |
161
162
  |------|-------------|
163
+ | A verified EDU-foundation gap in EDU enablement, Person Accounts, or the R&A domain schema (step 2a) — not blind pre-delegation. Missing **Data Cloud** is *not* routed here — that's a Home-Org grant, outside this skill's scope | `education-cloud-domain-configure` |
162
164
  | Generic Agentforce agent authoring or metadata generation | `agentforce-generate` |
163
165
 
164
166
  ---
@@ -12,22 +12,22 @@ The **Tier** column below uses the three-tier ladder (see `execution-model.md`):
12
12
 
13
13
  The dividing question is **"can the skill flip it via API?"**:
14
14
 
15
- - **Prerequisites → verify only.** If unmet, tell the user to fix it, then **re-verify** — never enable it here. These are: the **Einstein for Education Cloud license** (P3, commercial/provisioning grant); **Education Cloud enablement** (P2 — owned by base Education Cloud domain setup); the **EinsteinGPT add-on license** (the commercial entitlement — distinct from the `EinsteinGPTPlatformEnabled` *toggle*, which IS in-skill-flippable at step 2, next bullet); and the running user being a **System Administrator**.
15
+ - **Prerequisites → verify only.** If unmet, tell the user to fix it (or route to `education-cloud-domain-configure`), then **re-verify** — never enable it here. These are: the **Einstein for Education Cloud license** (P3, commercial/provisioning grant); **Education Cloud enablement** (P2 — owned by the domain-setup skill); the **EinsteinGPT add-on license** (the commercial entitlement — distinct from the `EinsteinGPTPlatformEnabled` *toggle*, which IS in-skill-flippable at step 2, next bullet); and the running user being a **System Administrator**.
16
16
  - **In-skill → check if present, enable if not**, through the tier ladder **Headless → other MCPs → `sf` CLI → manual UI**. These are: **Einstein Setup** (`EinsteinGPTPlatformEnabled`) and the **SRA toggle** (`RecruitmentAgentEnabled` — the skill's defining action).
17
17
 
18
18
  ## The preflight gate — run this FIRST, before any enable or build work
19
19
 
20
- **Step 1 is a hard gate, not a formality.** Before enabling or configuring anything (the toggles at Step 2 onward), verify every prerequisite the skill **cannot fix itself**. If one is unmet, **do not proceed into the skill's own work** — stop, or ask the user to fix it themselves, then re-verify. Building permissions / OWD / grounding for an agent that can never exist is wasted effort; catch it here at Step 1, not when agent creation 501s at Step 9.
20
+ **Step 1 is a hard gate, not a formality.** Before enabling or configuring anything (the toggles at Step 2 onward), verify every prerequisite the skill **cannot fix itself**. If one is unmet, **do not proceed into the skill's own work** — stop or redirect, get it resolved, and re-verify. Building permissions / OWD / grounding for an agent that can never exist is wasted effort; catch it here at Step 1, not when agent creation 501s at Step 9.
21
21
 
22
22
  Classify each check into one of three outcomes:
23
23
 
24
24
  | Outcome | Prerequisites | Action if unmet |
25
25
  |---|---|---|
26
26
  | **STOP** — external grant; nothing in our ecosystem can flip it | **P4** Agentforce provisioning · **P3** Einstein-for-EDU license · the **SRA Gater** (`StudentRecruitmentAgent256`) · **P5 / F-iv** Data Cloud entitlement · **P1** edition | Report exactly which grant is missing and **halt**. Request it from Salesforce / the account team. Do **not** start the toggles (Step 2). |
27
- | **ASK-USER** — foundation this skill doesn't own, but the user can self-serve it | **P2 / F-i** EDU enablement · **F-ii** Person Accounts · **F-iii** R&A domain schema | Ask the user to complete that Education Cloud foundation setup to fill that gap, then **re-verify** and continue. Do not re-implement it here. |
27
+ | **REDIRECT** — foundation the skill doesn't own but `education-cloud-domain-configure` does | **P2 / F-i** EDU enablement · **F-ii** Person Accounts · **F-iii** R&A domain schema | Send the user to `education-cloud-domain-configure` to fill that gap, then **re-verify** and continue. Do not re-implement it here. |
28
28
  | **ENABLE in-skill** — the skill flips these via the tier ladder | **Einstein Setup** (`EinsteinGPTPlatformEnabled`) · the **SRA toggle** (`RecruitmentAgentEnabled`); running-user builder PS **assignment** is likewise in-skill (Step 4) | Not a gate — Einstein/SRA toggles are the enablement step's job (item 3, `platform-enablement.md`), the PS assignment is item 4's. Check, enable if off, verify. |
29
29
 
30
- **Proceed to the toggles (Step 2) only when every STOP and ASK-USER check is green.** These are definitive *now*, at Step 1 — you don't have to wait for a downstream failure to learn the answer. In particular, **provisioning is detectable here**: if `BotDefinition` is an unqueryable / `INVALID_TYPE` object (vs. a `200` with zero rows, which means "provisioned, no bots yet"), the org isn't Agentforce-provisioned — that's a STOP at Step 1, not a surprise 501 at Step 9. Use the concrete verify call for each requirement in the tables below.
30
+ **Proceed to the toggles (Step 2) only when every STOP and REDIRECT check is green.** These are definitive *now*, at Step 1 — you don't have to wait for a downstream failure to learn the answer. In particular, **provisioning is detectable here**: if `BotDefinition` is an unqueryable / `INVALID_TYPE` object (vs. a `200` with zero rows, which means "provisioned, no bots yet"), the org isn't Agentforce-provisioned — that's a STOP at Step 1, not a surprise 501 at Step 9. Use the concrete verify call for each requirement in the tables below.
31
31
 
32
32
  > **WARNING: When reporting findings, an ENABLE-in-skill item being off is not a FAIL.** `RecruitmentAgentEnabled = false` and `EinsteinGPTPlatformEnabled = false` are the expected starting state — this skill turns them on itself at Step 2/3. Report them as not-yet-enabled/no external action needed, and reserve FAIL/STOP language for the STOP row's unmet external grants.
33
33
 
@@ -38,14 +38,14 @@ Almost nothing here is *purely* manual. For each prerequisite, separate **can th
38
38
  | # | Requirement | Configure? (tier) | **Verify call (run this)** | Tier |
39
39
  |---|---|---|---|---|
40
40
  | P1 | Edition (Enterprise / Performance / Unlimited / Developer) | **No** — commercial | Edition has no SOQL/tooling query field and no tier-1 GET (this one genuinely has no `/query` form, unlike the WHERE-filter verifies below); verify at tier 2 (`sf`) or a tier-3 UI check (Setup → Company Information).<br>Tier 2: `sf org display --target-org <alias> --json` → check `.result.edition` ∈ {Enterprise, Performance, Unlimited, Developer} | T3 |
41
- | P2 | Education Cloud enabled | **Yes** — verify here (step 2a); if off, ask the user to enable it, then re-verify | **T1** — `dispatch_readonly` GET `/services/data/vXX/tooling/sobjects/IndustriesSettings/bWRjLzBIRS9JbmR1c3RyaWVzU2V0dGluZ3M=` (deterministic DurableId) → top-level **`IsEducationCloudEnabled == true`** (the top-level field; **not** `.Metadata.enableEducationCloud` — that's the write-path member name, see `platform-enablement.md`) | T1 |
41
+ | P2 | Education Cloud enabled | **Yes** — verify here (step 2a); if off, send to `education-cloud-domain-configure`, then re-verify | **T1** — `dispatch_readonly` GET `/services/data/vXX/tooling/sobjects/IndustriesSettings/bWRjLzBIRS9JbmR1c3RyaWVzU2V0dGluZ3M=` (deterministic DurableId) → top-level **`IsEducationCloudEnabled == true`** (the top-level field; **not** `.Metadata.enableEducationCloud` — that's the write-path member name, see `platform-enablement.md`) | T1 |
42
42
  | P3 | **Einstein for Education Cloud license** (the license gate on the SRA toggle) | **No** — **commercial/license grant — verify only** — `OrgPermissions.EinsteinForEducationCloud`, granted by the *Einstein for Education Cloud add-on*. **If absent, the `RecruitmentAgentEnabled` toggle can't be enabled** (it's part of the toggle's `editAccess`). Report it and stop — the skill can't flip a license. | **T1** — `dispatch_readonly` `/query`: `SELECT Status FROM PermissionSetLicense WHERE DeveloperName='EinsteinForEducationCloudPsl'` → confirm **`Status='Active'`** (`OrgPermissions.EinsteinForEducationCloud` itself has no SOQL surface; this PermissionSetLicense is the underlying grant) → fall back to `sf data query` (T2) → UI (T3) | T1 verify (license itself is T3/commercial) |
43
43
  | P4 | **Agentforce provisioned** | **No** — **Salesforce grant — no API** | **Preflight STOP check — resolve at Step 1.** Attempt tier-1 `/query` (routable over `dispatch_readonly`) for `BotDefinition` existence → fall back to `sf data query` (T2) → tier-3 UI check.<br>Tier 2: `sf data query -q "SELECT Id FROM BotDefinition LIMIT 1" --target-org <alias>`.<br>**Read the result precisely:** a **`200` with zero rows = provisioned, just no agents yet → PASS** (do not stop). Only an **error / `INVALID_TYPE` / 501 (object not queryable) = NOT provisioned → STOP now**, don't defer to the Step-9 501. | T1 verify (dispatch_readonly /query) → T2 sf (provisioning itself T3) |
44
44
  | P5 | Data Cloud / Data 360 | **No** — Home Org grant | query a Data Cloud object / confirm Data Cloud app available | T1 (comes with Home Org) |
45
45
 
46
46
  > **The only prerequisite the agent truly cannot touch via API is P4 (provisioning)** (a Salesforce grant), alongside the commercial license gates P1/P3 and the Data Cloud entitlement P5. Everything else is configurable or delegated, and each gets a verify call.
47
47
  >
48
- > **Running-user access is not a separate gate.** The person running this skill must be a **System Administrator** (stated in the scope line above) plus hold the builder permission sets the config work needs — but **assigning those sets is the skill's own job, done at tier 1** as part of the Step 4 permissions work (`permissions.md`), not a stop/ask-user prerequisite. See "assignment and the perm-set clone are tier 1" below for the mechanics.
48
+ > **Running-user access is not a separate gate.** The person running this skill must be a **System Administrator** (stated in the scope line above) plus hold the builder permission sets the config work needs — but **assigning those sets is the skill's own job, done at tier 1** as part of the Step 4 permissions work (`permissions.md`), not a stop/redirect prerequisite. See "assignment and the perm-set clone are tier 1" below for the mechanics.
49
49
  >
50
50
  > **Message-consumption billing is out of scope.** Flex Credits / Conversations billing is a *runtime commercial* concern, not a setup gate — SRA configures fine without it and you only feel it at message volume. Confirm SKUs with the account team; the skill does not verify or stop on it.
51
51
 
@@ -105,7 +105,7 @@ SRA is gated behind three conditions. If any is false, most agent steps 501/403.
105
105
 
106
106
  ## Step 2a — Verify the EDU foundation (head-start check, not a blind delegation)
107
107
 
108
- SRA is built **on top of** the Education Cloud R&A foundation. Do **not** assume base Education Cloud domain enablement has been run — **verify each piece**, and if one is missing, ask the user to complete that setup to fill *that gap*, then re-verify. Never re-implement its enablement here, and never proceed on an unverified foundation.
108
+ SRA is built **on top of** the Education Cloud R&A foundation. Do **not** assume `education-cloud-domain-configure` has been run — **verify each piece**, and if one is missing, send the user to that skill to fill *that gap*, then re-verify. Never re-implement its enablement here, and never proceed on an unverified foundation.
109
109
 
110
110
  Opening line to the user: *"If you've already set up your Education Cloud foundation for Recruitment & Admissions, that's a great head start — let me confirm the parts your admissions agent needs are actually in place."*
111
111
 
@@ -117,7 +117,7 @@ Opening line to the user: *"If you've already set up your Education Cloud founda
117
117
  | F-iv | **Data Cloud available** | Learning Program grounding (P5) | `SELECT Id FROM DataStream LIMIT 1` at **T1** (routable over `dispatch_readonly`) — a `200` confirms Data Cloud is provisioned, even if the only rows are internal/system streams (Education-specific streams are F-iv.a's concern, not this check's) → fall back to `sf` (T2) → tier-3 UI | T1 verify (dispatch_readonly /query) (comes with Home Org) |
118
118
  | F-iv.a | **Standard DMOs pre-provisioned** (Learning Program, Academic Term, PTAT, Application Timeline) | Grounding retriever indexes them | These come pre-provisioned with Education Cloud (F-i) + Data Cloud (F-iv) — nothing to install. Verify directly via the DMO's own Connect REST resource (not a SOQL-queryable sObject, and not `DataStream`): `GET /services/data/vXX/ssot/data-model-objects/ssot__<Object>__dlm` (routable over `dispatch_readonly`), using the DMO's own name — `LearningProgram`, `AcademicTerm`, `ApplicationTimeline`, and **`ProgramTermApplicationTimeline`** (**WARNING:** spelled out in full — not F-iii's abbreviated `ProgramTermApplnTimeline` sObject name, which 404s here) → `200` = present → fall back to `sf` (T2) → tier-3 UI (Data Cloud → Data Model). A `404` here (not a `DataStream` search or a guessed sObject name erroring) is the only valid absence signal | T1 verify (dispatch_readonly GET /ssot/data-model-objects) → T2 sf |
119
119
 
120
- > **WARNING: F-iii's pass condition is `EntityDefinition` presence alone — do not additionally require a live `describe`/query-as-data success on these objects.** The running user's ability to actually query or describe them as data depends on the builder persona's EDU permission sets (*Education Cloud Full Access*, etc.), which this skill itself assigns later at step 4a — not something F-iii should presuppose. A `describe`/query attempt against one of these objects failing with an access- or "not supported"-shaped error **before** step 4a runs is expected, not a sign the domain schema is missing (see SKILL.md Gotchas: EDU objects show 0 fields until *Education Cloud Full Access* is assigned). Only treat the object as genuinely missing — and only then ask the user to complete Education Cloud foundation setup — if it's absent from `EntityDefinition` itself.
120
+ > **WARNING: F-iii's pass condition is `EntityDefinition` presence alone — do not additionally require a live `describe`/query-as-data success on these objects.** The running user's ability to actually query or describe them as data depends on the builder persona's EDU permission sets (*Education Cloud Full Access*, etc.), which this skill itself assigns later at step 4a — not something F-iii should presuppose. A `describe`/query attempt against one of these objects failing with an access- or "not supported"-shaped error **before** step 4a runs is expected, not a sign the domain schema is missing (see SKILL.md Gotchas: EDU objects show 0 fields until *Education Cloud Full Access* is assigned). Only treat the object as genuinely missing — and only then route to `education-cloud-domain-configure` — if it's absent from `EntityDefinition` itself.
121
121
 
122
122
  > **WARNING: F-iv.a's pass condition is DMO presence alone — do not also check for the `DataStream`/DLO ingestion pipeline and report its absence as a gap.** The CRM connector, data streams, and DLO→DMO mapping that actually populate these DMOs are built by *this skill* at setup time (see `grounding.md`'s Mechanism 2 data-spine section) — they are work this skill owns, not a foundation prerequisite to verify beforehand. Finding zero `LearningProgram`/`AcademicTerm`/etc. data streams during preflight is the expected starting state, not something to flag as a readiness gap — same category as F-iii's "0 records is fine."
123
123
 
@@ -132,10 +132,10 @@ SELECT Name FROM Profile WHERE Name IN ('Customer Community Login User','Custome
132
132
  ```
133
133
  If none of these are present, the AEA path's portal group (`permissions.md` Step 6b) likely doesn't exist yet — flag that to the customer rather than assuming Step 6b's target is already there.
134
134
 
135
- Match each missing piece to how it actually gets fixed — don't treat every gap as one blanket foundation-setup ask, since Data Cloud isn't part of that foundation setup:
135
+ Route each missing piece to where it can actually be fixed — a blanket "go run `education-cloud-domain-configure`" is wrong, because that skill does not configure Data Cloud:
136
136
 
137
- - **F-i, F-ii, F-iii** (EDU enablement, Person Accounts, R&A domain schema) → *"The agent needs <piece>, which isn't set up yet — let's get your Education Cloud foundation set up first, then I'll re-verify and continue."* Ask the user to complete base Education Cloud domain enablement (which drives `enableEducationCloud`, Person Accounts, and R&A-domain enablement, bringing the object schema).
138
- - **F-iv** (Data Cloud) → **do not** fold this into the Education Cloud foundation ask above — Data Cloud is a **Home-Org entitlement** (P5): if it's absent, treat it like the other Salesforce grants (P3/P4) — report the gap and stop; it is not something this skill can flip. The grounding *setup* built on top of Data Cloud is done later **inside this skill** (`grounding.md`), not here.
137
+ - **F-i, F-ii, F-iii** (EDU enablement, Person Accounts, R&A domain schema) → *"The agent needs <piece>, which isn't set up yet — let's get your Education Cloud foundation set up first, then I'll re-verify and continue."* Route this to `education-cloud-domain-configure` (that skill covers all three: it drives `enableEducationCloud`, Person Accounts, and R&A-domain enablement, which brings the object schema).
138
+ - **F-iv** (Data Cloud) → **do not** redirect to `education-cloud-domain-configure` — it doesn't touch Data Cloud. Data Cloud is a **Home-Org entitlement** (P5): if it's absent, treat it like the other Salesforce grants (P3/P4) — report the gap and stop; it is not something this skill or that one can flip. The grounding *setup* built on top of Data Cloud is done later **inside this skill** (`grounding.md`), not here.
139
139
 
140
140
  ## Org requirement — provisioned + entitled, not a bare org
141
141
 
@@ -0,0 +1,83 @@
1
+ ---
2
+ name: experience-content-media-image-generate
3
+ description: "Generates high-fidelity visual assets, logos, and UI mockups using the media-management MCP server. Trigger this skill whenever the user asks to generate an image, create a logo, produce a hero banner, design a UI icon, or build a visual asset. It is explicitly designed to handle technical specifications including file formats (PNG, JPEG, WEBP), specific dimensions (e.g. 1024x1024), and transparency requirements. Use this skill when the user needs to integrate generated imagery into application code or web pages. It ensures consistent output quality and provides a standardized SVG fallback if the generation tool is unavailable."
4
+ metadata:
5
+ version: "1.0"
6
+ domains: ["Experience"]
7
+ cliTools:
8
+ - tool: ["jq"]
9
+ semver: ">=1.6.0"
10
+ - tool: ["sf"]
11
+ semver: ">=2.0.0"
12
+ mcpTools:
13
+ media-management:
14
+ tools: ["create_image"]
15
+ semver: ">=1.0.0"
16
+ ---
17
+
18
+ # Generating Images
19
+
20
+ ## Goal
21
+
22
+ To programmatically generate, download, and preview visual assets requested by the user, ensuring specific format and quality standards are met while providing a robust fallback mechanism.
23
+
24
+ ## Workflow
25
+
26
+ 1. Check if the `media-management` MCP server is configured and its `create_image` tool is available.
27
+ 2. If available, use `create_image` to generate the image.
28
+ 3. If not available, use the placeholder fallback below.
29
+
30
+ ## MCP: media-management
31
+
32
+ **Tool:** `create_image`
33
+
34
+ Check your available tools. If `create_image` is present, use it as the primary image generation method — pass the natural language prompt and applicable parameters from the table below. (`media-management` here refers to the MCP server name, not this skill.)
35
+
36
+ If `create_image` is not in your tool list, the `media-management` MCP is not configured — use the placeholder fallback below.
37
+
38
+ ## Image Generation Parameters
39
+
40
+ Use these defaults unless the user specifies otherwise:
41
+
42
+ | Parameter | Default | Options |
43
+ |---|---|---|
44
+ | `model` | `Standard` | `Standard`, `Premium` |
45
+ | `size` | `auto` | `auto`, `1024x1024`, `1536x1024`, `1024x1536` (pick closest to user-requested size) |
46
+ | `quality` | `medium` | `low`, `medium`, `high` |
47
+ | `outputCompression` | `75` | `0–100` (webp/jpeg only) |
48
+ | `outputFormat` | `webp` | `webp`, `jpeg`, `png` |
49
+ | `background` | `auto` | `auto`, `transparent`, `opaque` |
50
+
51
+ **Format rule:** If `outputFormat` is `png`, set `outputCompression` to `100`.
52
+
53
+ ## After Successful Generation
54
+
55
+ Run `download-image.sh` (located in this skill's `scripts/` directory) to download and preview the image:
56
+
57
+ ```bash
58
+ bash scripts/download-image.sh \
59
+ --url "<image_url_from_response>" \
60
+ --id "<responseId>" \
61
+ --format "<outputFormat>" \
62
+ --preview
63
+ ```
64
+
65
+ The script handles credential retrieval, download, and VS Code preview. Pass `--output-dir <dir>` to override the default `generatedimages/` directory.
66
+
67
+ **Never resize or post-process the generated image with external tools.** To control display dimensions, use CSS properties (e.g. `width`, `height`, `object-fit`) at the point of use.
68
+
69
+ ## Fallback: Use placeholder URL
70
+
71
+ If image generation fails or is not enabled, return the following URL as the image source — do not download it, do not save it locally:
72
+
73
+ ```yaml
74
+ https://cdn.scs.static.lightning.force.com/content/assets/d5222d4a11e6c2b735152d7eea824ce4/placeholder.svg
75
+ ```
76
+
77
+ Use this URL directly wherever the image is referenced in code (e.g. as a `src` attribute or CSS `url()`).
78
+
79
+ ## Placeholder Policy
80
+
81
+ There is only one placeholder URL. Do not download it, modify it, or generate alternative placeholders using Python, ImageMagick, or any other tool.
82
+
83
+ If the user requests a placeholder of a specific size or format, inform them that only this placeholder URL is available and direct them to use CSS properties (e.g. `width`, `height`, `object-fit`) to scale it at the point of use.
@@ -0,0 +1,84 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+
4
+ usage() {
5
+ cat <<EOF
6
+ Usage: $(basename "$0") --url <image_url> --id <response_id> --format <output_format> [--output-dir <dir>] [--preview]
7
+
8
+ Required:
9
+ --url URL of the generated image to download
10
+ --id Response ID used as the output filename
11
+ --format Output format (webp, jpeg, png)
12
+
13
+ Optional:
14
+ --output-dir Directory to save the image (default: generatedimages)
15
+ --preview Open the image in VS Code after download
16
+ EOF
17
+ exit 1
18
+ }
19
+
20
+ OUTPUT_DIR="generatedimages"
21
+ PREVIEW=false
22
+ URL=""
23
+ RESPONSE_ID=""
24
+ FORMAT=""
25
+
26
+ while [[ $# -gt 0 ]]; do
27
+ case "$1" in
28
+ --url) URL="$2"; shift 2 ;;
29
+ --id) RESPONSE_ID="$2"; shift 2 ;;
30
+ --format) FORMAT="$2"; shift 2 ;;
31
+ --output-dir) OUTPUT_DIR="$2"; shift 2 ;;
32
+ --preview) PREVIEW=true; shift ;;
33
+ *) usage ;;
34
+ esac
35
+ done
36
+
37
+ if [[ -z "$URL" || -z "$RESPONSE_ID" || -z "$FORMAT" ]]; then
38
+ usage
39
+ fi
40
+
41
+ case "$FORMAT" in
42
+ webp|jpeg|png) ;;
43
+ *) echo "Error: invalid format '$FORMAT'. Must be webp, jpeg, or png." >&2; exit 1 ;;
44
+ esac
45
+
46
+ if [[ "$RESPONSE_ID" == */* || "$RESPONSE_ID" == *..* ]]; then
47
+ echo "Error: invalid response ID '$RESPONSE_ID'. Must not contain '/' or '..'." >&2
48
+ exit 1
49
+ fi
50
+
51
+ if [[ ! "$URL" =~ ^https:// ]]; then
52
+ echo "Error: URL must start with https://" >&2
53
+ exit 1
54
+ fi
55
+
56
+ TARGET_ORG=$(sf config get target-org --json | jq -r '.result[0].value')
57
+
58
+ if [[ -z "$TARGET_ORG" || "$TARGET_ORG" == "null" ]]; then
59
+ echo "Error: no target-org configured. Run 'sf config set target-org <org>'" >&2
60
+ exit 1
61
+ fi
62
+
63
+ ACCESS_TOKEN=$(sf org display --target-org "$TARGET_ORG" --json | jq -r '.result.accessToken')
64
+
65
+ if [[ -z "$ACCESS_TOKEN" || "$ACCESS_TOKEN" == "null" ]]; then
66
+ echo "Error: failed to retrieve access token for org '$TARGET_ORG'" >&2
67
+ exit 1
68
+ fi
69
+
70
+ mkdir -p "$OUTPUT_DIR"
71
+
72
+ OUTPUT_FILE="${OUTPUT_DIR}/${RESPONSE_ID}.${FORMAT}"
73
+
74
+ if ! curl -fsS -H "Authorization: Bearer $ACCESS_TOKEN" -o "$OUTPUT_FILE" -- "$URL"; then
75
+ rm -f "$OUTPUT_FILE"
76
+ echo "Error: failed to download image from $URL" >&2
77
+ exit 1
78
+ fi
79
+
80
+ echo "$OUTPUT_FILE"
81
+
82
+ if [[ "$PREVIEW" == true ]]; then
83
+ code "$OUTPUT_FILE"
84
+ fi