CLICLItypeA command you run, rather than a dependency you import.See every one →What this type is →independently maintainedindependently maintainedoriginPublished by one person or a small company outside SAP. Says nothing about quality; the readings say that.See every one →Starting point

agentic-abap-evals

Six ABAP navigation tasks for a coding agent, each with needles and anti-needles that grade only the final answer, and a Node grader that applies them whatever agent stack produced the reply.

Six natural-language tasks an ABAP developer might hand to an agent: walk two inheritance chains to the ancestor they share, find the framework class that dispatches a redefined method, get from an OO repository method to the DDIC table behind it. Each is a JSON spec holding the prompt, the substring needles a correct answer contains, and antiNeedles regexes that fail a run which fabricates line numbers or reference counts. The suite mandates nothing about the agent: you hand it the prompt text, then pass the spec and the reply to grading/grade.mjs, as a command or as an imported grade function. What a spec does constrain is capabilities rather than tool names, so defaults.json forbids localFilesystemAccess, shellExecution, webSearch, subAgents and destinationMutation on every prompt and the runner translates each term into its own denylist, which is what lets one eval run against more than one agent stack. All six prompts target SAP-standard objects, so a system with a standard ABAP stack can answer them; nothing here grades the trajectory and nothing here runs the agent.

Facts

Last pushLicenceMIT

Where it sits

Lives in
Provides
Agent evalsABAPAgent evalscapabilityKnowing whether an AI feature still behaves after a model, prompt or schema change. Regression testing for non-deterministic output, against fixtures that reflect real business data.
Requires
ABAP platformABAP platformoutside the atlasThe system the prompts are about: all six ask after SAP-standard objects such as cl_aff_*, cl_abap_compiler and if_ci_test, and the source the agent has to read lives there rather than on the runner's disk.

Who is behind it

Albert MinkAlbert MinkPersonMaintains this
In the atlas: maintains 1, contributes to 8
@albertmink
maintainer

What it declares

Every artifact

Type
CLI
Origin
Independently maintained
Runtime
Node.js

As a CLI

Distributed through
does not say

Connections2

Where agentic-abap-evals runsBy its type: a CLI is run from a terminalcallsdocumentedrequiresYour terminal, actorYour terminalABAP platform, SAP solutionABAP platformSAP solutionagentic-abap-evals, moduleagentic-abap-evals
SAPnot SAP's, or the project's ownstated in the documentdocumented only

README

quoted from albertmink/agentic-abap-evals under MIT, read
albertmink/agentic-abap-evals/README.mdOn GitHub

agentic-abap-evals

A collection of agentic ABAP benchmarks.

Each eval is a natural-language task an ABAP developer might hand to an agent (find an override, walk a type hierarchy, locate a framework dispatcher) plus a rubric that grades the agent's final answer without inspecting how it got there. Bring any agent stack — MCP server, IDE plugin, custom integration. If it answers the question, it passes.

Today this repo is a curated showcase of what is possible.

The six showcase evals

idcategorywhat's hard about it
aff-handler-intermediate-parentmulti-hopWalk two sibling inheritance chains and identify the intermediate ancestor one passes through.
aff-handler-no-deserializemulti-hopEnumerate handler classes, inspect each override, find the one that diverges from the base.
atc-check-call-ordermulti-hopThe redefinition is not the call site. Find the framework class that actually dispatches the method.
db-table-from-exists-methodmulti-hopBridge OO repo → DDIC. Resists training-data hallucinations like TADIR/TRDIR.
longest-method-largemulti-hopFind the longest public method in a class large enough that whole-file reads should not be cheaper.
nonexistent-classnegative-pathRestraint test. The agent should run one search, see nothing, and stop — no fabrications.

All six target SAP-standard objects (cl_aff_*, cl_abap_compiler, if_ci_test) so any system with a standard ABAP stack can run them.

How to use them

The flow is intentionally simple — the suite makes no assumptions about your agent stack:

  1. Pick a prompt. Read the prompt field from any JSON in prompts/.
  2. Hand the prompt text to your agent. That's it. No tool list, no system message we mandate.
  3. Grade the agent's final reply. Pass the spec and the answer text to grading/grade.mjs.
# CLI use
echo "cl_ddls_aff_object_handler" > /tmp/answer.txt
node grading/grade.mjs prompts/aff-handler-no-deserialize.json /tmp/answer.txt
# → PASS  (exit code 0)
// Library use, from any Node-based runner
import { grade } from './grading/grade.mjs';
import { readFileSync } from 'node:fs';

const spec = JSON.parse(readFileSync('prompts/aff-handler-no-deserialize.json', 'utf8'));
const answer = await myAgent.run(spec.prompt);
const { pass, reasons } = grade(spec, answer);

Run the grader's own self-tests any time:

node grading/grade.test.mjs

What "tool-agnostic" means

The spec does not tell you which tools your agent should use. We grade outputs only; trajectories are your business.

What the spec does express, where it's relevant, is constraints — capability-level guardrails the runner is expected to enforce. ABAP source lives on the SAP system as virtual files; an agent that falls back to local grep or find is by definition hallucinating. So every prompt forbids localFilesystemAccess, shellExecution, webSearch, subAgents, and destinationMutation by default (see defaults.json). Individual prompts may add prompt-specific forbidden capabilities — nonexistent-class forbids referenceSearch, because the restraint signal we want is "agent decided not to call it."

The capability vocabulary lives in CAPABILITIES.md. Each capability term is mapped to "what this means at runtime" — your runner translates it to its own denylist (e.g. for Claude Code, this becomes --disallowedTools Bash,Read,…).

This split — vendor-neutral capabilities in the spec, vendor-specific tool names in the runner — is what lets the same eval run against different agent stacks without rewrites.

Spec schema

{
  "id": "task-id",
  "category": "multi-hop | negative-path | coverage",
  "description": "What capability or regression this prompt exercises (1–2 sentences).",
  "prompt": "The natural-language task handed to the agent.",
  "success": {
    "type": "substring_any | substring_all",
    "needles": ["..."],
    "caseInsensitive": true
  },
  "antiNeedles": ["regex pattern that, if matched, fails the run"],
  "constraints": {
    "forbiddenCapabilities": ["referenceSearch"]
  },
  "notes": "Free-form: ground-truth date, gotchas, ideal trajectory hints."
}

prompt and success are the only required fields. See PROMPT_QUALITY.md for the rubric-design rules every spec follows.

Why grade only the answer (and not the trajectory)?

Trajectory grading — "did the agent call the right tool?" — only makes sense when you know the tool taxonomy. As soon as the suite leaves any one stack, that vocabulary breaks.

Output grading is portable, lossy, and honest. It misses cases where the agent guessed correctly without doing real work; it cannot reward elegant trajectories over clumsy ones. We accept that. The compensation is antiNeedles (catches lying patterns: fabricated line numbers, "Found N references" on non-existent classes) and prompts that are hard enough that guessing usually fails.

When trajectory-aware metrics matter to you, build them in your runner. Keep the spec portable.

Roadmap

This is a v1 deliberately scoped to a curated showcase. Things we will add when there is reason to:

  • More prompts. PRs welcome — see CONTRIBUTING.md.
  • Optional capability tags on prompts (hover, referenceSearch, typeHierarchy) once we have enough evals to make tagging useful for filtering.
  • A reference runner harness, once two or more agent stacks have informally validated the suite.
  • Aggregated benchmark dashboards, once the contributor base wants them.

Contributing

We want your evals. Read PROMPT_QUALITY.md resp. CONTRIBUTING.md and open a PR.

License

MIT — see LICENSE.

MIT, read
Agent evals
  1. DanKromp/skillOverflowCollection of 41 agent skills, 37 for SAP development tasks
  2. LLM-Benchmark-ABAP-Code-GenerationBenchmark of LLM ABAP code generation against a real SAP system

Details

Sources3
GitHub APIdiscovered herechecked
github.com/albertmink/agentic-abap-evalstree, pushes, contributors, CIchecked
README.mdquoted, and what the entry declareschecked

Sources are graph entities: the same page may back several entries, and an unreachable source flags every row that rests on it.

Compatibility and provenance
runtimesnode
discovered viaGitHub API
first seen in the atlas
ecosystem and domainabap, ai-and-agents
History in the atlas1
  1. First seen.
For your agent
Ref
artifact:albertmink-agentic-abap-evals
JSON
/artifacts/albertmink-agentic-abap-evals.json
MCP
Connecting an agent