Catalog PyPI
PACKAGE EXPLORERView in registry

abslang

PyPI

Agent Behavior Specification — describe, run, and evaluate AI agent interactions from the command line

agentaibehaviorevaluationllmopenapispecificationtesting
Versions collected1
Direct dependencies10From release 0.6.0
Last observed20 Oct, 17:37 UTC

README

Version 0.6.0 documentation

ABS — Agent Behavior Specification

Specify how your AI agents behave — then verify it.

PyPI version npm version Tests License

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
OptionDescription
--agent <url>Agent endpoint URL (or set ABS_AGENT_URL)
--dataset <path>JSON/JSONL dataset file
--var key=valueSingle variable binding (repeatable)
--filter key:valueFilter dataset rows
--agent-formatopenai (default), responses, claude, or gemini
--agent-authnone, api_key, bearer, or oauth2
--agent-tokenAuth token or API key
--agent-refresh-urlOAuth2 token refresh URL
--agent-refresh-tokenOAuth2 refresh token
--agent-client-idOAuth2 client ID
--agent-modelModel/deployment for model endpoints (e.g. Azure OpenAI Responses) — omit when the agent owns its model
--agent-forward-authForward the caller's Authorization header to the agent
--agent-authorizationRaw Authorization header value to forward
--adapter llm_judge=<name>Route LLM evaluations through an adapter (aievaluator, azure, aws, google) — see below
--judge-base-urlBuilt-in judge on a custom OpenAI-compatible endpoint (Azure/Foundry, Ollama, vLLM)
--judge-api-keyBuilt-in judge API key (overrides ABS_JUDGE_API_KEY / OPENAI_API_KEY)
--judge-api-key-headerHeader for the judge key (default Authorization; use api-key for Azure)
--judge-modelBuilt-in judge model or Azure deployment name
--formattable (default), json, or junit
--ciCI 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-formatpretty (default) or jsonl (one event per line)
--log-levelerror, warn, info (default), debug
--log-fileWrite machine-readable JSONL events to a file
--no-log-contentOmit 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

Downloads & popularity

Awaiting observations

No metric observations yet

Download counts and popularity will appear here as the collector receives them.

Versions 1

Collected releases
VersionPublishedDirect dependenciesOpen version
0.6.029 Sept 202610

Package advisories

0
No matching advisories collected

This describes our collected data; it is not a security assessment.

Repository

PENDING
fvinciarelli/abslang

Shared repository data · GitHub

License detected in repository
Not collected

Metadata history

Meaningful changes
Current collected state Current

Observed since 20 Oct, 17:37 UTC

No superseded metadata states collected. Unchanged observations do not create new revisions.

Record identity

package:0d5832e6d311b49dd08ea8e56e2124534976d7c264a2d9299330c0828cebb630