Now liveThe Skillselion MCP - thousands of ranked skills, loaded into your agent mid-task. No install.Get it →
forcedotcom avatar

Analyzing Omnistudio Dependencies

  • 1.9k installs
  • 763 repo stars
  • Updated July 24, 2026
  • forcedotcom/sf-skills

analyzing-omnistudio-dependencies is an agent skill that Cross-cutting OmniStudio analysis skill for namespace detection, dependency visualization, and impact analysis across Om.

About

analyzing omnistudio dependencies OmniStudio Cross Component Analysis Expert OmniStudio analyst specializing in namespace detection dependency mapping and impact analysis across the full OmniStudio component suite Performs org wide inventory of OmniScripts FlexCards Integration Procedures and Data Mappers with automated dependency graph construction and Mermaid visualization In scope Namespace detection Core vlocity_cmt vlocity_ins org wide component inventory dependency graph construction impact analysis Mermaid diagram generation Out of scope Authoring or modifying OmniScripts use building omnistudio omniscript building FlexCards use building omnistudio flexcard creating Integration Procedures use building omnistudio integration procedure configuring Data Mappers use building omnistudio datamapper Input Default if not provided Target org alias Ask the user Analysis scope Full org all OmniStudio component types Specific component to impact analyze None produce full inventory first Output format preference All three Mermaid diagram JSON summary human readable report Each analysis run produces one or more of

  • name: analyzing-omnistudio-dependencies
  • description: "Cross-cutting OmniStudio analysis skill for namespace detection, dependency visualization, and impact anal
  • Expert OmniStudio analyst specializing in namespace detection, dependency mapping, and impact analysis across the full O
  • Follow analyzing-omnistudio-dependencies SKILL.md steps and documented constraints.
  • Follow analyzing-omnistudio-dependencies SKILL.md steps and documented constraints.

Analyzing Omnistudio Dependencies by the numbers

  • 1,924 all-time installs (skills.sh)
  • +6 installs in the week ending Jul 28, 2026 (Skillselion tracking)
  • Ranked #636 of 16,659 AI & Agent Building skills by installs in the Skillselion catalog
  • Security screen: LOW risk (skills.sh audit)
  • Data as of Jul 28, 2026 (Skillselion catalog sync)
At a glance

analyzing-omnistudio-dependencies capabilities & compatibility

Capabilities
name: analyzing omnistudio dependencies · description: "cross cutting omnistudio analysis · expert omnistudio analyst specializing in namesp · follow analyzing omnistudio dependencies skill.m
Use cases
orchestration
From the docs

What analyzing-omnistudio-dependencies says it does

name: analyzing-omnistudio-dependencies
SKILL.md
description: "Cross-cutting OmniStudio analysis skill for namespace detection, dependency visualization, and impact analysis across OmniScripts, FlexCards, Integration Procedures, and Data Mappers. TR
SKILL.md
Expert OmniStudio analyst specializing in namespace detection, dependency mapping, and impact analysis across the full OmniStudio component suite. Performs org-wide inventory of OmniScripts, FlexCards
SKILL.md
npx skills add https://github.com/forcedotcom/sf-skills --skill analyzing-omnistudio-dependencies

Add your badge

Show developers this skill is listed on Skillselion. Paste this into your README.

Listed on Skillselion
Installs1.9k
repo stars763
Security audit3 / 3 scanners passed
Last updatedJuly 24, 2026
Repositoryforcedotcom/sf-skills

When should an agent use analyzing-omnistudio-dependencies and what problem does it solve?

Cross-cutting OmniStudio analysis skill for namespace detection, dependency visualization, and impact analysis across OmniScripts, FlexCards, Integration Procedures, and Data Mappers. TRIGGER when: us

Who is it for?

Developers invoking analyzing-omnistudio-dependencies as documented in the skill source.

Skip if: Skip when requirements fall outside analyzing-omnistudio-dependencies documented scope.

When should I use this skill?

Cross-cutting OmniStudio analysis skill for namespace detection, dependency visualization, and impact analysis across OmniScripts, FlexCards, Integration Procedures, and Data Mappers. TRIGGER when: us

What you get

Outputs aligned with the analyzing-omnistudio-dependencies SKILL.md workflow and stated deliverables.

  • Component dependency graph
  • JSON field reference map

Files

SKILL.mdMarkdownGitHub ↗

analyzing-omnistudio-dependencies: OmniStudio Cross-Component Analysis

Expert OmniStudio analyst specializing in namespace detection, dependency mapping, and impact analysis across the full OmniStudio component suite. Performs org-wide inventory of OmniScripts, FlexCards, Integration Procedures, and Data Mappers with automated dependency graph construction and Mermaid visualization.

---

Scope

  • In scope: Namespace detection (Core / vlocity_cmt / vlocity_ins), org-wide component inventory, dependency graph construction, impact analysis, Mermaid diagram generation
  • Out of scope: Authoring or modifying OmniScripts (use building-omnistudio-omniscript), building FlexCards (use building-omnistudio-flexcard), creating Integration Procedures (use building-omnistudio-integration-procedure), configuring Data Mappers (use building-omnistudio-datamapper)

---

Required Inputs

Ask for or infer before starting:

InputDefault if not provided
Target org aliasAsk the user
Analysis scopeFull org (all OmniStudio component types)
Specific component to impact-analyzeNone (produce full inventory first)
Output format preferenceAll three: Mermaid diagram + JSON summary + human-readable report

---

Output Expectations

Each analysis run produces one or more of:

1. Namespace detection result — which namespace is active (Core / vlocity_cmt / vlocity_ins / not installed) 2. Component inventory — counts of OmniScripts, Integration Procedures, FlexCards, Data Mappers (active vs draft) 3. Dependency graph — directed edges between all OmniStudio components with edge type labels 4. Mermaid diagram — copy-pasteable Mermaid graph LR block for documentation 5. JSON summary — machine-readable namespace + components + dependencies + impact analysis 6. Human-readable report — plain-text summary with component counts, edge count, circular references, and most-depended components 7. Circular reference warnings — cycle path and risk statement for each detected cycle

---

Core Responsibilities

1. Namespace Detection: Identify whether an org uses Core (Industries), vlocity_cmt (Communications, Media & Energy), or vlocity_ins (Insurance & Health) namespace 2. Dependency Analysis: Build directed graphs of cross-component dependencies using BFS traversal with circular reference detection 3. Impact Analysis: Determine which components are affected when a given OmniScript, IP, FlexCard, or Data Mapper changes 4. Mermaid Visualization: Generate dependency diagrams in Mermaid syntax for documentation and review 5. 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:

>

analyzing-omnistudio-dependenciesbuilding-omnistudio-datamapperbuilding-omnistudio-integration-procedurebuilding-omnistudio-omniscriptbuilding-omnistudio-flexcard

>

This skill runs first to establish namespace context and dependency maps that downstream skills consume.

---

Key Insights

InsightDetail
Three namespaces coexistCore (OmniProcess), vlocity_cmt (vlocity_cmt__OmniScript__c), vlocity_ins (vlocity_ins__OmniScript__c)
Dependencies are stored in JSONPropertySetConfig (elements), Definition (FlexCards), InputObjectName/OutputObjectName (Data Mappers)
Circular references are possibleOmniScript A → IP B → OmniScript A via embedded call
FlexCard data sources are typeddataSource.type === 'IntegrationProcedures' (plural) in DataSourceConfig JSON
Active vs Draft mattersOnly 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:

1. Core (Industries namespace):

   SELECT COUNT() FROM OmniProcess

If this succeeds, the org uses the Core namespace (API 234.0+ / Spring '22+).

2. vlocity_cmt (Communications, Media & Energy):

   SELECT COUNT() FROM vlocity_cmt__OmniScript__c

3. vlocity_ins (Insurance & Health):

   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 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 — paginate with LIMIT/OFFSET for large orgs):

SELECT Id, Type, SubType, Language, IsActive, VersionNumber,
       PropertySetConfig, LastModifiedDate
FROM OmniProcess
WHERE IsIntegrationProcedure = false
ORDER BY Type, SubType, Language, VersionNumber DESC
LIMIT 200

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
LIMIT 200

FlexCards (Core example):

SELECT Id, Name, IsActive, DataSourceConfig, PropertySetConfig,
       AuthorName, LastModifiedDate
FROM OmniUiCard
ORDER BY Name
LIMIT 200
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
LIMIT 200

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 TypeJSON Path in PropertySetConfigDependency Target
DataRaptor Transform Actionbundle, bundleNameData Mapper (by name)
DataRaptor Turbo Actionbundle, bundleNameData Mapper (by name)
Remote ActionremoteClass, remoteMethodApex Class.Method
Integration Procedure ActionintegrationProcedureKeyIP (Type_SubType)
OmniScript ActionomniScriptKey or Type/SubTypeOmniScript (Type_SubType)
HTTP ActionhttpUrl, httpMethodExternal endpoint (URL)
DocuSign Envelope ActiondocuSignTemplateIdDocuSign template
Apex Remote ActionremoteClassApex 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 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["createOrder<br/>English v3"]
        OS2["updateAccount<br/>English v1"]
    end
    subgraph Integration Procedures
        IP1["fetchAccountData<br/>English v2"]
        IP2["submitOrder<br/>English 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 TypeFillStroke
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

For the complete object name, field name, and metadata type mapping across all three namespaces (Core, vlocity_cmt, vlocity_ins), read:

[references/namespace-guide.md](references/namespace-guide.md)

Key discriminators to keep in mind:

  • Core uses OmniProcess / OmniUiCard / OmniDataTransform
  • vlocity_cmt uses vlocity_cmt__OmniScript__c / vlocity_cmt__VlocityUITemplate__c / vlocity_cmt__DRBundle__c
  • vlocity_ins uses vlocity_ins__OmniScript__c / vlocity_ins__VlocityUITemplate__c / vlocity_ins__DRBundle__c
  • The IsIntegrationProcedure boolean and DataSourceConfig (not Definition) field names are Core-only

---

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

SkillRelationshipHow This Skill Helps
building-omnistudio-datamapperProvides namespace and object dependency dataData Mapper authoring uses detected namespace for correct API names
building-omnistudio-integration-procedureProvides namespace and IP dependency mapIP authoring uses dependency graph to avoid circular references
building-omnistudio-omniscriptProvides namespace and element dependency dataOmniScript authoring uses namespace-correct field names
building-omnistudio-flexcardProvides namespace and data source dependency mapFlexCard authoring uses detected IP references for validation
generating-mermaid-diagramsConsumes dependency graph for visualizationThis skill generates Mermaid output compatible with generating-mermaid-diagrams styling
generating-custom-object / generating-custom-fieldProvides sObject metadata for Data Mapper analysisObject field validation during dependency extraction
deploying-metadataDeployment uses namespace-correct metadata typesThis skill provides the correct metadata type names per namespace

---

Gotchas

ScenarioHandling
Mixed namespace org (migration in progress)Probe all three namespaces; report if multiple return results. Components may exist under both old and migrated namespaces.
Inactive components with dependenciesInclude in dependency graph but mark as inactive. Warn if active component depends on inactive one.
Large orgs (1000+ components)Use SOQL pagination (LIMIT/OFFSET or queryMore). Process in batches of 200.
PropertySetConfig exceeds SOQL field lengthUse Tooling API or REST API to fetch full JSON body for elements with truncated config.
Circular dependency detectedLog the cycle path (A → B → C → A), mark all participating edges, continue traversal for remaining branches.
Components referencing deleted itemsRecord as "broken reference" in output. Flag for cleanup.
Version conflicts (multiple active versions)Only the highest active version number participates in runtime. Warn if lower versions have unique dependencies.

---

Notes

  • Dependencies: Requires sf CLI with org authentication. Optional: generating-mermaid-diagrams for styled visualization.
  • Namespace must be detected first: All downstream queries depend on knowing the correct object and field API names.
  • PropertySetConfig is the key: Nearly all dependency information lives in this JSON field on OmniProcessElement records.
  • DataSourceConfig for FlexCards: Data sources are in DataSourceConfig, NOT a Definition field (which does not exist on OmniUiCard). Card layout/states are in PropertySetConfig.
  • Data Mapper items contain object references: InputObjectName and OutputObjectName on OmniDataTransformItem records reveal which sObjects a Data Mapper reads from and writes to. The foreign key to the parent is OmniDataTransformationId (full "Transformation").
  • IsIntegrationProcedure is the discriminator: OmniProcess uses a boolean IsIntegrationProcedure field, not a TypeCategory field (which does not exist). The OmniProcessType picklist is computed from this boolean and is useful for filtering reads but cannot be set directly on create.
  • sf data create record limitations: The --values flag cannot handle JSON strings in textarea fields (e.g., PropertySetConfig). Use sf api request rest --method POST --body @file.json instead for records with JSON configuration.
  • Related skills: building-omnistudio-datamapper, building-omnistudio-integration-procedure, building-omnistudio-omniscript, building-omnistudio-flexcard — install these to enable the full OmniStudio authoring suite

---

Reference File Index

FileWhen to read
references/namespace-guide.mdPhase 1 — complete object/field mapping across all three namespaces (Core, vlocity_cmt, vlocity_ins), metadata type names for deployment, mixed-namespace migration scenarios
references/dependency-patterns.mdPhase 3 — complete dependency extraction rules per element type, FlexCard data source parsing, Data Mapper item parsing, circular reference detection algorithm, impact analysis patterns

Related skills

Forks & variants (1)

Analyzing Omnistudio Dependencies has 1 known copy in the catalog totaling 510 installs. They canonicalize to this original listing.

FAQ

What is analyzing-omnistudio-dependencies?

Cross-cutting OmniStudio analysis skill for namespace detection, dependency visualization, and impact analysis across OmniScripts, FlexCards, Integration Procedures, and Data Mappe

When should I use analyzing-omnistudio-dependencies?

Cross-cutting OmniStudio analysis skill for namespace detection, dependency visualization, and impact analysis across OmniScripts, FlexCards, Integration Procedures, and Data Mappe

Is analyzing-omnistudio-dependencies safe to install?

Review the Security Audits panel on this page before production use.

This week in AI coding

Five minutes, every Monday - the tools, releases and tactics for developers.

unsubscribe anytime.