CRM Data Cleanup
OneWave-AI/claude-skills
Finds duplicate and junk records in a CRM CSV export with fuzzy matching, normalizes fields and writes a reviewable merge plan plus import-ready files without touching the live CRM.
Develop and deploy Data Cloud Code Extensions using SF CLI plugin.
$ npx skills add forcedotcom/sf-skills --skill data360-code-extension-generate -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install forcedotcom/sf-skills data360-code-extension-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/data360-code-extension-generate .claude/skills/data360-code-extension-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 "data360-code-extension-generate" agent skill from https://github.com/forcedotcom/sf-skills/tree/main/skills/data360-code-extension-generate into .claude/skills/data360-code-extension-generate/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "data360-code-extension-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/data360-code-extension-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 data360-code-extension-generate -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install forcedotcom/sf-skills data360-code-extension-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/data360-code-extension-generate .agents/skills/data360-code-extension-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 "data360-code-extension-generate" agent skill from https://github.com/forcedotcom/sf-skills/tree/main/skills/data360-code-extension-generate into .agents/skills/data360-code-extension-generate/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "data360-code-extension-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 data360-code-extension-generate -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install forcedotcom/sf-skills data360-code-extension-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/data360-code-extension-generate .cursor/skills/data360-code-extension-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 "data360-code-extension-generate" agent skill from https://github.com/forcedotcom/sf-skills/tree/main/skills/data360-code-extension-generate into .cursor/skills/data360-code-extension-generate/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "data360-code-extension-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/data360-code-extension-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 data360-code-extension-generate -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install forcedotcom/sf-skills data360-code-extension-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/data360-code-extension-generate .gemini/skills/data360-code-extension-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 "data360-code-extension-generate" agent skill from https://github.com/forcedotcom/sf-skills/tree/main/skills/data360-code-extension-generate into .gemini/skills/data360-code-extension-generate/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "data360-code-extension-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 data360-code-extension-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 data360-code-extension-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/data360-code-extension-generate .github/skills/data360-code-extension-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 "data360-code-extension-generate" agent skill from https://github.com/forcedotcom/sf-skills/tree/main/skills/data360-code-extension-generate into .github/skills/data360-code-extension-generate/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "data360-code-extension-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 data360-code-extension-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 data360-code-extension-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/data360-code-extension-generate .opencode/skills/data360-code-extension-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 "data360-code-extension-generate" agent skill from https://github.com/forcedotcom/sf-skills/tree/main/skills/data360-code-extension-generate into .opencode/skills/data360-code-extension-generate/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "data360-code-extension-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.
data360-code-extension-generateDevelop and deploy Data Cloud Code Extensions using SF CLI plugin.
Data360 Code Extension Generate is an agent skill from forcedotcom/sf-skills. Develop and deploy Data Cloud Code Extensions using SF CLI plugin. Use this skill when creating custom Python transformations for Data Cloud, deploying code extensions, or testing data transformations. Supports init, run, scan, and deploy operations.
Its SKILL.md is about 2.7k tokens, which your agent loads only when the skill is triggered. The skill folder holds 3 other files, including reference files (for example `references/README.md` and `references/quick-reference.md`).
It sits in Data & Analytics, covering Data cleaning. It works with Python and 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.
6 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit e5164d9. 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.
Shell commands in SKILL.md call:
sfpippythonpyenvdockerpython3From the folder's file list and the shell code blocks in SKILL.md.
Links to these hosts (documentation or services it may open):
github.comhelp.salesforce.compypi.orgFrom 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.
Data360 Code Extension Generate loads about 2.7k tokens when it runs, and up to ~5.7k if it reads all its reference files. Until then it costs about 71 tokens; SKILL.md has 1,011 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); files beside SKILL.md are not scanned.
The full file from forcedotcom/sf-skills at commit e5164d9, republished under its Apache-2.0 licence (© forcedotcom). 1,011 words, ~2,729 tokens.
.claude/skills/data360-code-extension-generate/SKILL.md (or your agent's skills folder). This skill also uses 2 other files; get the full folder from GitHub.This skill provides a complete workflow for developing, testing, and deploying custom Python code extensions to Salesforce Data Cloud. Code extensions allow you to write Python transformations that read from and write to Data Lake Objects (DLOs) and Data Model Objects (DMOs).
Before executing any code extension commands, verify prerequisites:
SF CLI with plugin installed
sf plugins --core | grep data-code-extensionIf not installed:
sf plugins install @salesforce/plugin-data-code-extensionPython 3.11
python --version # Should show 3.11.xData Cloud Custom Code SDK
pip list | grep salesforce-data-customcodeIf not installed:
pip install salesforce-data-customcodeDocker running (for deploy only)
docker psAuthenticated org
sf org display --target-org <org_alias> --jsonCreate a new code extension project with scaffolding.
Commands:
For script-based code extensions (batch transformations):
sf data-code-extension script init --package-dir <directory>For function-based code extensions (real-time):
sf data-code-extension function init --package-dir <directory>Required Option:
--package-dir, -p - Directory path where the package will be createdWhat it creates:
my-transform/ # Project root
├── payload/ # CRITICAL: This is what --package-dir must point to for deploy
│ ├── entrypoint.py # Main transformation code
│ └── config.json # Code extension configuration
├── requirements.txt # Python dependencies
└── README.mdIMPORTANT: Understanding the directory structure is critical for successful deployment.
Commands and their directory requirements:
| Command | Run From | Path/File Argument |
|---|---|---|
init | Parent directory | <project-name> or . |
scan | Project root | ./payload/entrypoint.py |
run | Project root | ./payload/entrypoint.py |
deploy | Project root | --package-dir ./payload (REQUIRED) |
CRITICAL: The --package-dir argument in deploy command MUST point to the payload directory, not the project root.
Edit payload/entrypoint.py with transformation logic.
Script Example (Batch):
from datacustomcode import Client
client = Client()
# Read from DLO
df = client.read_dlo('Employee__dll')
# Transform data (uppercase position field)
df['position_upper'] = df['position'].str.upper()
# Write to output DLO
client.write_to_dlo('Employee_Upper__dll', df, 'overwrite')Function Example (Real-time):
from datacustomcode import FunctionClient
def transform(event, context):
client = FunctionClient(context)
input_data = event['data']
output = {
'name': input_data['name'].upper(),
'status': 'processed'
}
return outputCommon Operations:
client.read_dlo('DLO_Name__dll') - Read from DLOclient.read_dmo('DMO_Name') - Read from DMOclient.write_to_dlo('DLO_Name__dll', df, 'overwrite') - Write to DLOclient.write_to_dmo('DMO_Name', df, 'upsert') - Write to DMOScan the entrypoint file to detect required permissions and generate config.json.
Command:
sf data-code-extension script scan --entrypoint ./payload/entrypoint.pyWhat it detects:
config.json and requirements.txtCRITICAL: Before running tests locally, validate that all DLOs used in your code exist and have the expected fields.
After scanning, review the generated config.json to identify all DLOs:
cat payload/config.jsonUse the data360-schema-get skill to verify DLOs exist and check field names.
For each DLO referenced in your code:
Verify DLO exists:
python3 scripts/get_dlo_schema.py <org_alias> <dlo_name>Verify field names match — compare fields used in your entrypoint.py against the DLO schema.
Check all DLOs:
read permissionswrite permissionsBefore proceeding to run, ensure:
After validating DLO schemas, run the code extension locally against your Data Cloud org.
Command:
sf data-code-extension script run --entrypoint <entrypoint_file> --target-org <org_alias> [options]Options:
--target-org, -o - SF CLI org alias (required)--config-file, -c - Custom config file pathIf you get errors:
Deploy the code extension to Data Cloud for scheduled or on-demand execution.
CRITICAL: You MUST specify --package-dir ./payload to point to the payload directory created by init.
Command:
sf data-code-extension script deploy --target-org <org_alias> --name <name> --package-dir ./payload --package-version <version> --description <description> [options]Required Options:
--target-org, -o - SF CLI org alias--name, -n - Name for code extension deployment--package-dir - Path to payload directory (REQUIRED - must be ./payload when running from project root)--package-version - Version string (default: 0.0.1)--description - Description of code extensionOptional Options:
--cpu-size - CPU size: CPU_L, CPU_XL, CPU_2XL (default), CPU_4XL--function-invoke-opt - Function invoke options (for function type)--network - Docker network (default: default)After deployment:
| Error | Solution |
|---|---|
command data-code-extension not found | sf plugins install @salesforce/plugin-data-code-extension |
datacustomcode CLI not found | pip install salesforce-data-customcode |
Python version mismatch | Use pyenv: pyenv install 3.11.0 && pyenv local 3.11.0 |
Cannot connect to Docker daemon | Start Docker Desktop |
No org found for alias | sf org login web --alias <org_alias> |
config.json not found | sf data-code-extension script scan --entrypoint ./payload/entrypoint.py |
DLO not found | Verify DLO exists (use data360-schema-get skill), check spelling and __dll suffix |
Permission denied writing | Re-run scan, verify target DLO exists and is writable |
Deploy fails - wrong directory | Ensure --package-dir points to payload/ directory, not project root |
run command before deploying--package-dir ./payloadUse with data360-schema-get skill (CRITICAL for validation):
The data360-schema-get skill is required for validating DLOs before testing code extensions.
Use with Datakit Workflow:
| Command | Purpose | Required Args |
|---|---|---|
script init | Create new script project | --package-dir |
function init | Create new function project | --package-dir |
script scan | Generate config | entrypoint file |
script run | Test locally | entrypoint file, --target-org |
script deploy | Deploy to Data Cloud | --target-org, --name, --package-dir, --package-version, --description |
© 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 2 other files (references) in skills/data360-code-extension-generate of forcedotcom/sf-skills.
Open the folder on GitHubat commit e5164d9
Data360 Code Extension 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 |
|---|---|---|---|---|---|---|
| Data360 Code Extension Generate this skillforcedotcom/sf-skills | 1.1k | — | ~2.7k | Automated safety check: Pass | Apache-2.0 | |
| CRM Data CleanupOneWave-AI/claude-skills | 323 | 1 repos | ~2.5k | Automated safety check: Pass | MIT | |
| Pandas ProJeffallan/claude-skills | 12k | 1 repos | ~1.5k | Automated safety check: Pass | MIT | |
| Openbb Data Fetchermonarchjuno/vibe-investing | 299 | — | ~2.9k | Automated safety check: Notes | MIT | |
| Credit Risk Data Cleaninggithub/awesome-copilot | 40k | 1 repos | ~1.5k | Automated safety check: Pass | MIT | |
| Aic Collector Op Developmentai-dynamo/aiconfigurator | 455 | — | ~3k | Automated safety check: Pass | Apache-2.0 |
OneWave-AI/claude-skills
Finds duplicate and junk records in a CRM CSV export with fuzzy matching, normalizes fields and writes a reviewable merge plan plus import-ready files without touching the live CRM.
Jeffallan/claude-skills
Handles pandas DataFrame work: cleaning, merging, groupby aggregation, pivots, time-series resampling and memory tuning, with checks on dtypes, shapes and nulls.
monarchjuno/vibe-investing
Fetch financial, market, economic, fundamental, news, options, crypto, ETF, index, and macro data through the OpenBB Python interface instead of the OpenBB MCP server.
github/awesome-copilot
Cleans raw credit data and screens variables before loan modeling, dropping unstable, noisy or redundant features and writing an Excel report of every step.
ai-dynamo/aiconfigurator
Design, add, review, or modify AIC Collector operations and their case population.
openJiuwen-ai/sciencediscovery
A skill your agent uses when you need to write and execute Python/R code to process, transform, and analyze data, delivering reproducible computational results with complete code-level methodology…
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.
Works with
Categories
Develop and deploy Data Cloud Code Extensions using SF CLI plugin. Data360 Code Extension Generate is an agent skill from forcedotcom/sf-skills. Develop and deploy Data Cloud Code Extensions using SF CLI plugin.
Data360 Code Extension Generate fits situations like: creating custom Python transformations for Data Cloud; deploying code extensions; testing data transformations.
Run `npx skills add forcedotcom/sf-skills --skill data360-code-extension-generate -a claude-code`. Or copy the skill folder (skills/data360-code-extension-generate in forcedotcom/sf-skills) into .claude/skills/data360-code-extension-generate in your project. Claude Code loads it when a task matches its description.
Run `npx skills add forcedotcom/sf-skills --skill data360-code-extension-generate -a codex`. Or copy the skill folder (skills/data360-code-extension-generate in forcedotcom/sf-skills) into .agents/skills/data360-code-extension-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 data360-code-extension-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/data360-code-extension-generate, .gemini/skills/data360-code-extension-generate, .github/skills/data360-code-extension-generate and .opencode/skills/data360-code-extension-generate in your project.
Going by SKILL.md and its folder, Data360 Code Extension Generate needs the command-line tools its instructions call (sf, pip, python, pyenv, docker and python3). Our summary lists: Python 3; Docker.
SKILL.md names 3 domains. As links in the text: github.com, help.salesforce.com and pypi.org. 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. Review the folder before installing.
Data360 Code Extension 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 2.7k tokens (SKILL.md is roughly 11k 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 2.9k tokens, read only when the agent opens those files.
Skills that share tags, products or a category with Data360 Code Extension Generate: CRM Data Cleanup (OneWave-AI/claude-skills, 323 stars), Pandas Pro (Jeffallan/claude-skills, 12k stars), Openbb Data Fetcher (monarchjuno/vibe-investing, 299 stars) and Credit Risk Data Cleaning (github/awesome-copilot, 40k 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,060 GitHub stars. The repository holds 251 skills in this directory. The repository was last updated on October 7, 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.