Soql Lib Query Builder
beyond-the-cloud-dev/soql-lib
Builds Salesforce SOQL queries using the SOQL Lib fluent builder API (SOQL.cls).
Searches for and retrieves existing content and media (articles, blogs, news, FAQs, events, products, images, logos, icons, photos, graphics, banners, hero images, audio clips, videos, documents)…
$ npx skills add forcedotcom/sf-skills --skill experience-search-coordinate -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install forcedotcom/sf-skills experience-search-coordinate --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/experience-search-coordinate .claude/skills/experience-search-coordinate && 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 "experience-search-coordinate" agent skill from https://github.com/forcedotcom/sf-skills/tree/main/skills/experience-search-coordinate into .claude/skills/experience-search-coordinate/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "experience-search-coordinate", 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/experience-search-coordinateType 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 experience-search-coordinate -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install forcedotcom/sf-skills experience-search-coordinate --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/experience-search-coordinate .agents/skills/experience-search-coordinate && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "experience-search-coordinate" agent skill from https://github.com/forcedotcom/sf-skills/tree/main/skills/experience-search-coordinate into .agents/skills/experience-search-coordinate/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "experience-search-coordinate", 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 experience-search-coordinate -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install forcedotcom/sf-skills experience-search-coordinate --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/experience-search-coordinate .cursor/skills/experience-search-coordinate && 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 "experience-search-coordinate" agent skill from https://github.com/forcedotcom/sf-skills/tree/main/skills/experience-search-coordinate into .cursor/skills/experience-search-coordinate/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "experience-search-coordinate", 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/experience-search-coordinate--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 experience-search-coordinate -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install forcedotcom/sf-skills experience-search-coordinate --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/experience-search-coordinate .gemini/skills/experience-search-coordinate && 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 "experience-search-coordinate" agent skill from https://github.com/forcedotcom/sf-skills/tree/main/skills/experience-search-coordinate into .gemini/skills/experience-search-coordinate/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "experience-search-coordinate", 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 experience-search-coordinateInstalls 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 experience-search-coordinate -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/experience-search-coordinate .github/skills/experience-search-coordinate && 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 "experience-search-coordinate" agent skill from https://github.com/forcedotcom/sf-skills/tree/main/skills/experience-search-coordinate into .github/skills/experience-search-coordinate/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "experience-search-coordinate", 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 experience-search-coordinate -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 experience-search-coordinate --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/experience-search-coordinate .opencode/skills/experience-search-coordinate && 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 "experience-search-coordinate" agent skill from https://github.com/forcedotcom/sf-skills/tree/main/skills/experience-search-coordinate into .opencode/skills/experience-search-coordinate/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "experience-search-coordinate", 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.
experience-search-coordinateSearches for and retrieves existing content and media (articles, blogs, news, FAQs, events, products, images, logos, icons, photos, graphics, banners, hero images, audio clips, videos, documents)…
Experience Search Coordinate is an agent skill from forcedotcom/sf-skills. Searches for and retrieves existing content and media (articles, blogs, news, FAQs, events, products, images, logos, icons, photos, graphics, banners, hero images, audio clips, videos, documents) from Salesforce CMS or other connected sources. Use this skill ANY TIME a user says "find", "search", "get", "fetch", "retrieve", "look up", "locate", "show me", "list", or "I need" followed by content or media words like "blog", "article", "news", "FAQ", "event", "product page", "image", "logo", "icon", "photo"…
Its SKILL.md is about 5.8k tokens, which your agent loads only when the skill is triggered. The skill folder holds 7 other files, including reference files and assets (for example `assets/search-payload-template.json`, `references/content-route.md` and `references/content-type-discovery.md`).
It sits in Sales & Support, covering Help center and FAQ content, Logo and visual identity and Brand strategy and identity. 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.
5 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.
No scripts in the folder and no shell commands in SKILL.md (its code samples are javascript).
From 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.
Experience Search Coordinate loads about 5.8k tokens when it runs, and up to ~16k if it reads all its reference files. Until then it costs about 232 tokens; SKILL.md has 2,852 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,852 words, ~5,768 tokens.
.claude/skills/experience-search-coordinate/SKILL.md (or your agent's skills folder). This skill also uses 5 other files; get the full folder from GitHub.Routes search requests to the correct sub-workflow — structured CMS content or media — and runs both when a request mixes the two.
A → Read pointer below is a required action, not FYI — open that file before continuing past that point; this skill has drifted before from steps followed off memory.
This skill is for SEARCHING FOR existing content or media, not creating new content or images.
Use this skill when the user wants to:
DO NOT use this skill when the user wants to:
experience-cms-content-generate)experience-cms-content-type-generate)experience-cms-brand-apply)Mandatory on every request that reaches it — never skip straight to Step 2. No phrasing of the request ("just find me an article," a plain keyword search, etc.) skips this step's local-file scan. If you're about to call search_metadata in Step 2 without having scanned for uiBundles/*/public/content-metadata.json this turn, STOP and come back here first.
channelId given — use it directly, skip discovery entirely, proceed to the scope rule below.channelId — resolve that uiBundle's channelId; if it doesn't resolve, fall through to point 3 as if nothing was named.uiBundles/*/public/content-metadata.json file (never gate this on server-side deployment status) and collect the channelIds found. Zero → public channels only. Exactly one → public plus that channel. More than one → ask the user which one via ask_followup_question.→ Read references/scope-resolution.md § "Step 1 points 1-3" for the full discovery mechanics before acting on points 1-3 above. Proceed to Step 2 once scope is determined.
Scope rule (applies whether the channelId was user-provided or discovered): scope is always public channels (contentAccessScope: "Public", no channelIds field) plus that one channelId (a separate call with channelIds set to it, no contentAccessScope field) — never resolve a separate ID to represent "public," and never send contentAccessScope and channelIds in the same call. This scope decides how many search calls Steps 3 and 4 make: no channelId in scope → one search call (public channels only). A channelId in scope → two search calls (public channels, then that specific channelId), with results merged before presenting.
Precondition: Step 1 must have already run in this turn (its channel-scope result is what point 5 below carries into Step 3/4). Step 1 runs unconditionally — even for a plain keyword search with no obvious channel angle, not only when the request names a channel or app.
Identify one or more distinct search intents in the request (e.g. "find a press release about our launch and a hero image for the page" is two intents). Run the rest of this step once per intent.
If intents span both routes, sequence the routes — never interleave or merge them: run the Media Route (Step 4) to full completion for every media intent first, then the Content Route (Step 3) for every content intent. See Step 5.
Call search_metadata on the metadata-grounding MCP server using the intent itself as the query. No filters array support — metadataType is the only narrowing parameter, passed top-level:
search_metadata({ query: "<the user's intent>", metadataType: "ContentTypeBundle", limit: 100 }) Each candidate already includes a full composite identifier (e.g. 00DVW00000CfBQP2A3::0T1VW000008sow60AA::ContentTypeBundle) — use it as returned; never reconstruct it.
Check the outcome before doing anything else:
metadata-grounding is unavailable (the call errors/times out) — you MUST call get_content_types_for_workspace (the workspace content-type fallback) before any Step 3/4 search tool; do not attempt query_metadata, there's nothing to look up, and do not skip straight to a search tool on an assumed FQN.ask_followup_question, same question/options as the "intent itself is ambiguous" case at the end of this step), then retry search_metadata once with the clarified query: Fallback chain when search_metadata doesn't produce a usable candidate list → Read references/content-type-discovery.md before running it: "Workspace content-type fallback" first, then "Wording fallback" as a last resort.
Call query_metadata with each candidate's identifier from point 2 (cap at top 5, batched into one metadataIdentifiers array):
query_metadata({ metadataIdentifiers: ["00DVW00000CfBQP2A3::0T1VW000008sow60AA::ContentTypeBundle"] })Read each entry's typeDetails[].properties — mixins, typeClasses, and apiName live there, not in the search_metadata response.
Filter for supported types first, THEN decide the route among survivors — do not conflate the two:
properties.mixins lacks sfdc_cms:deliveryApiEnabled — only delivery-API-enabled types are searchable.properties.typeClasses lacks sfdc_cms__structured. This is the single "supported for search" gate, not a content/media split — sfdc_cms__structured appears on both structured-content types and media types, so it only separates searchable types from unsearchable ones (e.g. sfdc_cms__email carries sfdc_cms__content but not sfdc_cms__structured, and must be discarded).references/content-type-discovery.md § "Filter-result messages" for exact wording.properties.typeClasses (order returned by search_metadata): contains sfdc_cms__media → Media Route (Step 4); otherwise → Content Route (Step 3).properties.apiName. Add other surviving candidates' FQNs too if clearly relevant to the same intent and sharing the same classification, passing all as one comma-separated contentTypeFqn value rather than searching per type.Carry the scope from Step 1 (public channels only, or public channels plus a channelId) into whichever route is invoked — see the channelIds field in each route below.
If intent itself is ambiguous (e.g. "find me some content" with no hint of type or subject) → Read references/content-type-discovery.md § "Intent itself is ambiguous" for the exact question/options before calling search_metadata. Do not guess.
Follow this sequence for each intent Step 2 routed here. The content type FQN(s) are already known from Step 2.
Build the search query:
OR. E.g. "blog posts about sustainable business practices" → sustainable OR sustainability OR business OR environmental.{"OR": ["term1", "term2"]}, or "{}" if none apply. E.g. "sustainable business practices and environmental responsibility" → {"OR": ["Business", "Corporate", "Environment", "Responsibility"]}; "FAQs about password resets" → "{}" (no descriptive/categorical terms).assets/search-payload-template.json for the request payload structure. Set contentTypeFqn to the comma-separated FQN list collected in Step 2. contentAccessScope and channelIds are mutually exclusive — never send both in the same call — so they're set per-call in point 3 below, not here.Confirm with the user — required two-message pattern (labeled-parameters chat message, then ask_followup_question with Yes - search now / Edit search / Cancel). Never put the labeled list inside ask_followup_question's text — it strips formatting. → Read references/content-route.md § "Confirming the query before searching" for templates.
Execute the search call(s) per the scope from Step 1 — one call for public-only scope, two (public + channel-scoped) when a channelId is in scope. → Read references/content-route.md § "Executing the search call(s)" before parsing results — array/merge rules.
Present up to 5 unique results total (de-duplicated by managedContentKey for display only — an item found under more than one channel still appears once here), grouped by content type, with a Load More option if more remain. Each item shows its Channel as a per-item field — never the grouping key:
I found 3 content items:
Editorial (c__Editorial):
1. <title> — Channel: Public
2. <title> — Channel: <uiBundle>
Blog (sfdc_cms__blog):
3. <title> — Channel: PublicOnly one content type FQN in scope → the heading may be omitted (still one group); the per-item Channel field is always shown. If an item exists under multiple channels, show its first/primary channel here — the choice between channels happens after selection (point 5), not at presentation time.
User selects one, several, or all items. For each selected item whose delivery-details array has more than one entry, ask which channel's copy to use — one ask_followup_question option per entry, named from managedContentChannelDetails.name — before displaying its details; items with zero or one entry go straight to display. Show managedContentId, managedContentKey, language, channel, and — only for a PUBLIC_UNAUTHENTICATED/COMMUNITY entry with a contentUrl, never a WEB_APP one — the full Unauthenticated URL (all query parameters). → Read references/content-route.md § "Disambiguating channel at selection" before asking — pass the channel names as ask_followup_question's options array, never inline them in the question text.
If the channelId in scope came from uiBundle discovery (skip entirely for public-only scope or a user-supplied channelId with no uiBundle), offer the experience-cms-content-render hand-off using the same two-message pattern, passing each item's title, content type FQN, its chosen entry's managedContentChannelDetails.id (channel ID) only when it has a delivery entry — omit for a zero-entry item, never a placeholder, and either its Unauthenticated URL or, if absent, its managedContentKey as contentKey (the receiving skill's field name). → Read references/content-route.md § "Offering the render hand-off" for the full procedure.
→ Read references/content-route.md for the complete end-to-end worked example.
Follow this sequence for each intent Step 2 routed here. The media content type FQN (e.g. sfdc_cms__image, sfdc_cms__audio, sfdc_cms__video, sfdc_cms__document) is already known from Step 2 — never assume it's an image; use whatever FQN Step 2 discovered for this intent.
Present available search sources via ask_followup_question — no other tool calls yet. Only the sources whose tools you actually have (via introspection), plus "Other", each as its own option. Wait for the user's selection before any tool call. → Read references/media-route.md § "Presenting available search sources" for the full template.
Build the query, then confirm with the user before searching — required two-message pattern, in the same turn:
search_media_cms_channels): extract keywords (concrete nouns, max 10 terms) and taxonomies (descriptive/style/mood/category terms — extract every one the query actually contains; don't default to empty just because keywords were found). E.g. "luxury apartment with river view" → keywords apartment OR villa OR penthouse OR residence, taxonomies {"OR": ["Luxury", "Premium", "Waterfront", "Riverside"]}; "car" → taxonomies "{}" (no descriptive terms). Build the payload with contentTypeFqn set to the FQN(s) from Step 2, searchLanguage set to a locale (en_US, es_MX, ... — default en_US; required, never null/omitted), searchLimit: 5. → Read references/media-route.md for full worked examples.search_electronic_media) — pass the user's query as-is to searchQuery, no extraction needed.→ Read references/media-route.md § "Confirming the query before searching" for the confirmation message templates (labeled-parameters chat message, then ask_followup_question with Yes - search now / Edit search / Cancel).
Execute the search call(s) per the scope from Step 1 — one call for public-only scope, two (public + channel-scoped) when a channelId is in scope; Data 360 hybrid search ignores channel scope entirely. → Read references/media-route.md § "Executing the search call(s)" before parsing results — array/merge rules.
Present all unique results via ask_followup_question, grouped by content type — one option per result (de-duplicated by unique identifier for display only — an item found under more than one channel still appears once here), labeled with title, content type, and channel (e.g. Product Launch Hero Banner (sfdc_cms__image) — Public). Mirrors the Content Route: content type is the grouping key, channel is a per-item field. Never auto-select.
User selects an item. If its delivery-details array has more than one entry, ask which channel's copy to use — one option per entry, named from managedContentChannelDetails.name — before displaying details. Show Content Name, Content Type, channel, and — only for a PUBLIC_UNAUTHENTICATED/COMMUNITY entry with a contentUrl, never a WEB_APP one — the full Unauthenticated URL (all query parameters). → Read references/media-route.md § "Disambiguating channel at selection" before asking — pass the channel names as ask_followup_question's options array, never inline them in the question text.
Offer the render hand-off — always, with no uiBundle gating (unlike the Content Route's offer, which only appears when a uiBundle channel was in scope). Same two-message pattern: plain-text mention of the item, then ask_followup_question with Yes / No. On Yes, dispatch via mcp__skill_bridge__load_skill("experience-cms-content-render") — never the built-in Skill tool (separate registry, returns Unknown skill) — passing the selected item's title, content type FQN, the chosen entry's managedContentChannelDetails.id (channel ID) only when it has a delivery entry — this route explicitly supports zero-entry items, so omit the channel ID for those rather than reading .id off nothing, and either its Unauthenticated URL or, if absent, its managedContentKey as contentKey (the receiving skill's field name). If the load call fails, tell the user the hand-off failed and stop. On No, stop — the search is complete; do not apply the URL yourself as a fallback.
→ Read references/media-route.md for the complete worked example.
When a request mixes media and content intents, run the two routes sequentially, each to full completion, not interleaved and not merged into one combined presentation:
experience-cms-content-render hand-off (Yes/No). Finish this entire route — including the offer — before starting the Content Route.experience-cms-content-render hand-off if a uiBundle channel is in scope.Each route's results are labeled and presented on their own (e.g. "Images:" for the Media Route's output, then "Articles:" for the Content Route's) — never merge the two into one undifferentiated list, and never hold Media Route's results back to present alongside Content Route's.
| Error | Response |
|---|---|
No search_content_cms_channels/search_media_cms_channels tools found via introspection | "No content search connection is configured. Please connect a content-readonly MCP server." |
| Neither media tool available | "No automated media search sources are currently configured. Please provide a direct URL or asset library path." |
metadata-grounding unavailable or no content types match | Apply the fallback chain in references/content-type-discovery.md — do not block or ask for an FQN |
| No search results (either route) | "No [content/media] found. Try broader keywords, removing descriptive terms, or a different [content type/source]." |
| Invalid user selection | Re-display options and ask again |
| Tool returns error (invalid input, missing argument, or otherwise) | Show error message, offer retry with corrected parameters on that same tool — never fall through to the other route's search tool as a workaround (see Key Principle 3) |
| Search tool on the connected server returns a server error (5xx, timeout, connection failure — not "no results") | Fail the call — do NOT silently retry against a different server. Tell the user to check that server's connection/session and wait before retrying. |
Never silently fail on a route the user asked for. If one route in a mixed request comes up empty, still present the other route's results and say so explicitly. This does not mean substituting a different server when the connected one errors — see the server-error row above.
search_metadata + query_metadata decide the route; fall back to get_content_types_for_workspace, then intent wording, only when that comes up empty (Step 2)managedContentChannelDetails.name, in both routesPUBLIC_UNAUTHENTICATED/COMMUNITY entries only; never a WEB_APP (uiBundle) entry's contentUrl, in either route© 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 5 other files (references, assets) in skills/experience-search-coordinate of forcedotcom/sf-skills.
Open the folder on GitHubat commit e5164d9
Experience Search Coordinate 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 |
|---|---|---|---|---|---|---|
| Experience Search Coordinate this skillforcedotcom/sf-skills | 1.1k | — | ~5.8k | 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
Searches for and retrieves existing content and media (articles, blogs, news, FAQs, events, products, images, logos, icons, photos, graphics, banners, hero images, audio clips, videos, documents)…. Experience Search Coordinate is an agent skill from forcedotcom/sf-skills. Searches for and retrieves existing content and media (articles, blogs, news, FAQs, events, products, images, logos, icons, photos, graphics, banners, hero images, audio clips, videos, documents) from Salesforce CMS or other connected sources.
Experience Search Coordinate fits situations like: requests that mix both; like reuse existing assets for a page.
Run `npx skills add forcedotcom/sf-skills --skill experience-search-coordinate -a claude-code`. Or copy the skill folder (skills/experience-search-coordinate in forcedotcom/sf-skills) into .claude/skills/experience-search-coordinate in your project. Claude Code loads it when a task matches its description.
Run `npx skills add forcedotcom/sf-skills --skill experience-search-coordinate -a codex`. Or copy the skill folder (skills/experience-search-coordinate in forcedotcom/sf-skills) into .agents/skills/experience-search-coordinate 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 experience-search-coordinate -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/experience-search-coordinate, .gemini/skills/experience-search-coordinate, .github/skills/experience-search-coordinate and .opencode/skills/experience-search-coordinate in your project.
SKILL.md names no scripts, command-line tools or credentials: Experience Search Coordinate is instructions for the agent only.
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 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.
Experience Search Coordinate 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 9.9k tokens, read only when the agent opens those files.
Skills that share tags, products or a category with Experience Search Coordinate: 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.