npx skills add ...
npx skills add forcedotcom/sf-skills --skill experience-aura-lwc-migrate
Use this skill to analyze a Salesforce Aura component bundle (.cmp, .app, .evt, .intf, Controller.js, Helper.js, Renderer.js) and produce a framework-agnostic migration blueprint (PRD.yaml / PRD.md / PRD.json) capturing public API, data requirements, slots, events, states, accessibility, styling, localization, and security posture. This is Phase 1 (analysis + PRD) only — it does NOT author or edit component code, wire adapters, or Jest tests, and does not write .html/.js/.css/.js-meta.xml. TRIGGER when the user says \"analyze this Aura component\", \"migrate Aura\", \"convert .cmp\", \"produce a migration blueprint\", \"generate a PRD for this Aura component\", or mentions aura:attribute, aura:handler, force:recordData, $Label, $Resource, component.get, cmp.find, or an input directory containing .cmp files. DO NOT TRIGGER when there is no Aura source (delegate downstream LWC authoring to experience-lwc-generate), for post-migration scoring, or for refactoring an existing modern component.
npx skills add forcedotcom/sf-skills --skill experience-aura-lwc-migrate
Migrate an existing Salesforce Aura component bundle to a Lightning Web Component using a PRD-driven workflow. The Aura source is analyzed through eight expert lenses (static references, data, API surface, slots, styling, default values, unknown dependencies, redundant-code cleanup) to produce a framework-agnostic PRD, which is handed to the LWC authoring skills and verified against the Aura→LWC completeness checklist.
.cmp, .controller.js, .helper.js, .renderer.js, .css, .design, .evt, .intf) to LWC.aura:id DOM access, force:recordData, application events).Do NOT use this skill for:
experience-lwc-generate).experience-lwc-generate)..cmp; usually also controller / helper / CSS / events / interfaces).sfdx-project.json packageDirectories (typically an lwc/<name>/ subdirectory under one of the listed package paths).@sfdc-internal/adk-knowledge package installed in the caller's workspace. If it is not present, the skill surfaces the missing dependency as an unknown rather than failing.Apply the Aura → LWC migration principles before and during each phase: understand before converting, prioritize functionality equivalence over structural equivalence, leverage native web standards, migrate iteratively, and test thoroughly. The architectural deltas (two-way → one-way binding, Aura events → DOM events, aura:id → this.template.querySelector, etc.) are documented in references/aura-migration-guidelines.md.
Aura.Action handlers.force:recordData, lightning:recordViewForm, Apex controllers.{!v.body} → LWC slots).@sfdc-internal/adk-knowledge package.accessibility-code-review-aura skill in a follow-up PR; until then, Phase 3 applies the WCAG preamble inline.Open the relevant reference before drafting or enhancing the corresponding PRD section.
This skill covers the analysis and PRD-generation phases only. It does not produce, edit, or validate LWC bundles, wire adapters, or tests. Phases 1–3 below are mandatory when this skill is invoked. Phases 4–5 describe the recommended downstream authoring flow — they are informational follow-up guidance for the caller and are NOT executed by this skill.
Goal: produce a draft YAML PRD that captures every section of the 14-section framework.
access attribute from the .cmp metadata, and every embedded/referenced component.access attribute explicitly in the overview and describe its implications (GLOBAL: publicly available across namespaces; PRIVILEGED/PUBLIC: restricted; etc.).unknowns section — that creates a circular dependency. If no valid unknowns exist, use an empty array.packages/skills/<skill>-workspace/<iteration>/PRD-draft.yaml).Deliverable: draft PRD (YAML) covering the 14 sections.
Goal: harden each section using the eight Aura expert frameworks.
Apply the experts in order. Each pass reads the draft PRD and rewrites the relevant sections in place.
staticReferences, componentCommunication, and unknowns. Enumerate every $Resource, $ContentAsset, $Label, $Browser, $Locale, /lightning/* route, and c:* / force:* / lightning:* dependency. The blueprint must never directly contain the Aura-specific strings $ContentAsset, $Label, $Resource, $Browser, or $Locale; replace each with a description of intent.dataRequirements. The blueprint dataRequirements must not contain force:recordData or lightning:recordViewForm — document the underlying record, fields, and object-API-name instead. Rename sObjectName → objectApiName. Capture Apex-controller method names, input parameters, and output shapes.componentCommunication, interactions, and staticReferences. Document every public attribute (with type, default, and all usage intents), <aura:method> declaration, event firing (component.getEvent(...).fire()), and Object-typed callback attribute (these become LWC custom events).contentRequirements. Translate every {!v.body} / {#v.body} to a default slot entry (LWC components can have only one default slot — capture the condition under which it is present) and every <aura:attribute type="Aura.Component"> or "Aura.Component[]" to a named-slot entry.styling and dataRequirements. Move styling-related attributes out of dataRequirements and into styling. Document SLDS hooks, custom CSS, and any dynamic styling driven by JS.dataRequirements. For every Aura attribute, record its default value (type + literal; or namespace + name for $Label references) in the what property.unknowns. For each unknown, parse namespace + name, look up the corresponding file under node_modules/@sfdc-internal/adk-knowledge/dist/ using the mapping rules, and either inline the resolved content or leave a note that manual research is required. If the @sfdc-internal/adk-knowledge package is not installed, note the expected path and leave the unknown in place.Deliverable: enhanced PRD (YAML) with all eight expert passes applied.
Goal: ensure the PRD's accessibility section meets WCAG 2.2 minimums.
.cmp, .controller.js, .helper.js, .renderer.js, .css). Cover the Aura-scoped Success Criteria: 1.3.1 (ii) Tables, 1.3.5 Identify Input Purpose, 3.2.1 On Focus, 3.2.2 On Input, 3.3.2 Labels or Instructions, 4.1.2 Name / Role / Value. (When the sibling accessibility-code-review-aura skill ships in a follow-up PR, hand off to it instead.)accessibility section. For every requirement, capture the WCAG Success Criterion it satisfies and the proposed LWC implementation approach (semantic HTML first, ARIA only where semantic HTML cannot achieve the same outcome).Deliverable: PRD with an accessibility section that lists each required feature, the WCAG Success Criterion it satisfies, and the LWC implementation approach.
Once the enhanced PRD is complete, the caller can hand it off to an LWC authoring workflow. This skill does not perform any authoring. Recommended downstream steps:
experience-lwc-generate as the design input, substituting for a Figma / written-spec input. This skill does not invoke experience-lwc-generate; the caller triggers it as a follow-up step.dataRequirements section into concrete adapters.After LWC authoring completes, the caller can verify the migrated component with the project's standard test and review workflows — Jest coverage, accessibility Jest, a11y / security / RTL review, telemetry, feature-flag gating, etc. Apply references/aura-to-lwc-completeness-checklist.md as a final scoring pass on the completed LWC.
experience-lwc-generate — recommended downstream authoring handoff (non-executing; the caller triggers it after this skill's PRD is complete).TODO / placeholder entries.dataRequirements contains no direct references to force:recordData or lightning:recordViewForm, and no sObjectName keys (renamed to objectApiName).staticReferences and other sections contain no raw Aura strings like $Resource, $Label, $ContentAsset, $Browser, $Locale.<aura:method> appears in interactions with the corresponding trigger.{!v.body} / {#v.body} appears in contentRequirements as a default slot (with the presence condition).<aura:attribute type="Aura.Component"> appears in contentRequirements as a named slot.@sfdc-internal/adk-knowledge package (or marked as manually-required with the attempted knowledge-file path).