Agent skill

Marketing Message Test

by forcedotcom in forcedotcom/sf-skills

Salesforce Marketing Cloud / Engagement 360 message preview and test-send.

Apache-2.0Auto-check passedSales & Support

Install Marketing Message Test

skills CLI
$ npx skills add forcedotcom/sf-skills --skill marketing-message-test -a claude-code

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

GitHub CLI
$ gh skill install forcedotcom/sf-skills marketing-message-test --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/forcedotcom/sf-skills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/marketing-message-test .claude/skills/marketing-message-test && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
marketing-message-test
GitHub stars
1.1k
Token cost
~5.1k tokens
SKILL.md length
1,805 words
Files
2 (incl. references)
Skills in repo
251
Repo updated
First seen
Licence
Apache-2.0

At a glance

Salesforce Marketing Cloud / Engagement 360 message preview and test-send.

  • Works in 6 steps: Fetch content — GET… → Recipient DMO (from content) →… → Data space → dataSpaceName (scopes every… → …
  • The user wants to render a personalized
  • SKILL.md covers When This Skill Owns the Task, Required Context to Gather First, Transports and Core Operating Rules, plus 7 more sections
  • Calls sf

What it does

Marketing Message Test is an agent skill from forcedotcom/sf-skills. Salesforce Marketing Cloud / Engagement 360 message preview and test-send. Use this skill when the user wants to render a personalized or unpersonalized preview of an E360 message (Email, SMS, WhatsApp, Push, In-App, RCS) from a content key, or fire a test send, over the headless API — no app UI. TRIGGER when: user has a contentKey and wants to see how a message renders for a recipient, preview a message headlessly, or send a test message. DO NOT TRIGGER when: the task is authoring message content, building Data…

Its SKILL.md is about 5.1k tokens, which your agent loads only when the skill is triggered. The skill folder holds 2 other files, including reference files (for example `references/api-contract.md`).

It sits in Sales & Support, covering CRM management. It works with Salesforce and WhatsApp. The repository describes itself as: Salesforce's curated collection of agent skills for building applications. Optimized for Agentforce Vibes, compatible with all AI tools. The licence is Apache-2.0.

When your agent uses it

  • The user wants to render a personalized
  • Unpersonalized preview of an E360 message (Email
  • RCS) from a content key
  • Fire a test send

Example prompts

  • “/marketing-message-test”

Workflow steps

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

  1. Fetch content — GET /services/data/vXX.0/connect/cms/contents/{contentKey} (v57+) → managedContentId, contentBody. Use the CMS Authoring…
  2. Recipient DMO (from content) → recipientDataModelObjectName. Parse contentBody['lightning:dataProviders'] for objectApiName (that is the…
  3. Data space → dataSpaceName (scopes every /ssot/… call below). GET /ssot/data-spaces (v62+).
  4. Segment → GET /ssot/segments?dataspace= (v55+). Keep the apiName (fetches members) and the 1sg… marketSegmentId (the segmentId).
  5. profileId — from the chosen segment's members, the only valid source
  6. Render — call the channel's personalized-preview operation (step preview--personalized, or the …-by-locale variant) with the flat body {…

What it can do on your machine

Read from SKILL.md and the folder at commit e5164d9. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Shell commands in SKILL.md call:

    • sf

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Marketing Message Test loads about 5.1k tokens when it runs, and up to ~11k if it reads all its reference files. Until then it costs about 163 tokens; SKILL.md has 1,805 words of instructions outside code blocks.

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

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from forcedotcom/sf-skills at commit e5164d9, republished under its Apache-2.0 licence (© forcedotcom). 1,805 words, ~5,074 tokens.

Download SKILL.mdSave it as .claude/skills/marketing-message-test/SKILL.md (or your agent's skills folder). This skill also uses 1 other file; get the full folder from GitHub.
name
marketing-message-test
description
Salesforce Marketing Cloud / Engagement 360 message preview and test-send. Use this skill when the user wants to render a personalized or unpersonalized preview of an E360 message (Email, SMS, WhatsApp, Push, In-App, RCS) from a content key, or fire a test send, over the headless API — no app UI. TRIGGER when: user has a contentKey and wants to see how a message renders for a recipient, preview a message headlessly, or send a test message. DO NOT TRIGGER when: the task is authoring message content, building Data Cloud segments/DMOs (use data360-segment / data360-harmonize), or activating a segment (use data360-activate).
metadata.version
1.0
metadata.minApiVersion
62.0

marketing-message-test: E360 Message Preview & Test Send

Render a per-channel preview (or fire a test send) for a Marketing Cloud / Engagement 360 message, headlessly, starting from a single contentKey. Covers all six channels: Email, SMS, WhatsApp, Push, In-App, RCS.

Full endpoint tables, request bodies, response-field rules, and the version-floor matrix live in references/api-contract.md. This file is the operating procedure; consult the reference for exact payloads.

When This Skill Owns the Task

Use marketing-message-test when the user wants to:

  • render how an authored message looks for a real recipient (personalized preview)
  • render content-only with no recipient (unpersonalized preview)
  • send a test message to their own address / phone / individual id

Delegate elsewhere when the user is:

Required Context to Gather First

  • contentKey — required, irreducible. The caller must supply it; it is not derivable.
  • target org alias (for sf org open / access token)
  • channel — Email, SMS, WhatsApp, Push, In-App, or RCS
  • mode — personalized preview, unpersonalized preview, or test send
  • for a test send only: the user's own destination(s) — toAddresses (Email), toPhoneNumbers (SMS/WhatsApp/RCS), or toIndividualIds (Push/In-App). Never derive these.

Transports

PurposeTransportInstance-relative path
Preview · test send · sender lookupsLWR Apexlwr/apex/v68.0/… — the exact operation path is on each step's Call line
Managed content · data space · DMO · segment · profileConnect RESTservices/data/vXX.0/… (per-resource floors; v62.0+ covers all six channels)
WhatsApp template fetch (whatsapp-template-fetch)Headless dispatch/headless/invoke/… — a dispatch route, so invoke it through the dispatch tool, not sf api request rest (see the reference doc for details)

Versions:

  • LWR-Apex — not version-gated; pin v68.0 (the path just needs a well-formed vXX.0 segment).
  • Connect REST — real per-resource floors; highest is data-spaces at v62.0, so v62.0+ covers all six channels (others lower — see the reference floor matrix).

Always use sf api request rest — never curl. It attaches the org's bearer token internally, so the credential never enters your context. Never extract a token (e.g. sf org display --json) or put one in an Authorization header — that leaks a live credential and is disallowed. Pass the instance-relative path (no host); the CLI prepends the instance URL and accepts both transports (LWR-Apex paths aren't under services/data/, but any instance-relative path works). One step is the exception — whatsapp-template-fetch is a headless /headless/invoke dispatch route, invoked through the dispatch tool rather than sf api request rest.

bash
# GET (default method); path is instance-relative
sf api request rest 'services/data/v63.0/ssot/data-spaces' --target-org <org>

# POST with a flat JSON body from a file (content-type: application/json is sent by default)
# path = the target operation's **Call** line (e.g. the `preview-sms-unpersonalized` step)
sf api request rest '<lwr/apex Call path>' \
  --target-org <org> --method POST --body @body.json

Verb rule (do not violate — wrong verb is rejected):

  • Preview / test-send methods are POST (--method POST) with a flat JSON body whose keys are exactly the parameter names — no envelope, no wrapper object.
  • Sender / permission lookups are GET (default method) with args packed into a single methodParams query param (URL-encoded JSON string) appended to the path; no-arg methods omit it.

Core Operating Rules

  • Never fabricate a segmentId, profileId, DMO name, or destination. Every value is either given by the user or derived from the org via the chain below.
  • Preview needs no sender — skip sender lookups (Part 3 of the reference) unless test-sending.
  • Personalized vs unpersonalized: unpersonalized needs only contentKey; personalized needs segmentId + recipientDataModelObjectName + contentKey + profileId, and the profileId must be a member of that segmentId (it comes from that segment's member list — see the chain).
  • Personalization is supported ONLY with a valid segment and a member of it. The recipient (profileId) comes solely from the chosen segment's member list, and must be a member of the segmentId passed to the render. If the segment has no members — or no segment exists in the content's data space — the personalization render cannot be performed: report cannot personalize — no valid segment member and stop. The unpersonalized preview (contentKey only) is still available; offer it. Never source the recipient from anywhere else (e.g. by listing individuals from the DMO) — a non-member profileId is rejected by the render with an opaque error.
  • A test send is a real send to the supplied destinations — confirm the user asked for it and has provided their own destinations before firing any test send (the send-test-… steps). If the user asked only to preview, never fire a test send.
  • Check send permission before every test send. Before firing any send-test-<channel>, call that channel's permission check (step perm-can-send-test-<channel> — a no-arg GET returning a Boolean). If it returns false, surface a permission error and stop — do not attempt the send. Preview never needs this check.
  • profileId is a Data Cloud profile key (e.g. a1b2c3d4…), NOT a CRM id (003…) or a segment id (1sg…).
  • Run the derivation yourself end to end via sf api request rest; don't hand the user raw commands to run.

Derivation Chain (personalized preview / test send, from contentKey)

Detailed payloads for every step: references/api-contract.md.

  1. Fetch content — GET /services/data/vXX.0/connect/cms/contents/{contentKey} (v57+) → managedContentId, contentBody. Use the CMS Authoring API (keyed by contentKey), not the delivery API — it returns the draft the preview renders.
  2. Recipient DMO (from content) → recipientDataModelObjectName. Parse contentBody['lightning:dataProviders'] for objectApiName (that is the DMO) or dataGraphApiName — for the latter, GET /ssot/data-graphs/{dataGraphApiName} (v58+) and read primaryObjectName (its response also returns dataspaceName, usable directly in step 3). If the content declares no data provider, leave the DMO unresolved for now — it comes from the org fallback in step 3, which needs the data space first.
  3. Data space → dataSpaceName (scopes every /ssot/… call below). GET /ssot/data-spaces (v62+).
    • DMO declared in step 2 — derive the data space from the DMO name: ssot__… prefix or an unrecognized name → default; a <prefix>_ token → match against the prefix field and take that entry's name. default on single-space orgs.
    • No DMO declared — there's no name to match, so choose the data space first: default on a single-space org, otherwise ask the user which space. Then resolve the DMO from the org via the org-fallback lookup (step messaging-selected-uma-dmo, body { dataSpaceName }). A null result means "no personalized preview available for this org" — report that, do NOT retry.
  4. Segment → GET /ssot/segments?dataspace=<name> (v55+). Keep the apiName (fetches members) and the 1sg… marketSegmentId (the segmentId).
  5. profileId — from the chosen segment's members, the only valid source:
    • GET /ssot/segments/{segmentApiName}/members?limit=10&dataspace=<name> (v58+) → member id. That id is the profileId; because it's a member of the segment, the render accepts it.
    • If the member list is empty (or no segment exists in the data space), stop — personalization cannot be performed. There is no valid recipient: report cannot personalize — no valid segment member and offer the unpersonalized preview instead. Do not source the recipient elsewhere (e.g. by listing individuals from the DMO) — a profileId that isn't a member of the passed segmentId is rejected by the render with an opaque error.
  6. Render — call the channel's personalized-preview operation (step preview-<channel>-personalized, or the …-by-locale variant) with the flat body { segmentId, recipientDataModelObjectName, contentKey, profileId, … }.

Unpersonalized short-circuits after step 1: call the channel's unpersonalized-preview operation (step preview-<channel>-unpersonalized) with { contentKey } (add locale for Email's …-by-locale variant).

Test send = the channel's permission check (step perm-can-send-test-<channel>; stop if false), then steps 1–6, then a sender lookup (Part 3 of the reference) for fromAddress/senderId, then the channel's test-send operation (step send-test-<channel>) with the user's supplied destination array.

Show full SKILL.md (650 more words)Show less

Reading the Rendered Output

  • Email — flat object of string fields. Rendered HTML is in body for personalized calls, nonAggregateHtmlBody for unpersonalized — read body first, fall back to nonAggregateHtmlBody. Also surface subject and preheader.
  • SMS — rendered text is the content string; MMS also carries mediaUrl.
  • WhatsApp — returns { content, metadata } as JSON strings; reassemble {{k}} slots from the fetched template (see the reference — this is the fiddly one).
  • Push / In-App / RCS — read the returned rendered fields per channel.

Fetch media from the rendered <img src>, not the content definition. Rendered srcs are public-CDN URLs (…salesforce-experience.com/_scs/cms/…) that fetch unauthenticated. contentBody /cms/media/… refs are session-gated — unauthenticated they return an HTML login page (HTTP 200, no error), not image bytes.

Content Variables

If the content declares content variables under sfdc_cms:schema.properties, they render empty unless supplied. Ask the user for a value for each — never invent one — and pass them via recipientAttributesJson (a JSON string), on Email/SMS/WhatsApp/RCS only.

Push and In-App personalized previews do not support content variables. If any are declared in the content definition (sfdc_cms:schema.properties non-empty) for one of those channels, stop and inform the user it's not supported — do not troubleshoot.

High-Signal Gotchas

  • Wrong verb is rejected — preview/send = POST + flat body; sender lookups = GET + methodParams.
  • contentKey is irreducible — every path bottoms out at it; the user must supply it.
  • Data space must match the content, or segments/profiles won't personalize correctly.
  • DMO may need the org fallback; the org-fallback DMO lookup (messaging-selected-uma-dmo) returning null = "no personalized preview available," not a retryable error.
  • Recipient must be a segment member: the profileId comes only from the chosen segment's member list and must be a member of the segmentId passed to the render. No members (or no segment) → personalization cannot be performed; stop and offer unpersonalized. Never source the recipient from a DMO listing — a non-member profileId is rejected with an opaque error.
  • Profile-key field: segment members return the profile key as id (a Data Cloud key, e.g. a1b2c3d4… — not a 1sg… segment id or a 003… CRM id); that id is the profileId.
  • Version floors are per-resource — LWR-Apex is not version-gated (pin v68.0; the path segment just needs to be well-formed); the REST derivation resources have per-resource minimums. Highest REST floor is data-spaces at v62.0, so target v62.0+ for full six-channel coverage (lower channels work below that).

Output Format

text
Message: <contentKey>  (channel: <Email/SMS/WhatsApp/Push/In-App/RCS>)
Mode: <personalized preview / unpersonalized preview / test send>
Target org: <alias>
Derived inputs: dataSpace=<name> DMO=<…__dlm> segmentId=<1sg…> profileId=<profile key>
API calls: <method — verb — endpoint>  (one line each)
Rendered output:
  <subject / rendered text / HTML body, per channel>
Next step: <act / adjust inputs / follow-up>

References

  • references/api-contract.md — full endpoint tables, request bodies, response-field rules, per-resource version floors, and the end-to-end recipe for all six channels.
<!-- skill-validate: ignore-start -->
<!-- codey:operations start -->

Operations Reference

Operations this skill uses — routing and dependency reference.

OperationPurposeStatusCallDepends on
cms-content-fetchread—GET /services/data/v63.0/connect/cms/contents/{contentKeyOrId}—
messaging-selected-uma-dmoread—POST lwr/apex/v68.0/interaction__MessagingController/getSelectedUnifiedIndividualDmoForUmadata-spaces-list
data-graph-primary-objectread—GET /services/data/v63.0/ssot/data-graphs/{dataGraphApiName}—
data-spaces-listread—GET /services/data/v63.0/ssot/data-spaces—
dmo-describeread—GET /services/data/v63.0/ssot/data-model-objects/{dmoName}—
segments-listread—GET /services/data/v63.0/ssot/segmentsdata-spaces-list
segment-members-listread—GET /services/data/v63.0/ssot/segments/{segmentApiName}/memberssegments-list
profile-fetch-by-idverify—GET /services/data/v63.0/ssot/profile/{dmoName}/{profileId}—
cms-spaces-listread—GET /services/data/v63.0/connect/cms/spaces—
preview-email-unpersonalizedread—POST lwr/apex/v68.0/interaction__JourneyController/getEmailUnpersonalizedPreviewContentcms-content-fetch
preview-email-unpersonalized-by-localeread—POST lwr/apex/v68.0/interaction__JourneyController/getEmailUnpersonalizedPreviewContentByLocalecms-content-fetch
preview-email-personalizedread—POST lwr/apex/v68.0/interaction__JourneyController/getEmailPersonalizedPreviewContentcms-content-fetch, segments-list
preview-email-personalized-by-localeread—POST lwr/apex/v68.0/interaction__JourneyController/getEmailPersonalizedPreviewContentByLocalecms-content-fetch, segments-list
preview-sms-unpersonalizedread—POST lwr/apex/v68.0/interaction__JourneyController/getSmsUnpersonalizedPreviewContentcms-content-fetch
preview-sms-personalizedread—POST lwr/apex/v68.0/interaction__JourneyController/getSmsPersonalizedPreviewContentcms-content-fetch, segments-list
preview-whatsapp-unpersonalizedread—POST lwr/apex/v68.0/interaction__JourneyController/getWhatsappUnpersonalizedPreviewContentcms-content-fetch
preview-whatsapp-personalizedread—POST lwr/apex/v68.0/interaction__JourneyController/getWhatsappPersonalizedPreviewContentcms-content-fetch, segments-list
preview-push-unpersonalizedread—POST lwr/apex/v68.0/interaction__JourneyController/getPushUnpersonalizedPreviewContentcms-content-fetch
preview-push-personalizedread—POST lwr/apex/v68.0/interaction__JourneyController/getPushPersonalizedPreviewContentcms-content-fetch, segments-list
preview-inapp-unpersonalizedread—POST lwr/apex/v68.0/interaction__JourneyController/getInAppUnpersonalizedPreviewContentcms-content-fetch
preview-inapp-personalizedread—POST lwr/apex/v68.0/interaction__JourneyController/getInAppPersonalizedPreviewContentcms-content-fetch, segments-list
preview-rcs-unpersonalizedread—POST lwr/apex/v68.0/interaction__JourneyController/getRcsUnpersonalizedPreviewContentcms-content-fetch
preview-rcs-personalizedread—POST lwr/apex/v68.0/interaction__JourneyController/getRcsPersonalizedPreviewContentcms-content-fetch, segments-list
whatsapp-template-fetchread—GET /headless/invoke/platform/conversation-setup/whats-app-templates/get-by-id—
send-test-emailwrite—POST lwr/apex/v68.0/interaction__JourneyController/sendTestEmailcms-content-fetch, segments-list, sender-email-from-addresses, perm-can-send-test-email
send-test-email-by-localewrite—POST lwr/apex/v68.0/interaction__JourneyController/sendTestEmailByLocalecms-content-fetch, segments-list, sender-email-from-addresses, perm-can-send-test-email
send-test-smswrite—POST lwr/apex/v68.0/interaction__JourneyController/sendTestSmscms-content-fetch, segments-list, sender-sms-codes, perm-can-send-test-sms
send-test-whatsappwrite—POST lwr/apex/v68.0/interaction__JourneyController/sendTestWhatsappcms-content-fetch, segments-list, sender-whatsapp-numbers, perm-can-send-test-whatsapp
send-test-pushwrite—POST lwr/apex/v68.0/interaction__JourneyController/sendTestPushcms-content-fetch, segments-list, perm-can-send-test-push
send-test-inappwrite—POST lwr/apex/v68.0/interaction__JourneyController/sendTestInAppcms-content-fetch, segments-list, perm-can-send-test-inapp
send-test-rcswrite—POST lwr/apex/v68.0/interaction__JourneyController/sendTestRcscms-content-fetch, segments-list, sender-rcs-agents, perm-can-send-test-rcs
sender-email-from-addressesread—GET lwr/apex/v68.0/interaction__JourneyController/getFromAddresses—
sender-email-dkim-validverify—GET lwr/apex/v68.0/interaction__JourneyController/fromAddressHasValidDKIMsender-email-from-addresses
sender-sms-codesread—GET lwr/apex/v68.0/interaction__JourneyController/getSenderSmsCodes—
sender-whatsapp-numbersread—GET lwr/apex/v68.0/interaction__JourneyController/getSenderWhatsappNumbers—
sender-whatsapp-waba-idsread—GET lwr/apex/v68.0/interaction__JourneyController/getSenderWabaIdsAndNames—
sender-rcs-agentsread—GET lwr/apex/v68.0/interaction__JourneyController/getSenderRcsAgents—
perm-can-send-test-emailverify—GET lwr/apex/v68.0/interaction__JourneyController/canUserSendTestEmail—
perm-can-send-test-smsverify—GET lwr/apex/v68.0/interaction__JourneyController/canUserSendTestSms—
perm-can-send-test-whatsappverify—GET lwr/apex/v68.0/interaction__JourneyController/canUserSendTestWhatsapp—
perm-can-send-test-pushverify—GET lwr/apex/v68.0/interaction__JourneyController/canUserSendTestPush—
perm-can-send-test-inappverify—GET lwr/apex/v68.0/interaction__JourneyController/canUserSendTestInApp—
perm-can-send-test-rcsverify—GET lwr/apex/v68.0/interaction__JourneyController/canUserSendTestRcs—
<!-- codey:operations end -->
<!-- skill-validate: ignore-end -->

© forcedotcom, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 1 other file (references) in skills/marketing-message-test of forcedotcom/sf-skills.

  • SKILL.md
  • references/api-contract.md

Open the folder on GitHubat commit e5164d9

Compare with similar skills

Marketing Message Test 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.

Marketing Message Test compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Marketing Message Test this skillforcedotcom/sf-skills1.1k—~5.1kAutomated safety check: PassApache-2.0
Soql Lib Query Builderbeyond-the-cloud-dev/soql-lib154—~4.3kAutomated safety check: PassMIT
Sf DatacloudJaganpro/sf-skills424—~2.7kAutomated safety check: PassMIT
B2b Sdr AgentiPythoning/b2b-sdr-agent-template190—~744Automated safety check: PassMIT-0
Soql Lib Selectorbeyond-the-cloud-dev/soql-lib154—~2kAutomated safety check: PassMIT
Dev SetupPortwood-Global-Solutions/Portwood125—~1.1kAutomated safety check: PassApache-2.0

Similar skills

  • Soql Lib Query Builder

    beyond-the-cloud-dev/soql-lib

    Builds Salesforce SOQL queries using the SOQL Lib fluent builder API (SOQL.cls).

    154 GitHub stars~4.3k tokensUpdated 5 days ago
    Sales & SupportAuto-check passed
  • Sf Datacloud

    Jaganpro/sf-skills

    Salesforce Data Cloud product orchestrator for connect→prepare→harmonize→segment→act workflows.

    424 GitHub stars~2.7k tokensUpdated 5 mo ago
    Sales & SupportAuto-check passed
  • B2b Sdr Agent

    iPythoning/b2b-sdr-agent-template

    Open-source B2B AI SDR template. An agent skill from iPythoning/b2b-sdr-agent-template.

    190 GitHub stars~744 tokensUpdated 9 days ago
    Sales & SupportAuto-check passed
  • Soql Lib Selector

    beyond-the-cloud-dev/soql-lib

    Creates Salesforce Apex selector classes using the SOQL Lib selector pattern.

    154 GitHub stars~2k tokensUpdated 5 days ago
    Sales & SupportAuto-check passed
  • Dev Setup

    Portwood-Global-Solutions/Portwood

    Get from a fresh clone of Portwood to a working, fully-tested Salesforce org.

    125 GitHub stars~1.1k tokensUpdated today
    Sales & SupportAuto-check passed
  • Sf Flow

    Jaganpro/sf-skills

    Creates and validates Salesforce Flows with 110-point scoring.

    424 GitHub stars~1.8k tokensUpdated 5 mo ago
    Sales & SupportAuto-check passed

More from forcedotcom/sf-skills

All 251 skills in this repo
  • Agentforce Architecture Analyze

    forcedotcom/sf-skills

    Declared architecture snapshot for one Agentforce agent: planner, topics, actions, flows, Apex, prompt templates, and NGA plugins.

    1.1k GitHub stars~4.5k tokensUpdated yesterday
    Auto-check passed
  • Agentforce D360 Analyze

    forcedotcom/sf-skills

    Data Cloud 360° view of a single Agentforce session. An agent skill from forcedotcom/sf-skills.

    1.1k GitHub stars~3.4k tokensUpdated yesterday
    Auto-check passed
  • Apply a Salesforce sandbox post-copy automation JSON config against a target org.

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

    1.1k GitHub stars~5.4k tokensUpdated yesterday
    Auto-check: notes
  • Design Systems Slds Apply

    forcedotcom/sf-skills

    Apply SLDS-compliant UI using the correct blueprints, styling hooks, utility classes, and icons.

    1.1k GitHub stars~3.7k tokensUpdated yesterday
    Auto-check passed
  • Experience Lwc Generate

    forcedotcom/sf-skills

    Lightning Web Components with PICKLES methodology and 165-point scoring.

    1.1k GitHub stars~2.4k tokensUpdated yesterday
    Auto-check passed

Categories

Questions about Marketing Message Test

What does Marketing Message Test do?

Salesforce Marketing Cloud / Engagement 360 message preview and test-send. Marketing Message Test is an agent skill from forcedotcom/sf-skills. Salesforce Marketing Cloud / Engagement 360 message preview and test-send.

When should I use Marketing Message Test?

Marketing Message Test fits situations like: the user wants to render a personalized; unpersonalized preview of an E360 message (Email; RCS) from a content key; fire a test send.

How do I install Marketing Message Test in Claude Code?

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

How do I install Marketing Message Test in Codex?

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

Can I use Marketing Message Test in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add forcedotcom/sf-skills --skill marketing-message-test -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/marketing-message-test, .gemini/skills/marketing-message-test, .github/skills/marketing-message-test and .opencode/skills/marketing-message-test in your project.

What does Marketing Message Test need to run?

Going by SKILL.md and its folder, Marketing Message Test needs the command-line tools its instructions call (sf).

Does Marketing Message Test access the network?

SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.

Is Marketing Message Test safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Marketing Message Test use?

Marketing Message Test is published under the Apache-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Marketing Message Test use?

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

What are the alternatives to Marketing Message Test?

Skills that share tags, products or a category with Marketing Message Test: Soql Lib Query Builder (beyond-the-cloud-dev/soql-lib, 154 stars), Sf Datacloud (Jaganpro/sf-skills, 424 stars), B2b Sdr Agent (iPythoning/b2b-sdr-agent-template, 190 stars) and Soql Lib Selector (beyond-the-cloud-dev/soql-lib, 154 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Marketing Message Test?

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.