Soql Lib Query Builder
beyond-the-cloud-dev/soql-lib
Builds Salesforce SOQL queries using the SOQL Lib fluent builder API (SOQL.cls).
Agent skill
Enable the Agentforce for IT Service Salesforce Go feature toggles (Agentforce Studio, Einstein Generative AI, the parent umbrella, and the Fulfiller/Employee agent templates) using the Salesforce…
$ npx skills add forcedotcom/sf-skills --skill service-itsm-agentic-setup-agentforce-studio-configure -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install forcedotcom/sf-skills service-itsm-agentic-setup-agentforce-studio-configure --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/service-itsm-agentic-setup-agentforce-studio-configure .claude/skills/service-itsm-agentic-setup-agentforce-studio-configure && 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 "service-itsm-agentic-setup-agentforce-studio-configure" agent skill from https://github.com/forcedotcom/sf-skills/tree/main/skills/service-itsm-agentic-setup-agentforce-studio-configure into .claude/skills/service-itsm-agentic-setup-agentforce-studio-configure/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "service-itsm-agentic-setup-agentforce-studio-configure", 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/service-itsm-agentic-setup-agentforce-studio-configureType 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 service-itsm-agentic-setup-agentforce-studio-configure -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install forcedotcom/sf-skills service-itsm-agentic-setup-agentforce-studio-configure --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/service-itsm-agentic-setup-agentforce-studio-configure .agents/skills/service-itsm-agentic-setup-agentforce-studio-configure && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "service-itsm-agentic-setup-agentforce-studio-configure" agent skill from https://github.com/forcedotcom/sf-skills/tree/main/skills/service-itsm-agentic-setup-agentforce-studio-configure into .agents/skills/service-itsm-agentic-setup-agentforce-studio-configure/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "service-itsm-agentic-setup-agentforce-studio-configure", 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 service-itsm-agentic-setup-agentforce-studio-configure -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install forcedotcom/sf-skills service-itsm-agentic-setup-agentforce-studio-configure --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/service-itsm-agentic-setup-agentforce-studio-configure .cursor/skills/service-itsm-agentic-setup-agentforce-studio-configure && 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 "service-itsm-agentic-setup-agentforce-studio-configure" agent skill from https://github.com/forcedotcom/sf-skills/tree/main/skills/service-itsm-agentic-setup-agentforce-studio-configure into .cursor/skills/service-itsm-agentic-setup-agentforce-studio-configure/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "service-itsm-agentic-setup-agentforce-studio-configure", 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/service-itsm-agentic-setup-agentforce-studio-configure--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 service-itsm-agentic-setup-agentforce-studio-configure -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install forcedotcom/sf-skills service-itsm-agentic-setup-agentforce-studio-configure --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/service-itsm-agentic-setup-agentforce-studio-configure .gemini/skills/service-itsm-agentic-setup-agentforce-studio-configure && 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 "service-itsm-agentic-setup-agentforce-studio-configure" agent skill from https://github.com/forcedotcom/sf-skills/tree/main/skills/service-itsm-agentic-setup-agentforce-studio-configure into .gemini/skills/service-itsm-agentic-setup-agentforce-studio-configure/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "service-itsm-agentic-setup-agentforce-studio-configure", 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 service-itsm-agentic-setup-agentforce-studio-configureInstalls 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 service-itsm-agentic-setup-agentforce-studio-configure -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/service-itsm-agentic-setup-agentforce-studio-configure .github/skills/service-itsm-agentic-setup-agentforce-studio-configure && 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 "service-itsm-agentic-setup-agentforce-studio-configure" agent skill from https://github.com/forcedotcom/sf-skills/tree/main/skills/service-itsm-agentic-setup-agentforce-studio-configure into .github/skills/service-itsm-agentic-setup-agentforce-studio-configure/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "service-itsm-agentic-setup-agentforce-studio-configure", 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 service-itsm-agentic-setup-agentforce-studio-configure -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 service-itsm-agentic-setup-agentforce-studio-configure --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/service-itsm-agentic-setup-agentforce-studio-configure .opencode/skills/service-itsm-agentic-setup-agentforce-studio-configure && 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 "service-itsm-agentic-setup-agentforce-studio-configure" agent skill from https://github.com/forcedotcom/sf-skills/tree/main/skills/service-itsm-agentic-setup-agentforce-studio-configure into .opencode/skills/service-itsm-agentic-setup-agentforce-studio-configure/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "service-itsm-agentic-setup-agentforce-studio-configure", 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.
service-itsm-agentic-setup-agentforce-studio-configureEnable the Agentforce for IT Service Salesforce Go feature toggles (Agentforce Studio, Einstein Generative AI, the parent umbrella, and the Fulfiller/Employee agent templates) using the Salesforce…
Service Itsm Agentic Setup Agentforce Studio Configure is an agent skill from forcedotcom/sf-skills. Enable the Agentforce for IT Service Salesforce Go feature toggles (Agentforce Studio, Einstein Generative AI, the parent umbrella, and the Fulfiller/Employee agent templates) using the Salesforce CLI (sf). Turns ON org prefs via the Setup Discovery feature/{apiName}/enable Connect API route. Write-capable, idempotent, dependency-ordered, confirm-to-write required. Use when asked to enable Agentforce Studio, turn on Agentforce for IT Service, enable Einstein generative AI, or configure the org-level Agentforce…
Its SKILL.md is about 5.8k 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/cli-invocation.md`).
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.
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 these tools, so the agent can use them without asking each time:
BashReadAskUserQuestionFrom allowed-tools in the SKILL.md frontmatter.
Ships 3 files in scripts/ (JavaScript), which the agent can run.
Shell commands in SKILL.md call:
sfnodeFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From 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.
Service Itsm Agentic Setup Agentforce Studio Configure loads about 5.8k tokens when it runs, and up to ~9.6k if it reads all its reference files. Until then it costs about 237 tokens; SKILL.md has 2,370 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 noted patterns worth knowing about, such as sudo or a known installer.
allowed-tools: Bash, Read, AskUserQuestion, 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.
The full file from forcedotcom/sf-skills at commit e5164d9, republished under its Apache-2.0 licence (© forcedotcom). 2,370 words, ~5,765 tokens.
.claude/skills/service-itsm-agentic-setup-agentforce-studio-configure/SKILL.md (or your agent's skills folder). This skill also uses 4 other files; get the full folder from GitHub.Enable the Agentforce for IT Service Salesforce Go feature toggles — Einstein Generative AI, Agentforce Studio, the parent umbrella, and the path-specific agent template (Fulfiller or Employee) — entirely through the Salesforce CLI (sf). These toggles are the prerequisites for creating the Fulfiller/Employee agent; this write-capable step turns them on via the Setup Discovery POST /connect/setup/discovery/feature/{apiName}/enable Connect API route. Each toggle is enabled idempotently (skipped if already ENABLED), dependencies are enabled first, and explicit confirmation is required before any write.
| Step | Skill | What it does |
|---|---|---|
| 1. Validate | service-itsm-agentic-setup-agentforce-studio-validate | Read the toggles → READY / NOT-READY (no writes) |
| 2. Configure (this skill) | service-itsm-agentic-setup-agentforce-studio-configure | Turn the disabled toggles ON |
| 3. Create agent | service-itsm-agentic-setup-fulfiller-agent-configure | Create + activate the Fulfiller agent |
This skill is typically reached via hand-off from the validate skill's NOT-READY report, but can also be run directly.
A helper script — scripts/classify-enable-plan.mjs — reads the batched /features/status response and deterministically computes the dependency-ordered enable plan (before writing) and the final per-feature verdict (after writing). This mirrors the validate skill's classify-readiness.mjs contract (authoring standard A9): the decision logic lives in a script, not in prose.
sales-cloud-einstein-generative-ai), Agentforce Studio (sales-cloud-agent-studio), the parent umbrella (service-cloud-agentforce-for-itsm), and the path-specific template (service-cloud-it-fulfiller-agent for fulfiller; service-cloud-requestor-agent + service-cloud-it-service-employee-agent for employee) via POST .../feature/{apiName}/enable; reading live per-org state from /features/status before and after each write; enabling dependencies first; confirming enablement stuck via re-query; surfacing an ENABLED / ALREADY-ENABLED / FAILED verdict per feature. Writes are idempotent — skip if already ENABLED.service-itsm-agentic-setup-fulfiller-agent-configure); read-only prerequisite validation without writes (service-itsm-agentic-setup-agentforce-studio-validate); the org-wide multi-agent orchestration toggle (a Headless360-only pref, not a Connect feature).Determine whether the user is enabling prerequisites for the fulfiller agent or an employee agent. If unclear, ask (AskUserQuestion) — same path selection the validate skill uses:
sales-cloud-einstein-generative-ai → sales-cloud-agent-studio → service-cloud-agentforce-for-itsm → service-cloud-it-fulfiller-agentsales-cloud-einstein-generative-ai → sales-cloud-agent-studio → service-cloud-agentforce-for-itsm → service-cloud-requestor-agent → service-cloud-it-service-employee-agentEinstein Generative AI is a dependency of Agentforce Studio and is not one of the toggles the validate skill reports on directly, but it must be enabled first if it is off — the classifier includes it in the enable plan for both paths.
Same as the validate skill (they share the target org and API surface). If unmet, sf surfaces an auth error or a 401/403/404; do not fabricate state — surface the raw error and stop.
sf CLI installed and authenticated to the target org (sf org display -o <alias> shows Connected). All calls use --target-org <alias>; never extract or pass the access token by hand.connect/setup/discovery feature APIs are available at v67.0. The version is pinned in the URL path; do not hand-edit it below the minimum.node ≥ 18 on PATH (runs the classifier script).accessCheck) — a missing license surfaces as 403 or as enableBlockedReasons on the read.| Operation | Command | Returns |
|---|---|---|
| Read feature toggles | sf api request rest ".../connect/setup/discovery/features/status" --method POST --body '{"featureApiNames":[...]}' --target-org <alias> | {items:[{apiName,status,enableBlockedReasons[],dependencyStatuses[]}]} |
| Enable one toggle | sf api request rest ".../connect/setup/discovery/feature/{apiName}/enable" --method POST --body '{}' --target-org <alias> | {success:boolean} — endpoint takes no meaningful body, but --body '{}' must be passed explicitly (see gotchas) |
Both are Connect API routes reachable via sf api request rest — no Headless360 dispatcher required. Full command shapes, the response envelope, and the error taxonomy live in references/cli-invocation.md.
Never extract the access token. Use
sf api request restdirectly — it uses the CLI's stored session for the target org. Do not pull theaccessTokenout ofsf org displayand hand-build an HTTP request with it.
CRITICAL: DO NOT use IPCManagement
updateOrgPrefto flip agent prefs. That controller's write allow-list rejects the agent prefNames (Invalid prefName, 500). The Setup DiscoveryPOST /feature/{apiName}/enableendpoint is the only correct write path for these toggles.
| Step | What happens | Tool used |
|---|---|---|
| Pick path | Determine fulfiller vs employee (ask if unclear) | AskUserQuestion |
| Read current state | POST the feature-status batch for the path's toggles, capture to a file | Bash (sf api request rest) |
| Plan | Run scripts/classify-enable-plan.mjs <file> <agentType> [exitStatus] → dependency-ordered pending list | Bash (node) |
| Confirm-to-write | Present the exact pending list and require explicit "yes" | AskUserQuestion |
| Enable | Re-read + reclassify before each apiName in order, POST .../feature/{apiName}/enable when unblocked, record the result | Bash (sf api request rest + node scripts/record-enable-result.mjs) |
| Verify | Re-read /features/status, re-run the classifier | Bash (sf + node) |
| Report | Run scripts/classify-final-report.mjs over the before/results/after files → final verdict | Bash (node) |
Substitute <alias> with the target org alias. <agentType> is fulfiller or employee.
POST the feature-status batch for every toggle the chosen path needs, capturing stdout to a file. Do not add --json. Write the request body once to a temp file and reuse it verbatim in Phases 1, 4, and 5 via --body "$(cat ...)" — never retype it, substitute a placeholder like [...], or rely on a shell variable, since each Bash invocation may run in a fresh shell where a plain variable would be unset:
cat > /tmp/feature-status-body.json <<'EOF'
{"featureApiNames":["sales-cloud-einstein-generative-ai","sales-cloud-agent-studio","service-cloud-agentforce-for-itsm","service-cloud-it-fulfiller-agent","service-cloud-requestor-agent","service-cloud-it-service-employee-agent"]}
EOF
sf api request rest "/services/data/v67.0/connect/setup/discovery/features/status" \
--method POST \
--body "$(cat /tmp/feature-status-body.json)" \
--target-org <alias> > /tmp/enable-status-before.json 2>/tmp/enable-status-before.err
echo $? > /tmp/enable-status-before.exitCapture the exit status — do not swallow it with || true.
Run the classifier over the captured file to compute the dependency-ordered enable plan, saving its output — Phase 6 consumes this file, not the raw /features/status response:
node "<skill_dir>/scripts/classify-enable-plan.mjs" /tmp/enable-status-before.json <agentType> "$(cat /tmp/enable-status-before.exit)" > /tmp/enable-plan-before.jsonIt prints { agentType, readState, features, order, alreadyEnabled, pending, blocked, unconfirmed, verdict, reasons, rawError }. verdict: "ALL-ENABLED" means nothing to do — skip to Phase 6. verdict: "NEEDS-ENABLE" means pending (in order) lists what to enable. blocked lists any pending toggle whose enableBlockedReasons is non-empty as of this read — a toggle blocked only on an earlier dependency in order becomes enable-able once that dependency is on, so Phase 4 re-checks each toggle immediately before attempting it rather than trusting this snapshot for the whole loop. unconfirmed lists any required toggle missing from the response or carrying a status this classifier doesn't recognize — verdict: "CANNOT-CONFIRM" (not "ALL-ENABLED") when unconfirmed is non-empty and pending is empty. readState: "error" ⇒ surface rawError and stop; readState: "not-wired" ⇒ report CANNOT-CONFIRM and stop.
pending list (excluding anything in blocked) and require an explicit "yes" from the user via AskUserQuestion before proceeding. Enabling org prefs mutates org state. Proceed to Phase 4 ONLY on an explicit "yes". On "no", stop and report the current state without any writes.Iterate order in sequence (Einstein GenAI → Studio → parent → child template(s)). Before attempting to enable each <apiName>, re-read and reclassify — this is what lets a child that was blocked in Phase 2 (only because Studio/parent was still off) become enable-able once that dependency's own enable has landed, instead of being permanently written off from the Phase-2 snapshot:
sf api request rest "/services/data/v67.0/connect/setup/discovery/features/status" \
--method POST \
--body "$(cat /tmp/feature-status-body.json)" \
--target-org <alias> > /tmp/enable-status-loop.json 2>/tmp/enable-status-loop.err
echo $? > /tmp/enable-status-loop.exit
node "<skill_dir>/scripts/classify-enable-plan.mjs" /tmp/enable-status-loop.json <agentType> "$(cat /tmp/enable-status-loop.exit)"Inspect features["<apiName>"].signal from that output:
PASS → already ENABLED; nothing to do, move to the next apiName in order.
FAIL with an empty enableBlockedReasons → enable it now:
sf api request rest "/services/data/v67.0/connect/setup/discovery/feature/<apiName>/enable" \
--method POST \
--body '{}' \
--target-org <alias> > /tmp/enable-<apiName>.json 2>/tmp/enable-<apiName>.err
node "<skill_dir>/scripts/record-enable-result.mjs" /tmp/enable-<apiName>.json <apiName> /tmp/enable-results.jsonThe /enable endpoint itself takes no meaningful body, but sf api request rest --method POST with no --body flag at all fails with Error (SfError): No 'mode' found in 'body' entry — always pass --body '{}' explicitly. record-enable-result.mjs reads the response, classifies it ENABLED/FAILED, and accumulates it into /tmp/enable-results.json keyed by apiName — the deterministic per-toggle bookkeeping Phase 6 consumes.
FAIL with a non-empty enableBlockedReasons → still blocked even after this iteration's re-check (a real, not merely-sequential, blocker — e.g. unlicensed) — do not POST; move to the next apiName in order and let Phase 6 report the blocker verbatim.
CANNOT-CONFIRM / ERROR on this specific apiName's read → stop the loop and surface the read failure; do not guess at remaining toggles.
One failed toggle does not block the rest of the plan — continue the loop.
Re-run the Phase 1 read (same /tmp/feature-status-body.json) into a fresh file, and re-run the classifier over it, saving its output for Phase 6:
sf api request rest "/services/data/v67.0/connect/setup/discovery/features/status" \
--method POST \
--body "$(cat /tmp/feature-status-body.json)" \
--target-org <alias> > /tmp/enable-status-after.json 2>/tmp/enable-status-after.err
echo $? > /tmp/enable-status-after.exit
node "<skill_dir>/scripts/classify-enable-plan.mjs" /tmp/enable-status-after.json <agentType> "$(cat /tmp/enable-status-after.exit)" > /tmp/enable-plan-after.jsonverdict: "ALL-ENABLED" ⇒ every toggle in order is confirmed ENABLED — success. Anything still in pending/blocked/unconfirmed needs Phase 6 to classify it precisely (FAILED vs CANNOT-CONFIRM).
Run the final aggregator over the Phase-2 classifier output (/tmp/enable-plan-before.json, not the raw /features/status response), the Phase-4 accumulated results (or - if Phase 2 was already ALL-ENABLED/CANNOT-CONFIRM/ERROR and Phase 4 never ran), and the Phase-5 classifier output (/tmp/enable-plan-after.json):
node "<skill_dir>/scripts/classify-final-report.mjs" /tmp/enable-plan-before.json /tmp/enable-results.json /tmp/enable-plan-after.jsonIt prints { features: { <apiName>: { finalStatus, reason } }, order, overall, reasons } where finalStatus is ALREADY-ENABLED | ENABLED | FAILED | CANNOT-CONFIRM | ERROR and overall is SUCCESS | PARTIAL | FAILED | CANNOT-CONFIRM | ERROR. Render this directly into the Output Format — do not re-derive the per-feature verdict or the overall summary in prose (authoring standard A9). On overall: "SUCCESS", point the user at service-itsm-agentic-setup-fulfiller-agent-configure (fulfiller) or service-itsm-agentic-setup-employee-agent-configure (employee) to proceed.
| Constraint | Rationale |
|---|---|
Enable via POST /connect/setup/discovery/feature/{apiName}/enable only | The IPCManagement updateOrgPref write allow-list rejects the agent prefNames (Invalid prefName) — this is the only correct write path |
Read live per-feature state from POST /features/status, never a flat catalog list | Only /status carries per-org ENABLED/NOT_ENABLED + enableBlockedReasons[] + dependencyStatuses[] |
Enable dependencies before children, in the classifier's order | Enabling a child before Einstein GenAI / Studio surfaces unmet-dependency blockers |
| Re-read and reclassify immediately before each toggle in the Phase-4 loop, not once at the top of the loop | A child blocked only because an earlier dependency was still off becomes enable-able the instant that dependency's own /enable lands — a single Phase-2 snapshot would report it FAILED even though it was never really blocked |
Idempotent: skip /enable for anything already ENABLED | The classifier's alreadyEnabled list is authoritative; enabling an already-enabled feature returns {success:true} but is redundant |
REQUIRED confirm-to-write checkpoint before any /enable POST | Enabling org prefs mutates org state; the user must explicitly approve the exact pending list |
Never attempt to enable a toggle whose current (re-checked) enableBlockedReasons is non-empty | Non-empty enableBlockedReasons means the write would fail — report the blocker instead of a doomed POST |
verdict: "CANNOT-CONFIRM" when unconfirmed is non-empty, even if pending is empty | A required toggle missing from the response, or with an unrecognized status, must not be reported as ALL-ENABLED just because nothing is left in pending |
Classification and per-toggle result recording live in scripts/classify-enable-plan.mjs, scripts/record-enable-result.mjs, and scripts/classify-final-report.mjs, invoked via Bash — not in prose | Deterministic decision tables and aggregation over fixed feature statuses (authoring standard A9) |
The read/write goes through sf api request rest; never extract the access token | sf api request rest uses the CLI's stored session for --target-org |
Do not pass --json to sf api request rest | Unsupported on some Connect endpoints; the raw stdout body is already JSON |
| These are Connect API features — use SF CLI, not Headless360 | A Connect/Tooling equivalent exists, so SF CLI is preferred (avoids the Headless360HostedMcpServer org-perm gate) |
| Issue | Resolution |
|---|---|
sf api request rest --method POST with no --body flag errors No 'mode' found in 'body' entry | The /enable endpoint itself takes no meaningful body, but the CLI still requires the flag — always pass --body '{}' explicitly (verified on CLI 2.140.6 and 2.145.6) |
| Feature API name unavailable / unlicensed on the org | No catalog endpoint enumerates valid names — the Phase-1 /features/status read surfaces an unavailable/unlicensed feature via enableBlockedReasons[] before any enable attempt |
/features/status shows NOT_ENABLED with dependencyStatuses[] unmet | Enable the listed dependency first (Einstein GenAI before Studio, Studio before the parent/child toggles) |
updateOrgPref → 500 Invalid prefName for an agent pref | Wrong write path — use the Setup Discovery feature/{apiName}/enable endpoint instead |
Auth error from sf api request rest | The target org's session needs re-authentication (sf org login web) |
| Treating an auth/permission/empty-body read failure as "not wired" | Pass the captured $? as the classifier's 3rd arg — only a confirmed 404 is CANNOT-CONFIRM; anything else is ERROR (surface rawError, stop) |
Reporting ALL-ENABLED because pending is empty | Also check unconfirmed — a required toggle missing from the response or with an unrecognized status is neither confirmed ENABLED nor NOT_ENABLED |
| Re-deriving the per-feature / overall verdict in prose from the before/after JSON | Run scripts/classify-final-report.mjs — the aggregation is fixed comparison logic (authoring standard A9), not a judgment call |
| Setting the feature-status request body in a shell variable in Phase 1 and expecting it in Phase 4/5 | Each Bash invocation may run in a fresh shell where the variable is unset, silently sending an empty body — persist it to /tmp/feature-status-body.json once and read it back with --body "$(cat /tmp/feature-status-body.json)" in every phase |
/features/status via sf api request rest, captured to a file, with its exit status captured.scripts/classify-enable-plan.mjs computed the pending (dependency-ordered), blocked, and unconfirmed lists before any write.pending list at the Phase-3 checkpoint before any /enable POST./enable POST's response was recorded via scripts/record-enable-result.mjs, accumulated across the loop./features/status was re-read after enablement and the classifier re-run to confirm the final per-feature verdict.scripts/classify-final-report.mjs (not prose) computed the final per-feature status and overall summary from the before/results/after files; the access token was never extracted.Emit the report as live Markdown — never inside a code fence (a fenced table shows raw
| pipes, not a table). This is Stage 1 (Foundation) that Stage 2 (install & activate the
agent) builds on; each Status is ENABLED / ALREADY-ENABLED / FAILED / CANNOT-CONFIRM. Lay it
out exactly like this:
Agentforce for IT Service — Stage 1: Enable Platform Features (via service-itsm-agentic-setup-agentforce-studio-configure)
<org-alias> (API v67.0)| # | Platform feature | Status |
|---|---|---|
| 1 | Einstein Generative AI | <status> |
| 2 | Agentforce Studio | <status> |
| 3 | Agentforce for IT Service | <status> |
| 4 | <path-specific toggle(s)> | <status> |
Verdict: SUCCESS | PARTIAL | FAILED | CANNOT-CONFIRM | ERROR
Next steps:
<path> agent via service-itsm-agentic-setup-fulfiller-agent-configure (fulfiller) / the employee-agent skill."enableBlockedReasons, unconfirmed status, or read error) + remediation stepsSubstitute overall and each feature's finalStatus from scripts/classify-final-report.mjs into the <status> cells verbatim — do not recompute. No files are produced beyond the classifiers' temporary response captures.
Label rows exactly as the classifier emits them — never add Requestor, Specialized, or parent.
| File | When to read |
|---|---|
references/cli-invocation.md | Every phase — exact sf api request rest read/write call shapes, response envelope, feature API names, the classifier contract, and the error taxonomy |
© 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 4 other files (scripts, references) in skills/service-itsm-agentic-setup-agentforce-studio-configure of forcedotcom/sf-skills.
Open the folder on GitHubat commit e5164d9
Service Itsm Agentic Setup Agentforce Studio Configure 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 |
|---|---|---|---|---|---|---|
| Service Itsm Agentic Setup Agentforce Studio Configure this skillforcedotcom/sf-skills | 1.1k | — | ~5.8k | Automated safety check: Notes | 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 | 126 | — | ~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
Enable the Agentforce for IT Service Salesforce Go feature toggles (Agentforce Studio, Einstein Generative AI, the parent umbrella, and the Fulfiller/Employee agent templates) using the Salesforce…. Service Itsm Agentic Setup Agentforce Studio Configure is an agent skill from forcedotcom/sf-skills. Enable the Agentforce for IT Service Salesforce Go feature toggles (Agentforce Studio, Einstein Generative AI, the parent umbrella, and the Fulfiller/Employee agent templates) using the Salesforce CLI (sf).
Service Itsm Agentic Setup Agentforce Studio Configure fits situations like: asked to enable Agentforce Studio; turn on Agentforce for IT Service; enable Einstein generative AI; configure the org-level Agentforce for IT Service prerequisites.
Run `npx skills add forcedotcom/sf-skills --skill service-itsm-agentic-setup-agentforce-studio-configure -a claude-code`. Or copy the skill folder (skills/service-itsm-agentic-setup-agentforce-studio-configure in forcedotcom/sf-skills) into .claude/skills/service-itsm-agentic-setup-agentforce-studio-configure in your project. Claude Code loads it when a task matches its description.
Run `npx skills add forcedotcom/sf-skills --skill service-itsm-agentic-setup-agentforce-studio-configure -a codex`. Or copy the skill folder (skills/service-itsm-agentic-setup-agentforce-studio-configure in forcedotcom/sf-skills) into .agents/skills/service-itsm-agentic-setup-agentforce-studio-configure 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 service-itsm-agentic-setup-agentforce-studio-configure -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/service-itsm-agentic-setup-agentforce-studio-configure, .gemini/skills/service-itsm-agentic-setup-agentforce-studio-configure, .github/skills/service-itsm-agentic-setup-agentforce-studio-configure and .opencode/skills/service-itsm-agentic-setup-agentforce-studio-configure in your project.
Going by SKILL.md and its folder, Service Itsm Agentic Setup Agentforce Studio Configure needs JavaScript for the scripts in its folder and the command-line tools its instructions call (sf and node). Our summary lists: Node.js. Its frontmatter pre-approves these tools: Bash, Read, AskUserQuestion.
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.
Our automated static check of SKILL.md found notes only (pre-approves every shell command (allowed-tools: bash)), nothing it rates as a warning. 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.
Service Itsm Agentic Setup Agentforce Studio Configure 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.8k tokens (SKILL.md is roughly 23k 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 3.8k tokens, read only when the agent opens those files.
Skills that share tags, products or a category with Service Itsm Agentic Setup Agentforce Studio Configure: 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, 126 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,065 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.