Skip to main content

Agent Behavior Specification (ABS)

A vendor-neutral, human-readable format for describing the observable behavior of AI agents — what users say, what agents do, and how it should be evaluated. Like OpenAPI for HTTP APIs, ABS gives agent behavior a shared, tool-independent contract.

📖 Full documentation · 📦 GitHub

Install

pip install abslang

Commands

abslang init

Scaffold a new ABS project with an example session and dataset.

abslang init

Creates abs.config.yaml, sessions/order-status.abs.yaml, and sessions/order-status.jsonl (3 rows).

abslang run

Execute ABS sessions against an agent.

# Single session
abslang run sessions/order-status.abs.yaml --agent http://localhost:8080/chat

# With a dataset (parametrized testing — one run per row)
abslang run sessions/order-status.abs.yaml --agent $URL --dataset sessions/order-status.jsonl

# With a single variable override
abslang run sessions/order-status.abs.yaml --agent $URL --var orderId=12345

# All sessions in a directory
abslang run sessions/ --agent $URL --dataset datasets/

# CI mode with JUnit output
abslang run sessions/ --agent $STAGING --dataset datasets/ --format junit --ci > report.xml
Option Description
--agent <url> Agent endpoint URL (or set ABS_AGENT_URL)
--dataset <path> JSON/JSONL dataset file
--var key=value Single variable binding (repeatable)
--filter key:value Filter dataset rows
--agent-format openai (default), responses, claude, or gemini
--agent-auth none, api_key, bearer, or oauth2
--agent-token Auth token or API key
--agent-refresh-url OAuth2 token refresh URL
--agent-refresh-token OAuth2 refresh token
--agent-client-id OAuth2 client ID
--agent-model Model/deployment for model endpoints (e.g. Azure OpenAI Responses) — omit when the agent owns its model
--agent-forward-auth Forward the caller's Authorization header to the agent
--agent-authorization Raw Authorization header value to forward
--adapter llm_judge=<name> Route LLM evaluations through an adapter (aievaluator, azure, aws, google) — see below
--judge-base-url Built-in judge on a custom OpenAI-compatible endpoint (Azure/Foundry, Ollama, vLLM)
--judge-api-key Built-in judge API key (overrides ABS_JUDGE_API_KEY / OPENAI_API_KEY)
--judge-api-key-header Header for the judge key (default Authorization; use api-key for Azure)
--judge-model Built-in judge model or Azure deployment name
--format table (default), json, or junit
--ci CI mode (no colors)
--timeout <n> Timeout per session in seconds (default: 300)
--output <path> Write report to file
--parallel <n> Run N dataset rows in parallel
--log-format pretty (default) or jsonl (one event per line)
--log-level error, warn, info (default), debug
--log-file Write machine-readable JSONL events to a file
--no-log-content Omit trace content and reasons from logs (privacy)

You can also run the module directly: python -m abslang run ....

abslang report

View results from a previous abslang run --output.

abslang report report.json                  # Table view
abslang report report.json --format json    # Machine-readable
abslang report report.json --format junit   # CI integration
abslang report report.json --failed         # Only failed cases
abslang report report.json --detail 3       # Full trace for row #3

abslang chat

Generate ABS YAML by describing the behavior in plain language.

# Works with OpenAI, Anthropic, or DeepSeek — auto-detects from env
abslang chat

# Or specify a provider
abslang chat --provider openai
abslang chat --provider anthropic
abslang chat --provider deepseek

# You: A customer asks for a refund. The agent should verify the order, process it, and confirm.
# → generates .abs.yaml with evaluations, datasets, and chain checks

Commands inside chat: /save <path>, /force <path>, /quit.

abslang generate-ci

Generate a CI/CD workflow file.

abslang generate-ci --platform github   # GitHub Actions
abslang generate-ci --platform gitlab   # GitLab CI

LLM judge adapters

Evaluations like llm_judge, Groundedness, and Relevance need an LLM to produce the judgment. abslang routes them through an adapter — you pick where the judgment runs.

Built-in judge (zero setup — llm_judge + safety dimensions):

# Auto-detects OpenAI, Anthropic, or Gemini from env
OPENAI_API_KEY=sk-... abslang run session.abs.yaml --agent $URL
ANTHROPIC_API_KEY=sk-ant-... abslang run session.abs.yaml --agent $URL

Point the same judge at any OpenAI-compatible endpoint — CLI flags override the ABS_JUDGE_BASE_URL, ABS_JUDGE_API_KEY, ABS_JUDGE_API_KEY_HEADER, and ABS_JUDGE_MODEL environment variables:

abslang run session.abs.yaml --agent $URL \
  --judge-base-url "https://<resource>.openai.azure.com/openai/v1" \
  --judge-api-key "$AZURE_OPENAI_API_KEY" \
  --judge-api-key-header api-key \
  --judge-model gpt-4o-mini

Azure AI Foundry (quality dimensions + agentic evaluators):

pip install "abslang[azure]"
export AZURE_OPENAI_ENDPOINT=... AZURE_OPENAI_KEY=... AZURE_OPENAI_DEPLOYMENT=...
abslang run session.abs.yaml --agent $URL --adapter azure

AWS Bedrock (LLM-as-judge):

pip install "abslang[aws]"
export AWS_REGION=us-east-1
abslang run session.abs.yaml --agent $URL --adapter aws

Google Vertex AI (quality + safety):

pip install "abslang[google]"
export GOOGLE_CLOUD_PROJECT=... GOOGLE_CLOUD_LOCATION=us-central1
abslang run session.abs.yaml --agent $URL --adapter google

AI Evaluator (free tier):

abslang run session.abs.yaml --agent $URL --adapter llm_judge=aievaluator

Safety dimensions (Violence, HateUnfairness, Sexual, SelfHarm) work with the built-in judge out of the box — no criteria required. Other providers can ship adapters implementing the same interface. Your session file doesn't change — only the --adapter flag.

Test with the mock agent

# Terminal 1: start mock agent
python tools/mock_agent.py --scenario happy

# Terminal 2: run the example
abslang run examples/order-status.yaml --agent http://localhost:8080/chat

Library usage

from abslang import parse, run
from abslang.runner import AgentConfig
import asyncio

session = parse('session.abs.yaml')
result = asyncio.run(run(session, AgentConfig(
    url='http://localhost:8080/chat',
    format='openai',
)))
print(result.passed)  # True | False

License

Apache 2.0

Release files for abslang 0.4.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for abslang 0.4.0
File Size Uploaded
abslang-0.4.0.tar.gz 74.0 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for abslang 0.4.0
File Interpreter ABI Platform
abslang-0.4.0-py3-none-any.whl Python 3 none any Details

Total release size: 140.8 kB

Release files / abslang-0.4.0.tar.gz

Download URL abslang-0.4.0.tar.gz
Size 74.0 kB
Tags Source
SHA-256 checksum
How to use checksums
687d1449bd1bc3619969870223ae44f49eae13be6019902e4192b28256e0e2bc
BLAKE2b-256 checksum
How to use checksums
7435aef13ca4437a057866d398e819026a72e3d127b9ce5a5c01b1343fb12a28
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 18, 2026.

Transparency log

Release files / abslang-0.4.0-py3-none-any.whl

Download URL abslang-0.4.0-py3-none-any.whl
Size 66.8 kB
Tags Python 3
SHA-256 checksum
How to use checksums
77bbf974620b83da58aeca14af37e073c534a793cdf9c14956858bba9772a2d4
BLAKE2b-256 checksum
How to use checksums
198771d134e95b81c561857933db51a4bb67788803242e0a53026db14ddebf41
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 18, 2026.

Transparency log

Release history Release notifications | RSS feed

0.5.5

2 release files

0.5.4

2 release files

0.5.3

2 release files

0.5.2

2 release files

0.5.1

2 release files

0.5.0

2 release files

This release

0.4.0 This release

2 release files

0.3.2

2 release files

0.3.1

2 release files

0.3.0

2 release files

0.2.2

2 release files

0.2.1

2 release files

0.2.0

2 release files

0.1.4

2 release files

0.1.3

2 release files

0.1.2

2 release files

0.1.1

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page