Agent-first benchmark runner for ABAP development scenarios. Configures skills and MCP servers, runs an agent, captures the transcript, evaluates the result.
v1 is a smoke path: the loop
agent + skills + MCP + scenario -> structured result -> evaluator -> reportis end-to-end against a deterministic mock ADT server. v1.1+ adds real agent runtimes, live BTP, and a static results website.
pnpm install
pnpm verify # spec-check, typecheck, lint, test, bench:smoke
pnpm bench:smoke # just the smoke run
pnpm bench:run --scenario create-class-hello
pnpm bench:report # regenerate results/summary.json + console reportThe smoke run produces:
results/<run-id>/prompt.txt
results/<run-id>/result.json
results/<run-id>/evaluation.json
results/<run-id>/transcript.jsonl
results/summary.json
- Loads a scenario from
scenarios/<id>.md(frontmatter + body). - Builds a prompt with role, available context, tool/validation/result policies, scenario body, and a result-schema sketch.
- Injects skills from
packages/skills/.agents/skills/*/SKILL.md. - Prepares a per-run agent workspace under
results/<run-id>/agent-workspace/.mastracode/with skills, an MCP profile (.mastracode/mcp.json), andAGENTS.md. - Runs the agent (simulated in v1 — produces a deterministic
ScenarioResult). - Persists
result.json,prompt.txt,transcript.jsonl,evaluation.json. - Evaluates the result against the scenario's
evaluator.rules. - Aggregates all runs into
results/summary.jsonand prints a console report.
- Build ABAP ADT connectors.
- Wrap
adt-cli,arc-1, orvscode_abap_remote_fsas benchmark-owned tool packages. - Normalize error envelopes across tool providers.
- Compare connector internals as the primary benchmark objective.
- Require
adt_http_callsfor every run. - Require token/cost/step metrics from every agent runtime.
- Create upstream pull requests to external projects.
- Ship a static website.
- Run against live BTP as the default CI mode.
Some of these may become optional future work, but they do not shape the v1 architecture.
This is an Nx monorepo. Packages:
| Package | Purpose |
|---|---|
@adt-bench/agent-runner |
Runtime-agnostic AgentRunner interface + result schemas. |
@adt-bench/scenarios |
Markdown scenario loader + frontmatter validation. |
@adt-bench/skills |
Benchmark-owned SKILL.md files (agentskills.io format). |
@adt-bench/prompt-builder |
Layered prompt construction. |
@adt-bench/evaluator |
Deterministic rule-based evaluator. |
@adt-bench/report |
JSON aggregation + console report. |
@adt-bench/mock-adt-server |
Minimal in-process mock of SAP ADT REST API. |
@adt-bench/runner-mastracode |
First concrete AgentRunner (simulated mode in v1). |
@adt-bench/bench-cli |
bench:smoke, bench:run, bench:report. |
See agents/architecture.md for the system design, and each
package's specs/SPEC.md for its detailed contract.
Every package has a specs/SPEC.md that is the source of truth
for what the package does. The spec drives the code, not the other
way around. Three gates enforce the contract:
$ pnpm spec-check
=== spec-mtime === PASS # SPEC.md is newer than src/
=== spec-coverage === PASS # every export is in SPEC.md
=== spec-drift === PASS # every test in spec exists in code and vice versa
See docs/spec-style.md for the spec template, the gates, and how
to fix common failures.
- TypeScript strict (
noUncheckedIndexedAccess,noImplicitOverride). - Zod 3.23 for all schemas.
- Vitest 2.1 for tests.
- ESLint 9 flat config (warnings only, no errors).
- Conventional commits for commit messages.
- Agent task prompts in
agents/issue-prompts/<n>-<slug>.mdare mirrored to GitHub issues. Each issue is a self-contained prompt a coding agent can execute.
See agents/conventions.md for details.
docs/design.md— high-level design notesdocs/spec-style.md— how to write a SPEC.mddocs/scenario-contract.md— scenario formatdocs/result-schema.md— JSON shapesdocs/evaluator.md— evaluator rulesdocs/reproducing.md— how to run the benchdocs/backlog.md— current backlog (auto-generated, see #16)docs/project-views.md— recommended project board viewsdocs/agent-prompts.md— how to use the issue-body task promptsdocs/agent-task.md— the task prompt template (this is the convention)
agents/README.md— entry point for coding agentsagents/architecture.md— system architectureagents/CONTRIBUTING.md— how to add a package, scenario, or skillagents/conventions.md— code, test, commit conventions
packages/skills/.agents/skills/abap-workflow/SKILL.md— ABAP object workflowpackages/skills/.agents/skills/abap-test-loop/SKILL.md— TDD loop for ABAPpackages/skills/.agents/skills/abap-result-contract/SKILL.md— JSON output contractpackages/skills/.agents/skills/abap-mock-usage/SKILL.md— mock server quirkspackages/skills/.agents/skills/principles/SKILL.md— design principles (the meta-skill)packages/skills/.agents/skills/sdd/SKILL.md— spec-driven developmentpackages/skills/.agents/skills/agent-task/SKILL.md— how to consume an issue body
Tracked in the org-level GitHub Project board (public) and as GitHub Issues. Every issue is a self-contained agent task prompt.
Apache-2.0.