Skip to main content

ITSMBench Audit

Static authoring-time audit tooling for ITSMBench tasks.

ITSMBench evaluates how well AI agents perform realistic IT service-management work. Each task places an agent in a containerised enterprise environment, gives it a ticket-style instruction, and evaluates the resulting environment using a hidden verifier. The benchmark spans areas such as incident management, access management, offboarding, and security response.

ITSMBench Audit is a preflight tool for task authors. Before a task is used in a benchmark run, it checks whether the task package is structurally sound, what the verifier actually tests, and whether the documented requirements line up with what the verifier enforces.

Task authoring → itsmbench-audit → review findings → fix → benchmark run


Why this exists

A task can look correct while hiding real problems in its evaluation layer. A required file might be missing. The verifier might test things that are never mentioned in the task description. A documented requirement might have no corresponding verifier check. The verifier might be too complex to reason about statically. An assertion might confirm a final state without proving that the agent actually performed the expected action.

These problems matter because the verifier is what ultimately decides whether an agent succeeded. ITSMBench Audit surfaces them before benchmark execution.


What it checks

1. Package health

Verifies the basic structure of an ITSMBench task: expected files, directories, and references between local files. The check is straightforward — can this task be plausibly executed and evaluated as written?


2. Verifier inventory

Reads the verifier and tries to extract what each test is actually asserting. Supported sources are Python test files, JavaScript test files, and JSON-based assertion files.

For each assertion, the analyser tries to extract structured information:

Field Description
action The operation asserted
object The resource acted upon
entity The subject performing the action
state The resulting or required state
field A specific attribute under inspection
expected_value The value the field must hold
forbidden_value A value the field must not hold
relation A relationship between entities
predicate A general logical predicate
scope The boundary within which the assertion applies
provenance Where the assertion originates

Python verifiers are analysed using static AST inspection and bounded helper analysis — the verifier is never executed. For JavaScript, the analyser recognises common assertion idioms: assert, expect(...).toBe(...), toEqual(...), toContain(...), and related forms. JSON assertions are normalised into the same internal representation.


3. Documentation and verifier consistency

ITSMBench tasks describe what the agent should do in natural language. The audit compares those descriptions against the semantics extracted from the verifier, running the comparison in both directions.

First, it checks whether the verifier actually tests what the task description says to do. Then it checks the other way: whether the verifier enforces things that are never mentioned in the description.

The matching is conservative. A weak or ambiguous relationship is flagged for review rather than silently counted as a pass.


Static analysis, not execution

ITSMBench Audit never runs an agent, task environment, or verifier. It reads source files only.

flowchart TD
    T["ITSMBench task\n─────────────────\ninstruction\nenvironment\nverifier"]
    A["itsmbench-audit"]
    P["Package health"]
    V["Verifier inventory"]
    D["Documentation consistency"]
    R["Review findings"]
    F["Fix task / verifier"]
    B["Run ITSMBench"]

    T --> A
    A --> P
    A --> V
    A --> D
    P --> R
    V --> R
    D --> R
    R --> F
    F --> B

Installation

Install from PyPI:

pip install itsmbench-audit

Or install the repository locally:

git clone https://github.com/souro26/ITSMBench-Audit
cd itsmbench-audit
pip install .

For development:

pip install -e .

Usage

Audit a single task

itsmbench-audit /path/to/ITSMBench/tasks/task-a-1

On Windows:

itsmbench-audit C:\path\to\ITSMBench\tasks\task-a-1

You can also invoke the package directly:

python -m itsmbench_audit /path/to/ITSMBench/tasks/task-a-1

Audit the complete task corpus

itsmbench-audit --all /path/to/ITSMBench/tasks

The corpus mode audits every task and prints aggregate statistics across the full set.


Understanding the output

EXTRACTED

The verifier semantics were statically extracted with enough confidence to be useful.

[CHECK:EXTRACTED] test_account_suspended  action=suspend  entity=user  state=suspended

This is the strongest result the analyser produces.


PARTIAL

The analyser understood part of the assertion but not all of it. This often happens when a verifier delegates logic to a helper function whose return value cannot be fully resolved from the source.

[CHECK:PARTIAL] test_service_configuration ...  reason=helper predicate partially resolved

PARTIAL does not mean the verifier is broken. It means there was not enough static information to complete the extraction.


UNEXTRACTED

A verifier test was found, but the assertion semantics could not be extracted at all. These should be reviewed manually.

[CHECK:UNEXTRACTED] test_complex_workflow  reason=assertion semantics could not be statically extracted

UNMAPPED

The verifier semantics were extracted, but no documented requirement matched strongly enough. This is a documentation gap finding, not necessarily a verifier defect.

[REVIEW] verifier assertion has no documented requirement

WEAK

A relationship between a documented requirement and a verifier assertion was found, but the match is not strong enough to count as confirmed. These are reported so authors can decide whether the relationship is intentional.

Some action pairs that trigger weak matches:

remove  <->  revoke
delete  <->  remove
suspend <->  deactivate

These might be equivalent in one task context and meaningfully different in another. The tool does not make that call for you.


Actions versus states

The audit distinguishes between what an agent did and what state resulted from it.

account.status == "ACTIVE" tells you the account is active. It does not prove the agent ran a restore operation. account.status == "DEPROVISIONED" tells you the account was deprovisioned, but not which operation produced that result or whether it was the right one.

A verifier that only checks final state is weaker evidence than one that confirms the specific action was taken. The audit surfaces that distinction.


What the tool does not do

ITSMBench Audit reads task source files and reports what it finds. It does not evaluate agents, execute verifiers, judge output quality, or replace any part of the benchmark runtime. It is not an LLM judge, a security scanner, or a symbolic execution engine.

It produces static evidence. Whether that evidence is sufficient is a judgement for the task author.


Conservative by design

The analyser is intentionally cautious. When semantics cannot be established from the source, it reports that clearly rather than guessing.

Concretely: test function names are treated as weak hints, not proof. Final states are not automatically read as actions. Similar-sounding actions are not assumed to be equivalent. Ambiguous control flow stays ambiguous. Unresolved helper logic stays unresolved. A PARTIAL result is reported as partial, not rounded up to EXTRACTED.

The output is meant to be inspectable, not optimistic.


Design

Each verifier source — Python AST, JavaScript assertions, JSON — is parsed into a common intermediate representation. That IR is then compared against the requirement IR derived from the task description.

flowchart TD
    PY["Python AST"]
    JS["JavaScript assertions"]
    JSON["JSON assertions"]
    IR["VerifierAssertion IR"]
    REQ["Requirement IR"]
    COV["Coverage / matching analysis"]
    RPT["Audit report"]

    PY --> IR
    JS --> IR
    JSON --> IR
    IR --> REQ
    REQ --> COV
    COV --> RPT

Each assertion in the IR can carry:

Field Description
action The primary operation
implied_action An action implied by the assertion
object The resource under test
entity The actor
qualifier A modifier on the action or state
state The required or resulting state
field The specific attribute inspected
expected_value The value the attribute must hold
forbidden_value A value the attribute must not hold
relation A relationship between entities
predicate A general logical predicate
scope The assertion boundary
provenance Extraction origin
raw_evidence The original source fragment
extraction_status EXTRACTED, PARTIAL, or UNEXTRACTED

Using a common IR means the same coverage logic applies to all verifier formats.


Relationship to ITSMBench

ITSMBench runs AI agents on IT service-management tasks in containerised environments and evaluates them using hidden verifiers. ITSMBench Audit sits one step earlier, during task authoring, before the benchmark is run.

flowchart TD
    AUTH["Task authoring"]
    TASK["ITSMBench task"]
    AUDIT["itsmbench-audit"]
    FIX["Review & fix"]
    RUN["ITSMBench run"]
    EVAL["Agent evaluation"]

    AUTH --> TASK
    TASK --> AUDIT
    AUDIT --> FIX
    FIX --> RUN
    RUN --> EVAL

The benchmark supports both remote Daytona execution and local Docker execution. ITSMBench Audit fits into the local development part of that workflow, before anything is actually run.


Limitations

Some verifier logic cannot be recovered statically. This includes dynamic dispatch, complex control flow, deeply nested helpers, external API calls, dynamically constructed data, and logic that only becomes clear at runtime.

When the analyser hits these cases it reports PARTIAL or UNEXTRACTED. That is the correct output. Surfacing uncertainty is more useful than producing a confident-sounding result that is not actually grounded in the source.

Passing the audit also does not mean the verifier is correct. It means the documentation and verifier appear consistent to a static analyser. That is one signal among several when assessing task quality.


Development

git clone https://github.com/souro26/ITSMBench-Audit
cd itsmbench-audit
pip install -e .

Run a syntax check:

python -m py_compile itsmbench_audit/__main__.py

Run the audit against a task:

python -m itsmbench_audit /path/to/ITSMBench/tasks/task-a-1

Run the full corpus:

python -m itsmbench_audit --all /path/to/ITSMBench/tasks

License

This project is licensed under the MIT License.

Metadata

Release files for itsmbench-audit 0.1.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 itsmbench-audit 0.1.0
File Size Uploaded
itsmbench_audit-0.1.0.tar.gz 35.3 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for itsmbench-audit 0.1.0
File Interpreter ABI Platform
itsmbench_audit-0.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 72.0 kB

Release files / itsmbench_audit-0.1.0.tar.gz

Download URL itsmbench_audit-0.1.0.tar.gz
Size 35.3 kB
Tags Source
SHA-256 checksum
How to use checksums
a54d6abc89f597017a02566c8b89019705143d2bffda37415733c1e05025650d
BLAKE2b-256 checksum
How to use checksums
e1e6df0714ebeb2264f0eecb7d6dbbad586d45565b82281bc46e9eb2df9a73c4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.12

Release files / itsmbench_audit-0.1.0-py3-none-any.whl

Download URL itsmbench_audit-0.1.0-py3-none-any.whl
Size 36.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
2410f22924302df030ebd921b6621d37dad4b692720c8c619559c39ef827484e
BLAKE2b-256 checksum
How to use checksums
260d9b3992ace03a45449be632cc2d5b0f0457e78dd60209f99a195f10dfe944
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.12

Release history Release notifications | RSS feed

This release

0.1.0 This release

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