From sf-skills
Builds Salesforce LWCs that use native mobile device capabilities: barcode scanner, biometrics, location, NFC, calendar, contacts, document scanner, geofencing, AR space capture, app review, and payments.
How this skill is triggered — by the user, by Claude, or both
Slash command
/sf-skills:using-mobile-native-capabilitiesThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
<!-- adk-managed-skill -->
references/app-review.mdreferences/ar-space-capture.mdreferences/barcode-scanner.mdreferences/base-capability.mdreferences/biometrics.mdreferences/calendar.mdreferences/contacts.mdreferences/document-scanner.mdreferences/geofencing.mdreferences/location.mdreferences/mobile-capabilities.mdreferences/nfc.mdreferences/payments.mdThe lightning/mobileCapabilities module exposes a set of factory functions
that return service objects for native device features (barcode scanning,
biometrics, location, etc.). Each service extends a common
BaseCapability with an isAvailable()
method, so an LWC can degrade gracefully on surfaces where the capability is
not present (desktop, mobile web).
This skill routes an agent through (1) picking the right capability, (2) loading the authoritative type definitions, and (3) wiring the service into an LWC with the correct availability gating, error handling, and deprecation-aware API choice.
lightning/mobileCapabilities, "mobile capability", or
"Nimbus" by name.Do NOT use this skill for:
reviewing-lwc-mobile-offline.using-lightning-base-components.isAvailable().lightning/mobileCapabilities module declaration
(see mobile-capabilities).| Capability | Reference | One-line use |
|---|---|---|
| App Review | App Review | Prompt the user for a native in-app review. |
| AR Space Capture | AR Space Capture | Capture a 3D scan of a physical space using AR. |
| Barcode Scanner | Barcode Scanner | Read QR / UPC / EAN / Code-128 / etc. from the camera. |
| Biometrics | Biometrics | Authenticate via Face ID / fingerprint. |
| Calendar | Calendar | Read or create events on the device calendar. |
| Contacts | Contacts | Read or create entries in the device address book. |
| Document Scanner | Document Scanner | Scan paper documents using the camera with edge detection. |
| Geofencing | Geofencing | Trigger logic when the device crosses a geographic boundary. |
| Location | Location | Read GPS coordinates and watch for updates. |
| NFC | NFC | Read or write NFC tags. |
| Payments | Payments | Take an Apple Pay / Google Pay payment. |
Map the user's feature ask to one row of the capability index. If the ask spans multiple capabilities (e.g. "scan a barcode and store it on a contact"), plan for each capability separately — there is one factory function per capability.
Read these two shared references once per session — they apply to every capability and are not duplicated in the per-capability files:
isAvailable() that every service extends.lightning/mobileCapabilities module declaration showing every
re-exported service.Then open the capability's reference file from the table above. Each per-capability reference contains the service-specific TypeScript API (factory function, service interface, options types, result types, error types) and assumes the two shared references above are already in context.
Do not infer the API from memory — read it. The services evolve and some
methods are explicitly @deprecated in favor of newer alternatives.
For each capability:
lightning/mobileCapabilities:
import { getBarcodeScanner } from 'lightning/mobileCapabilities';
const scanner = getBarcodeScanner();isAvailable():
if (!scanner.isAvailable()) {
// graceful fallback or user message
return;
}
@deprecated alongside the recommended one — always
prefer the recommended method in the reference.try/catch and handle the typed failure codes the
service exposes (e.g. BarcodeScannerFailureCode,
LocationServiceFailureCode). User-cancelled vs. permission-denied vs.
service-unavailable are distinct UX states.Each service defines its own failure-code enum. Translate codes into
user-actionable messages: a USER_DENIED_PERMISSION should ask the user to
grant permission; a USER_DISABLED_PERMISSION must direct them to the OS
settings; a SERVICE_NOT_ENABLED should be a developer-visible error, not
shown to the user.
Mobile capabilities are available only when the LWC runs inside a
supported Salesforce mobile app. If the same component is rendered on
desktop or mobile web, the factory will still return an object but
isAvailable() will return false. Never assume availability — gate every
call.
scan(options) (not the deprecated beginCapture / resumeCapture
/ endCapture triple).barcodeTypes to the symbologies needed (default is
all supported types) and enableMultiScan: false for a single read.result[0].value to the bound field. On reject,
inspect error.code against BarcodeScannerFailureCode.isAvailable().isAvailable().beginCapture /
resumeCapture / endCapture for barcode, etc.).lightning/mobileCapabilities, not from a private
path.isAvailable() returns false on a real device — the device is
running an unsupported app surface (not Salesforce Mobile or Field
Service Mobile), or the service is gated by an org-level setting. The
fix is org configuration, not code.lightning/mobileCapabilities. The module is declared globally inside
Salesforce mobile containers; outside that, the types must be installed
separately.scan() and dismiss(). Refactor any sample code the agent received
before returning it.npx claudepluginhub ccmalcom/sf-skills-plugin --plugin sf-skillsRecommends official Capacitor plugins first, with Capgo and community alternatives for native iOS/Android features like camera, biometrics, geolocation, and payments. Use for plugin selection and comparisons.
Audits Lightning Web Components for Salesforce Mobile App Plus and Field Service Mobile App offline compatibility using Komaci static analysis. Flags GraphQL wire issues, modern directive problems, and ESLint rule violations with code-level fixes.
Writes modern JS/TS for Salesforce Commerce platforms (SFCC Rhino/CommonJS limits, PWA Kit Node/ES modules, LWC Locker constraints). Fetches latest docs before coding.