Build agents with
a common language
AgentScript is a declarative language for defining AI agents. Configure state, execution flow, reasoning instructions, and deterministic control hooks — all in a single .agent file.
system:
instructions: "You are a helpful support agent."
variables:
customer_verified: mutable boolean = False
description: "Whether the customer is verified"
start_agent support:
description: "Main support agent"
before_reasoning:
if @variables.customer_verified is not True:
transition to @subagent.Identity
reasoning:
instructions: ->
| Help the customer with their request.
if @variables.customer_verified:
| Customer verified: {!@variables.customer_name}
Block-based Structure
Agents are composed from well-defined blocks: system, config, variables, actions, reasoning, and more. Each block has a typed schema.
Determinism vs. Autonomy
Use before_reasoning and after_reasoning hooks for deterministic control, or write a single reasoning.instructions block and let the LLM reason freely.
Dialect System
The base AgentScript dialect is extended by platform-specific dialects: agentforce for Salesforce, agentfabric, and your own custom dialects.
Full Toolchain
Parser, linter, compiler, LSP server, VS Code extension, Monaco integration, and a browser playground — all open source under Apache 2.0.
IDE Support
Language Server Protocol (LSP) provides diagnostics, completions, hover docs, go-to-definition, rename, and semantic highlighting in any LSP-compatible editor.
npm SDK
Install @sf-agentscript/agentforce to parse, analyze, mutate, and compile agent scripts in Node.js or the browser. Full TypeScript support.
Specify what, not how
AgentScript describes what an agent is — its state, its available actions, its instructions — not how the runtime executes it.
Execution blocks like reasoning have implied execution determined by the runtime. The simple ReAct loop runs behind the scenes — you don't implement it in the script.
This means the same script can run on increasingly capable runtimes without changing a line of code.
# Variables persist across turns
variables:
order_id: mutable string = ""
session_id: linked string
# Actions declare external tools
actions:
LookupOrder:
description: "Retrieve order by ID"
inputs:
order_number: string
is_required: True
outputs:
status: string
target: "flow://LookupOrder"
# Reasoning drives the LLM
reasoning:
actions:
lookup: @actions.LookupOrder
with order_number=@variables.order_id
set @variables.status = @outputs.status
Start building agents today
Read the documentation, try the examples, or install the SDK to integrate AgentScript into your toolchain.