Agent skill

CRM Analytics Wave Generate

by forcedotcom in forcedotcom/sf-skills

A skill your agent uses to build a Wave Recipe, deploy a CRM Analytics dataset or dashboard, or author the full CRMA asset stack — apps, Wave Recipes (.wdpr), datasets, and dashboards — against a…

Apache-2.0Auto-check passedSales & Support

Install CRM Analytics Wave Generate

skills CLI
$ npx skills add forcedotcom/sf-skills --skill crm-analytics-wave-generate -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install forcedotcom/sf-skills crm-analytics-wave-generate --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/forcedotcom/sf-skills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/crm-analytics-wave-generate .claude/skills/crm-analytics-wave-generate && rm -rf skills-src

Use ~/.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/

Facts

Skill name
crm-analytics-wave-generate
GitHub stars
1.1k
Token cost
~4.1k tokens
SKILL.md length
1,799 words
Files
27 (incl. scripts, references, assets)
Skills in repo
252
Repo updated
First seen
Licence
Apache-2.0

At a glance

A skill your agent uses to build a Wave Recipe, deploy a CRM Analytics dataset or dashboard, or author the full CRMA asset stack — apps, Wave Recipes (.wdpr), datasets, and dashboards — against a…

  • Works in 6 steps: Bootstrap Scripts → Setup → Recipe Authoring → …
  • Build a Wave Recipe
  • SKILL.md covers Scope, Decision Tree — Pick the Right…, Required Inputs and Workflow, plus 6 more sections
  • Runs Shell scripts from its folder; calls sf

What it does

CRM Analytics Wave Generate is an agent skill from forcedotcom/sf-skills. Use to build a Wave Recipe, deploy a CRM Analytics dataset or dashboard, or author the full CRMA asset stack — apps, Wave Recipes (.wdpr), datasets, and dashboards — against a connected Salesforce org via REST and Metadata APIs, without CRM Analytics Studio or Dashboard Builder. TRIGGER when: user asks to build or create a Wave Recipe, generate a .wdpr or .wdpr-meta.xml, deploy a .wdash or .wapp, run a recipe or dataflowjob programmatically, upload CSV data via InsightsExternalData, validate a dataset schema with…

Its SKILL.md is about 4.1k tokens, which your agent loads only when the skill is triggered. The skill folder holds 30 other files, including scripts, reference files and assets (for example `assets/dashboard-template.json`, `references/dashboard-authoring.md` and `references/dataset-hygiene.md`).

It sits in Sales & Support, covering CRM management and Test data and fixtures. It works with Salesforce. 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.

When your agent uses it

  • Build a Wave Recipe
  • Deploy a CRM Analytics dataset
  • Author the full CRMA asset stack — apps
  • Wave Recipes (.wdpr)

Example prompts

  • “/crm-analytics-wave-generate”

Requirements

  • Node.js
  • A Bash shell

Workflow steps

6 steps, taken from the step headings in SKILL.md.

  1. Bootstrap Scripts
  2. Setup
  3. Recipe Authoring
  4. Dataset Validation
  5. Dashboard Authoring
  6. Dataset Hygiene

What it can do on your machine

Read from SKILL.md and the folder at commit 4bbae5c. It shows what the files ask for, not the result of running them.

  • Tool permissions

    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.

  • Runs code

    Ships 1 file in scripts/ (Shell, from the files we listed), which the agent can run.

    Shell commands in SKILL.md call:

    • sf

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

CRM Analytics Wave Generate loads about 4.1k tokens when it runs, and up to ~12k if it reads all its reference files. Until then it costs about 259 tokens; SKILL.md has 1,799 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~259
When it runs · the whole SKILL.md, loaded when a task matches
~4.1k
With references · SKILL.md plus every file in references/, read only if the agent opens them
~12k

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.

Safety

Auto-check passed

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.

SKILL.md

The full file from forcedotcom/sf-skills at commit 4bbae5c, republished under its Apache-2.0 licence (© forcedotcom). 1,799 words, ~4,142 tokens.

Download SKILL.mdSave it as .claude/skills/crm-analytics-wave-generate/SKILL.md (or your agent's skills folder). This skill also uses 26 other files; get the full folder from GitHub.
name
crm-analytics-wave-generate
description
Use to build a Wave Recipe, deploy a CRM Analytics dataset or dashboard, or author the full CRMA asset stack — apps, Wave Recipes (.wdpr), datasets, and dashboards — against a connected Salesforce org via REST and Metadata APIs, without CRM Analytics Studio or Dashboard Builder. TRIGGER when: user asks to build or create a Wave Recipe, generate a .wdpr or .wdpr-meta.xml, deploy a .wdash or .wapp, run a recipe or dataflowjob programmatically, upload CSV data via InsightsExternalData, validate a dataset schema with synthetic data, fetch dataset XMD, audit dashboard SAQL re-encoding, or find unused dataset fields. TRIGGER on keywords: Wave Recipe, CRMA, CRM Analytics, wdpr, wdash, wapp, WaveRecipe, Wave dataflow, dataflowjob, InsightsExternalData, SAQL, dataset XMD, Analytics Studio, R3 format, wave/recipes, wave/dashboards, or analytics on Salesforce objects (opportunities, leads, cases, accounts, sales). DO NOT TRIGGER for standard Salesforce reports or LWC components unrelated to CRM Analytics.
metadata.version
1.0
metadata.minApiVersion
59.0

Authoring CRM Analytics Assets

End-to-end workflow for authoring the full CRM Analytics asset stack — application, Wave Recipe, dataset, and Wave Dashboard — against a Salesforce org from a local SFDX project, without the UI.

Scope

  • In scope: WaveApplication, WaveRecipe (R3 format), Wave datasets (recipe-driven + CSV upload via InsightsExternalData), Wave Dashboards (.wdash deploy + PATCH styling), SAQL step authoring, dataset XMD inspection, dashboard auditing.
  • Out of scope: Standard Salesforce reports/dashboards, LWC analytics bridge components, Tableau CRM managed packages, org provisioning.

Decision Tree — Pick the Right Method

Before acting, read references/method-decision-tree.md to select the correct API path for the user's goal. Wrong method choices (e.g. multipart upload instead of R3 JSON body) cause silent failures that are hard to diagnose.


Required Inputs

  • Authenticated org alias (verify with sf org display -o <alias> --json)
  • Target CRMA app name (folder developer name)
  • Recipe or dashboard name and output dataset alias
  • Source sObjects to load (API names, e.g. Opportunity, Account)
  • Field list per sObject
  • Transformation intent: formula fields, aggregations, filter conditions

Defaults:

  • Local Salesforce connector name: SFDC_LOCAL (verify via GET /wave/dataConnectors)
  • API version: use result.apiVersion from sf org display
  • Node.js binary: /usr/local/lib/sf/bin/node (bundled with sf CLI)

Workflow

Phase Selection

Before starting, identify the user's goal and determine which phases to run:

User goalPhases to run
Build or update a recipe and dataset0 → 1 → 2
Validate recipe output schema after run0 → 1 → 2 → 3
Build or update a dashboard0 → 1 → 2 → 4
Full end-to-end: recipe + validation + dashboard0 → 1 → 2 → 3 → 4
Audit dataset for unused fields / stale SAQL0 → 1 → 5

Execute only the phases in the selected path. Do not revisit this table mid-workflow.

Phase 0 — Bootstrap Scripts
  1. Check for helper scripts — before running any script referenced in this workflow, verify the scripts/ directory exists in the skill root. All 11 scripts listed in references/scripts-reference.md are bundled with this skill. If a script is somehow missing, check that the skill was installed from the full repo (not a partial clone). Do not regenerate scripts from the descriptions — the implementations are authoritative.
Phase 1 — Setup
  1. Verify org connection — run sf org display -o <alias> --json. Capture accessToken and instanceUrl. If EPERM error, shell is sandboxed — re-run with full permissions.

  2. Look up or create the CRMA app — run scripts/create_app.js <alias> <appName>. The script lists existing folders and only creates if missing. Do NOT include assetIcon.

Phase 2 — Recipe Authoring
  1. Read the R3 node schema — load references/r3-node-schema.md before writing any recipe JSON. Every node shape, critical field rule, and formula gotcha is documented there.

  2. Author the recipe JSON — the .wdpr file contains only the recipeDefinition object (the nodes map, runMode, and ui section). Do NOT wrap it in an API envelope (fileFormat, label, name, recipe: {}) — the deploy script reads this file directly as the recipeDefinition body; wrapping it causes the wrong JSON structure to be POSTed at ?format=R3, leaving targetDataflowId null. Save to force-app/main/default/wave/<RecipeName>.wdpr. Key rules:

    • runMode must be "full" for generated recipes — NOT "R3" (which is only used as a query param on the API endpoint). Use "incremental" instead of "full" for large objects where reprocessing the entire source on every run is too slow; use "streaming" for near-real-time pipelines. "full" is the safe default for new recipes.
    • Use sources (array), never source (singular)
    • One field per formula node — chain them in sequence
    • Use expressionType: "SQL" and type: "NUMBER" or type: "TEXT" on formula fields
    • For text date dimensions use date_format(field, 'yyyy') or date_format(field, 'MM/yyyy')
    • Formula node action is "formula" — NOT "computeExpression", "augmentColumns", or "transform". Fields array key is "fields" (NOT "columns"). Expression key is "formulaExpression" (NOT "expression"). Do NOT use backtick quotes around field names in expressions.
    • Insert an EXTRACT0 (extractGrains) node between the last formula node and aggregate
    • Use the Designer-native ui section format — read references/ui-section-template.md

    CRITICAL — top-level .wdpr file structure. nodes is a ROOT-LEVEL object with UPPERCASE string keys. Do NOT put nodes inside ui. Do NOT use an array for ui.nodes. The file has exactly three top-level keys: runMode, nodes, ui. See examples/wdpr-skeleton.wdpr for a minimal 5-node skeleton (load → formula → extractGrains → aggregate → save).

    See the wrong-variant reference table in references/r3-node-schema.md → "Common wrong variants" for the full list of correct vs incorrect field names per node type.

  3. Write SFDX metadata wrappers — every .wdpr file MUST be accompanied by a .wdpr-meta.xml in the same directory. These are always created as a pair — outputting the recipe JSON without its metadata wrapper is incomplete. Use the template at assets/wdpr-meta-template.xml. Required fields: <application>, <masterLabel>, <targetDatasetAlias>, <dataflow> (set to the same value as <targetDatasetAlias>). Do NOT add <description>, <label>, <accessType>, <shareType>, or <format> — each triggers a deploy failure. Similarly, every .wapp requires a .wapp-meta.xml.

  4. Deploy recipe via REST — run scripts/deploy_and_run_recipe.js <alias> <recipeFile.wdpr> <appName> <recipeName>. This script: looks up folder id → POSTs or PATCHes recipe at ?format=R3 → asserts targetDataflowId returned → POSTs to /wave/dataflowjobs → polls until terminal.

  5. Verify recipe ran — terminal statuses: Success, Failure, Warning, Cancelled. On Failure, run scripts/check_connector_error.sh <alias> <connectorId> — exits 0 for System errors (safe to retry), exits 1 for User/Limit errors (do not retry; fix config first). If retries persist on a System error, run POST /wave/dataConnectors/{id}/ingest to force a connector refresh.

Phase 3 — Dataset Validation
  1. Upload synthetic data — run scripts/gen_synthetic_dataset.js (schema-driven, reads live XMD) then scripts/upload_dataset.js. Read references/external-data-upload.md for InsightsExternalData rules.

  2. Verify with SAQL — run scripts/verify_synthetic_dataset.js. A 200 on Action=Process only means ingestion was queued — wait for Status=Completed, then verify with a count query.

Phase 4 — Dashboard Authoring
  1. Read dashboard rules — load references/dashboard-authoring.md before writing any .wdash. Covers the two-step deploy+PATCH workflow, accepted widget parameters per type, and the SAQL re-encoding trap.

  2. Build minimal .wdash — use assets/dashboard-template.json as the starting structure. Keep widget parameters minimal at deploy time (see references/dashboard-authoring.md → "Deploy-time rules"). Deploy with sf project deploy start. When a listselector must drive another step's SAQL (not a global facet), put a {{column(step.selection, ["Field"]).asEquality("TargetField")}} binding in that step's query and set broadcastFacet/useGlobal to false on both steps — see references/dashboard-authoring.md → "Query bindings".

  3. Apply styling via PATCH — after deploy, PATCH /wave/dashboards/{id} with enriched state. Always decodeAll every state.steps[*].query immediately after GET, before any mutation + PATCH. This is the #1 silent failure mode: the API HTML-encodes SAQL on write (" → &quot;). GET → PATCH without decoding encodes again (&amp;quot;, then &amp;amp;quot;) and every widget renders Error 119. The helper is in references/dashboard-authoring.md. Use scripts/patch_t_oppo_view.js as the canonical GET → decodeAll → merge → PATCH template.

  4. Verify all steps render — before running, edit the DASH_ID and DS constants at the top of scripts/verify_dashboard_steps.js to the deployed dashboard's 18-char ID and the dataset's current ID/versionId. Then run scripts/verify_dashboard_steps.js <alias>. For each step: GET stored SAQL → decode → swap dataset name for id/currentVersionId → POST to /wave/query. Confirm 200 + rows. Do not mark done until user confirms widgets render in the browser.

Show full SKILL.md (679 more words)Show less
Phase 5 — Dataset Hygiene
  1. Find unused fields — run scripts/find_unused_dataset_fields.js <alias> <DatasetName>. Read references/dataset-hygiene.md for caveats (aggregateflex steps, multi-dataset SAQL, archived apps).

Rules / Constraints

ConstraintRationale
Every .wdpr MUST be paired with a .wdpr-meta.xml in the same directoryMetadata wrapper is required for SFDX deploy; recipe JSON alone is an incomplete artifact
Always POST recipes at ?format=R3 with recipeDefinition in JSON bodyMultipart upload creates recipe but never compiles it — targetDataflowId stays null
PATCH recipe with ?format=R3 JSON body only; never multipart PATCHMultipart PATCH updates raw file but destroys compiled state → "tableModelInfo is null"
On tableModelInfo is null: DELETE then re-POSTOnly re-POST triggers server-side compilation
Use targetDataflowId (02K...) on /wave/dataflowjobs, never recipe id (05v...)/wave/dataflowjobs only accepts the dataflow id
One field per formula nodeREST API accepts multiple but Recipe Designer breaks with "Can't Load the Recipe"
Use column not col in gridLayouts widget entriescol triggers Unrecognized field "col" on deploy
widgetStyle.borderRadius must be integer (e.g. 8), not CSS stringString value rejected at PATCH
Use name-based dataset load in stored SAQL, not id/versionid/version load requires a datasets binding the PATCH input rep rejects
Always decode SAQL before PATCH — use decodeAllGET returns HTML-encoded SAQL; re-encoding on every PATCH accumulates → &amp;amp;quot;
valuestable widget rejects all styling at PATCH — use chart with visualizationType: "flatTable"chart widget accepts the full rich-styling param set
POST /wave/dashboards only creates retired classic dashboardsUse Metadata API deploy for modern grid dashboards
KPI total requires group q by all before foreachWithout it, foreach acts as a window function returning one row per source row

Gotchas

IssueResolution
Recipe sits in New status, targetDataflowId nullRe-create via POST /wave/recipes?format=R3 with recipeDefinition in JSON body
Formula type "TEXT" but expression returns numberUse type: "NUMBER" and expressionType: "SQL" — other type strings silently normalize to TEXT
Aggregate fails: Can't find field _Year / _MonthAuto-derived date helpers don't exist mid-pipeline; derive explicitly via date_format formula node
400 errorCode 276 on POST recipeName already in use — PATCH the existing recipe instead
All widgets show Error after PATCHSAQL re-encoding — run decodeAll on every step query before PATCH
listselector list text invisible on dark bgSet filterStyle.valueColor — it defaults to dark; always set a contrasting color
date_format(CloseDate, 'MMM yyyy') produces numeric monthUse 'MM/yyyy' for text dimensions — MMM silently returns integer in recipe formula context

Output Expectations

  • force-app/main/default/wave/<RecipeName>.wdpr — Wave Recipe JSON (R3 format)
  • force-app/main/default/wave/<AppName>.wapp-meta.xml — app metadata wrapper
  • force-app/main/default/wave/<RecipeName>.wdpr-meta.xml — recipe metadata wrapper
  • force-app/main/default/wave/<DashboardName>.wdash — dashboard state JSON
  • force-app/main/default/wave/<DashboardName>.wdash-meta.xml — dashboard metadata wrapper

Reusable Scripts

All scripts accept org alias as first positional arg. Read references/scripts-reference.md for full descriptions and usage.

ScriptPurpose
scripts/create_app.jsIdempotently create a CRMA app folder
scripts/deploy_and_run_recipe.jsCreate + compile + run recipe end-to-end
scripts/probe_recipe.jsFetch recipe compile status + targetDataflowId
scripts/fetch_dataset_xmd.jsDump dataset XMD (dimensions/measures/dates)
scripts/gen_synthetic_dataset.jsSchema-driven synthetic data generator
scripts/upload_dataset.jsUpload CSV via InsightsExternalData API
scripts/verify_synthetic_dataset.jsPost-upload SAQL sanity checks
scripts/find_unused_dataset_fields.jsList XMD fields not referenced in any dashboard SAQL
scripts/verify_dashboard_steps.jsPOST each step's SAQL to /wave/query and confirm rows
scripts/patch_t_oppo_view.jsFull-cycle PATCH template with dark theme and decodeAll
scripts/check_connector_error.shCheck connector errorCategory; exits 0=System (retryable), 1=User/Limit (do not retry)

Cross-Skill Integration

NeedDelegate to
Deploying Wave metadata via SFDX project deployUse standard sf project deploy — no skill needed
LWC components that consume Wave datasetsUse an appropriate LWC skill

Reference File Index

FileWhen to read
references/method-decision-tree.mdPhase 1 — before choosing API path
references/r3-node-schema.mdPhase 2 — before writing any recipe node
references/ui-section-template.mdPhase 2 — when building the Designer-native ui section
assets/wapp-meta-template.xmlPhase 2 — when creating .wapp-meta.xml
assets/wdpr-meta-template.xmlPhase 2 — when creating .wdpr-meta.xml
references/external-data-upload.mdPhase 3 — InsightsExternalData rules and common errors
references/dashboard-authoring.mdPhase 4 — full dashboard deploy+PATCH rules and re-encoding trap
assets/wdash-meta-template.xmlPhase 4 — when creating .wdash-meta.xml
assets/dashboard-template.jsonPhase 4 — minimal deploy-valid .wdash starting structure
references/dataset-hygiene.mdPhase 5 — unused field detection and SAQL re-encoding audit
references/scripts-reference.mdAny phase — full script descriptions and usage
examples/wdpr-skeleton.wdprPhase 2 — minimal 5-node skeleton (load → formula → extractGrains → aggregate → save)
examples/opportunity-revenue-recipe.wdprPhase 2 — fully annotated example recipe with all node types
examples/pipeline-by-industry-quarter.wdprPhase 2 — kitchen-sink join + formula chain + extractGrains + case/coalesce/quarter
examples/industry-binding-dashboard.wdashPhase 4 — listselector driving a SAQL filter via column().asEquality()

© 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

Files

SKILL.md and 26 other files (scripts, references, assets) in skills/crm-analytics-wave-generate of forcedotcom/sf-skills.

  • SKILL.md
  • assets/dashboard-template.json
  • assets/wapp-meta-template.xml
  • assets/wdash-meta-template.xml
  • assets/wdpr-meta-template.xml
  • examples/industry-binding-dashboard.wdash
  • examples/opportunity-revenue-recipe.wdpr
  • examples/pipeline-by-industry-quarter.wdpr
  • examples/wdpr-skeleton.wdpr
  • references/dashboard-authoring.md
  • references/dataset-hygiene.md
  • references/external-data-upload.md
  • references/method-decision-tree.md
  • references/r3-node-schema.md
  • references/scripts-reference.md
  • references/ui-section-template.md
  • scripts/check_connector_error.sh
  • … and 10 more

Open the folder on GitHubat commit 4bbae5c

Compare with similar skills

CRM Analytics Wave 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.

CRM Analytics Wave Generate compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
CRM Analytics Wave Generate this skillforcedotcom/sf-skills1.1k—~4.1kAutomated safety check: PassApache-2.0
Salesforce Load Scalejeremylongshore/tons-of-skills-marketplace2.8k—~1.1kAutomated safety check: PassMIT
Soql Lib Query Builderbeyond-the-cloud-dev/soql-lib154—~4.3kAutomated safety check: PassMIT
Sf DatacloudJaganpro/sf-skills424—~2.7kAutomated safety check: PassMIT
Soql Lib Selectorbeyond-the-cloud-dev/soql-lib154—~2kAutomated safety check: PassMIT
Dev SetupPortwood-Global-Solutions/Portwood126—~1.1kAutomated safety check: PassApache-2.0

Similar skills

  • Salesforce Load Scale

    jeremylongshore/tons-of-skills-marketplace

    Test Salesforce integration capacity in an authorized non-production org with synthetic data, bounded load, org limits, and business-invariant checks.

    2.8k GitHub stars~1.1k tokensUpdated yesterday
    Sales & SupportAuto-check passed
  • Soql Lib Query Builder

    beyond-the-cloud-dev/soql-lib

    Builds Salesforce SOQL queries using the SOQL Lib fluent builder API (SOQL.cls).

    154 GitHub stars~4.3k tokensUpdated 7 days ago
    Sales & SupportAuto-check passed
  • Sf Datacloud

    Jaganpro/sf-skills

    Salesforce Data Cloud product orchestrator for connect→prepare→harmonize→segment→act workflows.

    424 GitHub stars~2.7k tokensUpdated 5 mo ago
    Sales & SupportAuto-check passed
  • Soql Lib Selector

    beyond-the-cloud-dev/soql-lib

    Creates Salesforce Apex selector classes using the SOQL Lib selector pattern.

    154 GitHub stars~2k tokensUpdated 7 days ago
    Sales & SupportAuto-check passed
  • Dev Setup

    Portwood-Global-Solutions/Portwood

    Get from a fresh clone of Portwood to a working, fully-tested Salesforce org.

    126 GitHub stars~1.1k tokensUpdated yesterday
    Sales & SupportAuto-check passed
  • Sf Flow

    Jaganpro/sf-skills

    Creates and validates Salesforce Flows with 110-point scoring.

    424 GitHub stars~1.8k tokensUpdated 5 mo ago
    Sales & SupportAuto-check passed

More from forcedotcom/sf-skills

All 252 skills in this repo
  • Agentforce Architecture Analyze

    forcedotcom/sf-skills

    Declared architecture snapshot for one Agentforce agent: planner, topics, actions, flows, Apex, prompt templates, and NGA plugins.

    1.1k GitHub stars~4.5k tokensUpdated yesterday
    Auto-check passed
  • Agentforce D360 Analyze

    forcedotcom/sf-skills

    Data Cloud 360° view of a single Agentforce session. An agent skill from forcedotcom/sf-skills.

    1.1k GitHub stars~3.4k tokensUpdated yesterday
    Auto-check passed
  • Apply a Salesforce sandbox post-copy automation JSON config against a target org.

    1.1k GitHub stars~5.3k tokensUpdated yesterday
    Auto-check: notes
  • Apply a Salesforce sandbox post-copy automation JSON config against a target org.

    1.1k GitHub stars~5.4k tokensUpdated yesterday
    Auto-check: notes
  • Design Systems Slds Apply

    forcedotcom/sf-skills

    Apply SLDS-compliant UI using the correct blueprints, styling hooks, utility classes, and icons.

    1.1k GitHub stars~3.7k tokensUpdated yesterday
    Auto-check passed
  • Experience Lwc Generate

    forcedotcom/sf-skills

    Lightning Web Components with PICKLES methodology and 165-point scoring.

    1.1k GitHub stars~2.4k tokensUpdated yesterday
    Auto-check passed

Works with

Categories

Questions about CRM Analytics Wave Generate

What does CRM Analytics Wave Generate do?

A skill your agent uses to build a Wave Recipe, deploy a CRM Analytics dataset or dashboard, or author the full CRMA asset stack — apps, Wave Recipes (.wdpr), datasets, and dashboards — against a…. CRM Analytics Wave Generate is an agent skill from forcedotcom/sf-skills.wdpr), datasets, and dashboards — against a connected Salesforce org via REST and Metadata APIs, without CRM Analytics Studio or Dashboard Builder.

When should I use CRM Analytics Wave Generate?

CRM Analytics Wave Generate fits situations like: build a Wave Recipe; deploy a CRM Analytics dataset; author the full CRMA asset stack — apps; wave Recipes (.wdpr).

How do I install CRM Analytics Wave Generate in Claude Code?

Run `npx skills add forcedotcom/sf-skills --skill crm-analytics-wave-generate -a claude-code`. Or copy the skill folder (skills/crm-analytics-wave-generate in forcedotcom/sf-skills) into .claude/skills/crm-analytics-wave-generate in your project. Claude Code loads it when a task matches its description.

How do I install CRM Analytics Wave Generate in Codex?

Run `npx skills add forcedotcom/sf-skills --skill crm-analytics-wave-generate -a codex`. Or copy the skill folder (skills/crm-analytics-wave-generate in forcedotcom/sf-skills) into .agents/skills/crm-analytics-wave-generate in your project. Codex loads it when a task matches its description.

Can I use CRM Analytics Wave Generate in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add forcedotcom/sf-skills --skill crm-analytics-wave-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/crm-analytics-wave-generate, .gemini/skills/crm-analytics-wave-generate, .github/skills/crm-analytics-wave-generate and .opencode/skills/crm-analytics-wave-generate in your project.

What does CRM Analytics Wave Generate need to run?

Going by SKILL.md and its folder, CRM Analytics Wave Generate needs a shell for the scripts in its folder and the command-line tools its instructions call (sf). Our summary lists: Node.js; A Bash shell.

Does CRM Analytics Wave Generate access the network?

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.

Is CRM Analytics Wave Generate safe to install?

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.

What licence does CRM Analytics Wave Generate use?

CRM Analytics Wave 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.

How many tokens does CRM Analytics Wave Generate use?

About 4.1k tokens (SKILL.md is roughly 17k 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 8k tokens, read only when the agent opens those files.

What are the alternatives to CRM Analytics Wave Generate?

Skills that share tags, products or a category with CRM Analytics Wave Generate: Salesforce Load Scale (jeremylongshore/tons-of-skills-marketplace, 2.8k stars), Soql Lib Query Builder (beyond-the-cloud-dev/soql-lib, 154 stars), Sf Datacloud (Jaganpro/sf-skills, 424 stars) and Soql Lib Selector (beyond-the-cloud-dev/soql-lib, 154 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains CRM Analytics Wave Generate?

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.