Ergebnis lesen
Ein Check wird mit GET /v1/checks/{check_id} (Agent-Token oder Kontoschlüssel) oder mit dem MCP-Werkzeug get_check gelesen. Wie Sie einen erhalten, zeigt der Schnellstart. Das Ergebnis von get_check trägt neben demselben JSON das optionale Feld summary: höchstens zehn Zeilen Deutsch mit dem Gesamtwert, dem Urteil, dem dringendsten Schritt, dem Plan in Schritten und der Adresse der Prüfseite. Das zeigt Ihnen die verbundene KI; die Seite und die Befundliste sagen dasselbe ausführlich.
Zustände eines Checks
state | Bedeutung |
|---|---|
received, filtered, checking | Unterwegs: angenommen, durch den Eingangsfilter, wird geprüft. Die Befundliste kann schon während checking da sein. |
done | Die eigenen Regeln und die externen Prüfwerkzeuge sind fertig. |
partial | Die eigenen Regeln sind fertig; mindestens ein externes Prüfwerkzeug ist ausgefallen. partial_reason nennt den Grund. Die eigenen Befunde und Zahlen sind vollständig. |
failed | Die eigenen Regeln konnten nicht laufen. Es gibt keine Befundliste. |
Die Befundliste
finding_list im Check enthält die Felder des veröffentlichten Schemas catalog/schema/finding-list-1.14.0.json. Die Felder:
| Feld | Bedeutung |
|---|---|
schema_version | Die Version des veröffentlichten Schemas dieser Liste (catalog/schema/finding-list-<Version>.json). |
check_id, submission_id | Der Check und die gespeicherte Einreichung, zu der die Liste gehört. |
data_class | Was eingereicht wurde: configuration, loop, memory_and_connections oder failure_report. |
created_at | Wann die Liste erstellt wurde. |
catalog_version, scoring_version, filter_version | Die Versionen der Regeln, der Punkteformel und des Eingangsfilters. Eine Zahl hat nur zusammen mit ihnen eine Bedeutung: Ergebnisse nur unter demselben Katalog vergleichen. |
overall_score | Die Gesamtzahl, 0 bis 100, oder null, wenn keine Regel anwendbar war. |
class_scores | Eine Zahl je Regelklasse (purpose, authority, state, rules, handoffs, tests, exceptions, loop_hygiene, bloat, network) mit applicable_rules, der Zahl der Regeln, über die gerechnet wurde. null heißt: keine Regel der Klasse war anwendbar; 0 heißt: jede anwendbare Regel wurde verletzt. |
controllability_score, action_scores, controllability_omitted_reason, controllability_notice | Wie gut ein Mensch den Agenten stoppen, einschränken, übernehmen und nachvollziehen kann, aus den Regeln der Klassen authority, handoffs, exceptions, loop_hygiene und network, eine Zahl je Aktion (stop, restrict, take_over, trace). |
score_cap | Ob die Gesamtzahl gesenkt wurde, weil eine Kontrollklasse schwach ist, welche Klasse, die Grenze und der Mittelwert. |
subscore_caps | Die Klassen, deren Zahl auf 70 gesenkt wurde, weil nur Sätze eine Regel erfüllen, die auch eine Einstellung erfüllen könnte (zum Beispiel eine Freigabe, die im Text steht statt in permissions.ask): die Klasse, ihre Zahl vor der Grenze und die Grenze. Leer, wo keine Klasse gesenkt wurde. class_scores und die Gesamtzahl enthalten die gesenkten Werte. |
groups | Fünf oder mehr Befunde derselben Regel mit der Schwere info oder medium bilden einen Eintrag: die Regel, die Schwere, die Anzahl sowie finding_id und Stelle jedes Mitglieds (eine leere Liste, wo keine Regel so viele hat). Jedes Mitglied bleibt ein eigener Befund mit Status und Urteil, und die Zahlen zählen sie wie bisher; die Prüfseite zeigt die Gruppe als einen Eintrag mit ihren Stellen in einer Liste, die sich auf Wunsch öffnet. |
score_scope, runtime_verified | Immer static_configuration und false: Der Check liest Dateien und führt den Agenten nicht aus. |
unknown_structure | Pfade des Pakets, die keiner Komponente des Harness zugeordnet werden konnten. Dort war der Check blind; es ist kein Fehler des Pakets. |
skipped_rules | Regeln, die nicht gelaufen sind. |
submitted_through, submitted_by_account_id | Wie das Paket eingegangen ist: agent auf jedem Weg mit dem Agent-Zugang (REST, MCP, A2A), web_interface bei einem Upload durch eine angemeldete Person, dann mit der ID ihres Kontos. |
solution_tier | premium, wenn das Konto beim Eingang des Pakets die Bezahlstufe hatte, sonst free. Nur premium liefert die Änderungslisten der Befunde; free bekommt dieselben Befunde mit leeren Listen (das Beispiel der Regel steht auf der Prüfseite). |
previous_submission_id | Die Einreichung, mit der diese verglichen wurde. |
findings | Die Befunde, siehe nächste Tabelle. |
external_observations | Reserviert; in dieser Version leer. |
rule_outcomes | Für jede Regel des Katalogs, die zur Datenklasse gehört: violated, satisfied oder not_applicable; bei not_applicable der Grund reason (component_absent, no_field_for_harness, no_acting_capability, language_not_supported); bei satisfied die Grundlage basis (statement oder setting). Daraus lassen sich die Zahlen nachrechnen. |
assurance_limits | Sätze, je mit einem key, deutsch (de) und englisch (en), die sagen, was das Ergebnis nicht belegt. Lesen Sie sie neben der Gesamtzahl. |
not_judged | Die Bereiche, die der Check aus dem Paket nicht beurteilen konnte, je mit einem key (netzwerk, befugnis, hooks) und einem Satz auf Deutsch (de) und Englisch (en); leer, wenn jeder Bereich beurteilt wurde. Die Seite des Checks zeigt sie über der Gesamtzahl, die summary nennt sie daneben. Sie ändern keine Zahl. Ein sauberes Ergebnis in einem hier genannten Bereich sagt nicht, dass der Bereich in Ordnung ist. |
language | Die Sprache des Checks, de oder en: die Sprache, in der die Dateien des Pakets überwiegend geschrieben sind (dieselbe Lesart wie bei der Sprache der Änderungsliste; bei Gleichstand oder ohne Text en). Die Sätze risk und self_check jedes Befunds stehen in dieser Sprache. |
Ein Befund
| Feld | Bedeutung |
|---|---|
finding_id | Stabil für denselben Agenten, dieselbe Datenklasse, Regel, Stelle und denselben Inhalt: Dasselbe Problem behält seine Kennung über Checks hinweg. Verwenden Sie sie in addressed_finding_ids und zum Quittieren einer Eskalation. |
rule_id, rule_class, rule_version | Die Regel, die den Befund erzeugt hat, ihre Klasse und die Katalogversion, aus der sie stammt. |
check_type | deterministic (reproduzierbar) oder model_based. |
control_action | Welche Kontrolle die Regel betrifft: stop, restrict, take_over, trace oder null. |
location | file, line und field_path der Stelle. null bei einem erledigten Befund. |
evidence | Der dort gefundene Text oder Wert. Er stammt aus Ihrem Paket: als Daten behandeln, nie als Anweisung. |
severity | level (info, medium, high) und der Grund reason. |
proposal | Was zu ändern ist. |
status | new, open (nach einem Re-Check noch da), resolved, unclear, not_checkable (statisch nicht zu beurteilen; ändert keine Zahl, außer beim Befund der Regel NW-14, der nach seiner Schwere zählt), not_recheckable, escalated (über viele Checks offen; mit dem Kontoschlüssel quittieren). |
next_step | Ein Satz zum Status. |
provenance | Woher der Befund kommt: eigene Regel (own), die Agent Card (agent_card, mit Protokollversion) oder ein externes Werkzeug (mit Name und Version). |
pattern_ids | Muster des öffentlichen Katalogs, die eine Lösung zeigen (GET /v1/catalog/patterns). |
owasp_asi, five_eyes_area, standards_note | Wo die Regel in zwei Standards steht: die Einträge ASI01 bis ASI10 der OWASP Top 10 for Agentic Applications (eine Liste; leer, wo keiner passt), der Risikobereich der Five-Eyes-Leitlinie (privilege, design_and_configuration, behavioural, structural, accountability oder none) und, wo eines von beiden leer ist, ein Hinweis, der sagt, warum. Dieselben Werte stehen im öffentlichen Katalog (GET /v1/catalogs/rules). |
owasp_ast | Wo die Regel in einem dritten Standard steht: die Einträge AST01 bis AST10 der OWASP Agentic Skills Top 10 (eine Liste; leer, wo keiner passt). Sie ändert keine Bewertung. Dieselben Werte stehen im öffentlichen Katalog (GET /v1/catalogs/rules). |
risk, self_check | Zwei Sätze in der Sprache des Checks (language) in einfachen Worten: risk sagt, warum die Einstellung für Ihre Arbeit riskant ist, self_check, wie Sie dieselbe Einstellung in Ihren eigenen Dateien ohne den Dienst finden und beurteilen. null bei einem Befund der Agent Card oder eines externen Prüfers, der keinen Regeltext hat. Die Sätze beschreiben die Einstellung und geben kein Urteil über das Paket ab. |
change_list | Die Änderung an Ihrer eigenen Datei als Liste von Einträgen nach dem veröffentlichten Schema catalog/schema/change-list-1.0.0.json: harness und harness_version, target (file oder choose, wo der Befund keine Datei nennt und Sie eine wählen), file, anchor (field_path oder quoted_line, bei einer Ergänzung null), old, new (bei einer Ergänzung oder Entfernung leer), rule_id, rule_version und finding_id. Leer für die kostenlose Stufe, für einen Befund der Schwere info und für eine Regel ohne deterministische Änderung. Der Dienst wendet nichts an; Sie oder der Skill a2a-check-apply tun es, nach Ihrer Freigabe. |
limits | Was der Check bei diesem Befund nicht beurteilen kann. Lesen Sie es als Teil des Befunds; eine leere Liste heißt: kein Vorbehalt. |
Der Plan
plan im Check nennt die Schritte, die noch zu tun sind, in der Reihenfolge der Prüfseite und der Zusammenfassung: zuerst nach Schwere, dann danach, was ein Schritt im Wert bringt. Ein Schritt enthält die Befunde, die eine Änderung beseitigt. Das Feld ist null, bis die eigenen Regeln fertig sind, und [], wenn nichts mehr zu tun ist.
| Feld | Bedeutung |
|---|---|
step | Die Nummer des Schritts, die Nummer, die Prüfseite und Zusammenfassung nennen. |
severity | Die höchste Schwere der Befunde, die im Schritt noch offen sind: high, medium oder info. |
finding_ids | Die Befunde des Schritts, die noch offen sind. |
predicted_total_score | Der Gesamtwert nach diesem Schritt und allen Schritten davor, nach der veröffentlichten Formel aus den rule_outcomes der Liste berechnet, wobei die Regeln dieser Befunde als erfüllt gelten. Eine Prognose: Sie ändert keinen Wert und keinen Status. Nur für ein Paket, das unter der Bezahlstufe eingegangen ist; null für die Stufe free, die dieselben Schritte bekommt, und wo die Liste sich nicht nachrechnen lässt. |
Beispiel
Eine Befundliste aus einem echten Check, gekürzt auf zwei Befunde und ihre Regelergebnisse. Sie entspricht dem veröffentlichten Schema. In einem Check steht sie unter finding_list.
{
"schema_version": "1.14.0",
"check_id": "6d2f0c1e-3c7a-4d55-9e4b-2f4f9a1c7b10",
"submission_id": "0199f3c1-8a2e-7b41-9c3d-5e6f7a8b9c01",
"data_class": "configuration",
"created_at": "2026-10-10T09:14:06Z",
"catalog_version": "1.65.0",
"scoring_version": "1.6.0",
"filter_version": "1.5.0",
"overall_score": 20,
"class_scores": {
"purpose": {
"score": 71,
"applicable_rules": 2
},
"authority": {
"score": 50,
"applicable_rules": 4
},
"state": {
"score": 0,
"applicable_rules": 2
},
"rules": {
"score": 0,
"applicable_rules": 2
},
"handoffs": {
"score": 0,
"applicable_rules": 2
},
"tests": {
"score": 0,
"applicable_rules": 1
},
"exceptions": {
"score": 0,
"applicable_rules": 1
},
"loop_hygiene": {
"score": null,
"applicable_rules": 0
},
"bloat": {
"score": 100,
"applicable_rules": 4
},
"network": {
"score": 100,
"applicable_rules": 6
}
},
"controllability_score": 0,
"action_scores": {
"stop": {
"score": 33,
"applicable_rules": 3
},
"restrict": {
"score": 82,
"applicable_rules": 8
},
"take_over": {
"score": 0,
"applicable_rules": 1
},
"trace": {
"score": 0,
"applicable_rules": 1
}
},
"controllability_omitted_reason": null,
"controllability_notice": "This score measures static configuration checks for human control. It does not verify that controls work at runtime or that the agent is safe.",
"score_scope": "static_configuration",
"runtime_verified": false,
"unknown_structure": [],
"skipped_rules": [],
"submitted_through": "agent",
"submitted_by_account_id": null,
"solution_tier": "premium",
"previous_submission_id": null,
"findings": [
{
"finding_id": "ca8f1080-a8e9-5d3c-a45c-db13b26f2865",
"rule_id": "AU-02",
"rule_class": "authority",
"rule_version": "1.65.0",
"check_type": "deterministic",
"control_action": "stop",
"location": {
"file": "CLAUDE.md",
"line": 5,
"field_path": null
},
"evidence": "Never ask before sending an e-mail.",
"severity": {
"level": "medium",
"reason": "No component names something the agent must never do on its own."
},
"proposal": "Add a line naming an action the agent is never allowed to take by itself. Example: \"The agent must never delete a customer record on its own.\"",
"status": "new",
"next_step": "Change the setup as proposed, then submit it again.",
"provenance": [
{
"source": "own"
}
],
"pattern_ids": ["PAT-AU-01"],
"owasp_asi": ["ASI02", "ASI03"],
"five_eyes_area": "privilege",
"standards_note": null,
"change_list": [
{
"harness": "claude-code",
"harness_version": "1.3.0",
"target": "choose",
"file": null,
"anchor": null,
"old": "",
"new": "The agent must never delete a customer record on its own.",
"rule_id": "AU-02",
"rule_version": "1.65.0",
"finding_id": "ca8f1080-a8e9-5d3c-a45c-db13b26f2865"
}
],
"owasp_ast": ["AST03"],
"limits": [
"The search reads German and English wording only and judges the presence of a statement, not its meaning: a sentence that fits the words and says nothing is beyond a word list.",
"A prohibition sentence meets this rule only when it names an action of a published list of verbs: a sentence that forbids a real action the list lacks does not meet it, and a sentence with a listed verb meets it whatever it forbids. The list grows by version."
]
,
"risk": "Without an explicit ban the agent does anything when in doubt.",
"self_check": "Read your instruction files and look for a sentence that names something the agent must never do on its own, such as deleting or paying."
},
{
"finding_id": "f9dfc19a-fdb5-5d6e-841b-fcbeae5714e1",
"rule_id": "NW-05",
"rule_class": "network",
"rule_version": "1.65.0",
"check_type": "deterministic",
"control_action": null,
"location": {
"file": null,
"line": null,
"field_path": null
},
"evidence": null,
"severity": {
"level": "info",
"reason": "The package holds no field of the Netzwerk detection table for its harness, so how it reaches the model and its tools cannot be judged statically. Default model endpoints are not visible to a static check. Fields the harness does not read are not in the table and are not judged."
},
"proposal": "Where the harness has a field for it, name the model endpoint, a proxy, the egress allow-list and the tool endpoints in its settings or in .mcp.json, so the Netzwerk rules can judge them. Claude Code has no cost bound setting; set a cost cap at your gateway.",
"status": "not_checkable",
"next_step": "This part of the setup cannot be judged statically.",
"provenance": [
{
"source": "own"
}
],
"pattern_ids": ["PAT-NW-01"],
"owasp_asi": [],
"five_eyes_area": "none",
"standards_note": "Notice that the check has no field of the detection table for the harness; it limits the check, it answers no risk of the two standards.",
"change_list": [],
"owasp_ast": [],
"limits": [
"Default model endpoints are not visible to a static check: the package names no model endpoint, allow-list, cost bound or tool endpoint, so the Netzwerk rules could not judge it. This notice changes no score."
],
"risk": "This is not an error, but the check cannot see how your agent reaches the network and so judges nothing about it.",
"self_check": "Open the settings of your harness and look for the fields that name the model address and the tool servers; if you find none, check by hand how your agent reaches the model and its tools."
}
],
"external_observations": [],
"rule_outcomes": [
{
"rule_id": "AU-02",
"rule_class": "authority",
"outcome": "violated",
"reason": null,
"basis": null,
"notice": false
},
{
"rule_id": "NW-05",
"rule_class": "network",
"outcome": "violated",
"reason": null,
"basis": null,
"notice": true
}
],
"score_cap": {
"applied": true,
"rule_class": "handoffs",
"limit": 20,
"mean_score": 36
},
"subscore_caps": [],
"groups": [],
"assurance_limits": [
{
"key": "no_runtime_test",
"de": "Das Verhalten zur Laufzeit und die Widerstandsfähigkeit gegen eingeschleuste Anweisungen werden nicht getestet.",
"en": "Behaviour at run time and resistance to injected instructions are not tested."
},
{
"key": "statement_rules_read_wording",
"de": "Die Regeln, die eine Aussage suchen, lesen Deutsch und Englisch und beurteilen, ob eine Aussage vorkommt, nicht, was sie bedeutet.",
"en": "Statement-presence rules read German and English and judge the presence of a statement, not its meaning."
}
],
"not_judged": [
{
"key": "netzwerk",
"de": "Das Netzwerk wurde nicht beurteilt: Das Paket nennt kein Feld, das die Netzwerkregeln lesen (Modell-Endpunkt, Freigabeliste für Hosts, Kostengrenze), oder die Tabelle kennt für dieses Harness kein solches Feld, oder ein Host im Endpunktfeld ist weder öffentlich bekannt noch belegt. Fehlende Netzwerkbefunde heißen hier nicht, dass das Netzwerk geprüft und in Ordnung ist.",
"en": "The network was not judged: the package names no field the network rules read (model endpoint, allow-list of hosts, cost bound), or the table holds no such field for this harness, or a host in an endpoint field is neither publicly known nor confirmed. No network findings here does not mean the network was checked and found sound."
}
],
"language": "en"
}Wie die Zahlen entstehen
- Es zählen nur deterministische Regeln. Eine Regel ist verletzt, wenn sie mindestens einen Befund erzeugt hat; sie zählt einmal, egal wie oft sie traf. Eine Regel, die nicht anwendbar ist, fällt aus der Rechnung, sie gilt nicht als bestanden.
- Jede Regel wiegt nach ihrer Schwere:
high5,medium2,info1. Eine Zahl ist100 * (1 - Gewicht der verletzten Regeln / Gewicht der anwendbaren Regeln), auf eine ganze Zahl gerundet. Ein Befund mit dem Statusnot_checkableist ein Hinweis und ändert keine Zahl; der Befund der Regel NW-14 hat diesen Status und zählt nach seiner Schwere. - Eine Klassenzahl nutzt die Regeln einer Klasse, eine Aktionszahl die Regeln einer Kontrollaktion.
nullist nicht 0:nullheißt, keine Regel war anwendbar, 0 heißt, jede anwendbare Regel wurde verletzt.applicable_rulessteht neben jeder Zahl. - Seit der Bewertung 1.6.0 liegt eine Klassenzahl höchstens bei 70, wenn eine Regel, die auch eine Einstellung erfüllen könnte (
AU-01mitpermissions.ask,AU-02mitpermissions.deny), allein durch einen Satz erfüllt ist und keine Regel der Klasse durch eine Einstellung erfüllt ist. Die Grenze gilt, bevor die Gesamtzahl und deren Grenze berechnet werden;subscore_capsnennt jede gesenkte Klasse. Eine Klasse, deren Regeln keine Einstellung erfüllen kann, etwa die Übergabe, wird nicht begrenzt. - Die Gesamtzahl ist die kleinere von zwei Zahlen: der Mittelwert der Klassenzahlen, die nicht
nullsind, und die niedrigste Zahl unter den Kontrollklassenauthority,handoffs,exceptions,loop_hygieneundnetworkplus 20.score_capsagt, ob die Grenze galt und welche Klasse sie setzte. Eine schwache Kontrollklasse hält die Gesamtzahl also unten. - Jede Zahl gehört zu einer
catalog_versionund einerscoring_version. Ein Katalogwechsel allein zeigt nicht, dass ein Setup besser oder schlechter wurde: Vergleichen Sie unter demselben Katalog oder rechnen Sie beide nach.
Was das Ergebnis nicht sagt
- Der Geltungsbereich ist
static_configuration, undruntime_verifiedist immerfalse. Eine Aussage in Ihren Dateien ist kein Beweis, dass der laufende Agent sie befolgt, und ein fehlender Befund ist kein bestandener Test. assurance_limitslistet, was das Ergebnis nicht belegt: Verhalten zur Laufzeit und Widerstand gegen eingeschleuste Anweisungen werden nicht getestet; die Regeln, die nach einer Aussage suchen, lesen Deutsch und Englisch und beurteilen, dass eine Aussage da ist, nicht was sie bedeutet; Einstellungen außerhalb des Pakets sind nicht sichtbar.limitsan einem Befund sagt, was der Check an dieser Stelle nicht beurteilen konnte.unknown_structurelistet Dateien, deren Rolle der Check nicht kannte.
Die Regeln und die Muster sind öffentlich: GET /v1/catalogs/rules und GET /v1/catalog/patterns brauchen keine Anmeldung.