Agent definition
Sets prompts, provider binding, runtime strategy, memory behavior, trust controls, and execution preferences.
Configuration is where the framework stops being abstract and starts becoming a real operating model inside your Salesforce org.
This page is not just a field inventory. It is a guide to making good decisions about:
The most useful way to approach configuration is to answer four questions in order:
When teams skip these questions and jump straight into record editing, they often end up with agents that are technically valid but operationally hard to trust.
Agent definition
Sets prompts, provider binding, runtime strategy, memory behavior, trust controls, and execution preferences.
Capabilities
Define the tools exposed to the model, including implementation type, schema, and human-review settings.
Provider config
Controls how the framework talks to the LLM provider, including credentials, adapter class, and model defaults.
Channel metadata
Routes inbound channel traffic and delivery policy independently from the runtime strategy.
You can think of core configuration as four layers:
That separation matters because changing one layer should not require rethinking the whole system.
Before editing prompts or capabilities, decide what shape of work you are configuring.
| If the agent should… | Start with… |
|---|---|
| support an ongoing conversation or thread | RuntimeStrategy__c = Conversational |
| complete a bounded task with a clear input and output | RuntimeStrategy__c = Direct |
| preserve continuity across user turns | conversational strategy plus session-aware surfaces |
| behave more like automation than conversation | direct strategy plus narrow capability contracts |
This decision affects almost everything that follows: prompts, memory, tool choice, testing approach, and approval design.
The agent definition is the highest-level behavior record. It is where you decide what the agent is, how it reasons, how much continuity it carries, and what safety controls apply before tools even run.
| Field | Purpose | Notes |
|---|---|---|
DeveloperName__c | Stable API-facing name | Used in entrypoints and component configuration |
RuntimeStrategy__c | Execution style | Core values are Conversational and Direct |
LLMConfiguration__c | Provider binding | Points to the provider configuration record |
IsActive__c | Activation state | Disable quickly when troubleshooting or rolling back |
The rest of the agent definition mostly falls into three buckets:
You do not need to obsess over every field on day one. What matters most is whether the agent has a clear job, a sensible runtime shape, and a small enough amount of autonomy to be trustworthy.
| Field | Purpose |
|---|---|
IdentityPrompt__c | Who the agent is |
InstructionsPrompt__c | How the agent should behave |
EnableActionTransparency__c | Whether tool execution details are exposed to users |
EnableToolReasoning__c | Whether tool-choice rationale is captured |
AuditLevel__c | Logging depth for execution traces |
Prompt configuration should define role and behavior, not hide business routing or access rules that belong elsewhere. If a prompt is carrying core security or routing logic, the metadata model is probably underused.
| Field | Purpose | Typical starting point |
|---|---|---|
MemoryStrategy__c | How history is retained | Buffer Window for shorter conversations |
HistoryTurnLimit__c | Number of turns carried forward | 8 to 10 |
AsyncDispatchType__c | Queueable vs high-throughput dispatch choice | Low for debugging, High for scale |
MaxProcessingCycles__c | Limits LLM-tool iteration depth | Keep conservative for early rollout |
For first production rollout, conservative settings are usually better:
You can always expand autonomy later after the runtime is trustworthy.
| Field | Purpose |
|---|---|
PIIMaskingPreset__c | Controls masking breadth before provider calls |
PromptSafetyPreset__c | Enables provider-adapter safety behavior |
EnableToolFlowGraph__c | Turns on runtime tool gating |
ToolFlowGraph__c | JSON graph describing entry tools and allowed transitions |
These settings should be chosen based on workflow risk, not turned on blindly. A narrow direct automation path and a sensitive conversational support assistant do not need the same control mix.
Use service-user routing only when the workflow genuinely needs a different execution user context.
| Field | Purpose |
|---|---|
RequiresServiceUserContext__c | Routes through the service-user path |
ServiceUserNamedCredential__c | Named Credential used for loopback service-user calls |
Use this mode only when there is a clear need for a distinct execution user context. It should be a deliberate architectural choice, not a default workaround for missing permissions.
Provider configuration is the connection layer between Salesforce and the model.
It answers questions like:
| Field | Purpose |
|---|---|
NamedCredential__c | Provider endpoint and auth |
ProviderAdapterClass__c | Adapter implementation such as OpenAIProviderAdapter |
DefaultModelIdentifier__c | Model sent on provider calls |
DefaultTemperature__c | Default response variability |
IsActive__c | Controls availability for agents |
Provider configuration should answer transport-level questions, not business ones. It is about model access, endpoint behavior, and defaults, not about what the agent should be allowed to do.
Capabilities are the tool contracts the model sees. Keep them narrow, explicit, and observable.
In practice, this is where many agent quality and trust problems are created or avoided.
Good capabilities feel like well-designed APIs. Poor capabilities feel like vague internal shortcuts.
| Field | Purpose |
|---|---|
CapabilityName__c | Tool name surfaced to the model |
Description__c | Primary model guidance for when and how to use the tool |
ImplementationType__c | Standard, Apex, Flow, or Agent |
BackendConfiguration__c | Admin-owned JSON configuration |
Parameters__c | JSON Schema for runtime inputs |
ExposureLevel__c | Whether the tool is visible to the model |
RunAsynchronously__c | Moves tool execution into a separate transaction when appropriate |
Three fields matter especially at the start:
Description__c, because it strongly shapes tool choiceParameters__c, because it constrains what the model can passBackendConfiguration__c, because it keeps operational values under admin controlIf those three are weak, the rest of the configuration will rarely rescue the outcome.
| Field | Purpose | Notes |
|---|---|---|
HITLMode__c | Human review mode | Includes Confirmation, Approval, ConfirmationThenApproval, and ConditionalApproval |
HITLNotificationPreference__c | Notification behavior for approval-based flows | Used when approval records are involved |
Use approval modes to express business risk, not to patch unclear tool design. If a capability is so broad that every use feels risky, it usually needs to be split into smaller capabilities first.
For channel-driven interaction, the framework uses configuration instead of burying routing logic inside prompts or code.
| Metadata or object | Role |
|---|---|
AgentChannelRoute__mdt | Maps channel and entry conditions to an agent |
ChannelEndpoint__mdt | Defines endpoint and provider settings for channel ingress and delivery |
InteractionChannelType__mdt | Describes available channel types and adapter classes |
This is where channel routing lives. It is separate from runtime strategy.
That distinction matters. A conversational agent can still behave differently across chat, email, and other channels because the interaction channel shapes payload normalization, session behavior, and delivery policy even when the runtime strategy is the same.
In other words:
RuntimeStrategy__c = ConversationalMemoryStrategy__c = Buffer WindowRuntimeStrategy__c = DirectThese are starting points, not permanent answers. The right profile depends on the workflow, regulatory risk, user expectations, and how much runtime autonomy the team is prepared to operate.
Good configuration is not about setting every field. It is about making the runtime legible, bounded, and governable.
If you are unsure what to configure next, do not ask “what else can this agent do?” Ask: