abs init, abs run, abslang report — the three commands that take ABS from a file to a quality gate in CI.
The CLI is the first thing anyone touches. It has to make two people happy at the same time:
Both should succeed on their first try.
abslang init # Scaffold a project
abslang run # Execute sessions against an agent
abslang report # View results from a previous run
Creates a project skeleton in the current directory:
abs init
Creates:
.
├── abs.config.yaml # Project-level config (gitignored)
├── sessions/
│ └── order-status.abs.yaml # Example session with {{placeholders}}
└── datasets/
└── order-status.jsonl # 3 rows that bind those placeholders
Executes one or more Sessions against an agent.
abslang run sessions/order-status.abs.yaml --agent http://localhost:8080/chat
abslang run sessions/order-status.abs.yaml --agent $URL --var orderId=12345
abslang run sessions/order-status.abs.yaml --agent $URL --dataset datasets/order-status.jsonl
Runs the session once per row in the dataset. The report aggregates everything.
abslang run sessions/order-status.abs.yaml --agent $URL --dataset datasets/order-status.jsonl --filter "orderId:12345"
abslang run sessions/ --agent $URL --dataset datasets/
Runs every .abs.yaml in the directory against every .jsonl whose filename starts with the same prefix.
| Flag | Required | Default | Description |
|---|---|---|---|
[session] | Yes | — | Path to a .abs.yaml file or a directory of sessions |
--agent | Yes | — | Agent endpoint URL |
--dataset | No | — | Path to a .json or .jsonl dataset file or directory |
--var | No | — | Single variable binding (repeatable) |
--filter | No | — | Filter rows by key:value |
--agent-format | No | openai | openai, claude, gemini, or custom |
--agent-auth | No | none | none, api_key, bearer, oauth2 |
--agent-token | No | — | Token or API key value |
--agent-refresh-url | No | — | OAuth2 token refresh URL |
--agent-refresh-token | No | — | OAuth2 refresh token |
--adapter | No | — | Evaluator adapter binding (repeatable: --adapter llm_judge=azure) |
--format | No | table | table, json, junit |
--ci | No | false | CI mode (no colors, no prompts) |
--timeout | No | 300 | Timeout per session run in seconds |
--output | No | — | Write report to file instead of stdout |
--parallel | No | 1 | Number of dataset rows to run in parallel |
Every flag can also be set via environment variable:
| Variable | Equivalent flag |
|---|---|
ABS_AGENT_URL | --agent |
ABS_AGENT_FORMAT | --agent-format |
ABS_AGENT_AUTH | --agent-auth |
ABS_AGENT_TOKEN | --agent-token |
ABS_ADAPTER_LLM_JUDGE | --adapter llm_judge=... |
ABS_VAR_orderId | --var orderId=... |
Reads a JSON report from a previous abslang run --output and displays it.
abslang run session.abs.yaml --agent $URL --output report.json
abslang report report.json
abslang report report.json --format table # Default, human-readable
abslang report report.json --format json # Machine-readable
abslang report report.json --format junit # CI integration
abslang report report.json --failed # Show only failed cases
abslang report report.json --detail 3 # Show full trace for case #3
abs.config.yaml stores project-level settings:
agent:
url: http://localhost:8080/chat
format: openai
auth: none
adapters:
llm_judge: aievaluator
defaults:
dataset: datasets/
timeout: 120
Precedence: CLI flag > environment variable > config file > built-in default.
abslang run sessions/ --agent $STAGING_AGENT --dataset datasets/ --format junit --ci > report.xml
Exit code 0 if all sessions passed. Exit code 1 if any failed. Drops straight into any CI system.
| Persona | What they type | What they get |
|---|---|---|
| QA engineer | abslang run session.abs.yaml --agent $STAGING --dataset regression.jsonl --format junit --ci | A JUnit report that blocks the deploy if it fails |
| Data scientist | abslang run session.abs.yaml --agent $URL --dataset 200-cases.jsonl --output report.json | A JSON artifact to analyze offline |
| Product owner | abslang report report.json | A table that says 197/200 passed, with failures explained |
| Developer | abslang run session.abs.yaml --agent localhost:8080 --var orderId=12345 | Instant feedback during development |
One file. Four use cases.