Agent skill

Platform Datamask Run

by forcedotcom in forcedotcom/sf-skills

Data Mask end-to-end operation on a sandbox: configure a masking policy over PII, run the masking job, poll it to completion, report masked-record results, and abort an in-progress run.

Apache-2.0Auto-check passedSales & Support

Install Platform Datamask Run

skills CLI
$ npx skills add forcedotcom/sf-skills --skill platform-datamask-run -a claude-code

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

GitHub CLI
$ gh skill install forcedotcom/sf-skills platform-datamask-run --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/platform-datamask-run .claude/skills/platform-datamask-run && 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
platform-datamask-run
GitHub stars
1.1k
Token cost
~5.5k tokens
SKILL.md length
2,739 words
Files
5 (incl. scripts, references)
Skills in repo
248
Repo updated
First seen
Licence
Apache-2.0

At a glance

Data Mask end-to-end operation on a sandbox: configure a masking policy over PII, run the masking job, poll it to completion, report masked-record results, and abort an in-progress run.

  • Works in 2 steps: Metadata-deploy the thin shell in mdapi… → Tooling-insert the DataMaskPolicyObject…
  • The user needs to run
  • SKILL.md covers When This Skill Owns the Task, The One Thing to Get Right…, Pick the workflow that matches… and Workflow A — Mask & report, plus 6 more sections
  • Runs Shell scripts from its folder; calls sf, bash and python3

What it does

Platform Datamask Run is an agent skill from forcedotcom/sf-skills. Data Mask end-to-end operation on a sandbox: configure a masking policy over PII, run the masking job, poll it to completion, report masked-record results, and abort an in-progress run. Use when the user needs to run, monitor, or cancel a Salesforce Data Mask job, mask PII/sandbox data, or work with DataMaskPolicy / DataMaskPolicyJobRun. TRIGGER when: user runs a data mask job, masks sandbox PII, polls masking status, reports masked records, or aborts a running mask. DO NOT TRIGGER when: writing anonymization…

Its SKILL.md is about 5.5k tokens, which your agent loads only when the skill is triggered. The skill folder holds 6 other files, including scripts and reference files (for example `references/api-surface.md`, `references/policy-authoring.md` and `references/run-and-abort.md`).

It sits in Sales & Support, covering CRM management, Test generation and End-to-end testing. 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

  • The user needs to run
  • Cancel a Salesforce Data Mask job
  • Mask PII/sandbox data
  • Work with DataMaskPolicy / DataMaskPolicyJobRun

Example prompts

  • “/platform-datamask-run”

Requirements

  • A Bash shell

Workflow steps

2 steps, taken from the first numbered list in SKILL.md.

  1. Metadata-deploy the thin shell in mdapi format (--metadata-dir + package.xml; a
  2. Tooling-insert the DataMaskPolicyObject (one per object) then its DataMaskPolicyField

What it can do on your machine

Read from SKILL.md and the folder at commit 3c15867. 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), which the agent can run.

    Shell commands in SKILL.md call:

    • sf
    • bash
    • python3

    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

Platform Datamask Run loads about 5.5k tokens when it runs, and up to ~11k if it reads all its reference files. Until then it costs about 173 tokens; SKILL.md has 2,739 words of instructions outside code blocks.

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

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 3c15867, republished under its Apache-2.0 licence (© forcedotcom). 2,739 words, ~5,473 tokens.

Download SKILL.mdSave it as .claude/skills/platform-datamask-run/SKILL.md (or your agent's skills folder). This skill also uses 4 other files; get the full folder from GitHub.
name
platform-datamask-run
description
Data Mask end-to-end operation on a sandbox: configure a masking policy over PII, run the masking job, poll it to completion, report masked-record results, and abort an in-progress run. Use when the user needs to run, monitor, or cancel a Salesforce Data Mask job, mask PII/sandbox data, or work with DataMaskPolicy / DataMaskPolicyJobRun. TRIGGER when: user runs a data mask job, masks sandbox PII, polls masking status, reports masked records, or aborts a running mask. DO NOT TRIGGER when: writing anonymization Apex by hand (use platform-apex-generate), generating test data (use platform-data-manage), or deploying unrelated metadata (use platform-metadata-deploy).
metadata.version
1.0
metadata.domains
Platform
metadata.minApiVersion
67.0
metadata.relatedSkills
platform-apex-generate, platform-data-manage, platform-metadata-deploy

platform-datamask-run: Salesforce Data Mask End-to-End Operation

Use this skill to operate the Salesforce Data Mask feature on a sandbox: configure a masking policy over PII fields, start a masking job, poll it to a terminal state, report which records were masked, and abort a run that is still in progress.

Data Mask is sandbox-only — the run/abort REST endpoints return 403 on production (a runtime sandbox guard). Confirm the target org is a sandbox before starting.

When This Skill Owns the Task

  • Running a Data Mask job against a configured policy
  • Polling masking-job status to completion
  • Reporting masked-record counts / per-object results
  • Aborting (canceling) an in-progress masking run
  • Creating or identifying the policy the job runs against

Delegate elsewhere when the user is:

  • hand-writing anonymization Apex → platform-apex-generate
  • seeding or generating test data → platform-data-manage
  • deploying unrelated metadata → platform-metadata-deploy

The One Thing to Get Right First: the API surface map

The single biggest failure mode is assuming Data Mask entities are ordinary data-API objects. They are not, and the surface differs per entity. Memorize this table before running anything — guessing here is what turns a 3-second job into a 30-minute dead end.

EntityWhat it isHow you reach it
DataMaskPolicyThe masking policy shell (config)Tooling API or Metadata API (thin shell: <label>/<description>/<runOnRefresh> only) — NOT standard SOQL/sobject describe
DataMaskPolicyObjectAn object targeted by a policy (holds the optional row filter)Tooling API only — query AND insert; row-subset "sample" runs set FilterEnabled+WhereCriteria here (no sampleSize on the policy)
DataMaskPolicyFieldA field + its masking treatmentTooling API only — query AND insert; treatment cols are MaskingCategory + MaskValue
DataMaskPolicyJobRunThe job (one masking run)Standard SOQL — sf data query works
DataMaskPolicyJobRunDtlPer-object job detail (child, FK DataMaskPolicyJobRunId)Standard SOQL
Start a run—REST run API POST /services/data/v67.0/platform/data-resilience/data-mask/policies/{policyId}/run
Abort a run—REST run API POST /services/data/v67.0/platform/data-resilience/data-mask/jobs/{jobRunId}/abort

Concretely:

  • sf sobject describe --sobject DataMaskPolicy → NOT_FOUND (don't retry it against standard API)
  • SELECT ... FROM DataMaskPolicy via sf data query → INVALID_TYPE
  • Query the policy via Tooling: sf data query --use-tooling-api --query "SELECT Id, MasterLabel FROM DataMaskPolicy"
  • Query the job / job-detail via standard API: sf data query --query "SELECT Id, Status FROM DataMaskPolicyJobRun"

Full command reference: references/api-surface.md.


Pick the workflow that matches the request

This skill has two distinct workflows. Select ONE up front from what the user asked for, then run every step of that workflow — neither has optional steps:

The user wants to…RunEnds when
Configure/edit a policy and mask records; report how many were maskedWorkflow A — Mask & report (below)The masked count is reported from the detail rows
Cancel / abort a masking runWorkflow B — Cancel a run (further below)The job's status is confirmed canceled

Choose by the verb in the request. "Create/edit a policy and run it", "mask the PII", "how many records were masked" → Workflow A only. "Abort", "cancel", "stop the run" → Workflow B. A mask-and-report request does not include an abort: do not start a second job to "demonstrate" cancelling — an unrequested run wastes a full ~5–10 min job (see the pool floor in A4) and is the top cause of this task running out of turn before it finishes the masked count it was asked for.


Workflow A — Mask & report

A1. Confirm sandbox + capture org context

Verify the org is a sandbox and grab the instance URL + a session token for the run-API calls:

bash
sf org display --target-org <alias> --json
A2. Identify or create the policy

Prefer reusing an existing policy (fastest, no deploy):

bash
sf data query --use-tooling-api --target-org <alias> \
  --query "SELECT Id, DeveloperName, MasterLabel FROM DataMaskPolicy"

If none targets the Contact PII you need, author one with the two-step recipe (the DataMaskPolicy Metadata shape is a thin shell; membership is Tooling-inserted):

  1. Metadata-deploy the thin shell in mdapi format (--metadata-dir + package.xml; a source-format --source-dir deploy fails "Could not infer a metadata type"). The shell carries only <label>, <description>, <runOnRefresh>. This creates the policy with an active revision, which A2 requires.
  2. Tooling-insert the DataMaskPolicyObject (one per object) then its DataMaskPolicyField rows. Each field row's treatment is MaskingCategory (library) + MaskValue (a snake_case token like first_name, email, phone). There is no MaskingRuleType column.

Insert order matters: a Tooling-created parent (no active revision) makes the child insert fail INSUFFICIENT_ACCESS_ON_CROSS_REFERENCE_ENTITY. Metadata-deploy the shell first.

See references/policy-authoring.md for the full recipe and the MaskValue token table. Choose a MaskValue appropriate to each field; do not blanket-replace.

A3. Start the masking run (REST run API)
bash
printf '{}' > ./empty-body.json
sf api request rest \
  "/services/data/v67.0/platform/data-resilience/data-mask/policies/{policyId}/run" \
  --method POST --body @./empty-body.json --target-org <alias>

The endpoint needs an empty JSON body ({}) — sf api request rest requires --body on a POST even when the API takes no payload. Pass the file with an @ prefix (--body @./empty-body.json); without it the literal path is sent as the body and the API returns JSON_PARSER_ERROR. A 200 returns jobRunId, policyId, status (the run-API status is UPPERCASE, e.g. RUNNING) and message: "Job started successfully". A 409/CONFLICT means a run is already in progress for that policy.

Write report.md NOW, before you poll — do not wait until the end. The masking job takes several minutes (see below), and the single most common way this task scores zero is the turn ending during the poll with no output file written at all. The instant you have the jobRunId, write report.md with everything known so far (policy Id/label, the run command, the jobRunId, status RUNNING, and a "polling for completion…" placeholder for the masked count). Then update that same file once the job finishes. A report that exists and says "still running" beats no file; a fabricated count is worse than either — only fill the count from the detail rows (A5).

A4. Poll to a terminal state (standard SOQL)

Poll DataMaskPolicyJobRun.Status until it reaches a terminal value. Do not report a mid-run status as final.

  • Mid-run (pre-work): pending, scheduled — the job is queued but not yet abortable
  • Mid-run (working): running — this is the only state in which abort succeeds
  • Terminal: completed, completed_with_errors, failed
  • Abort target: canceled (single "l")

pending is not running. Abort on a pending/scheduled job returns 409 CONFLICT ("Job is not in a running state ... status=PENDING"). You must poll until the status is literally running before you can abort — see Workflow B.

Jobs are slow — expect several minutes, and poll with the bundled script. Data Mask runs on a backend pool/scheduler with a ~5–10 minute floor: even a tiny (20-row) job usually does not reach a terminal state or emit detail rows for several minutes after the run starts. This is fixed overhead, not proportional to row count. Plan the run around it — the single biggest failure mode is treating the job as instant, polling on a tight interval, and either timing out or writing a "still pending" report.

Run scripts/poll-job.sh as a single command — do not hand-roll a SOQL poll loop:

bash
bash scripts/poll-job.sh <alias> <jobRunId>        # defaults: cap 600s (10 min), 20s interval

It sleeps on a low-frequency interval, short-circuits the instant a ground-truth detail row appears, prints the terminal signal (completed/failed/canceled) on stdout, and exits 0 (or 1 on timeout). Call it once and read its result — do not wrap it in your own retry loop, and do not poll on a sub-10s interval (it just burns tool calls against a job that cannot finish sooner).

Ground truth is the detail rows, not the parent status. The parent DataMaskPolicyJobRun.Status can lag — it may read pending/running for a while after masking actually finished. Once a total_records_masked (or completed) DataMaskPolicyJobRunDtl row exists, the masking is done. poll-job.sh already encodes all of this — the bounded interval and timeout, the short-circuit on the ground-truth detail row, and the terminal-signal exit code — so you do not re-implement any of it inline. Run the poller once, read its exit signal, then update report.md (the stub you wrote before polling) with the terminal status and the masked count from A5.

A5. Report results from the job DETAIL object

The parent job carries an overall status; per-object masked counts live on the child DataMaskPolicyJobRunDtl (linked by DataMaskPolicyJobRunId). Report a concrete count, not a fabricated one:

bash
sf data query --target-org <alias> \
  --query "SELECT Id, DataMaskPolicyJobRunId, Status FROM DataMaskPolicyJobRunDtl WHERE DataMaskPolicyJobRunId = '<jobRunId>'"

Report only what the rows literally show — do not overstate granularity. The detail rows are object-level status_update entries (loaded, completed, total_records_masked for the object, e.g. Contact). They are not per-field rows. So state per-object success as an observed fact ("Contact: 27/27 records masked, 0 error rows"), but frame field-level success as an inference, not a direct observation — say "no field-level error rows were returned, so no field is reported as failed", not "all 5 fields succeeded" (the data does not carry a per-field success row to back that claim). Overstating an inference as an observation is the most common factuality miss here.


Workflow B — Cancel a run

Use this workflow when the request is to abort/cancel a masking run. It targets the run that is currently in progress — aborting is an on-demand action against a live job; nobody starts a job just to cancel it. Steps B1–B4 are all required.

B1. Confirm sandbox + identify the run to cancel

Confirm the org is a sandbox (sf org display) and get the jobRunId of the run to abort — the one the user is asking to cancel. Capture its DataMaskPolicyId too — you need it to start a replacement run if the abort window is missed (B2 exit 3 / exit 1). If they just started it, use that id; otherwise query for the active run:

bash
sf data query --target-org <alias> \
  --query "SELECT Id, Status, DataMaskPolicyId FROM DataMaskPolicyJobRun ORDER BY CreatedDate DESC LIMIT 5"

Note the DataMaskPolicyId (8dm prefix) of the run you pick — that is the <policyId> A3 needs.

Show full SKILL.md (1,233 more words)Show less
B2. Wait for the job to be running (the only abortable state)

You can only abort while DataMaskPolicyJobRun.Status is running. A pending/scheduled job 409s; a terminal one is already done. Poll for the running window with the bundled poller in its running mode — it exits the instant the status reads running (unlike the default mode, which waits for a terminal state), so it will not block past the abortable window:

bash
POLL_MODE=running bash scripts/poll-job.sh <alias> <jobRunId> 900 15

The cap is 900s (15 min), above the ~5–10 min scheduling floor so a slow-to-start job still gets caught. Handle every exit:

  • Exit 0 (prints running) → go straight to B3.
  • Exit 3 → the job raced to a terminal state before running was caught; the abort window is gone. Start a fresh run against the policy you captured in B1 (A3 with that <policyId>), then return here and poll the new jobRunId.
  • Exit 1 (timeout — the cap expired) → re-query the job's status:
    bash
    sf data query --target-org <alias> \
      --query "SELECT Id, Status FROM DataMaskPolicyJobRun WHERE Id = '<jobRunId>'"
    If it is still non-terminal (pending/scheduled/running), re-run the poller once more (same command) to continue waiting. If it is running, go to B3. If it is terminal, treat it like exit 3 — start a fresh run (A3 with the B1 <policyId>) and poll the new job.

Because of the ~5–10 min pool floor the running window is usually minutes wide, so there is time to catch it; do not poll with no delay.

If no run is currently in progress (the job already completed, or you must reproduce a run→cancel flow end to end), start one first with A3, then return here — poll it to running and abort that live job. Never substitute an older, already-terminal job to "show" a cancel; the abort must target the run that is actually live.

B3. Abort via the run API

Abort via the run API — not by DML/delete on the job record:

bash
sf api request rest \
  "/services/data/v67.0/platform/data-resilience/data-mask/jobs/{jobRunId}/abort" \
  --method POST --body @./empty-body.json --target-org <alias>

Empty JSON body ({}) via the @-prefixed file, as above. A 200 returns status: "CANCELED" (uppercase, from the run API) and message: "Job abort requested". A 409 means the job was not in a running state (usually still pending/scheduled) — return to B2 and resume polling.

B4. Confirm and report the cancellation

Cancellation is asynchronous. Re-query DataMaskPolicyJobRun and confirm Status = canceled (lowercase, from SOQL) before reporting the abort succeeded. Verify:

  • Confirmed the abort targeted the live job while its queried status was running.
  • Re-queried DataMaskPolicyJobRun after the abort and saw Status = canceled.

High-Signal Rules

RuleRationale
Run each sf command bare — never add a pipe or redirect of any kind (|, | python3, | grep, 2>&1, 2>/dev/null, > file)sf ... --json already prints clean JSON on stdout; read it directly. A redirect/pipe trips an unbypassable shell-safety guard that silently stalls the whole run to timeout. Never post-process with python3/grep/jq, and never suppress stderr — even if a command prints a warning, the --json payload on stdout is still valid; just parse it as-is
Never use standard SOQL / sobject describe on DataMaskPolicy* config objectsThey return INVALID_TYPE / NOT_FOUND — use Tooling API or MDAPI
Read masked counts from DataMaskPolicyJobRunDtl, never invent themThe child detail is the source of truth for per-object results
Only completed / completed_with_errors / failed are terminalReporting running/scheduled as final is wrong
Abort only via the run-API abort endpointDML/delete on the job record is not a real abort and corrupts state
Always re-query status after abort and confirm canceledAn abort call returning 200 is not proof the job stopped
Data Mask runs on sandboxes onlyRun/abort endpoints 403 on production
Use API version v67.0 or later, and no /connect/ segmentThe run/abort endpoints are /services/data/v67.0/platform/data-resilience/data-mask/... — a connect segment or a pre-v67 version returns NOT_FOUND
Poll via scripts/poll-job.sh (one call), never a hand-rolled SOQL loopThe script caps attempts and short-circuits on the ground-truth detail row; a manual loop against the lagging parent status is the #1 cause of a run timing out with no report

Gotchas

IssueResolution
sf sobject describe DataMaskPolicy → NOT_FOUNDIt's a Tooling/MDAPI entity — query with --use-tooling-api, don't retry standard API
SELECT ... FROM DataMaskPolicy → INVALID_TYPESame cause — use Tooling API for the policy; standard API only for DataMaskPolicyJobRun/Dtl
Run start returns 409A run is already in progress for that policy — poll the existing one or wait for it to finish
Abort returns 409 "status=PENDING"The job is still pending/scheduled, not yet running — keep polling and abort only once it reads running; don't give up on the abort
Small job finishes before you can abort itThe running window is seconds on a small sandbox — start a fresh run and poll tightly; never substitute a previously-aborted job to fake the flow
Abort returns 200 but SOQL status still runningCancellation is async — keep polling the SOQL status until canceled; don't report success early
Run API says CANCELED but SOQL says runningCase + surface differ: the run API is UPPERCASE, SOQL picklist is lowercase. Trust the SOQL value for terminal state
Job "finished" instantlyRe-check: scheduled is not terminal. Poll until a terminal value actually appears
Run/abort endpoint NOT_FOUNDThe path must be /services/data/v67.0/platform/data-resilience/data-mask/... — no /connect/ segment, and version v67.0+ (Core 262). See references/api-surface.md

Output Format

Report the sections for the workflow you ran — do not add sections for the other one. Keep it tight — show each command once, at the step it belongs to; do not append a second "full command log" that repeats calls already shown. Prefer a compact table over prose; a reader should reach the key result in the first screenful.

Workflow A (mask & report):

  1. Policy used (Id + label, and whether reused or created)
  2. Run — job Id, final terminal status, masked-record count (from the detail object). Collapse the poll loop to one line (e.g. "polled 5×, running→completed"); do not print a row per poll.
  3. Per-object results — from DataMaskPolicyJobRunDtl. Report the object-level counts the rows actually carry; if there are no field-level error rows, say so as an inference ("no field-level errors reported"), not as a claimed per-field success. See A5 for the exact phrasing.
  4. Commands run — already shown inline above; here just list any not yet shown. Do not re-paste the full sequence a second time.

Workflow B (cancel a run):

  1. Job cancelled — the job Id, that it was running when aborted, that the abort was issued via the run-API abort endpoint, and the re-queried canceled status.
  2. Commands run — as above, no re-pasting.

Accuracy notes that keep factuality high:

  • The run/abort REST response returns a 15-character jobRunId (e.g. 1aGXK0000000uob); SOQL returns the 18-character form of the same record (e.g. 1aGXK0000000uob2AA). They are the same job — when both appear, note that rather than presenting them as two IDs.
  • Do not assert a masked count, a per-field outcome, or a terminal status you did not actually query. Every number in the report must trace to a query result shown in the command log.

Cross-Skill Integration

NeedDelegate toReason
Seed realistic PII records to maskplatform-data-manageTest-data creation
Author custom anonymization Apexplatform-apex-generateApex authoring
Deploy the policy metadata to the orgplatform-metadata-deployMetadata deployment

Reference File Index

FileWhen to read
references/api-surface.mdExact per-entity API surface, all CLI commands, run/abort REST endpoints, and status picklist values
references/policy-authoring.mdTwo-step authoring recipe (MDAPI thin shell → Tooling object/field inserts) and the MaskingCategory/MaskValue treatment table
references/run-and-abort.mdThe run → poll → report → re-run → abort sequence in full, with sample responses
scripts/poll-job.shBounded poller: waits for a terminal status (default) or, with POLL_MODE=running, for the abortable running window

© 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 4 other files (scripts, references) in skills/platform-datamask-run of forcedotcom/sf-skills.

  • SKILL.md
  • references/api-surface.md
  • references/policy-authoring.md
  • references/run-and-abort.md
  • scripts/poll-job.sh

Open the folder on GitHubat commit 3c15867

Compare with similar skills

Platform Datamask Run 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.

Platform Datamask Run compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Platform Datamask Run this skillforcedotcom/sf-skills1.1k—~5.5kAutomated safety check: PassApache-2.0
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/Portwood125—~1.1kAutomated safety check: PassApache-2.0
Sf FlowJaganpro/sf-skills424—~1.8kAutomated safety check: PassMIT

Similar skills

  • 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 4 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 4 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.

    125 GitHub stars~1.1k tokensUpdated 2 days ago
    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
  • Google Maps Export

    gmapsscraper/google-maps-agent-skills

    Export Google Maps business data to CSV, JSON, or CRM format (HubSpot, Pipedrive, Salesforce).

    131 GitHub stars~1.2k tokensUpdated 4 mo ago
    Sales & SupportAuto-check passed

More from forcedotcom/sf-skills

All 248 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~3.6k tokensUpdated 5 days ago
    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~2.9k tokensUpdated 5 days ago
    Auto-check passed
  • Apply a Salesforce sandbox post-copy automation JSON config against a target org.

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

    1.1k GitHub stars~5.4k tokensUpdated 5 days ago
    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 5 days ago
    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 5 days ago
    Auto-check passed

Works with

Questions about Platform Datamask Run

What does Platform Datamask Run do?

Data Mask end-to-end operation on a sandbox: configure a masking policy over PII, run the masking job, poll it to completion, report masked-record results, and abort an in-progress run. Platform Datamask Run is an agent skill from forcedotcom/sf-skills. Data Mask end-to-end operation on a sandbox: configure a masking policy over PII, run the masking job, poll it to completion, report masked-record results, and abort an in-progress run.

When should I use Platform Datamask Run?

Platform Datamask Run fits situations like: the user needs to run; cancel a Salesforce Data Mask job; mask PII/sandbox data; work with DataMaskPolicy / DataMaskPolicyJobRun.

How do I install Platform Datamask Run in Claude Code?

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

How do I install Platform Datamask Run in Codex?

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

Can I use Platform Datamask Run 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 platform-datamask-run -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/platform-datamask-run, .gemini/skills/platform-datamask-run, .github/skills/platform-datamask-run and .opencode/skills/platform-datamask-run in your project.

What does Platform Datamask Run need to run?

Going by SKILL.md and its folder, Platform Datamask Run needs a shell for the scripts in its folder and the command-line tools its instructions call (sf, bash and python3). Our summary lists: A Bash shell.

Does Platform Datamask Run 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 Platform Datamask Run 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 Platform Datamask Run use?

Platform Datamask Run 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 Platform Datamask Run use?

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

What are the alternatives to Platform Datamask Run?

Skills that share tags, products or a category with Platform Datamask Run: Soql Lib Query Builder (beyond-the-cloud-dev/soql-lib, 154 stars), Sf Datacloud (Jaganpro/sf-skills, 424 stars), Soql Lib Selector (beyond-the-cloud-dev/soql-lib, 154 stars) and Dev Setup (Portwood-Global-Solutions/Portwood, 125 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Platform Datamask Run?

forcedotcom (a GitHub organization) maintains it in forcedotcom/sf-skills, which has 1,058 GitHub stars. The repository holds 248 skills in this directory. The repository was last updated on October 3, 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.