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

Created 23 Oct 2026 · Modified 23 Oct 2026 · 1 version

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_reasoning and after_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
1The CLI's generators (sf project generate --template agent, sf agent generate authoring-bundle) write the deprecated config.default_agent_user
2The 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
3The 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
4Two 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
5The 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
6At API 68.0+, publish retrieves AiAgentDefinition / AiAgentDefinitionVersion instead of Bot, GenAiPlugin and GenAiFunction
7Salesforce's own agent template triggers two linter warnings (deprecated field; complex_data_type_name on a primitive)
8Several 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.mjs lints and compiles. check_code.py runs it on every whole-agent block and on 30 probes in work/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 sf command 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_subagent blocks beyond a line each; Agentforce Builder UI.
  • Agent tests: family 4.

Read this document as markdown — the same bytes an agent receives.