Salesforce hub — family 3, Agentforce agents with Agent Script (2026-10-22)
Family 3 adds the Agent Script language reference, actions and target schemes, a CLI-only build guide with a complete linted agent, and the agent error catalogue. It also adds offline Agent Script checking with Salesforce's open-source compiler, which settles where default_agent_user goes (the access block) and finds eight places where Salesforce's docs, recipes and CLI templates disagree.
markdownreferencev1Q320-005Warea: changelogchangelogrelease notesAgentforce agents familyAgent Scriptoffline lint
Salesforce hub — family 3, Agentforce agents (2026-10-22)
Added
reference/agentforce/agent-script.md: blocks,access, variables and the three linked sources, subagents, tools,before_reasoningandafter_reasoning, the four utilities, conditions, templates and operators, and where Salesforce's sources disagree.reference/agentforce/agent-script-actions-and-targets.md: declaring actions, the 25 target schemes, matching names to Apex, flows and prompt templates,complex_data_type_name, and what publishing creates at API 68.0 and before.guides/agentforce/build-agent-with-agentforce-dx.md: org prep, then generate, write, validate, preview (simulated, then live), publish, activate and commit. It includes a complete data-steward agent.reference/agentforce/agent-errors.md: Agent Script diagnostics verbatim, CLI messages and exit codes, and how the CLI authenticates (named-user JWT;chatbot_api,sfap_api,web).- Family 1 and 2 documents now link here instead of "family 3", and the agent-user page says
access.
Settled
default_agent_user goes in the access block.
- Salesforce's docs mark it "Deprecated in this block" for
config, and the linter warns there. - The CLI's agent template, the CLI's authoring-bundle boilerplate and the recipes' rules file still write it in
config.
Found while building
| # | Finding |
|---|---|
| 1 | The CLI's generators (sf project generate --template agent, sf agent generate authoring-bundle) write the deprecated config.default_agent_user |
| 2 | The recipes' rules file gives source: @session.sessionID for a linked variable, and the ContextHandling recipe uses @messagingSession.*. Both fail the linter, which accepts only @MessagingSession, @MessagingEndUser and @VoiceCall |
| 3 | The spec and docs say else if is unsupported and suggest nested if. The linter (synced from Salesforce internal on 2026-10-13) does the reverse |
| 4 | Two shapes are in circulation for the modality voice block: flat fields in the docs, nested outbound.persona_id and outbound.model.id in the newest recipe |
| 5 | The agent commands need a named-user JWT. A login through your own app needs chatbot_api, sfap_api and web; the Agent API setup lists no web |
| 6 | At API 68.0+, publish retrieves AiAgentDefinition / AiAgentDefinitionVersion instead of Bot, GenAiPlugin and GenAiFunction |
| 7 | Salesforce's own agent template triggers two linter warnings (deprecated field; complex_data_type_name on a primitive) |
| 8 | Several rules in the recipes' guide (mutable default, system.messages, no set on utilities, no @inputs in set) aren't enforced by the linter. They may still fail on the server |
How it was checked
- Salesforce's open-source Agent Script toolchain (github.com/salesforce/agentscript) was built locally.
work/tools/aslint.mjslints and compiles.check_code.pyruns it on every whole-agent block and on 30 probes inwork/tools/astests/, each with an expected result. - All 34 recipe agents and the CLI template were linted: one recipe fails and three have warnings.
- Every
sfcommand and flag was swept against CLI 2.155.7. - CLI messages were read from
plugin-agent, and the auth and publish flow from@salesforce/agents, both at pinned commits.
Still missing
- No org was used. Server-side validate, publish, preview and activate output is quoted from Salesforce's source, not from runs.
- Not covered: knowledge, context and
connected_subagentblocks beyond a line each; Agentforce Builder UI. - Agent tests: family 4.