@salesforce/afv-skills 1.57.0 → 1.59.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/skills/agentforce-bot-upgrade/SKILL.md +3 -1
- package/skills/agentforce-generate/SKILL.md +21 -1
- package/skills/agentforce-generate/references/known-issues.md +51 -1
- package/skills/agentforce-generate/references/legacy-nga-regression-eval.md +547 -0
- package/skills/agentforce-generate/references/upgrade-legacy-agent-to-agentscript.md +577 -0
- package/skills/agentforce-generate/scripts/upgrade-legacy-nga-analyze.py +404 -0
- package/skills/agentforce-generate/scripts/upgrade-legacy-nga-run-trials.sh +58 -0
- package/skills/agentforce-persona-generate/SKILL.md +505 -0
- package/skills/agentforce-persona-generate/assets/checklist-template.md +100 -0
- package/skills/agentforce-persona-generate/assets/persona-encoding-template.md +252 -0
- package/skills/agentforce-persona-generate/assets/persona-template.md +229 -0
- package/skills/agentforce-persona-generate/assets/sample-dialog-template.md +50 -0
- package/skills/agentforce-persona-generate/assets/workshop-outline-template.md +97 -0
- package/skills/agentforce-persona-generate/examples/concierge-persona.md +189 -0
- package/skills/agentforce-persona-generate/examples/concierge-sample-dialog.md +70 -0
- package/skills/agentforce-persona-generate/examples/drover-persona.md +194 -0
- package/skills/agentforce-persona-generate/examples/drover-sample-dialog.md +62 -0
- package/skills/agentforce-persona-generate/examples/steady-hand-persona.md +188 -0
- package/skills/agentforce-persona-generate/examples/steady-hand-sample-dialog.md +68 -0
- package/skills/agentforce-persona-generate/examples/yt-persona.md +195 -0
- package/skills/agentforce-persona-generate/examples/yt-sample-dialog.md +66 -0
- package/skills/agentforce-persona-generate/references/attributions.md +36 -0
- package/skills/agentforce-persona-generate/references/interaction-design-notes.md +30 -0
- package/skills/agentforce-persona-generate/references/persona-encoding-guide.md +566 -0
- package/skills/agentforce-persona-generate/references/persona-framework.md +796 -0
- package/skills/agentforce-persona-generate/references/refinement-mappings.md +31 -0
- package/skills/agentforce-persona-generate/references/scoring-rubric.md +58 -0
- package/skills/agentforce-persona-generate/references/voice-catalog.json +2327 -0
- package/skills/agentforce-persona-generate/references/workshop-question-policy.md +90 -0
- package/skills/agentforce-persona-generate/references/workshop-scenario-seeds.md +119 -0
- package/skills/agentforce-persona-generate/scripts/parse_agent_yaml.py +223 -0
- package/skills/dx-app-analytics-query/SKILL.md +8 -8
- package/skills/experience-ui-bundle-app-coordinate/SKILL.md +12 -12
- package/skills/experience-ui-bundle-app-coordinate/references/phase-completion-validation.md +3 -3
- package/skills/experience-ui-bundle-app-coordinate/references/phase-execution-pattern.md +9 -7
- package/skills/experience-ui-bundle-app-coordinate/scripts/check-dangling-refs.mjs +132 -0
- package/skills/experience-ui-bundle-app-coordinate/scripts/check-hosting-target.mjs +62 -0
- package/skills/experience-ui-bundle-app-coordinate/scripts/check-phase-1-complete.mjs +71 -0
- package/skills/experience-ui-bundle-app-coordinate/scripts/check-phase-4-complete.mjs +95 -0
- package/skills/experience-ui-bundle-app-coordinate/scripts/check-phase-6-ready.mjs +78 -0
- package/skills/experience-ui-bundle-app-coordinate/scripts/check-prerequisites.mjs +21 -0
- package/skills/experience-ui-bundle-app-coordinate/scripts/check-sfdx-project.mjs +28 -0
- package/skills/experience-ui-bundle-custom-app-generate/SKILL.md +3 -1
- package/skills/experience-ui-bundle-custom-app-generate/scripts/resolve-uibundle-path.mjs +40 -0
- package/skills/experience-ui-bundle-frontend-generate/SKILL.md +7 -5
- package/skills/experience-ui-bundle-frontend-generate/scripts/check-preconditions.mjs +70 -0
- package/skills/experience-ui-bundle-frontend-generate/scripts/resolve-ui-bundle.mjs +76 -0
- package/skills/experience-ui-bundle-frontend-generate/scripts/verify-rules.mjs +115 -0
- package/skills/experience-ui-bundle-metadata-generate/SKILL.md +7 -3
- package/skills/experience-ui-bundle-metadata-generate/references/angular-metadata-generate.md +1 -1
- package/skills/experience-ui-bundle-metadata-generate/references/react-metadata-generate.md +1 -1
- package/skills/experience-ui-bundle-metadata-generate/scripts/check-api-version.mjs +43 -0
- package/skills/experience-ui-bundle-metadata-generate/scripts/detect-framework.mjs +131 -0
- package/skills/experience-ui-bundle-metadata-generate/scripts/verify-bundle-location.mjs +152 -0
- package/skills/experience-ui-bundle-mfa-configure/references/branding.md +10 -6
- package/skills/experience-ui-bundle-project-generate/SKILL.md +13 -39
- package/skills/experience-ui-bundle-project-generate/scripts/flatten-project.mjs +33 -11
- package/skills/experience-ui-bundle-project-generate/scripts/generate-project.mjs +77 -0
- package/skills/experience-ui-bundle-project-generate/scripts/install-deps.mjs +95 -0
- package/skills/service-omni-channel-setup-coordinate/SKILL.md +1 -0
- package/skills/service-omni-command-center-analyze/SKILL.md +1 -0
- package/skills/service-omni-command-center-configure/SKILL.md +92 -0
- package/skills/service-omni-command-center-configure/references/api-notes.md +50 -0
- package/skills/service-omni-command-center-configure/scripts/configure-and-report.sh +257 -0
- package/skills/service-omni-command-center-configure/scripts/settings_document.py +97 -0
- package/skills/service-omni-command-center-configure/scripts/tests/test_command_center_configure_contracts.py +206 -0
- package/skills/experience-ui-bundle-app-coordinate/scripts/check-dangling-refs.sh +0 -42
- package/skills/experience-ui-bundle-app-coordinate/scripts/check-hosting-target.sh +0 -26
- package/skills/experience-ui-bundle-app-coordinate/scripts/check-phase-1-complete.sh +0 -35
- package/skills/experience-ui-bundle-app-coordinate/scripts/check-phase-4-complete.sh +0 -47
- package/skills/experience-ui-bundle-app-coordinate/scripts/check-phase-6-ready.sh +0 -33
- package/skills/experience-ui-bundle-app-coordinate/scripts/check-prerequisites.sh +0 -20
- package/skills/experience-ui-bundle-app-coordinate/scripts/check-sfdx-project.sh +0 -15
- package/skills/experience-ui-bundle-custom-app-generate/scripts/resolve-uibundle-path.sh +0 -30
- package/skills/experience-ui-bundle-frontend-generate/scripts/check-preconditions.sh +0 -37
- package/skills/experience-ui-bundle-frontend-generate/scripts/resolve-ui-bundle.sh +0 -66
- package/skills/experience-ui-bundle-frontend-generate/scripts/verify-rules.sh +0 -58
- package/skills/experience-ui-bundle-metadata-generate/scripts/check-api-version.sh +0 -30
- package/skills/experience-ui-bundle-metadata-generate/scripts/detect-framework.sh +0 -73
- package/skills/experience-ui-bundle-metadata-generate/scripts/verify-bundle-location.sh +0 -118
|
@@ -0,0 +1,252 @@
|
|
|
1
|
+
---
|
|
2
|
+
version: "3.0.0"
|
|
3
|
+
date: 2026-05-15
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# [Agent Name] — Persona Encoding
|
|
7
|
+
|
|
8
|
+
**Agent Authoring Tool:** [Agent Script (default) / Agentforce Builder]
|
|
9
|
+
**Mode:** [Greenfield (starter skeleton) / Brownfield (re-encoding existing .agent file)]
|
|
10
|
+
**Channel:** [web chat / mobile chat / SMS / email / telephony / multimodal-with-audio / embedded / other]
|
|
11
|
+
**Date:** [date]
|
|
12
|
+
**Source persona:** [agent-name]-persona.md
|
|
13
|
+
**Source .agent file (brownfield only):** [path]
|
|
14
|
+
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
## Agent Script Encoding (.agent file)
|
|
18
|
+
|
|
19
|
+
*Include this section when tool = Agent Script. Output must be valid Agent Script syntax per the schema in `forcedotcom/sf-skills/skills/developing-agentforce/`.*
|
|
20
|
+
|
|
21
|
+
### Greenfield: Starter `.agent` Skeleton
|
|
22
|
+
|
|
23
|
+
For new agents, the encoding output is a minimal valid `.agent` file. Subagents, actions, variables, and routing are placeholders for the user to flesh out — the skill never invents structure.
|
|
24
|
+
|
|
25
|
+
```agentscript
|
|
26
|
+
system:
|
|
27
|
+
instructions: |
|
|
28
|
+
[Full persona content as a literal block: Identity Traits, Negative Identity,
|
|
29
|
+
Personification, all 13 dimensions with behavioral rules, Phrase Book,
|
|
30
|
+
Tone Boundaries, Tone Flex rules, Never-Say List, Lexicon (global), Guardrails
|
|
31
|
+
(if any), Immutable content with "use exactly as written" directive.]
|
|
32
|
+
messages:
|
|
33
|
+
welcome: "[Static welcome in persona voice]"
|
|
34
|
+
error: "[Static error in persona voice]"
|
|
35
|
+
|
|
36
|
+
config:
|
|
37
|
+
developer_name: "[snake_case_name]" # API identifier; matches directory name
|
|
38
|
+
agent_label: "[Display Name]" # User-facing display name (from NAME spoke)
|
|
39
|
+
description: "[Functional one-liner — what the agent does]"
|
|
40
|
+
agent_type: "[AgentforceServiceAgent | AgentforceEmployeeAgent]"
|
|
41
|
+
default_agent_user: "[username]" # Required only for ServiceAgent
|
|
42
|
+
|
|
43
|
+
language:
|
|
44
|
+
default_locale: "en_US" # BCP 47
|
|
45
|
+
|
|
46
|
+
start_agent entry:
|
|
47
|
+
description: "[Routing description — what intent this entry point handles]"
|
|
48
|
+
reasoning:
|
|
49
|
+
instructions: |
|
|
50
|
+
[Routing logic — placeholder for the user to implement]
|
|
51
|
+
|
|
52
|
+
subagent main:
|
|
53
|
+
description: "[Placeholder — replace with actual subagent purpose]"
|
|
54
|
+
reasoning:
|
|
55
|
+
instructions: |
|
|
56
|
+
[Placeholder — the persona's global instructions are inherited from
|
|
57
|
+
system.instructions. Per-subagent calibration goes here when the user
|
|
58
|
+
adds real subagents.]
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
**Formatting rules** (per developing-agentforce):
|
|
62
|
+
- 4-space indentation, never tabs
|
|
63
|
+
- Strings double-quoted
|
|
64
|
+
- Booleans `True` / `False` capitalized
|
|
65
|
+
- Identifiers `[a-zA-Z][a-zA-Z0-9_]*`, max 80 chars
|
|
66
|
+
|
|
67
|
+
### Brownfield: Re-Encoding Existing `.agent`
|
|
68
|
+
|
|
69
|
+
For brownfield mode, the encoding output is a **proposed-new-file** with annotated changes — only persona-bearing fields are modified. Routing, subagent structure, action contracts, and variables stay exactly as the source had them.
|
|
70
|
+
|
|
71
|
+
The persona-bearing fields the skill modifies:
|
|
72
|
+
- `system.instructions`
|
|
73
|
+
- `system.messages.welcome`
|
|
74
|
+
- `system.messages.error`
|
|
75
|
+
- Each subagent's `system:` override (if used) — only when tone flex warrants
|
|
76
|
+
- Each subagent's `reasoning.instructions:` (the persona-relevant portion)
|
|
77
|
+
- Each action's `progress_indicator_message:`
|
|
78
|
+
|
|
79
|
+
A companion diff summary at `persona/[agent-name]/persona-diff.md` lists what changed and why, scoped to persona only.
|
|
80
|
+
|
|
81
|
+
### Per-Subagent Calibration *(optional, only when subagents are declared)*
|
|
82
|
+
|
|
83
|
+
```agentscript
|
|
84
|
+
subagent [subagent_name]:
|
|
85
|
+
description: "[subagent purpose]"
|
|
86
|
+
system: # Optional override; reserve for major persona shifts
|
|
87
|
+
instructions: |
|
|
88
|
+
[Full alternate system block — replaces global for this subagent]
|
|
89
|
+
reasoning:
|
|
90
|
+
instructions: |
|
|
91
|
+
Persona reminder: [one-line recall of global identity/persona]
|
|
92
|
+
Brevity: [calibration for this subagent]
|
|
93
|
+
Tone flex: [Emotional Coloring + Empathy shifts for this subagent context]
|
|
94
|
+
Lexicon: [subagent-specific terms with brief definitions]
|
|
95
|
+
Phrase book: [situational phrases relevant to this subagent]
|
|
96
|
+
Humor: [guidance for this subagent — often "drop to None for escalation"]
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
*Repeat per subagent that needs persona calibration.*
|
|
100
|
+
|
|
101
|
+
### Per-Action Loading Text *(optional, only when actions exist + voice channel)*
|
|
102
|
+
|
|
103
|
+
Set on the **action definition** (the `target:` action under the subagent's top-level `actions:` block), not on the `reasoning.actions` tool reference:
|
|
104
|
+
|
|
105
|
+
```agentscript
|
|
106
|
+
actions:
|
|
107
|
+
[action_name]:
|
|
108
|
+
target: "flow://[FlowName]"
|
|
109
|
+
description: "[What this action does]"
|
|
110
|
+
progress_indicator_message: "[In-character loading text]"
|
|
111
|
+
include_in_progress_indicator: True
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
*Repeat per action that needs in-character loading text. The progress message is most impactful in voice channels (telephony, multimodal-with-audio).*
|
|
115
|
+
|
|
116
|
+
### Dynamic Welcome Message *(optional)*
|
|
117
|
+
|
|
118
|
+
*If the user opts for a dynamic welcome supplementing the static one. See [Salesforce greeting design guide](https://www.salesforce.com/blog/design-better-greetings-agentforce-builder/).*
|
|
119
|
+
|
|
120
|
+
```agentscript
|
|
121
|
+
# Dynamic welcome encoded as logic in start_agent.reasoning.instructions
|
|
122
|
+
# (time-of-day, returning user, context-aware opening)
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
---
|
|
126
|
+
|
|
127
|
+
## Agentforce Builder Encoding
|
|
128
|
+
|
|
129
|
+
*Include this section when tool = Agentforce Builder.*
|
|
130
|
+
|
|
131
|
+
### Agent Configuration Fields
|
|
132
|
+
|
|
133
|
+
| Field | Limit | Value | Chars |
|
|
134
|
+
|---|---|---|---|
|
|
135
|
+
| **Name** | 80 | [agent name] | [count] |
|
|
136
|
+
| **Role** | 255 | [functional summary — what the agent does, who it serves. No persona style.] | [count] |
|
|
137
|
+
| **Company** | 255 | [company context] | [count] |
|
|
138
|
+
| **Welcome Message** | 800 (aim ≤ 255) | [welcome in persona voice] | [count] |
|
|
139
|
+
| **Error Message** | — | [error in persona voice] | — |
|
|
140
|
+
|
|
141
|
+
### Agentforce Builder Settings
|
|
142
|
+
|
|
143
|
+
| Setting | Recommendation | Rationale |
|
|
144
|
+
|---|---|---|
|
|
145
|
+
| **Tone** | [Casual / Neutral / Formal] | [mapping to Register + Formality] |
|
|
146
|
+
| **Conversation Recs on Welcome** | [On / Off] | [rationale] |
|
|
147
|
+
| **Conversation Recs in Responses** | [On / Off] | [rationale] |
|
|
148
|
+
|
|
149
|
+
### Global Persona Block
|
|
150
|
+
|
|
151
|
+
*For a dedicated global instructions topic.*
|
|
152
|
+
|
|
153
|
+
```text
|
|
154
|
+
[Full persona content: identity, dimensions, phrase book, tone
|
|
155
|
+
boundaries (including profanity boundary if set), never-say list,
|
|
156
|
+
chatting style rules. This is the primary encoding surface in Builder.]
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
### Immutable Terms *(include when applicable)*
|
|
160
|
+
|
|
161
|
+
*Brand-defined and legal/compliance terms that must be preserved exactly as written in all agent output.*
|
|
162
|
+
|
|
163
|
+
| Term | Type | Usage |
|
|
164
|
+
|---|---|---|
|
|
165
|
+
| [term] | [brand / legal] | [usage rule — e.g., "Always use this exact term for the loyalty program"] |
|
|
166
|
+
| [term] | [brand / legal] | [usage rule] |
|
|
167
|
+
|
|
168
|
+
*Encode in global instructions with explicit "use exactly as written" directive. If a term appears in both brand and legal contexts with different wording, the resolution chosen during design is noted here.*
|
|
169
|
+
|
|
170
|
+
### Per-Topic Persona Instructions (Agentforce Builder)
|
|
171
|
+
|
|
172
|
+
*Builder UI still labels these "Topics" even though Agent Script renamed the concept to "Subagent." When used here, "Topic" refers to the Builder field; the same concept maps to a `subagent` block in Agent Script.*
|
|
173
|
+
|
|
174
|
+
*Include when topics are provided.*
|
|
175
|
+
|
|
176
|
+
**[Topic Name]:**
|
|
177
|
+
```text
|
|
178
|
+
Persona reminder: [one-line recall of global identity/persona]
|
|
179
|
+
Brevity: [calibration for this topic]
|
|
180
|
+
Tone: [tone flex encoding for this topic context]
|
|
181
|
+
Lexicon: [domain terms and usage notes for this topic]
|
|
182
|
+
Phrase book: [situational phrases relevant to this topic]
|
|
183
|
+
Humor: [guidance — e.g., "drop to None for escalation"]
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
*Repeat for each topic.*
|
|
187
|
+
|
|
188
|
+
### Loading Text
|
|
189
|
+
|
|
190
|
+
| Action | Loading Text |
|
|
191
|
+
|---|---|
|
|
192
|
+
| [action name] | [in-character loading text] |
|
|
193
|
+
| [action name] | [in-character loading text] |
|
|
194
|
+
| Generic (fallback) | [in-character loading text] |
|
|
195
|
+
|
|
196
|
+
---
|
|
197
|
+
|
|
198
|
+
## Voice Encoding
|
|
199
|
+
|
|
200
|
+
*Include this section when modality includes telephony/voice.*
|
|
201
|
+
|
|
202
|
+
### Voice Selection
|
|
203
|
+
|
|
204
|
+
**Selection criteria:**
|
|
205
|
+
|
|
206
|
+
| Criteria | Target | Persona Rationale |
|
|
207
|
+
|---|---|---|
|
|
208
|
+
| **Language** | [primary language] | [why] |
|
|
209
|
+
| **Gender** | [inferred or specified] | [source — name, pronouns, or user input] |
|
|
210
|
+
| **Voice Qualities** | [what to look for — e.g., warm, professional, measured pace] | [which persona dimensions drive this] |
|
|
211
|
+
|
|
212
|
+
**Recommended voices** (from default library — verify in your org, listen to previews):
|
|
213
|
+
|
|
214
|
+
| Voice | Gender | Accent | Style | Why |
|
|
215
|
+
|---|---|---|---|---|
|
|
216
|
+
| [name] | [m/f] | [accent] | [style] | [persona match reasoning] |
|
|
217
|
+
| [name] | [m/f] | [accent] | [style] | [persona match reasoning] |
|
|
218
|
+
| [name] | [m/f] | [accent] | [style] | [persona match reasoning] |
|
|
219
|
+
|
|
220
|
+
**Fine-tuning starting points** (experiment in voice preview — these are starting points, not prescriptions):
|
|
221
|
+
|
|
222
|
+
| Parameter | Starting Point | Why |
|
|
223
|
+
|---|---|---|
|
|
224
|
+
| **Speed** | [value] | [e.g., "Concise brevity + hospitality warmth → moderate pace, not rushed"] |
|
|
225
|
+
| **Stability** | [value] | [e.g., "Encouraging coloring needs expressiveness → lower stability"] |
|
|
226
|
+
| **Similarity** | [value] | [e.g., "Default — no reason to deviate from base voice"] |
|
|
227
|
+
|
|
228
|
+
### Key-Term Prompting
|
|
229
|
+
|
|
230
|
+
| Term |
|
|
231
|
+
|---|
|
|
232
|
+
| [brand name] |
|
|
233
|
+
| [product name] |
|
|
234
|
+
| [domain term] |
|
|
235
|
+
|
|
236
|
+
### Pronunciation Dictionary *(optional)*
|
|
237
|
+
|
|
238
|
+
| Word | Pronunciation (IPA) | Verified? |
|
|
239
|
+
|---|---|---|
|
|
240
|
+
| [term] | [approximate IPA] | Verify in voice preview |
|
|
241
|
+
|
|
242
|
+
### Voice Welcome Message
|
|
243
|
+
|
|
244
|
+
```text
|
|
245
|
+
[Shorter than text welcome. Includes AI disclosure. In persona voice.]
|
|
246
|
+
```
|
|
247
|
+
|
|
248
|
+
### Voice Instruction Adjustments
|
|
249
|
+
|
|
250
|
+
- Brevity: [text default] → [voice adjustment, one position shorter]
|
|
251
|
+
- Formatting: suppressed (no emoji, bullets → ordinals)
|
|
252
|
+
- [Any pausing guidance for structured data]
|
|
@@ -0,0 +1,229 @@
|
|
|
1
|
+
---
|
|
2
|
+
version: "2.1.0"
|
|
3
|
+
date: 2026-05-15
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Agent Persona: {{AGENT_NAME}}
|
|
7
|
+
|
|
8
|
+
> Generated by `designing-agent-persona` v{{VERSION}}
|
|
9
|
+
> Date: {{DATE}}
|
|
10
|
+
> Archetype: {{ARCHETYPE_NAME or "None — custom build"}}
|
|
11
|
+
|
|
12
|
+
## Persona Summary
|
|
13
|
+
|
|
14
|
+
*A 2-3 sentence narrative capturing the essence of this agent's personality in the context of its business goals. Not a list of traits — a paragraph you could paste in a Slack message when sharing this persona with stakeholders.*
|
|
15
|
+
|
|
16
|
+
{{EXECUTIVE_SUMMARY — e.g., "Drover is a no-nonsense internal sales coach who reads deals like a stockman reads terrain. He leads with data-backed recommendations, delivers hard truths with easy confidence, and speaks in the laconic Australian idiom of a seasoned bushman. Built to help enterprise AEs close more effectively by cutting through CRM noise to surface what actually matters."}}
|
|
17
|
+
|
|
18
|
+
*For Bold or Distinctive agents: the summary must convey specific behavioral rules (when personality lands, when it pulls back) — not just adjectives. "Irreverent and bold" is brand copy. "Irreverent in routine interactions, pulls back to direct-and-warm during complaints" is a design spec.*
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
## Context
|
|
23
|
+
|
|
24
|
+
*Design inputs gathered during persona creation. Fields are populated only when provided.*
|
|
25
|
+
|
|
26
|
+
| Field | Value |
|
|
27
|
+
|---|---|
|
|
28
|
+
| **Agent Name** | {{AGENT_NAME}} |
|
|
29
|
+
| **Name Decision** | {{named / unnamed / brand-as-name / pending}} |
|
|
30
|
+
| **Personification** | {{Talking System / Familiar Thing / Personal Assistant}} |
|
|
31
|
+
| **Channel** | {{web chat / mobile chat / SMS / email / telephony / multimodal-with-audio / embedded / other}} |
|
|
32
|
+
| **Audience** | {{employees / customers / partners / mixed — description of who is served}} |
|
|
33
|
+
| **Primary Use Cases** | {{USE_CASES — at least one required}} |
|
|
34
|
+
| **Company / Brand** | {{Company name and brief context}} |
|
|
35
|
+
| **Business Goals** | {{What the agent is meant to achieve — or omit if not gathered}} |
|
|
36
|
+
| **Success Metrics** | {{How success is measured — or omit if not gathered}} |
|
|
37
|
+
| **Regulated Industry** | {{Yes/No — if Yes, note the domain}} |
|
|
38
|
+
|
|
39
|
+
*Additional context (agent type, surface, topics) is gathered during encoding, not persona design.*
|
|
40
|
+
|
|
41
|
+
---
|
|
42
|
+
|
|
43
|
+
## Identity
|
|
44
|
+
|
|
45
|
+
*3-5 personality adjectives that anchor every design decision.*
|
|
46
|
+
|
|
47
|
+
- **{{Adjective 1}}** — {{Behavioral definition: what this looks like in the agent's actual responses}}
|
|
48
|
+
- **{{Adjective 2}}** — {{Behavioral definition}}
|
|
49
|
+
- **{{Adjective 3}}** — {{Behavioral definition}}
|
|
50
|
+
- **{{Adjective 4}}** *(optional)* — {{Behavioral definition}}
|
|
51
|
+
- **{{Adjective 5}}** *(optional)* — {{Behavioral definition}}
|
|
52
|
+
|
|
53
|
+
### What You're Not *(optional)*
|
|
54
|
+
|
|
55
|
+
*Character-level anti-patterns. What this agent fundamentally is not — broader than tone boundaries or specific phrases.*
|
|
56
|
+
|
|
57
|
+
- Not a {{character anti-pattern 1}} — {{why this matters for this persona}}
|
|
58
|
+
- Not a {{character anti-pattern 2}} — {{why this matters}}
|
|
59
|
+
|
|
60
|
+
### Values *(optional — explicit input only)*
|
|
61
|
+
|
|
62
|
+
*What this agent believes. Populated only from explicit user input — never inferred.*
|
|
63
|
+
|
|
64
|
+
- {{Belief 1}} — {{observable behavior it generates}}
|
|
65
|
+
- {{Belief 2}} — {{observable behavior}}
|
|
66
|
+
|
|
67
|
+
### Backstory *(optional)*
|
|
68
|
+
|
|
69
|
+
*A fictional background that informs the designer's word choice. The agent never says this aloud.*
|
|
70
|
+
|
|
71
|
+
{{1-2 sentences of backstory, or omit section if not applicable.}}
|
|
72
|
+
|
|
73
|
+
---
|
|
74
|
+
|
|
75
|
+
## Persona Profile
|
|
76
|
+
|
|
77
|
+
*All 13 dimensions with selected values and confidence annotations.*
|
|
78
|
+
|
|
79
|
+
| Category | Dimension | Value | Signal |
|
|
80
|
+
|---|---|---|---|
|
|
81
|
+
| Register | Register | {{Value}} | {{strong / default}} |
|
|
82
|
+
| Voice | Formality | {{Value}} | {{strong / default}} |
|
|
83
|
+
| Voice | Warmth | {{Value}} | {{strong / default}} |
|
|
84
|
+
| Voice | Personality Intensity | {{Value}} | {{strong / default}} |
|
|
85
|
+
| Voice | Reading Level | {{Value}} | {{strong / default}} |
|
|
86
|
+
| Tone | Emotional Coloring | {{Value}} | {{strong / default}} |
|
|
87
|
+
| Tone | Empathy Level | {{Value}} | {{strong / default}} |
|
|
88
|
+
| Delivery | Brevity | {{Value}} | {{strong / default}} |
|
|
89
|
+
| Delivery | Humor | {{Value}} | {{strong / default}} |
|
|
90
|
+
| Chatting Style | Emoji | {{Value}} | {{strong / default}} |
|
|
91
|
+
| Chatting Style | Formatting | {{Value}} | {{strong / default}} |
|
|
92
|
+
| Chatting Style | Punctuation | {{Value}} | {{strong / default}} |
|
|
93
|
+
| Chatting Style | Capitalization | {{Value}} | {{strong / default}} |
|
|
94
|
+
|
|
95
|
+
*Constraint check: Do upstream choices align with downstream ones? See constraint notes in the framework for natural pairings. "Strong" = clear evidence in input. "Default" = inferred from context.*
|
|
96
|
+
|
|
97
|
+
---
|
|
98
|
+
|
|
99
|
+
## Dimension Detail
|
|
100
|
+
|
|
101
|
+
*Behavioral rules for each dimension selection, organized by category. These are the concrete rules that govern the agent's behavior.*
|
|
102
|
+
|
|
103
|
+
### Register: {{Position Name}}
|
|
104
|
+
|
|
105
|
+
*{{One-liner from framework}}*
|
|
106
|
+
|
|
107
|
+
- {{Behavioral bullet 1}}
|
|
108
|
+
- {{Behavioral bullet 2}}
|
|
109
|
+
- {{Behavioral bullet 3}}
|
|
110
|
+
- {{Behavioral bullet 4}}
|
|
111
|
+
|
|
112
|
+
### Voice
|
|
113
|
+
|
|
114
|
+
**Formality: {{Position Name}}** — {{Description from framework. Additional notes on how formality manifests for this agent.}}
|
|
115
|
+
|
|
116
|
+
**Warmth: {{Position Name}}** — {{Description from framework. Additional notes on interpersonal temperature for this agent.}}
|
|
117
|
+
|
|
118
|
+
**Personality Intensity: {{Position Name}}** — {{Description from framework. What kind of character comes through and how.}}
|
|
119
|
+
|
|
120
|
+
**Reading Level: {{Position Name}}** — {{Description from framework. How the agent handles domain vocabulary relative to the user's knowledge level.}}
|
|
121
|
+
|
|
122
|
+
{{If voice surface: Voice Channel Parameters — Pitch, Speaking Rate, Energy, Warmth.}}
|
|
123
|
+
|
|
124
|
+
### Tone
|
|
125
|
+
|
|
126
|
+
**Emotional Coloring: {{Position Name}}** — {{Description from framework. How the agent comes across emotionally.}}
|
|
127
|
+
|
|
128
|
+
**Empathy Level: {{Position Name}}** — {{Description from framework. How feelings are handled.}}
|
|
129
|
+
|
|
130
|
+
**Tone Boundaries:**
|
|
131
|
+
- {{What the agent must never sound like — authored per persona}}
|
|
132
|
+
- {{Context-specific boundary based on Emotional Coloring}}
|
|
133
|
+
- {{When Humor is not None: "No humor in error states, escalation, or high-stakes contexts."}}
|
|
134
|
+
|
|
135
|
+
### Tone Flex
|
|
136
|
+
|
|
137
|
+
*How tone shifts from baseline in response to context.*
|
|
138
|
+
|
|
139
|
+
**Baseline:** Emotional Coloring: {{Position}}, Empathy Level: {{Position}}
|
|
140
|
+
|
|
141
|
+
| Trigger | Dimension | Shift | Hard Boundary |
|
|
142
|
+
|---|---|---|---|
|
|
143
|
+
| {{Trigger 1, e.g., "User frustrated"}} | {{Dimension}} | {{From → To}} | {{What it must never cross}} |
|
|
144
|
+
| {{Trigger 2}} | {{Dimension}} | {{From → To}} | {{Hard boundary}} |
|
|
145
|
+
| {{Trigger 3}} | {{Dimension}} | {{From → To}} | {{Hard boundary}} |
|
|
146
|
+
|
|
147
|
+
### Delivery
|
|
148
|
+
|
|
149
|
+
**Brevity: {{Position Name}}** — {{Description from framework. Tapering behavior, "One Breath Test" applicability.}}
|
|
150
|
+
|
|
151
|
+
**Humor: {{Position Name}}** — {{Description from framework. If not None: how humor manifests for this persona, when it's suppressed.}}
|
|
152
|
+
|
|
153
|
+
### Chatting Style
|
|
154
|
+
|
|
155
|
+
**Emoji: {{Position Name}}** — {{Description and how it manifests for this persona. If Functional: define emoji vocabulary.}}
|
|
156
|
+
|
|
157
|
+
**Formatting: {{Position Name}}** — {{Description and how it manifests for this persona.}}
|
|
158
|
+
|
|
159
|
+
**Punctuation: {{Position Name}}** — {{Description and how it manifests for this persona.}}
|
|
160
|
+
|
|
161
|
+
**Capitalization: {{Position Name}}** — {{Description and how it manifests for this persona.}}
|
|
162
|
+
|
|
163
|
+
---
|
|
164
|
+
|
|
165
|
+
## Expression
|
|
166
|
+
|
|
167
|
+
*What the agent sounds like and what it never sounds like.*
|
|
168
|
+
|
|
169
|
+
### Phrase Book
|
|
170
|
+
|
|
171
|
+
*Example phrases the agent would use in common situations. Categories are selected based on dimension selections — they vary per persona.*
|
|
172
|
+
|
|
173
|
+
| Situation | Example Phrase(s) |
|
|
174
|
+
|---|---|
|
|
175
|
+
| {{Category 1}} | {{Drafted phrases}} |
|
|
176
|
+
| {{Category 2}} | {{Drafted phrases}} |
|
|
177
|
+
| {{Category 3}} | {{Drafted phrases}} |
|
|
178
|
+
| Discourse Markers | {{Conversational connectors tuned to formality and personality — e.g., "So," "Right," "Here's the thing"}} |
|
|
179
|
+
| ... | ... |
|
|
180
|
+
|
|
181
|
+
### Never-Say List
|
|
182
|
+
|
|
183
|
+
*Specific words, phrases, and patterns the agent must never use.*
|
|
184
|
+
|
|
185
|
+
- {{Anti-phrase 1 — e.g., "I'd be happy to help you with that!"}}
|
|
186
|
+
- {{Anti-phrase 2 — e.g., "Great question!"}}
|
|
187
|
+
- {{Anti-phrase 3 — identity contradiction}}
|
|
188
|
+
- {{Anti-phrase 4 — register violation}}
|
|
189
|
+
- {{Anti-phrase 5 — cognitive-processing marker, e.g., "Let me think about that"}}
|
|
190
|
+
- ...
|
|
191
|
+
|
|
192
|
+
---
|
|
193
|
+
|
|
194
|
+
## Phrasing
|
|
195
|
+
|
|
196
|
+
*What words and terms the agent uses.*
|
|
197
|
+
|
|
198
|
+
### Lexicon
|
|
199
|
+
|
|
200
|
+
*Brand terminology and domain vocabulary. Include when the agent has topic-specific language.*
|
|
201
|
+
|
|
202
|
+
**Global Lexicon:**
|
|
203
|
+
|
|
204
|
+
| Term | Usage | Immutable? |
|
|
205
|
+
|---|---|---|
|
|
206
|
+
| {{Term 1}} | {{How to use it}} | {{Yes/No}} |
|
|
207
|
+
| {{Term 2}} | {{How to use it}} | {{Yes/No}} |
|
|
208
|
+
|
|
209
|
+
**Per-Topic Lexicon** *(optional — populated during encoding):*
|
|
210
|
+
|
|
211
|
+
| Topic | Terms |
|
|
212
|
+
|---|---|
|
|
213
|
+
| {{Topic 1}} | {{Domain terms for this topic}} |
|
|
214
|
+
| {{Topic 2}} | {{Domain terms for this topic}} |
|
|
215
|
+
|
|
216
|
+
*Omit per-topic lexicon when the agent has no specialized vocabulary beyond global terms.*
|
|
217
|
+
|
|
218
|
+
### Immutable Content *(optional)*
|
|
219
|
+
|
|
220
|
+
*Content that must be preserved exactly as written — legal disclaimers, compliance wording, brand-defined terminology. Never alter, paraphrase, or shorten these.*
|
|
221
|
+
|
|
222
|
+
- {{Immutable content block 1 — e.g., verbatim legal disclaimer}}
|
|
223
|
+
- {{Immutable term 1 — e.g., "CVS affiliated pharmacy"}}
|
|
224
|
+
|
|
225
|
+
*Omit this section when there is no legally or brand-defined immutable content.*
|
|
226
|
+
|
|
227
|
+
---
|
|
228
|
+
|
|
229
|
+
*Companion artifact: Sample dialog is generated as a separate file (`[agent-name]-sample-dialog.md`) to keep the persona spec clean for downstream consumption.*
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
---
|
|
2
|
+
version: "1.0"
|
|
3
|
+
date: 2026-03-12
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Sample Dialog: {{AGENT_NAME}}
|
|
7
|
+
|
|
8
|
+
> Generated by `sf-ai-agentforce-persona` v{{VERSION}}
|
|
9
|
+
> Date: {{DATE}}
|
|
10
|
+
> Source persona: `{{PERSONA_FILE_PATH}}`
|
|
11
|
+
|
|
12
|
+
*This file is a validation artifact — it demonstrates how the persona sounds in conversation. It is generated from the persona document and can be regenerated at any time. Edit the persona, not this file.*
|
|
13
|
+
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
## Scenario 1: Happy Path
|
|
17
|
+
|
|
18
|
+
*{{Brief description of the routine scenario}}*
|
|
19
|
+
|
|
20
|
+
> **User:** {{User message}}
|
|
21
|
+
>
|
|
22
|
+
> **{{AGENT_NAME}}:** {{Agent response demonstrating persona}}
|
|
23
|
+
>
|
|
24
|
+
> **User:** {{User follow-up}}
|
|
25
|
+
>
|
|
26
|
+
> **{{AGENT_NAME}}:** {{Agent response}}
|
|
27
|
+
|
|
28
|
+
## Scenario 2: Uncertainty / Low Confidence
|
|
29
|
+
|
|
30
|
+
*{{Brief description of a scenario where the agent doesn't have a clear answer}}*
|
|
31
|
+
|
|
32
|
+
> **User:** {{User message}}
|
|
33
|
+
>
|
|
34
|
+
> **{{AGENT_NAME}}:** {{Agent response showing how it handles uncertainty}}
|
|
35
|
+
>
|
|
36
|
+
> **User:** {{User follow-up}}
|
|
37
|
+
>
|
|
38
|
+
> **{{AGENT_NAME}}:** {{Agent response}}
|
|
39
|
+
|
|
40
|
+
## Scenario 3: Persona Boundary
|
|
41
|
+
|
|
42
|
+
*{{Brief description of a scenario where the agent's tone or persona is tested}}*
|
|
43
|
+
|
|
44
|
+
> **User:** {{User message that tests persona boundaries}}
|
|
45
|
+
>
|
|
46
|
+
> **{{AGENT_NAME}}:** {{Agent response showing how it stays in character}}
|
|
47
|
+
>
|
|
48
|
+
> **User:** {{User follow-up}}
|
|
49
|
+
>
|
|
50
|
+
> **{{AGENT_NAME}}:** {{Agent response}}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
---
|
|
2
|
+
version: "1.0.0"
|
|
3
|
+
date: 2026-05-15
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Persona Design Workshop — {{AGENT_NAME or "[Agent Name]"}}
|
|
7
|
+
|
|
8
|
+
> Date: {{DATE}}
|
|
9
|
+
> Generated from: `{{agent-name}}-persona.md`
|
|
10
|
+
> Audience: customer's internal stakeholders (Brand, Legal, Experience, Subject-matter)
|
|
11
|
+
> Format: ~30-45 minutes, async-friendly (questions can be answered in writing)
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## Background (for the facilitator)
|
|
16
|
+
|
|
17
|
+
{{ONE_PARAGRAPH_BACKGROUND}}
|
|
18
|
+
|
|
19
|
+
A short paragraph (≤4 sentences) summarizing where the persona stands today — what's been drafted, what's been validated by signal, what's open. The goal of this workshop is to surface stakeholder input on the open items, not to walk through everything. Stakeholder time is the scarce resource.
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## Activity 1 — Identity calibration
|
|
24
|
+
|
|
25
|
+
*~10 min. Validate the agent's character at the highest-leverage level.*
|
|
26
|
+
|
|
27
|
+
{{N}} questions. Each is open-ended and asks stakeholders to confirm, push back, or pick.
|
|
28
|
+
|
|
29
|
+
- **Q1.** {{QUESTION_1}}
|
|
30
|
+
- Style: {{validate | choose-between | open-spectrum}}
|
|
31
|
+
- Dimension(s): {{Identity, Personification, ...}}
|
|
32
|
+
|
|
33
|
+
- **Q2.** {{QUESTION_2}}
|
|
34
|
+
- Style: ...
|
|
35
|
+
- Dimension(s): ...
|
|
36
|
+
|
|
37
|
+
- *(more if needed; aim for 2-3 in this activity)*
|
|
38
|
+
|
|
39
|
+
---
|
|
40
|
+
|
|
41
|
+
## Activity 2 — Tone in difficult moments
|
|
42
|
+
|
|
43
|
+
*~10-15 min. Surface tradeoffs the persona will face under pressure. Would-you-rather format.*
|
|
44
|
+
|
|
45
|
+
For each pair, stakeholders pick A or B. The two options must be **meaningfully different** with different consequences.
|
|
46
|
+
|
|
47
|
+
- **Pair 1.** Scenario: {{SCENARIO_FROM_SEED — e.g., "A customer expresses frustration"}}
|
|
48
|
+
- **A:** {{Response option A in the persona's voice}}
|
|
49
|
+
- **B:** {{Response option B — meaningfully different}}
|
|
50
|
+
- What's at stake: {{one-line consequence framing}}
|
|
51
|
+
|
|
52
|
+
- **Pair 2.** Scenario: {{SCENARIO}}
|
|
53
|
+
- **A:** ...
|
|
54
|
+
- **B:** ...
|
|
55
|
+
- What's at stake: ...
|
|
56
|
+
|
|
57
|
+
- *(2-4 pairs total; pick scenarios from `references/workshop-scenario-seeds.md` that align with the agent's use cases and the dimensions where stakeholder input is wanted)*
|
|
58
|
+
|
|
59
|
+
---
|
|
60
|
+
|
|
61
|
+
## Activity 3 — Spectrum check
|
|
62
|
+
|
|
63
|
+
*~10 min. For dimensions where the brand input is silent or where stakeholder convergence is needed.*
|
|
64
|
+
|
|
65
|
+
These are dimension cards — printable / FigJam-able. Stakeholders place a dot or sticky on the spectrum.
|
|
66
|
+
|
|
67
|
+
- **{{DIMENSION_NAME}}** — *{{one-line definition from framework}}*
|
|
68
|
+
```text
|
|
69
|
+
{{POSITION_1}} ⟷ {{POSITION_2}} ⟷ {{POSITION_3}} ⟷ {{POSITION_4}}
|
|
70
|
+
```
|
|
71
|
+
*Place the agent here.*
|
|
72
|
+
|
|
73
|
+
- **{{DIMENSION_NAME}}** — *{{one-line definition from framework}}*
|
|
74
|
+
```text
|
|
75
|
+
{{POSITION_1}} ⟷ {{POSITION_2}} ⟷ {{POSITION_3}}
|
|
76
|
+
```
|
|
77
|
+
*Place the agent here.*
|
|
78
|
+
|
|
79
|
+
- *(only include dimensions where confidence is low or stakeholder input is genuinely useful — don't ask the spectrum question for dimensions where the brand input already gave a strong answer)*
|
|
80
|
+
|
|
81
|
+
---
|
|
82
|
+
|
|
83
|
+
## Pre-read materials
|
|
84
|
+
|
|
85
|
+
- **Persona draft:** [{{agent-name}}-persona.md]({{agent-name}}-persona.md)
|
|
86
|
+
- **Sample dialog:** [{{agent-name}}-sample-dialog.md]({{agent-name}}-sample-dialog.md)
|
|
87
|
+
- **Brand guide:** {{LINK if provided}}
|
|
88
|
+
|
|
89
|
+
Stakeholders should read these before the workshop. The activities assume familiarity.
|
|
90
|
+
|
|
91
|
+
---
|
|
92
|
+
|
|
93
|
+
## After the workshop
|
|
94
|
+
|
|
95
|
+
Bring stakeholder answers back to the skill. Run AUGMENT (FILL OUT spoke) or re-run DRAFT to incorporate the answers, then re-run SCORE to see how the persona moved.
|
|
96
|
+
|
|
97
|
+
If a key dimension answer surfaced a contradiction with what the skill drafted, expect SCORE's Conflict-Pair check to flag it — that's a feature, not a bug. Reconcile in the next pass.
|