Soql Lib Query Builder
beyond-the-cloud-dev/soql-lib
Builds Salesforce SOQL queries using the SOQL Lib fluent builder API (SOQL.cls).
A skill your agent uses to create, generate, or validate Salesforce Custom Setting metadata.
$ npx skills add forcedotcom/sf-skills --skill platform-custom-setting-generate -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install forcedotcom/sf-skills platform-custom-setting-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/platform-custom-setting-generate .claude/skills/platform-custom-setting-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 "platform-custom-setting-generate" agent skill from https://github.com/forcedotcom/sf-skills/tree/main/skills/platform-custom-setting-generate into .claude/skills/platform-custom-setting-generate/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "platform-custom-setting-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/platform-custom-setting-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 platform-custom-setting-generate -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install forcedotcom/sf-skills platform-custom-setting-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/platform-custom-setting-generate .agents/skills/platform-custom-setting-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 "platform-custom-setting-generate" agent skill from https://github.com/forcedotcom/sf-skills/tree/main/skills/platform-custom-setting-generate into .agents/skills/platform-custom-setting-generate/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "platform-custom-setting-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 platform-custom-setting-generate -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install forcedotcom/sf-skills platform-custom-setting-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/platform-custom-setting-generate .cursor/skills/platform-custom-setting-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 "platform-custom-setting-generate" agent skill from https://github.com/forcedotcom/sf-skills/tree/main/skills/platform-custom-setting-generate into .cursor/skills/platform-custom-setting-generate/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "platform-custom-setting-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/platform-custom-setting-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 platform-custom-setting-generate -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install forcedotcom/sf-skills platform-custom-setting-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/platform-custom-setting-generate .gemini/skills/platform-custom-setting-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 "platform-custom-setting-generate" agent skill from https://github.com/forcedotcom/sf-skills/tree/main/skills/platform-custom-setting-generate into .gemini/skills/platform-custom-setting-generate/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "platform-custom-setting-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 platform-custom-setting-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 platform-custom-setting-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/platform-custom-setting-generate .github/skills/platform-custom-setting-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 "platform-custom-setting-generate" agent skill from https://github.com/forcedotcom/sf-skills/tree/main/skills/platform-custom-setting-generate into .github/skills/platform-custom-setting-generate/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "platform-custom-setting-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 platform-custom-setting-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 platform-custom-setting-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/platform-custom-setting-generate .opencode/skills/platform-custom-setting-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 "platform-custom-setting-generate" agent skill from https://github.com/forcedotcom/sf-skills/tree/main/skills/platform-custom-setting-generate into .opencode/skills/platform-custom-setting-generate/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "platform-custom-setting-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.
platform-custom-setting-generateA skill your agent uses to create, generate, or validate Salesforce Custom Setting metadata.
Platform Custom Setting Generate is an agent skill from forcedotcom/sf-skills. Use to create, generate, or validate Salesforce Custom Setting metadata. Trigger on custom settings (hierarchy/list), customSettingsType, SetupOwnerId, per-profile/per-user config overrides, feature flags/toggles, kill switches, or admin on/off switches (e.g. bypass triggers during a data load); also "create a custom setting" or a setting that silently deployed as a regular object. A kill switch is just a checkbox on a hierarchy setting — generate ONLY the setting, never an Apex trigger/handler. DO NOT TRIGGER…
Its SKILL.md is about 5.5k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in Sales & Support, covering CRM management. 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.
9 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:
sfFrom the folder's file list and the shell code blocks in SKILL.md.
Hosts in commands or code, which the agent is likely to contact:
soap.sforce.comFrom 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.
Platform Custom Setting Generate loads about 5.5k tokens when it runs. Until then it costs about 182 tokens; SKILL.md has 2,547 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). 2,547 words, ~5,469 tokens.
.claude/skills/platform-custom-setting-generate/SKILL.md (or your agent's skills folder).Use this skill when you need to:
A trigger bypass / kill switch is a Custom Setting — not Apex and not a
__mdt. When the user wants a switch admins can flip to turn behavior on or off — "disable my Account triggers during a data load", a feature toggle, a maintenance-mode flag — generate only a hierarchy custom setting with aCheckboxfield (e.g.Disable_Triggers__c/Bypass__c). Do not author the Apex trigger, handler, or test that reads it, and do not model it as a Custom Metadata Type: the per-profile/per-user override a bypass flag needs is exactly what a hierarchy custom setting gives you and a__mdtdoes not. The Apex that checks the flag is the developer's to write — this skill generates the setting only.
This document defines the mandatory constraints for generating Custom Setting metadata. A custom setting is
a CustomObject with <customSettingsType> set — it is not a distinct metadata type.
File extension: .object-meta.xml
File path: force-app/main/default/objects/<Name>__c/<Name>__c.object-meta.xml
API name suffix: __c (identical to a regular custom object — the suffix does not distinguish them)
Values are data, not metadata. You can generate the setting's definition as XML, but you cannot deploy its values that way. There is no source-format equivalent of
customMetadata/for custom settings. Never generate a file that claims to carry setting values — see Section 6 for what to do instead.
<customSettingsType> is mandatory — CRITICALThis is the single highest-severity rule in this skill. Omitting <customSettingsType> does not
produce a "you forgot customSettingsType" error. The component silently stops being a custom setting and
is validated as a plain custom object.
The failure is dangerous because it is recoverable in the wrong direction: an agent that omits the element, then obediently fixes each error the platform reports, ends up with a green deploy and completely the wrong kind of component.
| What you see | What it means |
|---|---|
Must specify a non-empty plural label for the CustomObject | You are NOT building a custom setting. customSettingsType is missing. Add it — do not add pluralLabel. |
Cannot specify: nameField for CustomSettings | You ARE building a custom setting. Remove the named element. |
These two strings are mutually exclusive tells. The giveaway in the first is the phrase
for the CustomObject and the absence of any mention of custom settings.
If a deploy reports Must specify a non-empty plural label for the CustomObject on something the user
asked to be a custom setting, never satisfy that error by adding <pluralLabel>. Adding it (plus
nameField, deploymentStatus, and sharingModel) makes the deploy succeed and creates a regular custom
object that the user did not ask for.
| Element | Requirement | Notes |
|---|---|---|
<customSettingsType> | Required | Hierarchy or List — see Section 3 |
<label> | Required | Singular UI name |
<visibility> | Always include | Public, or Protected only in a dev/sandbox/scratch org (Section 5) |
<description> | Always include | Explain what the setting controls and who edits it |
<enableFeeds> | Optional | Accepted |
<listViews> | Optional | Accepted — permitted despite recordTypes and compactLayouts being forbidden |
Every element below produces Cannot specify: <element> for CustomSettings:
| Forbidden element | Note |
|---|---|
<pluralLabel> | Required on a regular custom object, forbidden here. Exactly inverted. |
<nameField> | The Name field exists implicitly on List settings |
<deploymentStatus> | |
<sharingModel> | Custom settings are not shared records |
<enableActivities> <enableReports> <enableHistory> <enableSearch> | |
<validationRules> | Enforce these in Apex instead |
<recordTypes> | |
<compactLayouts> |
INCORRECT — carries a regular custom object's required elements:
<CustomObject xmlns="http://soap.sforce.com/2006/04/metadata">
<customSettingsType>Hierarchy</customSettingsType>
<label>Feature Flags</label>
<pluralLabel>Feature Flags</pluralLabel> <!-- WRONG: forbidden on custom settings -->
<sharingModel>ReadWrite</sharingModel> <!-- WRONG: forbidden -->
<deploymentStatus>Deployed</deploymentStatus> <!-- WRONG: forbidden -->
<nameField> <!-- WRONG: forbidden -->
<label>Name</label>
<type>Text</type>
</nameField>
<visibility>Public</visibility>
</CustomObject>Errors: Cannot specify: pluralLabel for CustomSettings · Cannot specify: sharingModel for CustomSettings · Cannot specify: deploymentStatus for CustomSettings · Cannot specify: nameField for CustomSettings
CORRECT — minimum valid custom setting:
<?xml version="1.0" encoding="UTF-8"?>
<CustomObject xmlns="http://soap.sforce.com/2006/04/metadata">
<customSettingsType>Hierarchy</customSettingsType>
<label>Feature Flags</label>
<description>Per-profile and per-user toggles for beta features in the ordering app. Edited by admins in Setup.</description>
<visibility>Public</visibility>
</CustomObject>Note there is no <fullName>. A root-level one is tolerated and ignored, but omit it — the API name comes
from the directory and filename.
<customSettingsType>List</customSettingsType> deployed without needing the "Manage List Custom Settings
Type" toggle in Setup. That toggle exists in some orgs, so if a List setting is rejected on a
customSettingsType grounds in a different org, check Schema Settings before assuming the XML is wrong.
<customSettingsType> has exactly two values, and the choice changes how rows are addressed.
Hierarchy | List | |
|---|---|---|
| Use when | The value can vary per profile or per user, with an org-wide fallback | The setting is a small keyed reference table, the same for everyone |
| Row key | SetupOwnerId (Organization, Profile, or User) | Name |
| Resolution | User value → Profile value → org default | Look up by Name |
| Apex read | MySetting__c.getInstance() / getOrgDefaults() | MySetting__c.getValues('Key') / getAll() |
| Typical case | Feature flags, per-profile limits, debug toggles | Country codes, tax rates by region, integration endpoints by key |
Default to Hierarchy when the user describes toggles, limits, or anything that "can be overridden."
Choose List when they describe a lookup table with named rows.
If the user asks for a keyed reference table that should be deployable between orgs, a List custom
setting is usually the wrong answer — its rows are data and will not travel with the deploy. Route to
platform-custom-metadata-type-generate instead (Section 7).
Fields on a custom setting are ordinary CustomField components at
objects/<Name>__c/fields/<Field>__c.field-meta.xml.
This skill owns the custom-setting-specific deltas only — the supported-type allowlist and the
fieldManageability prohibition below. For everything generic (<fullName> derivation, <label>,
<description>, <inlineHelpText>, precision/scale, <length>, externalId), follow
platform-custom-field-generate.
Checkbox, Currency, Date, DateTime, Email, Number, Percent, Phone, Text, TextArea, Url
required, unique, externalId, and defaultValue are accepted on custom setting fields. Whether a
given one applies to a given type is a generic field rule — defer to platform-custom-field-generate.
Picklist, MultiselectPicklist, LongTextArea, Html, Lookup, MasterDetail, AutoNumber,
Location, Time, EncryptedText, and Formula (a <formula> element on any type).
Every one of these fails with the same bare, uninformative string:
Invalid data type.This error names neither field nor type. On a multi-field deploy, read componentFailures[].fullName
from the --json output to find the culprit — do not guess.
Roll-up summary fields are structurally impossible here — a Summary needs a master-detail child, and
MasterDetail is itself rejected on a custom setting. Don't generate one; the error text varies, so don't
match on a specific string.
Picklist is the common trap. Users frequently ask for a picklist on a custom setting. It is not
supported. Use Text and enforce the allowed values in Apex, or route the request to
platform-custom-metadata-type-generate — CMDT does support Picklist.
Near-inversion vs CMDT: Currency works here but not on CMDT; Picklist/LongTextArea work on CMDT but
not here. Never carry field-type assumptions across the two families.
<fieldManageability> is forbiddenThat element belongs to CMDT fields only. On a custom setting field it fails with:
Field manageability cannot be set on this entity.Protected is org-type dependent<visibility>Protected</visibility> deploys only in a developer, sandbox, or scratch org. Anywhere else:
You can't set the visibility for a Custom Setting to Protected unless you are in a developer, sandbox, or scratch org.If Protected fails because of the org type, never "fix" it by switching to Public. A silent
downgrade turns a deliberate confidentiality choice into a world-readable component with no signal. Report
it plainly: the org does not permit Protected, so the options are a dev/sandbox/scratch org or accepting
Public — let the user decide. This applies to any visibility narrowing, not just this error.
Custom settings are not a secret store. Values are readable by anyone who can query the object, and
Protected does not change that for code in the same namespace.
When a user asks to store an API key, password, token, client secret, or certificate in a custom setting:
Never route a secret to Protected visibility as a compromise: if Protected is unavailable (above),
the no-silent-downgrade rule applies with full force, because the downgrade would publish the secret.
A custom setting's rows cannot be deployed as XML. There is no customMetadata/-style folder for them.
Only the object definition and its fields are metadata.
When a user asks to create a setting with values — "add a feature flag setting with Beta enabled for admins" — do all of the following:
All three shapes below are verified working.
Omit SetupOwnerId. It defaults to the Organization Id, which is exactly the org-default row. No Id
lookup is needed.
sf data create record --sobject Feature_Flags__c \
--values "Enable_Beta__c=true Max_Retries__c=3" \
--target-org <alias>This one does need an Id, so it is two steps. A user-level override uses the same shape with a User Id
in place of the Profile Id (extrapolated from the profile case, not separately verified).
sf data query --query "SELECT Id FROM Profile WHERE Name='System Administrator'" --target-org <alias>
sf data create record --sobject Feature_Flags__c \
--values "SetupOwnerId=00eXXXXXXXXXXXXXXX Enable_Beta__c=false" \
--target-org <alias>An override row coexists with the org-default row; it does not replace it.
Name is the row key and is required.
sf data create record --sobject Country_Codes__c \
--values "Name='US' Iso_Code__c='USA' Dial_Prefix__c='+1'" \
--target-org <alias>Wrap the whole --values argument in double quotes; single-quote any value with a space or shell-special
character (Environment_Label__c='org default'). Plain numbers, booleans, and Ids need no inner quotes.
Values are read through the generated typed class — cached, so reads cost no SOQL and are safe inside loops and triggers. For a Hierarchy setting:
Feature_Flags__c cfg = Feature_Flags__c.getInstance(); // running user: user → profile → org default
Feature_Flags__c org = Feature_Flags__c.getOrgDefaults(); // org-default row only, no hierarchy
Feature_Flags__c forProfile = Feature_Flags__c.getInstance(profileId); // a User Id works too
Boolean beta = cfg.Enable_Beta__c;getInstance() and getOrgDefaults() never return null (API ≥ 22) — a missing record comes back as an
empty row, so test org.Id != null when you need to know whether a real record actually exists. For a
List setting, use getValues('Key') for one row or getAll() for the Map<String, Feature_Flags__c>
of every row.
Populating or changing values is runtime DML (Apex insert/update/upsert, or the sf commands
above) — there is no metadata path. That is the operational face of "values are data," and it has two
consequences worth stating to the user:
upsert
the setting once per record — hoist the write out of the loop and do it once.Before generating, confirm a custom setting is actually what the user needs. If it is not, say so and name the right skill rather than building the wrong thing.
| If the config is… | Use | Why |
|---|---|---|
| Admin-editable per profile/user, or a small keyed table that stays in one org | Custom Setting (this skill) | Values are data; they do not travel with a deploy |
| Reference data that must deploy between orgs with its records | platform-custom-metadata-type-generate | CMDT records are metadata and are deployable |
| Business records users create and edit at runtime | platform-custom-object-generate | Custom settings are configuration, not transactional data |
| Translatable UI text | Custom Label — this skill does not generate it | Labels are the supported translation surface |
| Credentials, API keys, tokens, endpoints with auth | Named Credential / External Credential — this skill does not generate them | See Section 5 |
| A permission check in Apex or a flow | Custom Permission — this skill does not generate it | Boolean access checks belong in the permission model |
The distinction that matters most: CMDT records deploy, custom setting values do not. If the user says "and it should ship with these values" or "the same in every org," that is a CMDT request.
| Error Message | Cause | Fix |
|---|---|---|
Must specify a non-empty plural label for the CustomObject | <customSettingsType> is missing, so this is being validated as a regular custom object | Add <customSettingsType>. Do NOT add <pluralLabel> (Section 2) |
Cannot specify: pluralLabel for CustomSettings | <pluralLabel> present | Remove it — required on custom objects, forbidden here |
Cannot specify: <element> for CustomSettings (<element> = nameField, sharingModel, deploymentStatus, validationRules, recordTypes, or compactLayouts) | A custom-object-only element is present | Remove it (enforce validation logic in Apex instead) |
Invalid data type. | Unsupported field type (Section 4) | Read componentFailures[].fullName to find the field; switch to a supported type |
Field manageability cannot be set on this entity. | <fieldManageability> on a setting field | Remove it — CMDT only |
You can't set the visibility for a Custom Setting to Protected unless you are in a developer, sandbox, or scratch org. | Protected in a production-like org | Report to the user; never silently switch to Public (Section 5) |
The Cannot specify: suffix is for CustomSettings (one word) versus CMDT's for Custom Metadata Type,
and the visibility error uses for a Custom Setting (spaced, singular). Do not assume a shared template
when matching these strings.
Before generating custom setting XML, verify:
<customSettingsType> present and set to Hierarchy or List?Must specify a non-empty plural label for the CustomObject, was it fixed by adding <customSettingsType> rather than by adding <pluralLabel>?sf sobject describe --sobject <Name>__c --target-org <alias> and verify customSetting is true.<label> and <visibility> present?<description> present and specific about what the setting controls?<pluralLabel> ABSENT?<nameField>, <sharingModel>, and <deploymentStatus> ABSENT?<enableActivities>, <enableReports>, <enableHistory>, and <enableSearch> ABSENT?<validationRules>, <recordTypes>, and <compactLayouts> ABSENT?__c?Picklist absent? (unsupported — use Text, or route to CMDT)<formula> element absent? (formulas are unsupported)<fieldManageability> ABSENT on every field?platform-custom-field-generate?sf commands given inline in the response, fully substituted with real API names and real values — not written to a file, not left as a template?SetupOwnerId omitted rather than guessed?Name supplied?getInstance / getOrgDefaults for Hierarchy, getValues / getAll for List)?Protected left intact rather than silently downgraded to Public on an org-type failure?platform-custom-metadata-type-generate recommended instead?platform-custom-object-generate recommended instead?© 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
Just SKILL.md in skills/platform-custom-setting-generate of forcedotcom/sf-skills.
Open the folder on GitHubat commit e5164d9
Platform Custom Setting 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 |
|---|---|---|---|---|---|---|
| Platform Custom Setting Generate this skillforcedotcom/sf-skills | 1.1k | — | ~5.5k | Automated safety check: Pass | Apache-2.0 | |
| Soql Lib Query Builderbeyond-the-cloud-dev/soql-lib | 154 | — | ~4.3k | Automated safety check: Pass | MIT | |
| Sf DatacloudJaganpro/sf-skills | 424 | — | ~2.7k | Automated safety check: Pass | MIT | |
| Soql Lib Selectorbeyond-the-cloud-dev/soql-lib | 154 | — | ~2k | Automated safety check: Pass | MIT | |
| Dev SetupPortwood-Global-Solutions/Portwood | 125 | — | ~1.1k | Automated safety check: Pass | Apache-2.0 | |
| Sf FlowJaganpro/sf-skills | 424 | — | ~1.8k | Automated safety check: Pass | MIT |
beyond-the-cloud-dev/soql-lib
Builds Salesforce SOQL queries using the SOQL Lib fluent builder API (SOQL.cls).
Jaganpro/sf-skills
Salesforce Data Cloud product orchestrator for connect→prepare→harmonize→segment→act workflows.
beyond-the-cloud-dev/soql-lib
Creates Salesforce Apex selector classes using the SOQL Lib selector pattern.
Portwood-Global-Solutions/Portwood
Get from a fresh clone of Portwood to a working, fully-tested Salesforce org.
Jaganpro/sf-skills
Creates and validates Salesforce Flows with 110-point scoring.
gmapsscraper/google-maps-agent-skills
Export Google Maps business data to CSV, JSON, or CRM format (HubSpot, Pipedrive, Salesforce).
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
A skill your agent uses to create, generate, or validate Salesforce Custom Setting metadata. Platform Custom Setting Generate is an agent skill from forcedotcom/sf-skills. Use to create, generate, or validate Salesforce Custom Setting metadata.
Platform Custom Setting Generate fits situations like: validate Salesforce Custom Setting metadata; custom settings (hierarchy/list); customSettingsType; per-profile/per-user config overrides.
Run `npx skills add forcedotcom/sf-skills --skill platform-custom-setting-generate -a claude-code`. Or copy the skill folder (skills/platform-custom-setting-generate in forcedotcom/sf-skills) into .claude/skills/platform-custom-setting-generate in your project. Claude Code loads it when a task matches its description.
Run `npx skills add forcedotcom/sf-skills --skill platform-custom-setting-generate -a codex`. Or copy the skill folder (skills/platform-custom-setting-generate in forcedotcom/sf-skills) into .agents/skills/platform-custom-setting-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 platform-custom-setting-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/platform-custom-setting-generate, .gemini/skills/platform-custom-setting-generate, .github/skills/platform-custom-setting-generate and .opencode/skills/platform-custom-setting-generate in your project.
Going by SKILL.md and its folder, Platform Custom Setting Generate needs the command-line tools its instructions call (sf).
SKILL.md names 1 domain. In commands or code: soap.sforce.com; the agent is likely to contact it when it follows the instructions. 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.
Platform Custom Setting 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 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.
Skills that share tags, products or a category with Platform Custom Setting Generate: 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.
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.