Skip to main content
The agent declaration establishes the identity, metadata, goals, personality, and execution configuration of an ABL agent document. Every .agent.abl file must begin with an AGENT: declaration.

AGENT keyword

The AGENT: keyword declares the agent’s name. This name must be unique within the project and is used as the primary identifier throughout the platform.

Naming rules

  • Use PascalCase with underscores to separate words
  • Must start with a letter
  • May contain letters, digits, and underscores
  • Must be unique within the system

Examples

VERSION

The VERSION: directive specifies the semantic version of the agent document. The value must be a quoted string in semver format (major.minor.patch).
The version is stored in the document’s metadata (meta.version) and is available for compatibility checks, deployment tracking, and audit trails.

Example

DESCRIPTION

The DESCRIPTION: directive provides a human-readable summary of the agent’s purpose. It supports both single-line and multi-line (pipe block) formats.

LANGUAGE

The LANGUAGE: directive sets the primary language the agent operates in. The value is a quoted BCP 47 language tag.
The language directive influences the runtime’s language-aware behavior including NLU processing, response generation, and entity recognition.

Complete declaration property reference

The following table summarizes all agent declaration properties:

Identity & Goals

The identity and goals sections define what an agent is trying to achieve, how it presents itself, and what boundaries it operates within. These sections feed directly into the system prompt that guides the LLM’s behavior at runtime.

GOAL

The GOAL: section defines the agent’s primary objective. It is the only required section besides AGENT:. The goal drives the LLM’s reasoning, determines completion conditions, and provides the core purpose statement included in every system prompt.
Multi-line goals use pipe block syntax:

Goal guidelines

  • State the objective from the agent’s perspective, not the user’s
  • Be specific about what the agent should accomplish
  • Include success criteria when measurable outcomes exist
  • When an agent includes a FLOW: section, the goal also serves as context for any steps that have REASONING: true

PERSONA

The PERSONA: section describes how the agent should present itself — its tone, communication style, expertise signaling, and behavioral characteristics. The persona is included in the system prompt to shape the LLM’s response style.
If omitted, the agent uses a neutral, professional tone determined by the LLM’s default behavior.

LIMITATIONS

The LIMITATIONS: section declares explicit boundaries on what the agent cannot or must not do. Each limitation is a quoted string in a list. Limitations are included in the system prompt as hard constraints.

Limitation guidelines

  • State what the agent cannot do, not what it can do
  • Be specific — vague limitations are difficult for the LLM to enforce
  • Include the reason or consequence when it helps clarity
  • Limitations complement CONSTRAINTS: (which are machine-enforced); limitations are LLM-enforced behavioral rules

INSTRUCTIONS

The INSTRUCTIONS: section provides operational guidance that supplements the goal. Instructions are appended to the goal in the system prompt. Use instructions for procedural guidance that does not fit naturally in the goal or persona.
Instructions and the goal are combined at parse time: the instructions text is appended under an Instructions: heading within the goal’s description.

IDENTITY

The IDENTITY: section is an alternative, structured format that combines role, persona, expertise, and limitations into a single block. When used, its fields are mapped to the equivalent top-level sections.

IDENTITY field reference

Mapping behavior

When the parser encounters an IDENTITY: block:
  1. The role value becomes the GOAL: description
  2. The persona value becomes the PERSONA: description
  3. The expertise list is appended to the persona as a comma-separated string
  4. The limitations list populates LIMITATIONS:
You can use either the IDENTITY: block or the individual GOAL:, PERSONA:, LIMITATIONS: sections, but if both are present, the individual sections take the values set last in document order.

Combining identity sections

The recommended approach is to use the individual sections (GOAL:, PERSONA:, LIMITATIONS:) for clarity. The IDENTITY: block is available as a compact alternative.

Compact style (using IDENTITY)

SYSTEM_PROMPT

The SYSTEM_PROMPT: section is an advanced escape hatch that supplies a complete, custom system prompt, replacing the prompt the platform would otherwise generate from GOAL:, PERSONA:, and LIMITATIONS:.
When SYSTEM_PROMPT: is present, the auto-generated prompt is not used — the goal, persona, and limitations are no longer automatically composed into the system prompt. Prefer the structured GOAL:/PERSONA:/LIMITATIONS: sections unless you specifically need full control of the prompt text.

Execution Configuration

The EXECUTION: section configures runtime behavior for the agent, including LLM model selection, temperature, token limits, timeouts, extended thinking, and per-operation model routing.

Syntax

All properties are optional. When omitted, the platform applies its built-in defaults.

Configuration properties

Extended thinking

Extended thinking allows Claude models to perform internal reasoning before producing a response. This is useful for complex multi-step reasoning tasks where the agent needs to plan before acting.
When enabled, the model uses a portion of its context window for internal chain-of-thought reasoning before producing the visible response. The thinking_budget controls how many tokens are allocated to this internal reasoning.

Context compaction

As conversations grow, the context window fills with message history. Context compaction automatically summarizes older messages when the context usage exceeds a threshold, preventing context-window overflow.
When the ratio of used tokens to available tokens exceeds this threshold, the runtime compacts older conversation history into a summary, freeing space for new messages while preserving essential context.

Compaction policy overrides

For fine-grained control, the compaction: sub-block overrides how three categories of context are compacted. This is advanced tuning — most agents only need compaction_threshold.
Each sub-block accepts additional character-budget and retention keys (for example. max_chars, keep_recent, assistant_preview_chars, value_max_chars, total_max_chars).

Message concurrency

The concurrency property controls how a session handles multiple inbound messages.
max_queue_depth (default 10) bounds how many messages wait in the per-session queue.
concurrency, max_queue_depth, max_concurrent_messages, and the EXECUTION.voice block are supported in the .agent.abl format. The .agent.yaml format does not yet parse these keys.

Per-operation model routing

The models: sub-block within EXECUTION: allows you to route different operations to different LLM models. This enables cost optimization by using faster, cheaper models for simple tasks and more capable models for complex reasoning.
The models: block maps operation names to model identifiers. The model property serves as the default for any operation not explicitly listed.

Recognized operation names

Any other operation name is accepted by the parser but only resolved at runtime if the platform recognizes it.
EXECUTION.compaction.model is deprecated — use EXECUTION.models.summarization instead to set the model used when summarizing history.

Complete execution example


Complete example

  • Language overview — file structure, syntax rules, and auto-detection
  • Tools — tool-level timeout configuration
  • FLOW — per-step GOAL overrides and MAX_TURNS for reasoning steps