Docs Navigation

CLI Reference

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:

  • QA: "I want to run this against staging and see if it passed or not, now."
  • Data: "I have 200 cases in a JSONL. Give me an aggregated report."

Both should succeed on their first try.


The three commands

abslang init                    # Scaffold a project
abslang run                     # Execute sessions against an agent
abslang report                  # View results from a previous run

abslang init

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

abslang run

Executes one or more Sessions against an agent.

Simplest invocation

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

With a single variable override

abslang run sessions/order-status.abs.yaml --agent $URL --var orderId=12345

With a dataset

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.

With a dataset and a filter

abslang run sessions/order-status.abs.yaml --agent $URL --dataset datasets/order-status.jsonl --filter "orderId:12345"

Multiple sessions at once

abslang run sessions/ --agent $URL --dataset datasets/

Runs every .abs.yaml in the directory against every .jsonl whose filename starts with the same prefix.

All flags

FlagRequiredDefaultDescription
[session]YesPath to a .abs.yaml file or a directory of sessions
--agentYesAgent endpoint URL
--datasetNoPath to a .json or .jsonl dataset file or directory
--varNoSingle variable binding (repeatable)
--filterNoFilter rows by key:value
--agent-formatNoopenaiopenai, claude, gemini, or custom
--agent-authNononenone, api_key, bearer, oauth2
--agent-tokenNoToken or API key value
--agent-refresh-urlNoOAuth2 token refresh URL
--agent-refresh-tokenNoOAuth2 refresh token
--adapterNoEvaluator adapter binding (repeatable: --adapter llm_judge=azure)
--formatNotabletable, json, junit
--ciNofalseCI mode (no colors, no prompts)
--timeoutNo300Timeout per session run in seconds
--outputNoWrite report to file instead of stdout
--parallelNo1Number of dataset rows to run in parallel

Environment variables

Every flag can also be set via environment variable:

VariableEquivalent 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=...

abslang report

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

Config file

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.


CI/CD integration

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.


The four personas the CLI serves

PersonaWhat they typeWhat they get
QA engineerabslang run session.abs.yaml --agent $STAGING --dataset regression.jsonl --format junit --ciA JUnit report that blocks the deploy if it fails
Data scientistabslang run session.abs.yaml --agent $URL --dataset 200-cases.jsonl --output report.jsonA JSON artifact to analyze offline
Product ownerabslang report report.jsonA table that says 197/200 passed, with failures explained
Developerabslang run session.abs.yaml --agent localhost:8080 --var orderId=12345Instant feedback during development

One file. Four use cases.