Help us improve
Share bugs, ideas, or general feedback.
From sf-skills
Builds Salesforce Lightning Experience apps from natural language by generating all required metadata types (objects, fields, pages, tabs, security) in dependency order.
npx claudepluginhub ccmalcom/sf-skills-plugin --plugin sf-skillsHow this skill is triggered — by the user, by Claude, or both
Slash command
/sf-skills:generating-lightning-appThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Build a complete, deployable Salesforce Lightning Experience application from a natural language description by defining a Lightning Custom Application and orchestrating its dependent metadata types in correct dependency order. Invoke specialized metadata skills when available; generate metadata directly when no skill exists.
Generates Salesforce Flow metadata (Screen, Autolaunched, Record-Triggered, Scheduled) via a 3-step MCP pipeline. Use for automating business processes, building workflows, or generating flow XML.
Provides patterns for Salesforce platform development: Lightning Web Components (LWC), Apex triggers/classes, REST/Bulk APIs, Connected Apps, Salesforce DX with scratch orgs and 2GP.
Creates React and Vite code apps for Power Apps. Scaffolds projects, checks prerequisites like Node.js and pac CLI, authenticates, builds, and deploys to Power Platform.
Share bugs, ideas, or general feedback.
Build a complete, deployable Salesforce Lightning Experience application from a natural language description by defining a Lightning Custom Application and orchestrating its dependent metadata types in correct dependency order. Invoke specialized metadata skills when available; generate metadata directly when no skill exists.
Use when:
Examples that should trigger this skill:
Do NOT use when:
generating-custom-application insteadThis table shows which metadata types are commonly needed for Lightning Experience apps, their skill availability, and API context requirement.
| Metadata Type | Skill Name | API Context | Usage Rule |
|---|---|---|---|
| Custom Object | generating-custom-object | salesforce-api-context | MUST load skill AND call API context |
| Custom Field | generating-custom-field | salesforce-api-context | MUST load skill AND call API context |
| Custom Tab | generating-custom-tab | salesforce-api-context | MUST load skill AND call API context |
| FlexiPage | generating-flexipage | salesforce-api-context | MUST load skill AND call API context |
| Custom Application | generating-custom-application | salesforce-api-context | MUST load skill AND call API context |
| List View | generating-list-view | salesforce-api-context | MUST load skill AND call API context (if requested) |
| Validation Rule | generating-validation-rule | salesforce-api-context | MUST load skill AND call API context (if requested) |
| Flow | generating-flow | metadata-experts pipeline | MUST load skill AND run pipeline. Exempt from salesforce-api-context. |
| Permission Set | generating-permission-set | salesforce-api-context | MUST load skill AND call API context |
SKILL RULE: When a skill exists for a metadata type, you MUST load that skill. Do NOT generate metadata directly without loading the skill first.
API CONTEXT RULE: For every metadata type (except Flow), you MUST call salesforce-api-context tools before generating. Do NOT generate metadata without calling API context first. The skill provides structure and rules; API context confirms what is valid for the current API version. Both are essential.
FALLBACK RULE: When no skill exists for a metadata type you need, generate the metadata directly using your knowledge of Salesforce Metadata API and best practices. API context is still required.
RATIONALE: Skills contain validated patterns and constraints. API context provides version-specific accuracy. Together they prevent deployment failures.
Custom Objects (no dependencies)
↓
Custom Fields (depends on: Objects exist)
↓
Relationships (depends on: Both parent and child objects + fields exist)
Metadata types in this phase:
generating-custom-object - once, with all objectsgenerating-custom-field - once, with all fields (including Master-Detail, Lookup, Roll-up Summary)Validation Rules (depends on: Fields exist)
↓
Flows (depends on: Objects, Fields exist)
Metadata types in this phase (only if user requested):
generating-validation-rule - once, if validation requirements mentionedgenerating-flow - once, if automation/workflow requirements mentionedList Views (depends on: Objects, Fields exist)
↓
Custom Tabs (depends on: Objects exist)
↓
FlexiPages (depends on: Objects, Tabs exist)
Metadata types in this phase:
generating-list-view - once, for filtered record views (if requested)generating-custom-tab - once, with all object tabsgenerating-flexipage - once, with all record/home/app pagesCustom Application (depends on: Tabs exist)
Metadata types in this phase:
generating-custom-application - once, to create the Lightning App containerPermission Sets (depends on: Objects, Fields, Tabs, App exist)
Metadata types in this phase:
generating-permission-set - once, with all permission sets and access to:
Actions:
Output: Build Plan
Generate a structured plan listing:
Lightning App Build Plan: [App Name]
DATA MODEL:
- Custom Objects: [list with object names]
- Custom Fields: [list grouped by object]
- Relationships: [list M-D and Lookup relationships]
BUSINESS LOGIC (if applicable):
- Validation Rules: [list with object and rule name]
- Flows: [list with flow name and type]
USER INTERFACE:
- List Views (if requested): [list with object and view name]
- Custom Tabs: [list with object]
- FlexiPages: [list with page name and type]
- Custom Application: [app name]
SECURITY:
- Permission Sets: [list with purpose]
PER-TYPE EXECUTION (skill + API context for each):
- CustomObject: load generating-custom-object + call salesforce-api-context
- CustomField: load generating-custom-field + call salesforce-api-context
- ValidationRule: load generating-validation-rule + call salesforce-api-context (if requested)
- Flow: load generating-flow + run metadata-experts pipeline (if requested)
- ListView: load generating-list-view + call salesforce-api-context (if requested)
- CustomTab: load generating-custom-tab + call salesforce-api-context
- FlexiPage: load generating-flexipage + call salesforce-api-context
- CustomApplication: load generating-custom-application + call salesforce-api-context
- PermissionSet: load generating-permission-set + call salesforce-api-context
STATUS LINES TO EMIT BEFORE FILE WRITES:
- `type=<Type> skill=complete mcp=complete|unavailable mcp_tools=<tool-list|none>`
- Flow exception: `type=Flow skill=complete pipeline=complete`
DEPENDENCY ORDER:
1. Phase 1: Data Model (Objects -> Fields)
2. Phase 2: Business Logic (Validation Rules -> Flows)
3. Phase 3: User Interface (List Views -> Tabs -> Pages)
4. Phase 4: App Assembly (Application)
5. Phase 5: Security (Permission Sets)
Execute these four steps for each metadata type, one type at a time. Complete all four steps for the current type before moving to the next type. Do NOT skip any step.
| Step | What to do | Why |
|---|---|---|
| ① Load skill | Search for and read the per-type SKILL.md | Gives you the XML structure, required elements, naming rules, and validation constraints |
| ② Call API context | Call salesforce-api-context tools for this metadata type using one or more of: get_metadata_type_sections, get_metadata_type_context, get_metadata_type_fields, get_metadata_type_fields_properties, search_metadata_types | Gives you the current valid values — allowed enum values, required vs. optional fields, child types for this API version. The skill provides structure; API context provides version-specific accuracy. |
| ③ Record status | Emit: type=<Type> skill=complete mcp=complete|unavailable mcp_tools=<tool-list|none> | Confirms both steps were attempted before any files are written and records which API context tools were used |
| ④ Generate files | Generate all files for this type, then checkpoint | Only after ①②③ are done. Verify, then move to the next type. |
Do NOT combine ① and ② into a single action or skip ② after completing ①. They are separate steps that serve different purposes. After loading the skill you may feel ready to generate — stop and do ② first.
If salesforce-api-context is unavailable after a real attempt, record mcp=unavailable and generate using skill knowledge alone. Not attempting ② at all is a bug.
1. Custom Objects
generating-custom-object SKILL.mdsalesforce-api-context for CustomObjecttype=CustomObject skill=complete mcp=complete|unavailable mcp_tools=<tool-list|none>2. Custom Fields
generating-custom-field SKILL.mdsalesforce-api-context for CustomFieldtype=CustomField skill=complete mcp=complete|unavailable mcp_tools=<tool-list|none>3. Validation Rules (only if requested)
generating-validation-rule SKILL.mdsalesforce-api-context for ValidationRuletype=ValidationRule skill=complete mcp=complete|unavailable mcp_tools=<tool-list|none>4. Flows (only if requested)
generating-flow SKILL.mdmetadata-experts/execute_metadata_action 3-step pipeline (exempt from salesforce-api-context)type=Flow skill=complete pipeline=complete5. List Views (only if requested)
generating-list-view SKILL.mdsalesforce-api-context for ListViewtype=ListView skill=complete mcp=complete|unavailable mcp_tools=<tool-list|none>6. Custom Tabs
generating-custom-tab SKILL.mdsalesforce-api-context for CustomTabtype=CustomTab skill=complete mcp=complete|unavailable mcp_tools=<tool-list|none>7. FlexiPages
generating-flexipage SKILL.mdsalesforce-api-context for FlexiPagetype=FlexiPage skill=complete mcp=complete|unavailable mcp_tools=<tool-list|none>8. Custom Application
generating-custom-application SKILL.mdsalesforce-api-context for CustomApplicationtype=CustomApplication skill=complete mcp=complete|unavailable mcp_tools=<tool-list|none>9. Permission Sets
generating-permission-set SKILL.mdsalesforce-api-context for PermissionSettype=PermissionSet skill=complete mcp=complete|unavailable mcp_tools=<tool-list|none>After all phases complete, consolidate outputs into deployment-ready structure.
The completed build produces:
Salesforce DX Project Directory containing all generated metadata
force-app/main/default/Metadata Files - One file per component, organized by type:
force-app/main/default/
├── objects/ # Custom Objects (.object-meta.xml)
├── fields/ # Custom Fields (.field-meta.xml)
├── tabs/ # Custom Tabs (.tab-meta.xml)
├── flexipages/ # Lightning Pages (.flexipage-meta.xml)
├── applications/ # Custom Applications (.app-meta.xml)
├── permissionsets/ # Permission Sets (.permissionset-meta.xml)
├── flows/ # Flows (.flow-meta.xml) - if applicable
└── objects/.../validationRules/ # Validation Rules (.validationRule-meta.xml) - if applicable
Deployment Manifest (package.xml)
Build Summary Report - A markdown file listing:
Example Summary Structure:
Lightning App Build Complete: Project Management App
METADATA GENERATED:
1 Custom Objects
- Project__c -> force-app/main/default/objects/Project__c/Project__c.object-meta.xml
- Task__c -> force-app/main/default/objects/Task__c/Task__c.object-meta.xml
- Resource__c -> force-app/main/default/objects/Resource__c/Resource__c.object-meta.xml
2 Custom Fields
- Project__c.Name -> force-app/main/default/objects/Project__c/fields/Name.field-meta.xml
- Project__c.Status__c -> force-app/main/default/objects/Project__c/fields/Status__c.field-meta.xml
[... etc ...]
3 Custom Tabs
- Project__c -> force-app/main/default/tabs/Project__c.tab-meta.xml
[... etc ...]
4 Lightning Record Pages
- Project_Record_Page -> force-app/main/default/flexipages/Project_Record_Page.flexipage-meta.xml
[... etc ...]
5 Custom Application
- Project_Management -> force-app/main/default/applications/Project_Management.app-meta.xml
6 Permission Sets
- Project_Manager -> force-app/main/default/permissionsets/Project_Manager.permissionset-meta.xml
- Project_User -> force-app/main/default/permissionsets/Project_User.permissionset-meta.xml
WARNINGS: None
Before presenting the completed build to the user, verify cross-component integrity:
package.xml includes all generated components in proper dependency orderValidation Failure Handling (Category 2):
VALIDATION WARNINGS sectionNote: Individual component validations (reserved words, name lengths, field types, etc.) are handled by specialized metadata skills and do not need to be re-validated here.
Stop execution and ask for clarification if:
Order, Group)Log warning and continue if:
Warning Pattern:
Warning: [Component Type] generation encountered issue
Component: [Name]
Issue: [Description]
Impact: [What won't work]
Recommendation: [How to fix manually]
Continuing with remaining components...
Never invoke skills out of sequence. Fields need objects, pages need tabs, apps need tabs.
Don't reinvent the wheel. Specialized skills have field-specific validation that prevents deployment errors.
When user doesn't specify details:
Check for: