Version Prompt Templates and agent topic (now subagent) prompts: source-control shape, change review, model-version pinning, A/B, and rollback. Trigger keywords: prompt template versioning, prompt changelog, prompt rollback, A/B prompt test, agentforce prompt release. NOT for the CMDT-backed binding that swaps the live template version without a redeploy — use agentforce/prompt-template-versioning. NOT for authoring the template itself — use agentforce/prompt-builder-templates. NOT for prompt...
Scanned 9/6/2026
Install to Claude Code
npx -y skills add PranavNagrecha/AwesomeSalesforceSkills --skill agentforce-prompt-versioning --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Agentforce Prompt Versioning?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/pranavnagrecha-agentforce-prompt-versioning)More formats (shields.io, HTML) on the badges page.
---
name: agentforce-prompt-versioning
description: "Version Prompt Templates and agent topic (now subagent) prompts: source-control shape, change review, model-version pinning, A/B, and rollback. Trigger keywords: prompt template versioning, prompt changelog, prompt rollback, A/B prompt test, agentforce prompt release. NOT for the CMDT-backed binding that swaps the live template version without a redeploy — use agentforce/prompt-template-versioning. NOT for authoring the template itself — use agentforce/prompt-builder-templates. NOT for prompt engineering tips, general LLM fine-tuning, or Classify / Einstein Generate studio UI walkthroughs."
category: agentforce
salesforce-version: "Spring '25+"
well-architected-pillars:
- Reliability
- Operational Excellence
triggers:
- "version prompt templates"
- "prompt template source control"
- "prompt a/b test"
- "prompt rollback plan"
- "model version pinning agent"
tags:
- agentforce
- prompts
- versioning
- devops
inputs:
- Prompt template inventory
- Agent topic prompts
- Model-version strategy (auto / pinned)
outputs:
- Prompt versioning convention (naming, changelog)
- Rollback plan per prompt
- A/B harness for prompt variants
dependencies:
- agentforce/agentforce-testing-strategy
version: 1.0.1
author: Pranav Nagrecha
updated: 2026-08-14
---
# Agentforce Prompt Versioning
This skill is the **repository lifecycle** for prompt templates: layout, change
records, model pinning, drift detection, and ownership. The runtime flip — how
the live version changes, what rollback costs in wall-clock time, and how to run
two variants concurrently — is `agentforce/prompt-template-versioning`. The two
meet at `activeVersionIdentifier`.
## Why Version Prompts
A prompt is executable configuration whose behaviour cannot be verified by
reading it. That makes the *record* of why a version exists more load-bearing
than for ordinary code, where the code is its own documentation.
## Source Of Truth And File Shape
`GenAiPromptTemplate` lives in `force-app/main/default/genAiPromptTemplates/`
with suffix `.genAiPromptTemplate`, minimum API version 60.0. The fact that
determines everything else about the layout:
> **All versions of a template live in one file.** `templateVersions` is an
> array on the template — not a file per version. `activeVersionIdentifier`
> names the live one.
Per-version fields inside each `GenAiPromptTemplateVersion`: `versionNumber`,
`versionIdentifier`, `status` (`Published`/`Draft`), `content`, `primaryModel`,
`inputs`, `outputSchema`, `responseFormat` (HTML/JSON/MarkDown),
`isCitationEnabled`, and `templateDataProviders`.
So git history is **per template** and the changelog is **per version**. Neither
substitutes for the other.
The repo is authoritative — but state it *and* detect it. Both drift directions
are silent (a UI edit does not fail; the deploy that reverts it does not fail
either), so a convention alone is not a control. See the nightly drift check
below.
## Naming And Version Strategy
- Template developer name reflects purpose and is a **published interface** —
Flows, Apex, scorers, and agent actions reference it. Rename only as a
coordinated change; prefer editing `masterLabel`, which is free.
- Versions are `versionNumber` inside the file. **Do not** put version suffixes
in template names — that creates separate templates and couples every consumer
to a version number.
- There is no "Revision" field. The compatible-vs-breaking distinction is real
and belongs in the change record's **Contract impact** section, where it drives
the deployment shape.
Contract-breaking means: a new `required` input, a changed `responseFormat` or
`outputSchema`, new or removed `templateDataProviders`, or a changed
`primaryModel`. None of these fail at deploy time — a new required input fails at
*invocation*.
## Changelog Convention
`PROMPTS_CHANGELOG.md` at repo root, keyed by `versionIdentifier`. Four sections,
contract impact first because it is the only one a release manager must read:
```markdown
## 2026-08-10 — Sales_Email v4 (versionIdentifier: e5f6g7h8)
### Contract impact: NONE
inputs unchanged · responseFormat unchanged · outputSchema n/a ·
templateDataProviders unchanged · primaryModel unchanged
=> one-field activation flip; no consumer deployment required
### What changed
Removed the "As an AI assistant" preamble; added an instruction to name the
most recent Opportunity stage change; shortened closing guidance to 1 sentence.
### Why
Sales ops sampled 80 drafts (2026-07): reps deleted the opening line in 60%.
### Measured before promotion
Golden suite 48/48 (unchanged) · median draft 214 -> 168 words ·
canary 10% / 5 working days / n=41 reps: send-without-edit 38% -> 51% ·
no adverse latency change
### Rollback
Revert activeVersionIdentifier to a1b2c3d4 (v3), deploy.
Measured 6 min in the 2026-08-04 rehearsal. v3 retained until 2026-10-01.
```
Numbers with sample sizes are the point. "Improved tone" records a belief; a
reader six months later must be able to disagree with the conclusion.
## Model Pinning
The field is **`primaryModel`** on `GenAiPromptTemplateVersion`. Verify any model
identifier against what the org offers — a plausible-but-wrong value deploys and
then behaves unexpectedly.
Pin per template, not per org, and only where reproducibility is a stated
requirement: parsed output, regulated wording, customer-facing copy. Leave the
platform default where a human reviews every output anyway.
**Pinning is a commitment to re-evaluate quarterly.** A stale pin produces no
error — output simply stops improving while the platform default's does. Record
the outcome either way; "evaluated and declined because X, reconsider Q2" is a
completed review.
## A/B And Rollback
**Only one version of a template can be active at a time**, and there is no
platform-level traffic split. Concurrent variants therefore need two templates
plus a resolver you write — the mechanics live in
`agentforce/prompt-template-versioning`. What belongs here is the record: which
variants ran, over what period, with what result.
Rollback availability is a retention decision. Keep at least two prior versions
with a **dated** retirement; an inactive version costs only file size, and the
weeks right after a promotion — when the cleanup instinct fires — are exactly
when the rollback is most likely to be needed.
## Recommended Workflow
1. Inventory templates. Assign **two** owners each in CODEOWNERS — the business
owner of the wording and the engineer who owns the envelope. The failure modes
split the same way.
2. One file per template under `genAiPromptTemplates/`, all versions inside.
Put a structural-diff command in the PR template so envelope changes surface
before anyone opens a 400-line prose diff.
3. Write the change record with contract impact first and measurements with
sample sizes.
4. Decide `primaryModel` pinning per template, and schedule the quarterly
re-evaluation with a named owner. Do not pin without the capacity to review.
5. Inject policy values (`refundWindowDays`) as inputs rather than embedding
them in prose — unless the exact sentence is itself the reviewed artefact.
6. Run a nightly `sf project retrieve start --metadata GenAiPromptTemplate` plus
`git diff --exit-code`, with a written resolution rule per drift direction.
Run it again after every production deploy as release verification.
7. Put `GenAiPromptTemplate` early in `package.xml` — the Metadata API deploys in
file order and the template must exist before referencing types such as
`AiAgentScorerDefinition`.
## Official Sources Used
- GenAiPromptTemplate (Metadata API) —
https://developer.salesforce.com/docs/atlas.en-us.api_meta.meta/api_meta/meta_genaiprompttemplate.htm
- GenAiPromptTemplateActv (Metadata API) —
https://developer.salesforce.com/docs/atlas.en-us.api_meta.meta/api_meta/meta_genaiprompttemplateactv.htm
- Use Multiple Versions of a Prompt Template —
https://help.salesforce.com/s/articleView?id=sf.prompt_builder_use_multiple_versions.htm&type=5
- Activate and Deactivate Prompt Templates —
https://help.salesforce.com/s/articleView?id=sf.prompt_builder_activate_deactivate_templates.htm&type=5
- Manage Prompt Templates —
https://help.salesforce.com/s/articleView?id=ai.prompt_builder_manage_prompt_templates.htm&type=5
- Create Custom Scorers (deploy ordering) —
https://developer.salesforce.com/docs/ai/agentforce/guide/testing-api-custom-scorers.html
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!