MCP Server Builder
anthropics/skills
Guides the design and implementation of Model Context Protocol servers in TypeScript or Python, from tool naming and error messages to evaluation.
OmniStudio OmniScript creation and validation with 120-point scoring.
$ npx skills add forcedotcom/sf-skills --skill omnistudio-omniscript-generate -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install forcedotcom/sf-skills omnistudio-omniscript-generate --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/forcedotcom/sf-skills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/omnistudio-omniscript-generate .claude/skills/omnistudio-omniscript-generate && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "omnistudio-omniscript-generate" agent skill from https://github.com/forcedotcom/sf-skills/tree/main/skills/omnistudio-omniscript-generate into .claude/skills/omnistudio-omniscript-generate/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "omnistudio-omniscript-generate", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/forcedotcom/sf-skills/tree/main/skills/omnistudio-omniscript-generateType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add forcedotcom/sf-skills --skill omnistudio-omniscript-generate -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install forcedotcom/sf-skills omnistudio-omniscript-generate --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/forcedotcom/sf-skills.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/omnistudio-omniscript-generate .agents/skills/omnistudio-omniscript-generate && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "omnistudio-omniscript-generate" agent skill from https://github.com/forcedotcom/sf-skills/tree/main/skills/omnistudio-omniscript-generate into .agents/skills/omnistudio-omniscript-generate/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "omnistudio-omniscript-generate", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add forcedotcom/sf-skills --skill omnistudio-omniscript-generate -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install forcedotcom/sf-skills omnistudio-omniscript-generate --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/forcedotcom/sf-skills.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/omnistudio-omniscript-generate .cursor/skills/omnistudio-omniscript-generate && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "omnistudio-omniscript-generate" agent skill from https://github.com/forcedotcom/sf-skills/tree/main/skills/omnistudio-omniscript-generate into .cursor/skills/omnistudio-omniscript-generate/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "omnistudio-omniscript-generate", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/forcedotcom/sf-skills.git --path skills/omnistudio-omniscript-generate--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add forcedotcom/sf-skills --skill omnistudio-omniscript-generate -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install forcedotcom/sf-skills omnistudio-omniscript-generate --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/forcedotcom/sf-skills.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/omnistudio-omniscript-generate .gemini/skills/omnistudio-omniscript-generate && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "omnistudio-omniscript-generate" agent skill from https://github.com/forcedotcom/sf-skills/tree/main/skills/omnistudio-omniscript-generate into .gemini/skills/omnistudio-omniscript-generate/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "omnistudio-omniscript-generate", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install forcedotcom/sf-skills omnistudio-omniscript-generateInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add forcedotcom/sf-skills --skill omnistudio-omniscript-generate -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/forcedotcom/sf-skills.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/omnistudio-omniscript-generate .github/skills/omnistudio-omniscript-generate && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "omnistudio-omniscript-generate" agent skill from https://github.com/forcedotcom/sf-skills/tree/main/skills/omnistudio-omniscript-generate into .github/skills/omnistudio-omniscript-generate/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "omnistudio-omniscript-generate", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add forcedotcom/sf-skills --skill omnistudio-omniscript-generate -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install forcedotcom/sf-skills omnistudio-omniscript-generate --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/forcedotcom/sf-skills.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/omnistudio-omniscript-generate .opencode/skills/omnistudio-omniscript-generate && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "omnistudio-omniscript-generate" agent skill from https://github.com/forcedotcom/sf-skills/tree/main/skills/omnistudio-omniscript-generate into .opencode/skills/omnistudio-omniscript-generate/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "omnistudio-omniscript-generate", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
omnistudio-omniscript-generateOmniStudio OmniScript creation and validation with 120-point scoring.
Omnistudio Omniscript Generate is an agent skill from forcedotcom/sf-skills. OmniStudio OmniScript creation and validation with 120-point scoring. Use when building guided digital experiences, multi-step forms, or interactive processes that orchestrate Integration Procedures and Data Mappers. TRIGGER when: user creates OmniScripts, designs step flows, configures element types, or reviews existing OmniScript configurations. DO NOT TRIGGER when: building FlexCards (use omnistudio-flexcard-generate), creating Integration Procedures directly (use omnistudio-integration-procedure-generate), or…
Its SKILL.md is about 5.6k tokens, which your agent loads only when the skill is triggered. The skill folder holds 11 other files, including scripts, reference files and assets (for example `assets/omni-process-element-step.json`, `assets/omni-process-element-text-block.json` and `assets/omni-process-omniscript.json`).
It sits in Agent Workflows. The repository describes itself as: Salesforce's curated collection of agent skills for building applications. Optimized for Agentforce Vibes, compatible with all AI tools. The licence is Apache-2.0.
5 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 4bbae5c. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Ships 3 files in scripts/ (Shell), which the agent can run.
Shell commands in SKILL.md call:
sfFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Omnistudio Omniscript Generate loads about 5.6k tokens when it runs, and up to ~18k if it reads all its reference files. Until then it costs about 153 tokens; SKILL.md has 2,167 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); the scripts in this folder are not scanned.
The full file from forcedotcom/sf-skills at commit 4bbae5c, republished under its Apache-2.0 licence (© forcedotcom). 2,167 words, ~5,575 tokens.
.claude/skills/omnistudio-omniscript-generate/SKILL.md (or your agent's skills folder). This skill also uses 8 other files; get the full folder from GitHub.Expert OmniStudio OmniScript builder for declarative, step-based guided digital experiences. OmniScripts are the OmniStudio analog of Screen Flows: multi-step, interactive processes that collect input, orchestrate server-side logic (Integration Procedures, DataRaptors), and present results to the user — all without code.
Scoring: 120 points across 6 categories. Thresholds: [PASS] 90+ (Deploy) | [REVIEW] 67-89 (Review) | [BLOCK] <67 (Block - fix required)
omnistudio-flexcard-generate), creating Integration Procedures directly (use omnistudio-integration-procedure-generate), mapping full dependency trees (use omnistudio-dependencies-analyze), deploying metadata to org (use platform-metadata-deploy)Gather these before building:
| Input | Description | Default |
|---|---|---|
| Type | Process category (e.g., ServiceRequest, Enrollment) | None — required |
| SubType | Specific variation (e.g., NewCase, UpdateAddress) | None — required |
| Language | Locale for the OmniScript | English |
| Purpose | Business process this OmniScript guides | None — required |
| Target org | Org alias for deployment | Current default org |
| Data sources | Objects/APIs to query or update | Identify from requirements |
omnistudio-dependencies-analyze → omnistudio-datamapper-generate → omnistudio-integration-procedure-generate → omnistudio-omniscript-generate → omnistudio-flexcard-generate (you are here: omnistudio-omniscript-generate)
OmniScripts consume Integration Procedures and DataRaptors. Build those FIRST. FlexCards may launch OmniScripts — build FlexCards AFTER. Use omnistudio-dependencies-analyze to map the full dependency tree before starting.
| Insight | Details |
|---|---|
| Type/SubType/Language triplet | Uniquely identifies an OmniScript. All three values are required and form the composite key. Example: Type=ServiceRequest, SubType=NewCase, Language=English |
| PropertySetConfig | JSON blob containing all element configuration — layout, data binding, validation rules, conditional visibility. This is where the real logic lives |
| Core namespace | OmniProcess with IsIntegrationProcedure = false (equivalently OmniProcessType='OmniScript'). Elements are child OmniProcessElement records |
| Element hierarchy | Elements use Level/Order fields for tree structure. Level 0 = Steps, Level 1+ = elements within steps. Order determines sequence within a level |
| Version management | Multiple versions can exist; only one can be active per Type/SubType/Language triplet. Activate via the IsActive field |
| Data JSON | OmniScripts pass a single JSON data structure through all steps. Elements read from and write to this shared JSON via merge field syntax |
Before building, evaluate alternatives: OmniScripts are best for complex, multi-step guided processes. For simple single-screen data entry, consider Screen Flows. For data display without interaction, consider FlexCards.
Ask the user to gather:
ServiceRequest, Enrollment, ClaimSubmission)NewCase, UpdateAddress, FileAppeal)English unless multi-language support is requiredThen: Check existing OmniScripts to avoid duplication, identify reusable Integration Procedures or DataRaptors, and map the dependency chain.
Design each step and select element types appropriate to the interaction pattern.
| Element Type | Purpose | Key Config |
|---|---|---|
| Step | Top-level container for a group of UI elements; each Step is a page in the wizard | chartLabel, knowledgeOptions, show (conditional visibility) |
| Conditional Block | Show/hide a group of elements based on conditions | conditionType, show expression |
| Loop Block | Iterate over a data list and render elements for each item | loopData (JSON path to array) |
| Edit Block | Inline editing container for tabular data | editFields, dataSource |
| Element Type | Purpose | Key Config |
|---|---|---|
| Text | Single-line text input | label, placeholder, pattern (regex validation) |
| Text Area | Multi-line text input | label, maxLength, rows |
| Number | Numeric input with optional formatting | label, min, max, step, format |
| Date | Date picker | label, dateFormat, minDate, maxDate |
| Date/Time | Date and time picker | label, dateFormat, timeFormat |
| Checkbox | Boolean toggle | label, defaultValue |
| Radio | Radio button group for single selection | label, options (static or data-driven) |
| Select | Dropdown selection | label, options, optionSource (static/data) |
| Multi-select | Multiple item selection | label, options, maxSelections |
| Type Ahead | Search/autocomplete input | label, dataSource, searchField, minCharacters |
| Signature | Signature capture pad | label, penColor, backgroundColor |
| File | File upload | label, maxFileSize, allowedExtensions |
| Currency | Currency input with locale formatting | label, currencyCode, min, max |
| Email input with format validation | label, placeholder | |
| Telephone | Phone number input with masking | label, mask, placeholder |
| URL | URL input with format validation | label, placeholder |
| Password | Masked text input | label, minLength |
| Range | Slider input | label, min, max, step |
| Time | Time picker | label, timeFormat |
| Element Type | Purpose | Key Config |
|---|---|---|
| Text Block | Static content display (HTML supported) | textContent, HTMLTemplateId |
| Headline | Section heading | text, level (h1-h6) |
| Aggregate | Calculated summary display | aggregateExpression, format |
| Disclosure | Expandable/collapsible content | label, defaultExpanded |
| Image | Image display | imageURL, altText |
| Chart | Data visualization | chartType, dataSource |
| Element Type | Purpose | Key Config |
|---|---|---|
| DataRaptor Extract Action | Pull data from Salesforce | bundle, inputMap, outputMap |
| DataRaptor Load Action | Push data to Salesforce | bundle, inputMap |
| Integration Procedure Action | Call server-side Integration Procedure | ipMethod (Type_SubType), inputMap, outputMap, remoteOptions |
| Remote Action | Call Apex @RemoteAction or REST | remoteClass, remoteMethod, inputMap |
| Navigate Action | Page navigation or redirection | targetType, targetId, URL |
| DocuSign Envelope Action | Trigger DocuSign envelope | templateId, recipientMap |
| Email Action | Send email | emailTemplateId, recipientMap |
| Element Type | Purpose | Key Config |
|---|---|---|
| Set Values | Variable assignment and data transformation | elementValueMap (key-value pairs) |
| Validation | Input validation rules with custom messages | validationFormula, errorMessage |
| Formula | Calculate values using formula expressions | expression, dataType |
| Submit Action | Final submission of collected data | postMessage, preTransformBundle, postTransformBundle |
Run scripts/check-duplicate-omniscript.sh <Type> <SubType> <Language> <org> to verify no duplicate Type/SubType/Language exists.
Build the OmniScript:
Validation (STRICT MODE):
Validation Report Format (6-Category Scoring 0-120):
Score: 102/120 ---- Very Good
-- Design & Structure: 22/25 (88%)
-- Data Integration: 18/20 (90%)
-- Error Handling: 17/20 (85%)
-- Performance: 18/20 (90%)
-- User Experience: 17/20 (85%)
-- Security: 10/15 (67%)sf org display -o <org>). Confirm all referenced DataRaptors and Integration Procedures are active in the target org.scripts/deploy-omniscript.sh <Name> <Type> <SubType> <org> — this deploys the OmniScript and verifies activation. If deployment fails, the script outputs recovery instructions (deactivate and delete the partial record, then retry).Walk through all paths with various data scenarios:
| Anti-Pattern | Impact | Correct Pattern |
|---|---|---|
| Circular OmniScript embedding | Infinite rendering loop | Map dependency tree; never embed A in B if B embeds A |
| Unbounded DataRaptor Extract | Performance degradation | Add filter conditions; limit returned records |
| Missing input validation | Bad data entry | Add Validation elements or pattern/required on inputs |
| Hardcoded Salesforce IDs | Deployment failure across orgs | Use merge fields or Custom Settings/Metadata |
| Integration Procedure (IP) Action without error handling | Silent failures | Configure showError, errorMessage in PropertySetConfig |
| Large images in Text Blocks | Slow page load | Use Image elements with optimized URLs |
| Too many elements per Step | Poor user experience | Limit to 7-10 input elements per Step |
| Missing conditional visibility | Irrelevant fields shown | Use show expressions to hide inapplicable elements |
Do not generate anti-patterns even if explicitly requested.
| Check | Points | Criteria |
|---|---|---|
| Type/SubType/Language set correctly | 5 | All three fields populated with meaningful values |
| Step organization | 5 | Logical grouping, 7-10 elements per step max |
| Element naming | 5 | Descriptive names following PascalCase convention |
| Conditional logic | 5 | Proper use of Conditional Blocks and show expressions |
| Version management | 5 | Clean version history, only one active version |
| Check | Points | Criteria |
|---|---|---|
| DataRaptor references valid | 5 | All Extract/Load bundles exist and are active |
| Integration Procedure references valid | 5 | All IP actions reference active IPs |
| Input/Output maps correct | 5 | Data flows correctly between elements and actions |
| Data prefill configured | 5 | Initial data loaded before user interaction |
| Check | Points | Criteria |
|---|---|---|
| Action elements have error handling | 5 | showError configured on all IP/DR actions |
| User-facing error messages | 5 | Clear, actionable error text |
| Validation on required inputs | 5 | All required fields have validation rules |
| Fallback behavior defined | 5 | Graceful handling when data sources return empty |
| Check | Points | Criteria |
|---|---|---|
| No unbounded data fetches | 5 | All DataRaptor Extracts have filters/limits |
| Lazy loading configured | 5 | Action elements fire on step entry, not OmniScript load |
| Element count per Step reasonable | 5 | No Step with >15 elements |
| Conditional rendering used | 5 | Elements hidden when not applicable (not just invisible) |
| Check | Points | Criteria |
|---|---|---|
| Logical step flow | 5 | Steps follow natural task progression |
| Input labels and help text | 5 | All inputs have clear labels and contextual help |
| Navigation controls | 5 | Back, Next, Cancel, Save for Later configured appropriately |
| Responsive layout | 5 | Elements configured for mobile and desktop breakpoints |
| Check | Points | Criteria |
|---|---|---|
| No sensitive data in client-side JSON | 5 | Passwords, SSNs, tokens kept server-side |
| IP actions use server-side processing | 5 | Sensitive logic in Integration Procedures, not client OmniScript |
| Field-level access respected | 5 | Data access matches user profile/permission set |
See scripts/cli-reference.sh for the full command reference. Common commands:
# List active OmniScripts
sf data query -q "SELECT Id,Name,Type,SubType,Language,IsActive,VersionNumber FROM OmniProcess WHERE IsActive=true AND OmniProcessType='OmniScript' LIMIT 50" -o <org>
# Query elements for a specific OmniScript
sf data query -q "SELECT Id,Name,ElementType,Level,Order FROM OmniProcessElement WHERE OmniProcessId='<id>' ORDER BY Level,Order LIMIT 200" -o <org>
# Check OmniScript versions
sf data query -q "SELECT Id,VersionNumber,IsActive,LastModifiedDate FROM OmniProcess WHERE Type='<Type>' AND SubType='<SubType>' AND OmniProcessType='OmniScript' ORDER BY VersionNumber DESC LIMIT 10" -o <org>| From Skill | To omnistudio-omniscript-generate | When |
|---|---|---|
| omnistudio-dependencies-analyze | -> omnistudio-omniscript-generate | "Analyze dependencies before building OmniScript" |
| omnistudio-datamapper-generate | -> omnistudio-omniscript-generate | "DataRaptor ready, build the OmniScript that uses it" |
| omnistudio-integration-procedure-generate | -> omnistudio-omniscript-generate | "IP ready, wire it into the OmniScript action" |
| From omnistudio-omniscript-generate | To Skill | When |
|---|---|---|
| omnistudio-omniscript-generate | -> omnistudio-flexcard-generate | "Build FlexCard that launches this OmniScript" |
| omnistudio-omniscript-generate | -> platform-metadata-deploy | "Deploy OmniScript to target org" |
| omnistudio-omniscript-generate | -> omnistudio-dependencies-analyze | "Map full dependency tree before deployment" |
| omnistudio-omniscript-generate | -> omnistudio-integration-procedure-generate | "Need a new IP for this OmniScript action" |
| omnistudio-omniscript-generate | -> omnistudio-datamapper-generate | "Need a DataRaptor for data prefill" |
| Issue | Resolution |
|---|---|
| Multi-language OmniScript | Create separate versions per Language with shared Type/SubType; use translation workbench for labels |
| Embedded OmniScript data passing | Map parent data JSON keys to child OmniScript input via prefillJSON; test data round-trip |
| Large Loop Block datasets | Paginate or limit DataRaptor results; consider server-side filtering in Integration Procedure (IP) |
| OmniScript in FlexCard flyout | Ensure FlexCard passes required context data; test flyout sizing |
| Community/Experience Cloud deployment | Verify OmniScript component is available in Experience Builder; check guest user permissions |
| Save & Resume (Save for Later) | Configure saveNameTemplate, saveExpireInDays; test resume with partial data |
| Versioning conflicts | Deactivate old version before activating new; never have two active versions for same Type/SubType/Language triplet |
| Custom LWC in OmniScript | Register LWC as OmniScript-compatible; follow omniscript-lwc namespace conventions |
| Namespaced orgs | If deploying into a managed OmniStudio package org, prefix bundle names and API names with the appropriate namespace (e.g., omnistudio__) |
OmniProcessType cannot be set on create | OmniProcessType is computed from IsIntegrationProcedure (false for OmniScripts); do not set it directly |
For common runtime troubleshooting (element not rendering, data not prefilling, IP action failing silently), see references/best-practices.md Section 8.
API: 66.0 | Mode: Strict (warnings block) | Scoring: Block deployment if score < 67
Required upstream skills: omnistudio-datamapper-generate, omnistudio-integration-procedure-generate
Optional skills: platform-metadata-deploy, omnistudio-flexcard-generate, omnistudio-dependencies-analyze
Creating OmniScripts programmatically: Use REST API (sf api request rest --method POST --body @file.json). Required fields: Name, Type, SubType, Language, VersionNumber. OmniScripts default to IsIntegrationProcedure=false — do NOT set OmniProcessType directly (it is computed). The sf data create record --values flag cannot handle JSON textarea fields like PropertySetConfig. Create child OmniProcessElement records via REST API for each Step and element.
Deliverables produced by this skill:
assets/omni-process-omniscript.json template) — OmniProcess record ready for REST API creationassets/omni-process-element-step.json template) — OmniProcessElement record for each Step (Level=0)assets/omni-process-element-text-block.json and similar) — OmniProcessElement records for child elements (Level=1+)| File | When to read |
|---|---|
references/element-types.md | Phase 2 — Element selection: read before configuring PropertySetConfig for any element type |
references/best-practices.md | Phase 2-5 — Design patterns: read for step design, data prefill, validation, navigation, performance, and troubleshooting guidance |
assets/omni-process-omniscript.json | Phase 3 — Generation: use as the OmniProcess record template when building the OmniScript via REST API |
assets/omni-process-element-step.json | Phase 3 — Generation: use as the Step (Level=0) OmniProcessElement record template |
assets/omni-process-element-text-block.json | Phase 3 — Generation: use as the Text Block element template; adapt for other display element types |
scripts/check-duplicate-omniscript.sh | Phase 3 — Run before creating a new OmniScript to verify no duplicate Type/SubType/Language exists |
scripts/deploy-omniscript.sh | Phase 4 — Run to deploy OmniScript and verify activation; includes prerequisite checks and error recovery |
scripts/cli-reference.sh | Any phase — Full CLI command reference for querying, retrieving, deploying, and verifying OmniScripts |
© forcedotcom, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 8 other files (scripts, references, assets) in skills/omnistudio-omniscript-generate of forcedotcom/sf-skills.
Open the folder on GitHubat commit 4bbae5c
Omnistudio Omniscript Generate next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Omnistudio Omniscript Generate this skillforcedotcom/sf-skills | 1.1k | — | ~5.6k | Automated safety check: Pass | Apache-2.0 | |
| MCP Server Builderanthropics/skills | 180k | 63 repos | ~2.3k | Automated safety check: Pass | Apache-2.0 | |
| Hook Development for Claude Code Pluginsanthropics/claude-plugins-official | 38k | 10 repos | ~4.1k | Automated safety check: Notes | Apache-2.0 | |
| Using Superpowersfarm-fe/farm | 5.6k | 35 repos | ~1.4k | Automated safety check: Pass | MIT | |
| Executing Plans Inlineobra/superpowers | 297k | 2 repos | ~5.1k | Automated safety check: Pass | MIT | |
| Skill CreatorAzure/azqr | 796 | 89 repos | ~8.2k | Automated safety check: Pass | Apache-2.0 |
anthropics/skills
Guides the design and implementation of Model Context Protocol servers in TypeScript or Python, from tool naming and error messages to evaluation.
anthropics/claude-plugins-official
Explains how to write Claude Code plugin hooks, both prompt-based checks and bash commands, for events such as PreToolUse, Stop and SessionStart.
farm-fe/farm
A skill your agent uses when starting any conversation - establishes how to find and use skills, requiring Skill tool invocation before ANY response including clarifying questions
obra/superpowers
Has the agent carry out an implementation plan itself, task by task in the current session, keeping a ledger, proving each step with a test and ending with one whole-branch review.
Azure/azqr
Create new skills, modify and improve existing skills, and measure skill performance.
anthropics/claude-plugins-official
Explains how to write agents for Claude Code plugins: the markdown file with YAML frontmatter, trigger descriptions, model and color settings, and system prompt design.
forcedotcom/sf-skills
Declared architecture snapshot for one Agentforce agent: planner, topics, actions, flows, Apex, prompt templates, and NGA plugins.
forcedotcom/sf-skills
Data Cloud 360° view of a single Agentforce session. An agent skill from forcedotcom/sf-skills.
forcedotcom/sf-skills
Apply a Salesforce sandbox post-copy automation JSON config against a target org.
forcedotcom/sf-skills
Apply a Salesforce sandbox post-copy automation JSON config against a target org.
forcedotcom/sf-skills
Apply SLDS-compliant UI using the correct blueprints, styling hooks, utility classes, and icons.
forcedotcom/sf-skills
Lightning Web Components with PICKLES methodology and 165-point scoring.
Categories
OmniStudio OmniScript creation and validation with 120-point scoring. Omnistudio Omniscript Generate is an agent skill from forcedotcom/sf-skills. OmniStudio OmniScript creation and validation with 120-point scoring.
Omnistudio Omniscript Generate fits situations like: building guided digital experiences; multi-step forms; interactive processes that orchestrate Integration Procedures and Data Mappers; : user creates OmniScripts.
Run `npx skills add forcedotcom/sf-skills --skill omnistudio-omniscript-generate -a claude-code`. Or copy the skill folder (skills/omnistudio-omniscript-generate in forcedotcom/sf-skills) into .claude/skills/omnistudio-omniscript-generate in your project. Claude Code loads it when a task matches its description.
Run `npx skills add forcedotcom/sf-skills --skill omnistudio-omniscript-generate -a codex`. Or copy the skill folder (skills/omnistudio-omniscript-generate in forcedotcom/sf-skills) into .agents/skills/omnistudio-omniscript-generate in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add forcedotcom/sf-skills --skill omnistudio-omniscript-generate -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/omnistudio-omniscript-generate, .gemini/skills/omnistudio-omniscript-generate, .github/skills/omnistudio-omniscript-generate and .opencode/skills/omnistudio-omniscript-generate in your project.
Going by SKILL.md and its folder, Omnistudio Omniscript Generate needs a shell for the scripts in its folder and the command-line tools its instructions call (sf). Our summary lists: A Bash shell.
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.
Omnistudio Omniscript Generate is published under the Apache-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 5.6k tokens (SKILL.md is roughly 22k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 12k tokens, read only when the agent opens those files.
Skills that share tags, products or a category with Omnistudio Omniscript Generate: MCP Server Builder (anthropics/skills, 180k stars), Hook Development for Claude Code Plugins (anthropics/claude-plugins-official, 38k stars), Using Superpowers (farm-fe/farm, 5.6k stars) and Executing Plans Inline (obra/superpowers, 297k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
forcedotcom (a GitHub organization) maintains it in forcedotcom/sf-skills, which has 1,067 GitHub stars. The repository holds 252 skills in this directory. The repository was last updated on October 9, 2026.
Source: forcedotcom/sf-skills on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.