Install
$ agentstack add skill-jaganpro-sf-skills-sf-industry-commoncore-omnistudio-analyze ✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ✓ Network access No
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ✓ Environment & secrets No
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
Verified badge
Passed review? Show it. Paste this badge into your README, it links to the public security report.
Reliability & compatibility
Declared compatibility
Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.
We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.
How agent discovery & health will work →About
sf-industry-commoncore-omnistudio-analyze: OmniStudio Cross-Component Analysis
Expert OmniStudio analyst specializing in namespace detection, dependency mapping, and impact analysis across the full OmniStudio component suite. Perform org-wide inventory of OmniScripts, FlexCards, Integration Procedures, and Data Mappers with automated dependency graph construction and Mermaid visualization.
Core Responsibilities
- Namespace Detection: Identify whether an org uses Core (Industries), vlocitycmt (Communications, Media & Energy), or vlocityins (Insurance & Health) namespace
- Dependency Analysis: Build directed graphs of cross-component dependencies using BFS traversal with circular reference detection
- Impact Analysis: Determine which components are affected when a given OmniScript, IP, FlexCard, or Data Mapper changes
- Mermaid Visualization: Generate dependency diagrams in Mermaid syntax for documentation and review
- Org-Wide Inventory: Catalog all OmniStudio components by type, status, language, and version
> CRITICAL: Orchestration Order > > When multiple OmniStudio skills are involved, follow this dependency chain: > > sf-industry-commoncore-omnistudio-analyze → sf-industry-commoncore-datamapper → sf-industry-commoncore-integration-procedure → sf-industry-commoncore-omniscript → sf-industry-commoncore-flexcard > > This skill runs first to establish namespace context and dependency maps that downstream skills consume.
Key Insights
| Insight | Detail | |---------|--------| | Three namespaces coexist | Core (OmniProcess), vlocitycmt (vlocitycmt__OmniScript__c), vlocityins (vlocityins__OmniScript__c) | | Dependencies are stored in JSON | PropertySetConfig (elements), Definition (FlexCards), InputObjectName/OutputObjectName (Data Mappers) | | Circular references are possible | OmniScript A → IP B → OmniScript A via embedded call | | FlexCard data sources are typed | dataSource.type === 'IntegrationProcedures' (plural) in DataSourceConfig JSON | | Active vs Draft matters | Only active components participate in runtime dependency chains |
Workflow (4-Phase Pattern)
Phase 1: Namespace Detection
Purpose: Determine which OmniStudio namespace the org uses before querying any component metadata.
Detection Algorithm — Probe objects in order until a successful COUNT() returns:
- Core (Industries namespace):
``soql SELECT COUNT() FROM OmniProcess `` If this succeeds, the org uses the Core namespace (API 234.0+ / Spring '22+).
- vlocity_cmt (Communications, Media & Energy):
``soql SELECT COUNT() FROM vlocity_cmt__OmniScript__c ``
- vlocity_ins (Insurance & Health):
``soql SELECT COUNT() FROM vlocity_ins__OmniScript__c ``
If none succeed, OmniStudio is not installed in the org.
CLI Commands for namespace detection:
# Core namespace probe
sf data query --query "SELECT COUNT() FROM OmniProcess" --target-org myorg --json 2>/dev/null
# vlocity_cmt namespace probe
sf data query --query "SELECT COUNT() FROM vlocity_cmt__OmniScript__c" --target-org myorg --json 2>/dev/null
# vlocity_ins namespace probe
sf data query --query "SELECT COUNT() FROM vlocity_ins__OmniScript__c" --target-org myorg --json 2>/dev/null
Evaluate results: A successful query (exit code 0 with totalSize in JSON) confirms the namespace. A query failure (INVALID_TYPE or sObject type not found) means that namespace is not present.
See: [references/namespace-guide.md](references/namespace-guide.md) for complete object/field mapping across all three namespaces.
Phase 2: Component Discovery
Purpose: Build an inventory of all OmniStudio components in the org.
Using the detected namespace, query each component type:
OmniScripts (Core example):
SELECT Id, Type, SubType, Language, IsActive, VersionNumber,
PropertySetConfig, LastModifiedDate
FROM OmniProcess
WHERE IsIntegrationProcedure = false
ORDER BY Type, SubType, Language, VersionNumber DESC
Integration Procedures (Core example):
SELECT Id, Type, SubType, Language, IsActive, VersionNumber,
PropertySetConfig, LastModifiedDate
FROM OmniProcess
WHERE IsIntegrationProcedure = true
ORDER BY Type, SubType, Language, VersionNumber DESC
FlexCards (Core example):
SELECT Id, Name, IsActive, DataSourceConfig, PropertySetConfig,
AuthorName, LastModifiedDate
FROM OmniUiCard
ORDER BY Name
> IMPORTANT: The OmniUiCard object does NOT have a Definition field. Use DataSourceConfig for data source bindings and PropertySetConfig for card layout/states configuration.
Data Mappers (Core example):
SELECT Id, Name, IsActive, Type, LastModifiedDate
FROM OmniDataTransform
ORDER BY Name
Data Mapper Items (for object dependency extraction):
SELECT Id, OmniDataTransformationId, InputObjectName, OutputObjectName,
InputObjectQuerySequence
FROM OmniDataTransformItem
WHERE OmniDataTransformationId IN ({datamapper_ids})
> IMPORTANT: The foreign key field is OmniDataTransformationId (full word "Transformation"), NOT OmniDataTransformId.
CLI Command pattern:
sf data query --query "SELECT Id, Type, SubType, Language, IsActive FROM OmniProcess WHERE IsIntegrationProcedure = false" \
--target-org myorg --json
Phase 3: Dependency Analysis
Purpose: Parse component metadata to build a directed dependency graph.
Algorithm: BFS with Circular Detection
1. Initialize empty graph G and visited set V
2. For each root component C:
a. Enqueue C into work queue Q
b. While Q is not empty:
i. Dequeue component X from Q
ii. If X is in V, record circular reference and skip
iii. Add X to V
iv. Parse X's metadata for dependency references
v. For each dependency D found:
- Add edge X → D to graph G
- If D is not in V, enqueue D into Q
3. Return graph G and any circular references detected
Element Type → Dependency Extraction
OmniScript and IP elements store references in the PropertySetConfig JSON field. Parse each element to extract dependencies:
| Element Type | JSON Path in PropertySetConfig | Dependency Target | |-------------|-------------------------------|-------------------| | DataRaptor Transform Action | bundle, bundleName | Data Mapper (by name) | | DataRaptor Turbo Action | bundle, bundleName | Data Mapper (by name) | | Remote Action | remoteClass, remoteMethod | Apex Class.Method | | Integration Procedure Action | integrationProcedureKey | IP (TypeSubType) | | OmniScript Action | omniScriptKey or Type/SubType | OmniScript (TypeSubType) | | HTTP Action | httpUrl, httpMethod | External endpoint (URL) | | DocuSign Envelope Action | docuSignTemplateId | DocuSign template | | Apex Remote Action | remoteClass | Apex Class |
Parsing PropertySetConfig:
For each OmniProcessElement:
1. Read PropertySetConfig (JSON string)
2. Parse JSON
3. Check element.Type against extraction table
4. Extract referenced component name/key
5. Resolve reference to an OmniProcess/OmniDataTransform record
6. Add edge: parent component → referenced component
FlexCard Data Source Parsing
FlexCards store their data source configuration in the DataSourceConfig JSON field (NOT Definition — that field does not exist on OmniUiCard):
Parse DataSourceConfig JSON:
1. Access dataSource object (singular, not array)
2. For each dataSource where type === 'IntegrationProcedures' (note: PLURAL):
- Extract dataSource.value.ipMethod (IP Type_SubType)
- Add edge: FlexCard → Integration Procedure
3. For each dataSource where type === 'ApexRemote':
- Extract dataSource.value.className
- Add edge: FlexCard → Apex Class
4. For childCard references, parse PropertySetConfig:
- Add edge: FlexCard → child FlexCard
> IMPORTANT: The data source type for IPs is IntegrationProcedures (plural with capital P), not IntegrationProcedure.
Data Mapper Object Dependencies
Data Mappers reference Salesforce objects via their items:
For each OmniDataTransformItem:
1. Read InputObjectName → source sObject
2. Read OutputObjectName → target sObject
3. Add edge: Data Mapper → sObject (read from InputObjectName)
4. Add edge: Data Mapper → sObject (write to OutputObjectName)
See: [references/dependency-patterns.md](references/dependency-patterns.md) for complete dependency extraction rules and examples.
Phase 4: Visualization & Reporting
Purpose: Generate human-readable output from the dependency graph.
Output Format 1: Mermaid Dependency Diagram
graph LR
subgraph OmniScripts
OS1["createOrderEnglish v3"]
OS2["updateAccountEnglish v1"]
end
subgraph Integration Procedures
IP1["fetchAccountDataEnglish v2"]
IP2["submitOrderEnglish v1"]
end
subgraph Data Mappers
DM1["AccountExtract"]
DM2["OrderTransform"]
end
subgraph FlexCards
FC1["AccountSummaryCard"]
end
OS1 -->|IP Action| IP2
OS1 -->|DR Action| DM2
OS2 -->|IP Action| IP1
IP1 -->|DR Action| DM1
FC1 -->|Data Source| IP1
style OS1 fill:#dbeafe,stroke:#1d4ed8,color:#1f2937
style OS2 fill:#dbeafe,stroke:#1d4ed8,color:#1f2937
style IP1 fill:#fef3c7,stroke:#b45309,color:#1f2937
style IP2 fill:#fef3c7,stroke:#b45309,color:#1f2937
style DM1 fill:#d1fae5,stroke:#047857,color:#1f2937
style DM2 fill:#d1fae5,stroke:#047857,color:#1f2937
style FC1 fill:#fce7f3,stroke:#be185d,color:#1f2937
Color scheme:
| Component Type | Fill | Stroke | |---------------|------|--------| | OmniScript | #dbeafe (blue-100) | #1d4ed8 (blue-700) | | Integration Procedure | #fef3c7 (amber-100) | #b45309 (amber-700) | | Data Mapper | #d1fae5 (green-100) | #047857 (green-700) | | FlexCard | #fce7f3 (pink-100) | #be185d (pink-700) | | Apex Class | #e9d5ff (purple-100) | #7c3aed (purple-700) | | External (HTTP) | #f1f5f9 (slate-100) | #475569 (slate-600) |
Output Format 2: JSON Summary
{
"namespace": "Core",
"components": {
"omniScripts": 12,
"integrationProcedures": 8,
"flexCards": 5,
"dataMappers": 15
},
"dependencies": [
{ "from": "OS:createOrder", "to": "IP:submitOrder", "type": "IPAction" },
{ "from": "IP:fetchAccountData", "to": "DM:AccountExtract", "type": "DataRaptorAction" }
],
"circularReferences": [],
"impactAnalysis": {
"DM:AccountExtract": {
"directDependents": ["IP:fetchAccountData"],
"transitiveDependents": ["OS:updateAccount", "FC:AccountSummaryCard"]
}
}
}
Output Format 3: Human-Readable Report
OmniStudio Dependency Report
=============================
Org Namespace: Core (Industries)
Scan Date: 2026-03-06
Component Inventory:
OmniScripts: 12 (8 active, 4 draft)
Integration Procedures: 8 (6 active, 2 draft)
FlexCards: 5 (5 active)
Data Mappers: 15 (12 active, 3 draft)
Dependency Summary:
Total edges: 23
Circular references: 0
Orphaned components: 2 (no inbound/outbound deps)
Impact Analysis (most-depended components):
1. DM:AccountExtract → 5 dependents
2. IP:fetchAccountData → 3 dependents
3. DM:OrderTransform → 2 dependents
Namespace Object/Field Mapping
Complete mapping of OmniStudio objects and fields across all three namespaces:
Primary Objects
| Concept | Core | vlocitycmt | vlocityins | |---------|------|-------------|-------------| | OmniScript / IP container | OmniProcess | vlocity_cmt__OmniScript__c | vlocity_ins__OmniScript__c | | OmniScript / IP elements | OmniProcessElement | vlocity_cmt__Element__c | vlocity_ins__Element__c | | FlexCard | OmniUiCard | vlocity_cmt__VlocityUITemplate__c | vlocity_ins__VlocityUITemplate__c | | Data Mapper | OmniDataTransform | vlocity_cmt__DRBundle__c | vlocity_ins__DRBundle__c | | Data Mapper Item | OmniDataTransformItem | vlocity_cmt__DRMapItem__c | vlocity_ins__DRMapItem__c |
Key Fields
| Concept | Core Field | vlocitycmt Field | vlocityins Field | |---------|-----------|-------------------|-------------------| | Script type | Type | vlocity_cmt__Type__c | vlocity_ins__Type__c | | Script subtype | SubType | vlocity_cmt__SubType__c | vlocity_ins__SubType__c | | Language | Language | vlocity_cmt__Language__c | vlocity_ins__Language__c | | Is active | IsActive | vlocity_cmt__IsActive__c | vlocity_ins__IsActive__c | | Version | VersionNumber | vlocity_cmt__Version__c | vlocity_ins__Version__c | | Element config | PropertySetConfig | vlocity_cmt__PropertySet__c | vlocity_ins__PropertySet__c | | Is Integration Procedure | IsIntegrationProcedure | vlocity_cmt__IsIntegrationProcedure__c | vlocity_ins__IsIntegrationProcedure__c | | FlexCard data sources | DataSourceConfig | vlocity_cmt__Definition__c | vlocity_ins__Definition__c | | FlexCard layout/states | PropertySetConfig | (same field) | (same field) | | DM input object | InputObjectName (on Item) | vlocity_cmt__InterfaceObject__c | vlocity_ins__InterfaceObject__c | | DM output object | OutputObjectName (on Item) | vlocity_cmt__TargetFieldObjectType__c | vlocity_ins__TargetFieldObjectType__c |
See: [references/namespace-guide.md](references/namespace-guide.md) for the complete reference including metadata type names for deployment.
CLI Commands Reference
Namespace Detection
# Probe all three namespaces (run sequentially, first success wins)
sf data query --query "SELECT COUNT() FROM OmniProcess" --target-org myorg --json 2>/dev/null && echo "CORE" || \
sf data query --query "SELECT COUNT() FROM vlocity_cmt__OmniScript__c" --target-org myorg --json 2>/dev/null && echo "VLOCITY_CMT" || \
sf data query --query "SELECT COUNT() FROM vlocity_ins__OmniScript__c" --target-org myorg --json 2>/dev/null && echo "VLOCITY_INS" || \
echo "NOT_INSTALLED"
Component Inventory (Core Namespace)
# Count OmniScripts
sf data query --query "SELECT COUNT() FROM OmniProcess WHERE IsIntegrationProcedure = false" \
--target-org myorg --json
# Count Integration Procedures
sf data query --query "SELECT COUNT() FROM OmniProcess WHERE IsIntegrationProcedure = true" \
--target-org myorg --json
# Count FlexCards
sf data query --query "SELECT COUNT() FROM OmniUiCard" --target-org myorg --json
# Count Data Mappers
sf data query --query "SELECT COUNT() FROM OmniDataTransform" --target-org myorg --json
Dependency Data Extraction (Core Namespace)
# Get OmniScript elements with their config
sf data query --query "SELECT Id, OmniProcessId, Name, Type, PropertySetConfig FROM OmniProcessElement WHERE OmniProcessId = '{process_id}'" \
--target-org myorg --json
# Get FlexCard data sources (for dependency parsing)
sf data query --query "SELECT Id, Name, DataSourceConfig FROM OmniUiCard WHERE IsActive = true" \
--target-org myorg --json
# Get Data Mapper items (for object dependencies)
sf data query --query "SELECT Id, OmniDataTransformationId, InputObjectName, OutputObjectName FROM OmniDataTransformItem" \
--target-org myorg --json
Cross-Skill Integration
| Skill | Relationship | How This Skill Helps | |-------|-------------|---------------------| | sf-industry-commoncore-datamapper | Provides namespace and object dependency data | Data Mapper authoring uses detected namespace for correct API names | | sf-industry-commoncore-integration-procedure | Provides namespace and IP dependency map | IP authoring uses dependency graph to avoid circular references | | sf-industry-commoncore-omniscript | Provides namespace and element dependency data | OmniScr
…
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: Jaganpro
- Source: Jaganpro/sf-skills
- License: MIT
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet, be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.