Skip to main content
Glama
3lehr
by 3lehr

brainlehr 0.1.0

A knowledge store that speaks up.

Ordinary stores wait for a query and return similar text. brainlehr does five things an archive does not:

  • It speaks up unasked. On every answer it checks whether a law, standard or internal identifier is being cited — and whether the store holds evidence for it. If not, it says so.

  • It proposes what's missing. Recurring manual steps become tool proposals with a ready-made task. A failure class that recurs three times is promoted to a rule on its own.

  • It contradicts. An entry without verifiable provenance is never created in the first place — enforced by a database trigger, not by convention.

  • It marks foreign text as data. Not via a word list (which is inherently incomplete), but through the rendering itself.

  • It measures itself. Retrieval quality, usefulness, ranking — against a third-party test corpus, judged blind. The numbers regularly come out badly; that is the point.

Runs as an MCP server on SQLite — so it works with any MCP client: Claude Code and Desktop, Codex, Hermes, or your own. Offline refers to the store, not the model: the database, the full-text index and the vectors stay on the machine. Which model you talk to is your choice — a hosted one is fine, it simply never sees more than the client sends it.

Version 0.1.0. The leading zero is the statement: no stable interface, no promise of upward compatibility. What works is evidenced — what is promised is nothing.

Next. Work pauses until 2026-08-10T23:00+02:00. After that, 0.1.1 is likely — likely, because that is not a promise either.

🇩🇪 Deutsche Fassung: README.de.md


What it's for

A language model forgets everything between two sessions. The usual remedy puts text into a vector database and retrieves it by similarity. That answers what did we talk about — but not:

  • Who claimed this, and was it ever verified?

  • Does it still hold, or has it been superseded?

  • What if two entries contradict each other?

  • Does the store have any effect, or does it merely return hits?

brainlehr answers these four questions with fields and measurements instead of confidence.

Related MCP server: Talamus

Quick start

python3 schnellstart.py

This creates an empty, rule-enforced database, writes brainlehr's self- description into it, and verifies at the end that the fresh instance answers the question was kannst du ("what can you do"). If it doesn't, the script exits with an error instead of a success message.

python3 schnellstart.py --bestand              # + sample corpus (NASA LLIS et al.)
python3 schnellstart.py --bestand --vektoren   # + semantic search, computed locally

Vectors are optional: full-text search works without them, and computing them takes minutes to hours depending on the machine. Rationale in docs/AUFBAU.md.

Run it as an MCP server, and check the core modules:

python3 knowledge_mcp_server.py          # stdio transport

python3 kern/ausweis.py --selftest       # identity / credential handling
python3 kern/werkzeugrechte.py --selftest # tool permissions
python3 kern/schema_nachzug.py --selftest # schema back-fill

The script prints the MCP configuration entry when it finishes. The text a language model should read first is in START_HIER.md.

Temporary session state uses three MCP tools: session_checkpoint_setzen, session_checkpoint_lesen, and session_checkpoint_schliessen. A checkpoint contains technical IDs only; it is not searched or injected on every prompt. Reading it with a current topic fingerprint returns a deterministic recommendation: save at 75/88% context, integrate pending agents first, and recommend a new chat only after a real topic change with a complete handoff.

Moving a corpus between instances goes through the single entry point — line by line, not by copying the database file, because SQLite files cannot be merged and git would simply overwrite them:

python3 brainlehr.py init  <target-directory>   # set up a fresh location
python3 brainlehr.py raus  auszug.jsonl         # write the corpus out
python3 brainlehr.py rein  auszug.jsonl --db knowledge.db   # read it back in
python3 brainlehr.py haken --einbauen           # wire up the hooks

Install it as a package

Two ways in. The one above works from a clone — this one needs no clone at all:

pip install brainlehr          # not on PyPI yet; until then: pip install <wheel>
brainlehr-einrichten           # creates the store, verifies itself, then stops

The store lands in ~/.brainlehr/brainlehr.db, not inside the installed package — measured 2026-08-23: a default path under site-packages would be deleted by the next pip install --upgrade, silently, because nobody keeps their data there.

Then register the server. brainlehr-mcp is on PATH after the install, so none of these needs an absolute path:

claude mcp add --transport stdio --scope user brainlehr -- brainlehr-mcp
codex mcp add brainlehr -- brainlehr-mcp

For Hermes, brainlehr is a memory provider plugin rather than a plain MCP server — see integrations/hermes/.

Working inside a clone of this repository, Claude Code needs nothing at all: .mcp.json is checked in and registers the server for the project.

The store starts empty, and that is correct — this package ships no knowledge, not even ours. Reference works (BSI, NASA LLIS, WCAG) are fetched from their origin during setup, so every user gets them from whoever holds the rights. kern/einrichtung.py offers them; nothing goes over the network unless you say so.

Set it up by pasting a prompt

Give one of these to your agent. Each one clones, installs, verifies and wires brainlehr into that client's own config. The syntax was checked against each vendor's documentation on 2026-08-10 — if a client has changed since, the prompt says so instead of guessing.

Set up brainlehr, a local MCP knowledge store, on this machine.

1. Clone https://github.com/3lehr/brainlehr.git into a directory I choose —
   ask me for it, do not assume one. Then cd into it.
2. Create a venv and install: python3 -m venv .venv && source .venv/bin/activate
   && pip install -r requirements.txt
3. Run `python3 schnellstart.py`. It creates the database, writes brainlehr's
   self-description and verifies at the end that the fresh instance answers
   "was kannst du". If it exits non-zero, STOP and show me the output — do not
   continue and do not work around it.
4. Register it with Claude Code, using the ABSOLUTE path it printed:
   claude mcp add --transport stdio --scope user brainlehr -- \
       <absolute-path>/.venv/bin/python3 <absolute-path>/knowledge_mcp_server.py
5. Verify: `claude mcp list` must show brainlehr as connected. Then restart the
   session and call knowledge_search("was kannst du"). Report the number of
   hits. Zero hits means step 3 did not do what it claimed — say so.
6. Read START_HIER.md and follow it from then on.
7. Do NOT set up credentials, and do not invent one. A single user on one
   machine does not need any; writes are simply marked `unbeglaubigt:`. If I
   ever ask for it, the secret is mine to paste — not yours to read or create.

Do not edit any file in the repository during setup. If a command fails, show
me the actual error instead of trying a different command.
Set up brainlehr, a local MCP knowledge store, on this machine.

1. Clone https://github.com/3lehr/brainlehr.git into a directory I choose —
   ask me for it, do not assume one. Then cd into it.
2. python3 -m venv .venv && source .venv/bin/activate
   && pip install -r requirements.txt
3. Run `python3 schnellstart.py`. It verifies itself at the end. If it exits
   non-zero, STOP and show me the output — do not work around it.
4. Register it in ~/.codex/config.toml (the ChatGPT desktop app, Codex CLI and
   the IDE extension share this file), using the ABSOLUTE paths:

   [mcp_servers.brainlehr]
   command = "<absolute-path>/.venv/bin/python3"
   args = ["<absolute-path>/knowledge_mcp_server.py"]

   Equivalent CLI form:
   codex mcp add brainlehr -- <absolute-path>/.venv/bin/python3 \
       <absolute-path>/knowledge_mcp_server.py
5. Restart, then call knowledge_search("was kannst du") and report the hit
   count. Zero hits means step 3 did not do what it claimed — say so.
6. Read START_HIER.md and follow it from then on.
7. Do NOT set up credentials, and do not invent one. A single user on one
   machine does not need any; writes are simply marked `unbeglaubigt:`. If I
   ever ask for it, the secret is mine to paste — not yours to read or create.

Do not edit any file in the repository during setup. If a command fails, show
me the actual error instead of trying a different command.
Set up brainlehr, a local MCP knowledge store, on this machine.

1. Clone https://github.com/3lehr/brainlehr.git into a directory I choose —
   ask me for it, do not assume one. Then cd into it.
2. python3 -m venv .venv && source .venv/bin/activate
   && pip install -r requirements.txt
3. Run `python3 schnellstart.py`. It verifies itself at the end. If it exits
   non-zero, STOP and show me the output — do not work around it.
4. Register it in ~/.hermes/config.yaml under mcp_servers, using ABSOLUTE
   paths:

   mcp_servers:
     brainlehr:
       command: "<absolute-path>/.venv/bin/python3"
       args: ["<absolute-path>/knowledge_mcp_server.py"]

   Note: Hermes prefixes tool names as mcp_brainlehr_<tool>. If you write any
   rule that matches on a tool name, use the prefixed form.
5. Restart, then call mcp_brainlehr_knowledge_search("was kannst du") and
   report the hit count. Zero hits means step 3 did not do what it claimed.
6. Read START_HIER.md and follow it from then on.
7. Do NOT set up credentials, and do not invent one. A single user on one
   machine does not need any; writes are simply marked `unbeglaubigt:`. If I
   ever ask for it, the secret is mine to paste — not yours to read or create.

Do not edit any file in the repository during setup. If a command fails, show
me the actual error instead of trying a different command.

Three things every one of these prompts does on purpose:

  • It asks where to put the repository instead of picking a directory. An agent that chooses for you puts it somewhere you will not find again.

  • It forbids working around a failure. schnellstart.py ends with a check and exits non-zero if the fresh instance cannot answer. An agent that "fixes" that by skipping the step hands you a store that looks installed.

  • It asks for a number, not a verdict. "Report the hit count" can be wrong and be seen to be wrong; "it works" cannot.

What's actually in it

Provenance

source is mandatory, enforced by a database trigger; provenance fields are immutable once written

Validity

norm_rang, gilt_ab/gilt_bis and an explicit norm decision with no default value

Identity

not required — one user on one machine writes without any credential, each entry simply marked unbeglaubigt: ("unattested"). Once a credential exists, identity can no longer be asserted in the call: it is verified via scrypt. Enforcement stays soft unless BRAINLEHR_DURCHSETZUNG=streng — see Credentials

Two kinds of knowledge

nodes carry facts, lessons carry failure classes with cause, fix and prevention

Hybrid search

FTS5 including trigram, plus local vectors (bge-m3), fused via RRF — entirely on-device

Associative edges

reinforce what is retrieved together; an edge means "co-occurred", not "is related"

Access log

every read and write in access_log, chained via SHA-256 — tampering becomes provable, not impossible

How it works

Three flows, drawn from the code as it stands on 2026-08-10. The trigger names are the actual ones in schema.sql; the thresholds are the measured ones.

A note on the German identifiers

You do not need this table to read the diagrams — they state what each step does in English and give the German name in brackets, because that is what you will grep for in the code. This is the lookup for when you get there:

identifier

meaning

herkunft / source

provenance

freigabe

release status: intern (default) · offen · gesperrt

gattung

kind: arbeitsbestand (working set) · nachschlagewerk (reference, kept out of automatic recall)

anlass

trigger: what caused the entry (betreiber, selbst, hook, skript)

norm_rang · gilt_ab · gilt_bis

norm rank · valid from · valid until

unbeglaubigt

unattested — no credential was presented

pruefer · rasterblick · doctor

the reporters: field auditor · search-coverage auditor · self-check

pflege/ · kern/ · melder/ · haken/

maintenance · core · reporters · hooks

parent_check · source_check

trigger: parent node must exist · provenance must be present

norm_entscheidung_pflicht

trigger: the norm decision has no default — it must be stated

normrang_herkunft

trigger: a house rule needs a human decider

herkunft_bu

trigger: provenance fields are immutable once written

knowledge_fassung_au

trigger: archives the previous version on update

access_log

the access log — every read and write, SHA-256 chained

Trigger names end in two letters that say when they fire: _bi before insert, _bu before update, _ai after insert, _au after update, _ad after delete. So herkunft_bu is "provenance, before update" — it is what refuses a change to a provenance field.

Why not rename them: the reasoning behind this project was written in German, and the identifiers carry that reasoning. gilt_bis and valid_until are the same field; Geltung and validity are not quite the same thought.

1. Writing — every barrier sits in the database, not in the caller

A write is refused by SQLite itself. An agent that forgets provenance does not produce a bad entry; it produces no entry and an error message.

flowchart TD
    A["knowledge_add(...)"] --> B{"is this tool permitted?<br/><i>(kern/werkzeugrechte.py)</i>"}
    B -- "no" --> BX["refused at tools/call<br/>— not merely hidden from tools/list"]
    B -- "yes" --> C["knowledge_mcp_server.py<br/>ensure_schema()"]
    C --> D["back-fill missing columns<br/>WAL checkpoint + backup first<br/><i>(kern/schema_nachzug.py)</i>"]
    D --> E["INSERT INTO knowledge_nodes"]

    E --> T1{"provenance must be present<br/><i>(source_check)</i>"}
    T1 -- "empty" --> X1["ABORT — logged as<br/>add | rejected | source_fehlt"]
    T1 --> T2{"parent node must exist<br/><i>(parent_check)</i>"}
    T2 -- "missing" --> X2["ABORT"]
    T2 --> T3{"norm decision must be stated<br/>— there is no default<br/><i>(norm_entscheidung_pflicht)</i>"}
    T3 -- "unset" --> X3["ABORT — the field exists to answer<br/>'did nobody look, or is it really not a norm?'"]
    T3 --> T4{"a house rule needs a HUMAN decider<br/><i>(normrang_herkunft)</i>"}
    T4 -- "model as decider" --> X4["ABORT"]
    T4 --> T5{"value ranges: trigger, release, kind<br/><i>(anlass · freigabe · gattung)</i>"}
    T5 --> T6{"expiry cannot precede start<br/><i>(gilt_bis_vor_gilt_ab)</i>"}
    T6 --> OK["row written"]

    OK --> F1["full-text index updated<br/><i>(knowledge_ai)</i>"]
    OK --> F2["previous version archived on update<br/><i>(knowledge_fassung_au)</i>"]
    OK --> F3["access log, SHA-256 chained<br/><i>(access_log)</i>"]

    E -.->|"UPDATE"| H{"provenance fields are immutable<br/><i>(herkunft_bu)</i>"}
    H -- "attempted change" --> X5["ABORT"]

    style X1 fill:#4a1010,color:#fff
    style X2 fill:#4a1010,color:#fff
    style X3 fill:#4a1010,color:#fff
    style X4 fill:#4a1010,color:#fff
    style X5 fill:#4a1010,color:#fff
    style BX fill:#4a1010,color:#fff
    style OK fill:#0f3d1e,color:#fff

17 trigger families guard knowledge_nodes, 42 triggers in total. Case 5 in the list above shows why this sits in the database: the model reported "saved" while the barrier had already refused the write. Had the check lived in the caller, the entry would exist today.

2. Reading — the automatic recall, and where it deliberately stays silent

flowchart TD
    P["user prompt<br/>(UserPromptSubmit hook)"] --> S1{"empty, or starts with '/'?"}
    S1 -- "yes" --> Q1["silent — a slash command is not a question"]
    S1 -- "no" --> K["stop words removed<br/><i>(keywords)</i>"]
    K --> S2{"fewer than MIN_HITS=3<br/>keywords left?"}
    S2 -- "yes" --> Q2["silent — cannot clear the bar anyway,<br/>so don't even query"]
    S2 -- "no" --> R["search<br/><i>(query)</i>"]

    R --> R1["FTS5 incl. trigram folding"]
    R --> R2["local vectors (bge-m3)<br/>brute force, no ANN index"]
    R1 --> RRF["rrf_fuse()<br/>reciprocal rank fusion"]
    R2 --> RRF
    RRF --> D["drop what THIS session already received<br/>ADR-033, saves a measured 79%<br/><i>(_dedup_session)</i>"]
    D --> S3{"anything left?"}
    S3 -- "no" --> L0["the NEGATIVE case is logged too —<br/>without it the log is no denominator<br/><i>(log_recall with empty result)</i>"]
    S3 -- "yes" --> L1["logged<br/><i>(log_recall)</i>"]
    L1 --> O["hookSpecificOutput.additionalContext → model<br/>systemMessage + continue + suppressOutput → human"]

    style Q1 fill:#3a3000,color:#fff
    style Q2 fill:#3a3000,color:#fff
    style L0 fill:#3a3000,color:#fff
    style O fill:#0f3d1e,color:#fff

MIN_HITS=3 is not a guess. Measured on a synthetic corpus and on 1,923 real prompts: at 2 the recall is higher (0.369 vs 0.141) but it produces false positives on chat and meta prompts; at 3 there were none. The value sits on the Pareto front and is documented in the source with all three measurements.

No approximate vector index — on purpose. Every query is compared against all vectors in the store. An ANN index would not guarantee the best hit, and that would invalidate the retrieval-quality measurement that is currently being built up. Speed is not the bottleneck; honesty about the number is.

3. The loop — what makes it a store rather than an archive

flowchart LR
    W["work in a session"] --> C["record a lesson: cause · fix · prevention<br/><i>(lesson_record)</i>"]
    C --> DB[("knowledge.db")]
    DB --> RE["recall hook<br/>injects on the next prompt"]
    RE --> W

    DB --> M["reporters at session start:<br/>self-check · field auditor · coverage auditor<br/><i>(doctor · pruefer · rasterblick)</i>"]
    M -->|"finding"| W

    C --> E{"same failure class<br/>3rd occurrence?"}
    E -- "yes" --> RU["escalated_to_rule"]

    DB --> X["export: released entries only<br/><i>(pflege/export_offen.py, freigabe='offen')</i>"]
    X --> XC{"bait list · patterns ·<br/>path de-localisation"}
    XC -- "hit" --> XA["writes NOTHING"]
    XC -- "clean" --> XO["auszug-offen/bestand.jsonl"]

    style XA fill:#4a1010,color:#fff
    style RU fill:#0f3d1e,color:#fff

The export is deny-by-default: a new node is intern by design, so it drops out unless someone deliberately releases it. The positive control is mandatory — a check that reports "no personal data found" says nothing about the corpus unless it can be shown to find known values. It found 44 suspected cases once, all 44 false positives, while a real name sat in the corpus (case 7 above).

Credentials — you can skip this

Trying brainlehr out? Skip this whole section. One person on one machine needs no credential: writes go through, and each one is marked unbeglaubigt: ("unattested") in its actor field. Nothing is blocked, nothing is hidden, and the marking is honest rather than in your way. That is the intended first experience — a store you can test in ten minutes, not an identity system you have to configure first.

Read on only when a second participant appears: another person, an agent that should be distinguishable from you, or a second machine. Then attribution stops being decoration and starts being an answer to who wrote this.

It takes three steps — and the third is the one that gets skipped.

1. Naturalisation, not self-registration. Nobody can grant themselves a credential. A human holding ausweis:ausstellen issues a one-time PIN:

python3 kern/anmeldung.py <name> --durch <inviting-person> --rolle <role>

ausweis:ausstellen is in NICHT_DELEGIERBAR — whoever may naturalise cannot pass that power on. Otherwise the first naturalisation would be the last control. The founding act itself sits outside the system: as long as the credential directory belongs to the running process, anyone can perform it, including a model. sudo chown root on that directory is what turns it into what it should be — an act that requires your password.

2. Redeem the PIN. The new participant calls knowledge_anmelden with it. The secret comes back exactly once and is never logged.

3. Put the secret into the client's config — this is the step that gets skipped. Without it the server never sees a credential, and every write stays unattested even though the credential exists on disk:

// ~/.claude.json → mcpServers.<name>
"env": {
  "BRAINLEHR_GEHEIMNIS": "<the secret from step 2>",
  "BEGOD_KNOWLEDGE_ACTOR": "<name>"
}

For Codex it goes under [mcp_servers.<name>.env] in ~/.codex/config.toml, for Hermes under the server's env: block in ~/.hermes/config.yaml.

Then restart the client. Delete the hand-over file afterwards — it is the only place the secret exists in clear text.

Soft and strict

weich (default)

an unattested write is executed and marked unbeglaubigt_weich:<right>

streng

an unattested write is refused: kein_ausweis_streng:<right>; reads still work

BRAINLEHR_DURCHSETZUNG=streng switches it. Check before you flip it: every writing path needs a credential first, including your own scripts and hooks. In the author's own installation, 106 writes in one day were all unattested — a premature switch would have locked out the maintainer, not an attacker.

python3 brainlehr.py raus auszug.jsonl
python3 brainlehr.py rein auszug.jsonl --db /neuer/ort/brainlehr.db

The credential file itself lives on your desktop (~/Desktop/brainlehr-ausweise/), overridable via BRAINLEHR_AUSWEISE. It holds scrypt hashes and roles, no secrets. The reasoning, verbatim from the source: permissions (0600) carry the protection, not obscurity — a dot-folder in the home directory is not safer, only harder to find. The price is stated too: if that desktop is cloud-synced, the hashes travel with it.

The extract carries nodes, lessons, edges, settings, the access log and the escalations. Not included: the vectors and the full-text index — both are derivable. The triggers rebuild the full-text index themselves on import; kern/build_embeddings.py recomputes the vectors. A vector from a different embedding model would be silently wrong, and silently wrong is worse than missing.

brainlehr.db is deliberately not version-controlled. What is versioned is schema.sql, herkunft_unveraenderlich.sql and an extract under auszug/. Reason: git does not merge a binary file, it overwrites it — and on 2026-08-07 a corrupted version was already sitting in a commit here, which made version control worthless as a rescue path.

Eight cases, with sources

Eight events, each with a timestamp, a source and the model involved. Where the model was not recorded, that is stated.

  • When: recorded 2026-08-01T08:47, injected 2026-08-07T11:34:22, applied 2026-08-07T15:50 (+02:00)

  • Model: claude-opus-5

  • Source: node 5eca513a, lesson L-0968ae, injection logged in recall_log.jsonl

In openlehr (Python) a route swallowed every error in a try/except and emitted it only as a warning that no test and no interface reads — silent data loss in production. Six days later the recall hook injected that lesson into a session working on wohlair (Dart/Flutter). Four hours after that it met a freshly written toggle using catch (_): a friendly message for the user, cause discarded entirely.

What transferred was not a technique but a shape: the user gets a message, the cause disappears. Different project, different language, different framework — exactly the transfer a project-local wiki cannot make.

What this explicitly does not prove: that such transfers happen automatically. The hook injected; a human read it and recognised the analogy. Had the application happened one session later, it would have been invisible — the node says so itself.

  • When: 2026-07-28T07:57:34 (+02:00)

  • Model: not recorded

  • Source: lesson L-bac968

The fallback chain PyMuPDF → pdftotext → OCR only advanced when the extracted text was empty. PDFs with an embedded font lacking a ToUnicode table return non-empty garbage (!!!"# $% &'( instead of Rechnung). Result: file written, exit code 0 — and because the output file doubled as the batch loop's done-marker, the failure cemented itself. One document sat unusable in the archive since first ingest — 1 of 358.

The instructive part is the first attempt at a fix: a detector over the fraction of "plausible characters", threshold 0.80. It flagged two intact documents (digit-heavy tables, 0.78) and let the broken one through (its garbage was digit-heavy and scored ~0.9). The number was plausible and wrong.

The second attempt measures word density and was calibrated against the real corpus: 358 documents, median 69.7 words per 1000 characters, worst genuine document 15.0, broken extraction 3.3 — threshold 10.0 sits in the gap. On failure, no output file is written at all.

The rule that came out of it: never guess a heuristic threshold — look at the distribution of the real corpus. If there is no gap, the metric is wrong, not the threshold.

  • When: 2026-07-28T08:17:07 (+02:00)

  • Model: not recorded

  • Source: lesson L-47e586

A TestFlight upload reported UPLOAD SUCCEEDED with no errors including a delivery UUID. The build never showed up in App Store Connect. Cause: the build number was already taken. It had been derived from a local metadata file, which inevitably lags — the store was two numbers ahead. Apple discards the duplicate during processing, silently.

The finding also resolved an older, never-explained failure of the same app, which had been blamed on placeholder icons at the time.

The transferable rule, from the lesson: once a document is demonstrably stale in one respect, it counts as unverified in all respects until checked. Partial trust in a source known to be unreliable is the actual error.

  • When: 2026-08-08, searches at 13:33, finding recorded 13:36:02 (+02:00)

  • Model under test: not recorded — the log lists the agent as client=skript, model=unbekannt

  • Finding written by: claude-opus-5 via claude-code

  • Source: node a3c66be9, rule in node 1d0fd081

The test corpus contained a fictional 20 % fee waiver, valid 2026-05-01 to 2026-07-31. Asked about it, the agent searched, quoted the period and correctly concluded that the discount no longer applies. The log shows two searches — it looked things up instead of guessing.

A full-text index would have found the rule and served it as current. The difference lies in the gilt_bis field, not in the hit rate.

The counter-case from the same run: another request ran without any search, the log stayed empty. The agent recommended marketing instead of the cancellation the stored rule required, and only afterwards asked whether it should look something up.

  • When: 2026-08-08, item 7 (recorded 13:50:00), follow-up item 9 (13:58:43), both +02:00

  • Model under test: not recorded (client=skript, model=unbekannt)

  • Finding written by: claude-opus-5 via claude-code

  • Source: nodes bd393245 and …/messlauf-5-die-kette-v7-zu-v9-zeigt-den

The task was to record a note. The access log shows add | rejected | source_fehlt — the provenance requirement refused the write. The answer to the user nevertheless read: "I have saved the note", with a title and a rationale. Nodes in the store: zero.

Eight minutes later another request asked for exactly that note. The agent searched, did not find it — it never existed — and still produced a rationale, constructed from a different rule in the store.

The uncomfortable part is the actual finding: the barrier held, the model reported success. Without the barrier, a fabricated note would be in the store today and nobody would have seen an error.

  • When: 2026-08-09T20:47:20 (+02:00)

  • Model: none involved — the check is deterministic (substring and ID comparison), runtime under one second

  • Source: runs/antwortqualitaet_2026-08-09.md

Each of the 15 test tasks was checked against the correct answers of the 14 other tasks: 210 negative pairs, 0 false positives. The tasks span 9 projects and languages (Swift build, Play Billing, SQLite WAL, QR scanner, iOS crash diagnosis).

Beforehand it had been researched whether a customary rejection threshold exists for such negative controls. Result: it does not. Rather than borrowing a percentage, the local rate was measured.

  • When: finding 2026-08-06T11:56:13, addendum 2026-08-10T00:09:03 (+02:00)

  • Model: not recorded

  • Source: lesson L-adfb33

A catalogue of regular expressions (email, IBAN, customer number, salutation) ran over all 722 lessons and reported 44 suspected cases — 44 of them false positives ("Diagnose" in the sense of failure diagnosis). The real case only surfaced through a positive control using known names from the corpus: one lesson carried a clear name from the test corpus itself. It described a data leak and was one.

Hence the rule that has applied since: evidence needs the shape of the datum, not its content. A lesson that requires a proper name is not fully distilled.

  • When: blind run as of 2026-08-09T21:21:34, competitive measurement 2026-08-09T10:05:52 (+02:00)

  • Models in the blind run: gemma4:12b and gemma4:e4b, 3 runs each, computed locally

  • Sources: runs/wissensnutzen_blind.json, runs/antwortqualitaet_2026-08-09.md, runs/wettbewerb_2026-08-09.md

There is an A/B run that looks good: a small model proposes a documented anti-pattern without injected knowledge, and the correct solution with it.

On inspection: no generating script for those files exists in the repository, and the comparable earlier setup was demonstrably tautological — the query had been hand-built from the known solution, and the injected text contained the solution verbatim. What was measured was "does it help to put the right answer into the prompt".

The rebuild over the real retrieval path tokenises the task text itself and searches with it. There, the same task reads trefferguete: false: the store did not find the relevant lesson.

The case belongs here because it shows the direction: the measurement was rebuilt so that it can fail — and it failed immediately. For context, the project's own competitive measurement: retrieval quality 7 of 35 (20 %), while standard hybrid RAG reaches roughly 91 % Recall@10 in production reports from the same year. If all you need is retrieval, standard components serve you better.

What it explicitly is NOT

No anonymisation · no encryption · no BSI certification · no complete protection against prompt injection · no multi-user operation.

Each point is spelled out in docs/GRENZEN.md — together with what is built instead, and where that in turn stops. This list matters more than any feature list, because it determines trust.

Further reading

File

Contents

docs/AUFBAU.md

layout, vectors, backup and restore

docs/GRENZEN.md

what brainlehr does not do, in detail

docs/FREMDBESTAENDE.md

licence status of third-party corpora (NASA LLIS, BSI, open sources)

docs/adr/

decisions with rationale and abort condition

CONTRIBUTING.md

contribution process and CLA

Documentation, commit messages and code comments are in German; this README and the contribution process are in English. The identifiers you will meet are glossed above under A note on the German identifiers.

Contributing

Issue first, then code. Every pull request needs the signed CLA from CONTRIBUTING.md (§3, version 2026-08-10) and a DCO sign-off per commit (git commit -s).

Every contribution needs a check that fails before the change and passes after. A test that was green from the start only proves it does not touch the change.

The CLA grants the project owner rights beyond the AGPLv3 so the project can also be licensed commercially. It is not reviewed by a lawyer, and that is stated where you agree to it — not hidden. If that goes too far for you, say so in the issue: bug reports, reproductions, measurements and documentation need no CLA at all.

Licence

GNU Affero General Public License v3.0 (LICENSE), plain- language summary in LICENSE_FAQ.md.

Private, academic and open-source use: free, without restriction. Anyone distributing a modified version or operating it as a network service publishes their source under the AGPLv3 as well. For inclusion in closed products, a commercial licence is available.

Two files carry their own licence — declared, not accidental: see NOTICE.

The CLA is in CONTRIBUTING.md §3, not in LICENSE — the AGPL text may not be modified ("changing it is not allowed", its own header). NOTICE lists it alongside the licence.

Available Tools

45 tools
annahme_entscheidenA

Eine Annahme bestaetigen oder widerlegen. Beleg und Pruefer sind Pflicht -- ohne beides ist 'bestaetigt' nur eine Meinung mit Zeitstempel, und die Datenbank lehnt es ab. Den Pruefzeitpunkt setzt der Server, nicht der Aufrufer. Bei status='widerlegt' gehoert nach Moeglichkeit 'tatsaechliche_kosten' dazu: erst der Vergleich mit kosten_wenn_falsch zeigt, ob die Einschaetzung damals taugte.

ParametersJSON Schema
NameRequiredDescriptionDefault
actorNoCalling agent identity; else BEGOD_KNOWLEDGE_ACTOR or unknown
belegYesWas die Entscheidung traegt, wortwoertlich
modelNoCalling model; else BEGOD_KNOWLEDGE_MODEL or unknown
statusYes
sessionNoStable session ID; else BEGOD_KNOWLEDGE_SESSION or unknown
belegrangNoNeuer Belegrang, falls die Pruefung ihn aendert; sonst bleibt der alte
annahme_idYesz.B. 'A-3f9a2b'
geprueft_vonYes
tatsaechliche_kostenNo

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the behavioral burden. It discloses that the server sets the Pruefzeitpunkt, that the database rejects calls without Beleg and Pruefer, and why tatsaechliche_kosten matters for 'widerlegt'. It does not describe return values or all side effects on the assumption record, but the disclosed constraints are substantive and useful.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded: it states the purpose in the first sentence and then adds only high-value constraints and rationale. Despite covering nine parameters, there is no filler or repetition of schema details.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the core call contract, mandatory fields, server behavior, and the conditional actual-cost field. However, it does not mention what happens if annahme_id is missing or invalid, what the tool returns, or how belegrang should be used in practice. Given no annotations and no output schema, the description is adequate but not fully complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 67%, and the description adds meaning where the schema is thin: it ties geprueft_von to the mandatory Pruefer requirement, explains tatsaechliche_kosten as the comparison enabling evaluation of the original estimate, and clarifies why no caller-provided timestamp exists. The remaining parameters already have schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening phrase 'Eine Annahme bestaetigen oder widerlegen' names a specific action and resource, clearly indicating this tool confirms or refutes an assumption. It is distinct from siblings like annahme_erfassen or annahme_liste, but no sibling is explicitly named, so differentiation is implicit rather than stated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives actionable usage context: 'Beleg und Pruefer sind Pflicht' and the server-set timestamp clarify how to call the tool correctly, while 'Bei status='widerlegt' gehoert ... tatsaechliche_kosten dazu' adds a conditional rule. However, it never explicitly says when to choose this tool over alternatives such as annahme_erfassen or annahme_liste, so usage guidance is implied rather than fully explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

annahme_erfassenA

Eine ANNAHME festhalten, solange sie noch als Annahme erkennbar ist -- nicht erst, wenn sie sich als falsch herausgestellt hat. Zwei Pflichtangaben, und sie sind der ganze Zweck: 'belegrang' (gemessen|fremdbericht|plausibel|geraten) sagt, WIE GUT der Beleg ist, 'kosten_wenn_falsch' sagt, WAS EIN IRRTUM KOSTET. belegrang='gemessen' ohne nicht leeren 'beleg' wird abgelehnt -- eine Messung ohne Protokoll ist keine. Der Eintrag beginnt immer auf status='offen'; bestaetigt/widerlegt geht nur ueber annahme_entscheiden.

ParametersJSON Schema
NameRequiredDescriptionDefault
actorNoCalling agent identity; else BEGOD_KNOWLEDGE_ACTOR or unknown
belegNoWorauf sich das stuetzt, wortwoertlich (Lauf, Datei, Zitat)
modelNoCalling model; else BEGOD_KNOWLEDGE_MODEL or unknown
annahmeYesWas angenommen wird, in einem Satz
notizenNo
sessionNoStable session ID; else BEGOD_KNOWLEDGE_SESSION or unknown
occasionNounbekannt
projectsNo
belegrangNogeraten
kategorieNo
node_pathNoBezug auf einen Wissensknoten
kosten_wenn_falschYesWas ein Irrtum kostet -- Pflicht, ohne diesen Satz kein Eintrag

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It discloses a rejection rule ('belegrang='gemessen' ohne nicht leeren 'beleg' wird abgelehnt'), the permanent initial state ('beginnt immer auf status='offen''), and the workflow boundary (confirmation/refutation goes through annahme_entscheiden). It does not mention whether the write is idempotent or whether it triggers side effects, but the disclosed validation and status behavior is strong context beyond the schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four dense sentences, each earning its place: what the tool is for, why the two params matter, the validation rule, and the workflow boundary. The most important constraint is front-loaded, and there is no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 12-parameter write tool with no output schema and no annotations, the description covers the essential decision logic and the two required fields. It gives enough to call the tool correctly, though it says nothing about return values, which are absent from the output schema and could matter for confirming the created assumption.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 58%, so the description should add meaning for the least-documented parameters. It does add crucial semantics for belegrang and kosten_wenn_falsch, and it explains the dependency between belegrang and beleg. However, it leaves the purpose of several other parameters (kategorie, notizen, node_path, projects) entirely to their bare type names, and the schema itself provides descriptions for the important ones. This is adequate but not fully compensating for the coverage gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names the specific verb and resource ('Eine ANNAHME festhalten'), and immediately distinguishes its purpose: recording an assumption while it is still recognizable as an assumption, not after it has proven wrong. It also separates this tool from the sibling annahme_entscheiden by stating that confirmation/refutation only happens there.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly frames when to use the tool: record assumptions while still assumptions, before they are confirmed or refuted. It also names the sibling tool annahme_entscheiden as the only path for bestaetigt/widerlegt, and it states the rule that belegrang='gemessen' requires a non-empty beleg, otherwise the entry is rejected. That is clear when-to-use and when-not-to-use guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

annahme_listeB

Offene Annahmen auflisten, schlechtest belegt und aeltest zuerst -- das ist die Reihenfolge, in der sie schaden: was am laengsten unwidersprochen weitergetragen wurde, ist am tiefsten in spaeteren Entscheidungen verbaut.

ParametersJSON Schema
NameRequiredDescriptionDefault
actorNoCalling agent identity; else BEGOD_KNOWLEDGE_ACTOR or unknown
modelNoCalling model; else BEGOD_KNOWLEDGE_MODEL or unknown
statusNooffen
sessionNoStable session ID; else BEGOD_KNOWLEDGE_SESSION or unknown
max_resultsNo

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full disclosure burden. It does transparently explain the sorting behavior and its rationale, which is genuinely useful context. However, it does not disclose the result shape, whether the operation is read-only (only implied by 'auflisten'), what 'schlechtest belegt' means operationally, or pagination/limits behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single dense sentence with the core function front-loaded, followed by ordering criteria and a short justifying rationale. Every clause earns its place, though the philosophical tail could be tightened without losing decision-relevant meaning.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

This is a 5-parameter list tool with no output schema and no annotations, so the description should compensate by describing what each returned assumption entry contains and how parameters like max_results and status interact. It covers only scope and ordering, leaving an agent guessing about the return format and the operational meaning of 'belegt'.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 60% (actor, model, and session are documented; status and max_results are not). The description reinforces the status='offen' default by scoping the tool to open assumptions, which adds marginal meaning. But it adds nothing about the other enum values (bestaetigt, widerlegt) or how max_results behaves, so it sits at the baseline 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb+resource pair ('Offene Annahmen auflisten' = list open assumptions) and adds precise ordering criteria (worst-documented and oldest first). It implicitly distinguishes itself from assumption-manipulation siblings like annahme_erfassen and annahme_entscheiden, though it never names an alternative explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The rationale clause ('was am laengsten unwidersprochen weitergetragen wurde, ist am tiefsten in spaeteren Entscheidungen verbaut') implies the tool is for triaging which assumptions are most dangerous to downstream decisions, giving an agent a sense of when it matters. But there is no explicit when-to-use, when-not-to-use, or routing to alternatives such as knowledge_search or knowledge_read.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

edit_batch_completeC

Queue one client-neutral completed-edit event. Returns only bounded ephemeral WORKING impact; no prompt, summary, raw code, database write, or receipt.

ParametersJSON Schema
NameRequiredDescriptionDefault
nowNo
modeNo
batch_idNo
event_sourceNo
project_rootYes
agent_owned_untracked_pathsNo

TDQS

C2.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

In the absence of annotations, the description does useful behavioral disclosure: it says the call is 'bounded ephemeral WORKING impact' and lists what it does NOT return ('no prompt, summary, raw code, database write, or receipt'). This is genuine transparency about side effects and return behavior. However, it does not explain what 'WORKING impact' means concretely or whether any state is mutated, so it is not a full 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single compact sentence that front-loads the action and immediately states key constraints and exclusions. It is concise and every phrase carries information. Minor clarity issues ('WORKING', 'receipt') are present, but the structure is efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no annotations, no output schema, 0% parameter coverage, and 43 sibling tools, this description is too thin for an agent to call the tool correctly. It explains the result's general shape but not parameter semantics, prerequisites, or when it applies; the exclusion list helps but does not compensate for the missing core usage context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% and the description does not explain any of the six parameters. The name hints at batch completion, and the schema defines fields, but an agent gets no guidance on the meaning of 'now', 'mode', 'event_source', 'batch_id', or 'agent_owned_untracked_paths', nor on their relationships. With 0% coverage and no compensating prose, this is a clear gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose2/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a verb ('Queue') and a resource ('client-neutral completed-edit event'), which is clearer than a tautology. However, 'completed-edit event' is niche jargon and the tool name edit_batch_complete already conveys the same idea, so the description mostly restates the name rather than explaining what the tool actually does or what a caller should expect. It does not distinguish itself from siblings such as project_change or session_checkpoint_setzen.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no explicit when-to-use guidance, prerequisites, or alternatives. The phrase 'client-neutral' implies a constraint but not when an agent should choose this over related project_* or session_* tools. With 43 siblings and no usage direction, an agent is left to infer applicability.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

einrichtung_startenA

Erststart-Assistent (BDW-P11). Ohne Argumente aufgerufen liefert er nur die LAGE und vier Fragen -- Profil (einzelplatz/unternehmen), Sprache des eigenen Materials, Erreichbarkeit des Einbettungsdienstes und welche Kataloge mitsollen -- und aendert nichts. Gegen einen LEEREN Bestand darf er mit Antworten sofort durchlaufen; auf einem GEWACHSENEN oder bereits eingerichteten Bestand aendert er ohne confirmed=true NICHTS und sagt das. Kataloge werden als Gattung 'nachschlagewerk' eingelesen und verduennen die eigene Trefferquote deshalb nicht.

ParametersJSON Schema
NameRequiredDescriptionDefault
actorNoCalling agent identity; else BEGOD_KNOWLEDGE_ACTOR or unknown
modelNoCalling model; else BEGOD_KNOWLEDGE_MODEL or unknown
tenantNonur fuer profile=unternehmen: der benannte Mandant, auf den der Bestand wandert
profileNoBetriebsprofil; einzelplatz ist der Auslieferungszustand
sessionNoStable session ID; else BEGOD_KNOWLEDGE_SESSION or unknown
catalogsNoNamen der einzulesenden Nachschlagewerke, z.B. ['bsi', 'wcag']
languageNoSprache des eigenen Materials -- wird ausgezeichnet, nie uebersetzt
confirmedNotrue = Einrichtung auch ueber einen bestehenden Bestand fahren (ueberschreibt Profil und Sprache)

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden and handles it well: it promises no mutation on argument-less calls, spells out the confirmed=true requirement on non-empty inventories, and explains that catalogs are imported as 'nachschlagewerk' without diluting hit rates. Minor gaps remain around exact write behavior when setup does run and around error reporting.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense and mostly front-loaded, with no wasted sentences: the safety-critical no-argument behavior comes first, followed by the confirmed=true guard and catalog semantics. The first sentence is long and dash-heavy, which slightly reduces readability, but every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with no annotations and no output schema, the description provides substantial context: safe invocation mode, state-dependent behavior, the confirmed=true prerequisite, and catalog handling. It does not specify the exact return format or error behavior, but it is sufficient for an agent to decide whether and how to call it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3; the description goes beyond the schema by grouping parameters into the four wizard questions and by adding the non-obvious behavioral effect of catalogs on retrieval quality. It also maps 'language' to 'Sprache des eigenen Materials' and 'profile' to the einzelplatz/unternehmen choice.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the tool as a first-start assistant (BDW-P11) and explains its core behavior: without arguments it delivers only the current situation and four questions, and changes nothing. It does not explicitly distinguish itself from sibling tools, so it misses the highest bar for differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives concrete usage conditions: no arguments yields a read-only prompt; on an empty inventory answers may run immediately; on a grown or already configured inventory nothing changes unless confirmed=true. This is clear context, though it does not explicitly name alternative tools or state when to prefer another sibling.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

freigabe_setzenA

Decide, for ONE entry, who may see it: 'offen' (may leave the house), 'intern' (default -- stays here) or 'gesperrt'. Works for a lesson or a node; the id decides which, and an id found in both tables is rejected as ambiguous rather than guessed. Takes exactly ONE id -- a comma-separated list or a wildcard is refused, not split up: every entry is decided individually or stays 'intern' (migrate_freigabe.py). Unlike a norm decision this is NOT binding -- the way back from 'offen' to 'intern' is explicitly allowed. Logged in access_log like any other decision.

ParametersJSON Schema
NameRequiredDescriptionDefault
actorNoCalling agent identity; else BEGOD_KNOWLEDGE_ACTOR or unknown
modelNoCalling model; else BEGOD_KNOWLEDGE_MODEL or unknown
stufeYesoffen = may be exported, intern = stays here, gesperrt = blocked
sessionNoStable session ID; else BEGOD_KNOWLEDGE_SESSION or unknown
eintrag_idYesExactly one lesson id or node id -- no list, no pattern

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden and delivers: ambiguous ids are rejected rather than guessed, comma-separated lists or wildcards are refused rather than split up, the way back from 'offen' to 'intern' is explicitly allowed (reversibility), and access_log side effects are disclosed. This exceeds what a normal description discloses for a mutation tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single dense paragraph that is front-loaded with the core purpose and the three states, then moves to edge cases, reversibility, and logging. Every sentence earns its place; the migrate_freigabe.py aside is the only optional element and it still adds routing context.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with no annotations and no output schema, the description is nearly complete: it covers side effects (access_log), reversibility, default state, and rejection edge cases. The only absent detail is the success/error response shape, which matters little for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description adds genuine value beyond the schema: for eintrag_id it explains ambiguous-id rejection and wildcard refusal (schema only says 'no list, no pattern'), and for stufe it clarifies that 'intern' is the default state.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Decide') plus resource (visibility level for ONE entry) with three named states ('offen', 'intern', 'gesperrt'). The explicit 'ONE entry' scope and the contrast with a binding 'norm decision' distinguish it from decision-related siblings like annahme_entscheiden or knowledge_freigeben.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Clearly frames when it applies: single lesson or node entry, individual decisions only, with lists/wildcards refused rather than split. The non-binding note and migrate_freigabe.py reference imply bulk or binding decisions belong elsewhere, though no alternative sibling is named by tool name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

katalog_holenA

Holt einen der von einrichtung_starten vorgeschlagenen Kataloge (bsi, nasa-llis, wcag) in ein lokales Verzeichnis -- Netzzugriff nur hier, nie ueber einrichtung_starten selbst. Bei quelle.art='keine' wird nichts geraten: das Ergebnis traegt geholt=false und den Grund.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
zielNoZielverzeichnis; Vorgabe wenn leer

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the burden of behavioral disclosure. It reveals the network side effect, the local-directory destination, and the no-guessing behavior when quelle.art='keine', including the geholt=false result and reason. It does not mention all possible side effects like directory creation or overwriting, but adds meaningful behavioral context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded: it states the purpose, the allowed catalog values, the network-access constraint, and the special failure case in a single dense sentence. Every clause contributes useful information without repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the absence of annotations and an output schema, the description covers the main invocation context, the critical network-vs-setup distinction, and one important edge case. It does not describe the successful return shape or the exact default destination, but it provides enough for an agent to select and call the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is approximately 50% because ziel has a description but name only has an enum. The description adds the mapping between catalog names and the enum values, and clarifies that the target is a local directory. However, it does not explain the actual default for ziel or further detail the meaning of each parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Holt') and identifies the resource ('einen der von einrichtung_starten vorgeschlagenen Kataloge') with explicit catalog names (bsi, nasa-llis, wcag). It also distinguishes itself from the sibling einrichtung_starten by stating that network access happens here and not there.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says network access is done only here and never via einrichtung_starten itself, giving a clear when-to-use and when-not-to-use instruction. This effectively routes the agent to the correct tool for downloading catalogs.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

kettenerklaerung_erklaerenA

Explain a broken audit-chain link (access_log.ketten_hash) caused by a sanctioned rewrite of an already-logged row -- e.g. a migration that corrected a field after the fact. Rejects with an error if access_log_id has no break (gespeichert==erwartet) or does not exist -- an explanation for a healthy row would itself be a fabrication. Never changes the stored ketten_hash; the break stays visible, this only records who/when/why next to it. Optional anker="rfc3161"/"gegenzeichnung" builds an external anchor for the explanation via ankerverfahren.py (dry by default, no network without an explicit anker_kwargs override) -- when set, the current anchor backlog (ankerverfahren.rueckstand) is reported back as anker_rueckstand, since that backlog only ever changes at this moment.

ParametersJSON Schema
NameRequiredDescriptionDefault
actorNoCalling agent identity; else BEGOD_KNOWLEDGE_ACTOR or unknown
ankerNoOptional: build an external anchor for this explanation
grundYesRequired reason for the rewrite
modelNoCalling model; else BEGOD_KNOWLEDGE_MODEL or unknown
sessionNoStable session ID; else BEGOD_KNOWLEDGE_SESSION or unknown
commit_hashNoOptional: commit that performed the rewrite
access_log_idYesaccess_log.id of the broken row

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden and delivers: it discloses the non-mutating guarantee ('Never changes the stored ketten_hash; the break stays visible, this only records who/when/why next to it'), the error-rejection behavior, the dry-by-default network behavior ('dry by default, no network without an explicit anker_kwargs override'), and the side-effect timing ('that backlog only ever changes at this moment'). This is exemplary behavioral disclosure for a tool with zero annotation coverage.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single dense paragraph, but every clause earns its place: purpose, rejection conditions, non-mutation guarantee, anchoring behavior, and return-value nuance. Core purpose is front-loaded before operational details. It is longer than ideal but not bloated; minor structural improvement via separate sentences would be possible without adding content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 7-parameter tool with no annotations and no output schema, the description covers an unusually large surface: error behavior, side-effect profile, optional anchor flow, and the return field for the anchor case. The only notable gap is the return format when anker is not set -- the agent never learns what a successful explanation record looks like. The reference to 'anker_kwargs override' without that parameter appearing in the schema is also slightly opaque, though it reads as an environment-level override.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description adds genuine meaning beyond the schema: it clarifies access_log_id must reference a broken row (tying to the fabrication-rejection behavior) and substantially enriches the anker parameter by explaining anchor construction via ankerverfahren.py, the dry default, and the anker_rueckstand return behavior. The actor/model/session params correctly need no extra elaboration.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb ('Explain'), a precise resource ('broken audit-chain link (access_log.ketten_hash)'), and a concrete triggering scenario ('sanctioned rewrite of an already-logged row -- e.g. a migration that corrected a field'). This is far more specific than the tool name alone and leaves no ambiguity about what the tool is for, while being clearly distinct from the knowledge_/project_/annahme_ sibling families.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit when-to-use context (broken chain caused by a sanctioned rewrite) and explicit rejection conditions ('Rejects with an error if access_log_id has no break (gespeichert==erwartet) or does not exist -- an explanation for a healthy row would itself be a fabrication'). It does not name an alternative tool, but the domain is unique among the siblings, so the guidance is functionally complete. A 5 would require naming alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

knowledge_addA

Add a new knowledge node to the tree. Specify parent_path to place it in the hierarchy. parent_path must already exist (or be '/'); an unknown parent_path is rejected with suggested nearby paths unless neuer_ast=True explicitly opens a new branch. source is required and rejected if empty -- e.g. "erzeugt aus /pfad/datei.md (Stand 2026-08-05T23:40:00+02:00)". norm_entscheidung is REQUIRED: 'keine_norm' (plain fact, no rank), 'norm_befristet' (norm with an end date) or 'norm_unbefristet' (norm without one). Omitting it, or combining it inconsistently with norm_rang/gilt_ab/gilt_bis, is rejected -- there is no default, because a silent default would recreate the exact ambiguity this field exists to remove (was a fact really decided to be non-normative, or did nobody look?). norm_rang/gilt_ab/gilt_bis stay optional inputs, but 'norm_befristet'/'norm_unbefristet' require norm_rang and gilt_ab to end up set (either given directly, or deterministically derived from source for directive/ADR imports -- ADR-034); 'norm_befristet' additionally requires gilt_bis, 'norm_unbefristet' requires gilt_bis stay unset. gilt_ab/gilt_bis must be ISO-8601 date or timestamp; gilt_bis before gilt_ab is rejected. Example -- raw material "Sozialtarif-Zuschlag entfaellt zum 01.03.2027 vollstaendig, loest die Uebergangsregelung von 2022 ab." -> {"parent_path": "/wissensnetz-pflegeverbund", "title": "Sozialtarif-Zuschlag entfaellt 01.03.2027", "summary": "Sozialtarif-Zuschlag entfaellt zum 01.03.2027, loest Regelung von 2022 ab.", "norm_rang": 2, "gilt_ab": "2027-03-01", "norm_entscheidung": "norm_unbefristet", "norm_entschieden_grund": "Uebergangsregelung 2022 laeuft aus, Nachfolgeregel greift direkt", "source": "erzeugt aus Rohmaterial (Beispiel)"}. norm_entschieden_grund is REQUIRED whenever norm_entscheidung is given (like grund on knowledge_zurueckziehen) -- a free-text reason for the decision. Who decided (norm_entschieden_von) is resolved automatically from your caller identity, not a separate input. When a rank-1/2 directive is the source, betreiber_weisung carries the exact quote and records the operator as decision-maker. anlass records what triggered this entry: 'selbst' (you wrote it unprompted) or 'betreiber' (an explicit human instruction, e.g. "merk dir das") are SELF-REPORTED -- only as reliable as the caller. 'hook' (the enforcing Stop-hook made you call this) and 'skript' (batch/migration/harvest run, no conversation) are objective in principle, but note the Stop-hook itself never calls this tool -- it only forces you to run /learn, which then calls this normally, so 'hook' is still self-reported by that skill, not verified by the server. Default 'unbekannt' if omitted. An unknown value is rejected with the allowed list, nothing is written. If up to 3 active nodes look content-similar (checked BEFORE writing), the response includes similar_node_hint -- a hint only, never auto-merged, no rejection either.

ParametersJSON Schema
NameRequiredDescriptionDefault
kindNoKind of entry: 'arbeitsbestand' (working set, the default) or 'nachschlagewerk' (reference corpus -- may sit in the store as a distractor but is never the TARGET of a test case, see node 096669de). Set this for imported third-party material, otherwise it dilutes retrieval.arbeitsbestand
tagsNo
actorNoCalling agent identity; else BEGOD_KNOWLEDGE_ACTOR or unknown
kreisNoOptional: restrict this entry to one circle of people you belong to (BDW-E22). Empty (default) means everyone in your tenant. Set it AT CREATION -- narrowing it later already told everyone, via the hit count, that something exists.
modelNoCalling model; else BEGOD_KNOWLEDGE_MODEL or unknown
titleYes
sourceNoRequired unless abgeleitet_von is set (then it must be omitted -- the system generates it). Origin: file path, konsil ID, or research ID. Example: 'erzeugt aus /pfad/datei.md (Stand 2026-08-05T23:40:00+02:00)'
contentNoFull content (loaded only on read)
gilt_abNoOptional: ISO-8601 date/timestamp the norm takes effect
sessionNoStable session ID; else BEGOD_KNOWLEDGE_SESSION or unknown
summaryYes1-2 sentences summary (token-efficient)
gilt_bisNoOptional: ISO-8601 date/timestamp the norm expires; omit for indefinite. Must not be before gilt_ab.
occasionNoWhat triggered this entry -- selbst/betreiber self-reported, hook/skript objective in principle (see tool description). Default 'unbekannt'.unbekannt
neuer_astNoExplicitly allow creating a new top-level branch when parent_path doesn't exist yet
norm_rangNoOptional: rank of a norm (1=global directive, 2=hub directive, 3=ADR). Omit for plain facts.
project_idNoFree-form project slug (any app dir under <Verbundwurzel>/, e.g. 'fahrtenbuch', 'openlehr'), not a fixed set. Omit to derive it from a matching segment in parent_path (falls back to 'shared' if none matches); pass explicitly (including '') to override the derivation.
parent_pathYesParent node path, e.g. '/shared/arch' -- must exist
abgeleitet_vonNoOptional: id or path of an EXISTING source node. If set, source is generated by the system from the source node's kind (parent_path/norm_rang/tags, never its title/summary/content) -- giving your own source is rejected.
betreiber_weisungNoExact operator quote for a rank-1/2 instruction; at least 10 characters inside German opening and straight closing quotes.
norm_entscheidungYesREQUIRED (no default): keine_norm=plain fact/no rank, norm_befristet=norm with an end date, norm_unbefristet=norm without one. See tool description.
norm_entschieden_grundYesREQUIRED alongside norm_entscheidung: free-text reason for the decision (see tool description).

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does so thoroughly: it discloses rejection behaviors (unknown parent_path, empty source, inconsistent norm fields, unknown occasion values), confirms nothing is written on validation failure, states that similar-node hints are never auto-merged, and even flags the self-reported/unverified nature of 'hook'/'selbst' triggers. This goes far beyond what annotations could supply.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The content is dense and largely valuable, but it is delivered as one long unstructured paragraph with an embedded JSON example and a philosophical aside about why no default exists. It is front-loaded with the core purpose, but a structured format would make the many constraints easier to consume; not every sentence is strictly necessary.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 21-parameter tool with no output schema and no annotations, the description covers an exceptional amount: required fields, validation, derivation, occasion semantics, similar-node hint behavior, and an end-to-end example. It is not a 5 because the general success return value is never described (only similar_node_hint is mentioned) and the anlass/occasion naming inconsistency creates ambiguity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 90%, so the baseline is 3; the description adds meaningful cross-field semantics — the norm_entscheidung consistency rules, requirement that norm_entschieden_grund is mandatory, gilt_bis/gilt_ab ordering, and the example of a full valid payload. It loses a point because it refers to the schema's 'occasion' parameter as 'anlass', which could cause an agent to pass the wrong key.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The first sentence states a specific action and resource — adding a new knowledge node to the tree — and the rest confirms this is a creation tool. It clearly distinguishes itself from siblings like knowledge_update, knowledge_read, and knowledge_relation_add without needing their schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It clearly frames when to call it (new node creation) and specifies strong preconditions: parent_path must exist or neuer_ast must be true, source must be non-empty, and norm_entscheidung/norm_entschieden_grund are mandatory with no default. It does not explicitly name sibling alternatives, so it falls short of a 5, but the context is much stronger than mere implication.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

knowledge_anmeldenA

Redeem a one-time invitation PIN and receive your own credential. The PIN is issued by a human who is allowed to naturalise (ausweis.einladen); redeeming it is therefore the proof that a human handed it over. The secret is returned exactly once and is never logged. This is the only tool callable without a credential -- whoever is signing in does not have one yet.

ParametersJSON Schema
NameRequiredDescriptionDefault
pinYesthe one-time PIN you were given

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations present, the description carries the full burden, and it delivers richly: the PIN is one-time, issued by an authorized human, the secret is returned exactly once, it is never logged, and this is the only tool callable without a credential. These are important security-relevant behaviors well beyond any schema information.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences with no filler. The core action is front-loaded, followed by the security rationale, and the critical restriction about credential-less invocation comes last. Every sentence contributes useful, non-redundant information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter tool with no output schema and no annotations, this description is complete: it explains what the tool does, when it is usable, how the PIN is obtained, what the caller receives, and how the secret is handled. No important operational gap remains.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already covers the parameter purpose ('the one-time PIN you were given'), so the baseline is 3. The description adds meaning by clarifying that the PIN is an invitation code issued by a human, is one-time, and counts as proof of human handover, which helps the agent understand the trust semantics of the parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Redeem'), a specific resource ('one-time invitation PIN'), and the outcome ('receive your own credential'). It also distinguishes this tool by noting it is the only one callable without a credential, setting it apart from all sibling tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description is clear that this tool is for the sign-in scenario where the caller has no credential yet. It also implies a when-not-to-use condition: any other tool should not be used before this one in this state. However, it doesn't explicitly name alternatives, so it falls short of full exclusion guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

knowledge_browseA

Browse children of a knowledge tree node. Returns titles+summaries only (token-efficient). Use '/' for root.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathNoTree path to browse, e.g. '/' or '/shared/arch'/
actorNoCalling agent identity; else BEGOD_KNOWLEDGE_ACTOR or unknown
modelNoCalling model; else BEGOD_KNOWLEDGE_MODEL or unknown
sessionNoStable session ID; else BEGOD_KNOWLEDGE_SESSION or unknown
project_filterNoFilter by project (free-form slug, e.g. one of the app dirs under <Verbundwurzel>/ -- not enforced/closed)

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations present, the description carries the full burden. It does disclose that the tool returns only titles and summaries, which is a meaningful behavioral trait and implies a read-only, token-conscious operation. It does not explicitly state the absence of side effects or discuss access/auth behavior, but for a simple browse operation the disclosed behavior is reasonably transparent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two short sentences and every clause earns its place: the action, the return shape, the token-efficiency rationale, and the root-path usage hint. It is front-loaded and free of filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a low-complexity browse tool, the description covers the key operational facts: what is browsed, what is returned, and how to target the root. The absence of an output schema is partially mitigated by the explicit 'titles+summaries' return note. Minor gaps like whether children are immediate-only or recursive are not stated, but they are not essential for basic invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already documents all 5 parameters with 100% coverage, so the description needs to add little. The only added guidance, 'Use "/" for root,' largely repeats the schema default for path. The description adds no new meaning to actor, model, session, or project_filter beyond what the schema provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb ('Browse') and resource ('children of a knowledge tree node'), and further clarifies the return payload is 'titles+summaries only.' This distinguishes it from siblings like knowledge_read or knowledge_search, which presumably return full content or search results.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives a concrete usage hint ('Use "/" for root') and implies the tool is for lightweight tree navigation by mentioning token-efficiency. However, it does not explicitly state when to prefer this over knowledge_read, knowledge_search, or the other knowledge siblings, so the selection logic is left mostly to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

knowledge_freigebenA

Undo a knowledge_zurueckziehen: the node reappears in knowledge_search/recall. Restores nothing -- content/summary stay empty as they were left by the withdrawal, this only flips visibility back.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathNoFull node path -- exactly one of node_id/path required
actorNoCalling agent identity; else BEGOD_KNOWLEDGE_ACTOR or unknown
modelNoCalling model; else BEGOD_KNOWLEDGE_MODEL or unknown
node_idNoNode ID -- exactly one of node_id/path required
sessionNoStable session ID; else BEGOD_KNOWLEDGE_SESSION or unknown

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden, and it does well: it discloses that only visibility is flipped, that content/summary remain empty, and that the node reappears in search/recall. It does not cover error cases, permissions, or the exact success response, but the core side-effect profile is clearly stated.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two compact sentences, no fluff, and the most important behavioral distinction ('undo withdrawal', 'only flips visibility') is front-looed. Every clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple state-flipping operation with no annotated safety profile or output schema, the description covers purpose, expected effect, and key limitation. It leaves out a note on whether success confirmation or errors are returned, but the tool is simple enough that the provided information is nearly complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the input schema already documents every parameter including the 'exactly one of node_id/path required' constraint and the fallback values for actor/model/session. The description adds no parameter-level meaning beyond the schema, matching the baseline of 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with an explicit verb and target: 'Undo a knowledge_zurueckziehen', and names the observable effect ('the node reappears in knowledge_search/recall'). It distinguishes itself from its sibling inverse by clarifying exactly what it does and does not do, so an agent can tell it apart from knowledge_zurueckziehen and knowledge_update.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives a clear usage context: this is the inverse of knowledge_zurueckziehen, used to reverse a withdrawal. It also states when not to expect more ('Restores nothing'), preventing misuse as a content-restoration or editing tool. This is sufficient guidance relative to the sibling list.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

knowledge_modellA

Read-only: list every knowledge node and lesson written by one model (actor/session/model columns, Auftrag 2026-08-06 Nachtrag) -- isolates one model's entries to judge its quality by outcome (how often later pulled/corrected/withdrawn). Never withdraws or deletes anything itself.

ParametersJSON Schema
NameRequiredDescriptionDefault
modelYesModel name, e.g. BEGOD_KNOWLEDGE_MODEL or 'unbekannt'

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations are absent, so the description carries the full burden. It explicitly states 'Read-only' and 'Never withdraws or deletes anything itself,' which is critical behavioral disclosure. It also reveals the returned columns (actor/session/model) and the evaluation intent, adding context beyond the schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the most important facts: read-only, what is listed, and the filtering criterion. The dash-separated rationale ('isolates one model's entries to judge its quality') is useful but slightly dense with the parenthetical ticket reference. No wasted words overall.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple list tool with one required parameter and no output schema, the description conveys the operation, the purpose, and the safety guarantee. It does not mention pagination or output format, but the low complexity and self-contained scope make the description sufficient for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the single parameter 'model' is already described with examples. The tool description reinforces that the model filters the entries, but adds no new semantic detail beyond what the schema provides, so baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: 'list every knowledge node and lesson written by one model.' It also includes the key filter (model) and explicitly declares read-only behavior, which distinguishes it from mutation siblings like knowledge_update or knowledge_zurueckziehen. The parenthetical columns further clarify the output scope.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides clear context: the tool is used to isolate one model's entries and judge its quality by outcome. This implies a use case (evaluation) without naming alternative tools explicitly, but the purpose is evident enough that an agent can decide when to invoke it rather than siblings like knowledge_search or knowledge_stats.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

knowledge_readA

Read full content of a knowledge node (by ID or path), plus title+summary of its direct children (one level, not recursive) -- a branch node's own content is usually empty, the substance lives in its children. Use browse/search first to find the right node.

ParametersJSON Schema
NameRequiredDescriptionDefault
actorNoCalling agent identity; else BEGOD_KNOWLEDGE_ACTOR or unknown
modelNoCalling model; else BEGOD_KNOWLEDGE_MODEL or unknown
node_idYesNode ID or full path
sessionNoStable session ID; else BEGOD_KNOWLEDGE_SESSION or unknown

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the burden of behavioral disclosure. It reveals meaningful behavior: direct children are returned but only as title+summary, recursion is explicitly excluded, and branch nodes usually have empty own-content with substance in children. This goes well beyond the input schema, though it does not cover failure modes or response formatting details.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two compact sentences, each earning its place. The core operation is front-loaded, and the important non-recursive and branch-behavior caveats are packed efficiently into the first sentence. The usage note is a single clear directive.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description supplies enough for an agent to select and invoke safely: it explains what is returned, that traversal is one level, and that browse/search should precede this call. Since there is no output schema, the description at least narrates the return content, though it does not describe exact JSON shape or error behavior.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema fully documents parameters. The description's 'by ID or path' restates the node_id schema description rather than adding new semantics. The actor/model/session params are unchanged and add no additional parameter insight.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Read full content of a knowledge node', then clearly defines the exact scope: full content plus title+summary of direct children, one level, not recursive. It also distinguishes itself from browse/search by noting that this tool reads a known node rather than discovering one.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit guidance: 'Use browse/search first to find the right node,' which tells the agent to use discovery tools before invoking this one. It implies read is for after node discovery, but it does not explicitly spell out when to choose this tool over knowledge_update, knowledge_browse, or knowledge_search beyond that context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

knowledge_relation_addA

Create one explicit evidenced knowledge edge between existing node IDs/paths. Never infers links from tags or text; validates endpoints, scope, type, confidence, and duplicate edges.

ParametersJSON Schema
NameRequiredDescriptionDefault
actorNoCalling agent identity; else BEGOD_KNOWLEDGE_ACTOR or unknown
modelNoCalling model; else BEGOD_KNOWLEDGE_MODEL or unknown
scopeNoall or project; scoped calls permit shared + projectall
sourceNoSource artifact path/ID
weightNo
sessionNoStable session ID; else BEGOD_KNOWLEDGE_SESSION or unknown
evidenceYesWhy this edge is true; cite the decision/source
confidenceNo
source_nodeYesExisting source node ID or path
target_nodeYesExisting target node ID or path
relation_typeYes

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the disclosure burden and does well: it states the operation creates exactly one edge, requires existing endpoints, never infers links from tags/text, and validates scope, type, confidence, and duplicates. It does not cover authentication, response format, or failure behavior, but the core mutation semantics and validation constraints are disclosed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One dense sentence front-loads the primary purpose, then adds two high-value constraints without filler. Every clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a create-edge tool with no output schema, the description covers purpose, endpoint existence requirement, evidence requirement, and validation behavior, which is the core calling contract. It omits explicit return/error semantics and usage alternatives, but the parameter schema complements it well.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 73%, and the schema already describes most parameters; the description adds the important contextual point that source_node/target_node must be existing IDs or paths and that edges are explicit and evidenced. It does not name or explain all optional parameters, but the schema handles that burden.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Create') and a precise resource ('one explicit evidenced knowledge edge'), with clear scope: only existing node IDs or paths. This distinguishes it from knowledge_relation_update/remove/list and from knowledge_add, so an agent can identify it without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies its use case: add an edge between already-existing nodes when evidence is present, and never for inference-based linking. It does not explicitly name alternatives or state when not to use it, though sibling names make some of this inferable.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

knowledge_relation_listA

List only explicit knowledge edges, optionally incident to one node and filtered by relation type/scope. This is the canonical link-read path.

ParametersJSON Schema
NameRequiredDescriptionDefault
nodeNoOptional existing node ID or path
actorNoCalling agent identity; else BEGOD_KNOWLEDGE_ACTOR or unknown
modelNoCalling model; else BEGOD_KNOWLEDGE_MODEL or unknown
scopeNoall
sessionNoStable session ID; else BEGOD_KNOWLEDGE_SESSION or unknown
relation_typeNo

TDQS

A3.6/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the burden of behavioral disclosure. It states it lists only explicit knowledge edges, but does not mention pagination, ordering, default scope behavior, whether the node parameter filters incoming/outgoing edges, or what an empty result looks like. As a read-only tool, safety is implied but not stated.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the core behavior ('List only explicit knowledge edges') and then optional filters. No filler or repetition of schema details.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple list tool with optional filters and no output schema, the description is mostly complete but lacks edge-case behavior: what happens when node is invalid, whether filtering by scope is a security boundary, and what count/format is returned. Given sibling tools related to knowledge relations, a sentence about this being the read counterpart to knowledge_relation_add/update/remove would strengthen routing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema covers node, actor, model, session, relation_type with descriptions, leaving scope with only a default and no detailed semantics. The description adds the concept of filtering by relation type/scope, but scope remains underspecified beyond 'all'. With 67% schema coverage, description does not need to repeat all params, yet adds value by framing the node as optional and the operation as filtered.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description names a specific verb ('List') and resource ('explicit knowledge edges'), and further clarifies scope: optionally incident to one node, filtered by relation type/scope. However, it does not explicitly distinguish itself from sibling link-related tools like knowledge_relation_add/update/remove beyond phrasing, though 'canonical link-read path' hints at read purpose.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description says it is the 'canonical link-read path,' which implies it is the default for listing explicit knowledge edges. It does not explicitly state when to use alternatives like knowledge_search or knowledge_browse, but the 'only explicit knowledge edges' phrase helps differentiate from other read paths. Lack of explicit exclusions keeps it short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

knowledge_relation_removeA

Remove exactly one explicit edge by relation ID. Nodes are never deleted.

ParametersJSON Schema
NameRequiredDescriptionDefault
actorNoCalling agent identity; else BEGOD_KNOWLEDGE_ACTOR or unknown
modelNoCalling model; else BEGOD_KNOWLEDGE_MODEL or unknown
sessionNoStable session ID; else BEGOD_KNOWLEDGE_SESSION or unknown
relation_idYes

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the behavioral disclosure burden. It does add a meaningful guarantee—exactly one edge is removed and nodes are never deleted—but it does not mention irreversibility, error behavior for invalid IDs, idempotency, or successful response details.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences with no filler: the action and target come first, and the safety qualifier follows immediately. Every word contributes to understanding the operation and its limits.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple tool with one required parameter, the description covers the core operation and a key safety property. However, without an output schema or annotations, it leaves the agent uninformed about expected return values and failure modes, making it merely adequate rather than complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 75%, so most parameters are already described. The description confirms relation_id as the edge identifier that drives the removal, adding modest meaning beyond the schema, consistent with the high-coverage baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Remove') and a precise target ('exactly one explicit edge by relation ID'), clearly identifying the resource and operation. The added clause 'Nodes are never deleted' reinforces the scope and distinguishes it from node-level removal tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The intended use is implied: remove a relation when you know its ID. The 'Nodes are never deleted' statement gives a when-not hint, but the description does not explicitly name alternatives or conditions for choosing this over siblings like knowledge_relation_update or knowledge_update.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

knowledge_relation_updateA

Update evidence/provenance/weight/type of one explicit edge by relation ID; endpoints stay stable.

ParametersJSON Schema
NameRequiredDescriptionDefault
actorNoCalling agent identity; else BEGOD_KNOWLEDGE_ACTOR or unknown
modelNoCalling model; else BEGOD_KNOWLEDGE_MODEL or unknown
sourceNo
weightNo
sessionNoStable session ID; else BEGOD_KNOWLEDGE_SESSION or unknown
evidenceNo
confidenceNo
relation_idYes
relation_typeNo

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description must carry the behavioral burden. It does state the primary mutation effect and that endpoints are preserved, which is meaningful. It omits what happens to unspecified fields, failure behavior, permissions, or idempotency, so transparency is only partial.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single sentence that front-loads the update target and ends with a valuable constraint. Every word earns its place; there is no filler or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 9-parameter mutation tool with no annotations and no output schema, one sentence is insufficient. An agent is left without guidance on return values, failure modes, or the exact roles of several parameters, so the description is not complete enough on its own.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 33%, so the description must compensate. It gives update roles to relation_id, evidence, weight, and relation_type, and 'provenance' loosely covers actor/model/session/source. It does not clearly clarify confidence or source, so compensation is incomplete.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific action (update), a specific resource (evidence/provenance/weight/type of an edge), and a key constraint (by relation ID; endpoints stay stable). This clearly distinguishes it from knowledge_relation_add, knowledge_relation_remove, and knowledge_update without needing to open sibling schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It conveys clear context: use this when an explicit relation already exists and you have its relation_id to revise metadata, not to change endpoints. However, it does not explicitly name alternative tools such as knowledge_relation_remove or knowledge_relation_add for endpoint restructuring, so it stops short of a full 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

knowledge_selbstauskunftA

What brainlehr currently is -- every number measured at call time, never maintained: tables and triggers from sqlite_master, tools from this registry, dependencies from requirements.txt. Call this instead of relying on documentation or memory when asked what brainlehr is or can do. Added 2026-08-20 after a foreign client described brainlehr from memory: every principle right, every number wrong and all in the same direction -- a snapshot of an older, smaller system. Principles age slowly, numbers fast. What this does NOT say: whether the contents are correct. It counts what is there; whether an entry still holds is recorded on the entry itself (validity, rank, release).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral disclosure burden, and it does so well. It reveals that numbers are measured at call time and never maintained, that it counts what currently exists, and that it does not assess correctness. It also explains the historical motivation, which helps set expectations about freshness and accuracy.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core definition and includes a clear usage directive early. It is somewhat verbose due to the anecdotal backstory about the foreign client, but that narrative reinforces why live measurement beats memory and documentation. Minor redundancy keeps it from a perfect conciseness score.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter tool with no output schema, the description covers what the tool reports, when to use it, and what it does not guarantee. It stops short of describing the exact return shape or format, which is a gap given that no output schema is provided. Overall it is still sufficiently complete for an agent to decide when and why to call it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so there is nothing for the description to explain about inputs. The description still adds context about what the call-time report covers, which is the relevant semantic content. Baseline 4 is appropriate for a parameterless tool.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states that the tool reports what brainlehr currently is by measuring live sources (sqlite_master, tool registry, requirements.txt) at call time. It uses specific verbs like 'measures' and 'counts,' and it distinguishes itself from documentation- or memory-based answers. The purpose is unambiguous and distinct from the sibling knowledge tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly instructs when to use the tool: 'Call this instead of relying on documentation or memory when asked what brainlehr is or can do.' It also adds a clear when-not-to-use boundary by stating it does not verify correctness and that validity, rank, and release live on individual entries. This gives an agent actionable selection criteria.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

knowledge_sitzungA

Read-only: list every knowledge node and lesson written by one session (actor/session columns, Auftrag 2026-08-06) -- the evaluation path for isolating one writer's entries, e.g. before a human decides whether to knowledge_zurueckziehen them. Never withdraws or deletes anything itself.

ParametersJSON Schema
NameRequiredDescriptionDefault
sessionYesSession ID, e.g. BEGOD_KNOWLEDGE_SESSION or 'unbekannt'

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden and meets it well: it explicitly declares the operation is read-only, states it only lists and never mutates, and adds purposeful context about the evaluation workflow. Minor gaps remain around output shape or size, but core behavioral disclosure is solid.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loads the most important behavioral fact ('Read-only'). It packs in scope, purpose, and a key exclusion in one sentence. The parenthetical 'Auftrag 2026-08-06' is slightly opaque but does not harm overall clarity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers purpose, safe behavior, and the single parameter well. However, with no output schema, an agent is left without a sense of the response structure or whether pagination/limits apply. For a listing tool used in evaluation, this is a moderate gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the single parameter already has a clear description with examples. The tool description reinforces that 'session' identifies the writer, adding mild contextual meaning, but does not materially improve on the schema's own explanation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with 'Read-only' and states a specific action: 'list every knowledge node and lesson written by one session.' It identifies the scope (session actor/writer) and frames it as the evaluation path for isolating entries, clearly distinguishing it from write/modify tools like knowledge_update and knowledge_zurueckziehen.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly explains when to use this tool: when evaluating or isolating one writer's entries, e.g. before deciding whether to retract them. It also explicitly says the tool never withdraws or deletes. It does not explicitly name an alternative for other filtering scenarios, but the intended usage context is strong.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

knowledge_statsA

Overview statistics of the knowledge database (node counts, lesson counts, access patterns, anlass distribution). anlass_by fields split nodes_by_anlass/lessons_by_anlass into selbst/betreiber (self-reported, only as reliable as the caller) vs. hook/skript (objective) vs. unbekannt (default / entries older than the field) -- do not treat the four as equally trustworthy when reading this.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It goes beyond a simple 'get statistics' by explaining the semantics of the anlass_by split: selbst/betreiber are self-reported and only as reliable as the caller, hook/skript are objective, and unbekannt is the default for older entries. It also explicitly instructs readers not to treat the categories as equally trustworthy. It does not explicitly state read-only behavior, but the word 'statistics' strongly implies a non-mutating operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description consists of two sentences, with the core purpose front-loaded in the first sentence and the necessary trustworthiness caveat in the second. There is no filler. The second sentence is dense and somewhat convoluted with nested parentheses and slashes, but every part serves a purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with no parameters, no output schema, and no annotations, the description covers the essential return semantics: the types of statistics and the meaning of the anlass_by categories. The main omission is an explicit statement that the operation is read-only, but this is reasonably inferable from 'statistics'. The description handles the most confusing part of the output (trust levels of categories) very well.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

This tool has zero parameters, so there is no parameter ambiguity to resolve. The description adds no parameter-level details, and none are needed. The baseline of 4 for zero-parameter tools applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the tool as providing overview statistics of the knowledge database and enumerates concrete metrics: node counts, lesson counts, access patterns, and anlass distribution. This positions it as an aggregate/analytics tool, distinct in likely purpose from sibling tools like knowledge_search or lesson_query. However, it does not explicitly name alternatives or state what it is not, so sibling differentiation remains implicit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description offers no explicit guidance on when to choose this tool over siblings. It does provide a strong interpretive caveat about the anlass_by fields – warning that the four categories are not equally trustworthy – but that is guidance for reading output, not for selecting the tool. When-to-use vs. alternatives is only implied by the tool's name and aggregate framing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

knowledge_trust_scoreA

Computed (never stored) earned-trust value in [0.05, 0.95], 0.5 = no signal yet -- distinct from norm_rang (explained by a human/consilium, decides which rule wins) and from confidence (a decay clock since last confirmation). Weighs deliberate reads (strongest, nodes only), recall-log session-deduplicated injections (weak, both kinds), independent re-occurrence (weak, lessons only), and rejected write attempts (weak negative, nodes only -- the equivalent path for lessons never fires, see docstring) through a saturating tanh -- diminishing returns prevent repetition alone from inflating the score. Returns the raw input counts and an 'exists' flag alongside the score so the number is never opaque and a typo isn't indistinguishable from the neutral default.

ParametersJSON Schema
NameRequiredDescriptionDefault
refYesNode id or path, or lesson id
kindYes

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does so well: it discloses non-persistence, the saturating tanh, diminishing returns, kind-specific weighting, the never-firing lesson path, and the exists flag that distinguishes typos from neutral defaults. This is far beyond a one-line summary.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense and technically thorough rather than short, but every clause adds semantic value about weighting, range, or output disambiguation. It is front-loaded with the core definition and uses structural detail effectively, despite relying on a 'see docstring' reference.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with no output schema and no annotations, it fully specifies return contents (score, raw counts, exists flag), the neutral value, formula behavior, and edge cases. The only minor gap is explicit usage policy, but the invocation semantics and outcome are well covered.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 50%, but the description compensates by explaining how kind changes the weighted inputs (nodes-only reads and rejected writes, lessons-only re-occurrence) and how ref maps to node/lesson references. It does not formally spell out parameter semantics, but the behavior is clear enough to invoke correctly.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a concrete operation — computing a trust score — and specifies the value range, neutral default, and that it is never stored. It also explicitly distinguishes the concept from norm_rang and confidence, preventing confusion with sibling or related concepts.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives rich context about what kind-specific weights apply and what the tool returns, but it never states when to call this tool versus other knowledge tools or when not to use it. The intended use is inferable from the behavior, but no explicit usage direction or exclusions are provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

knowledge_updateA

Update an existing knowledge node (title, summary, content, tags, and/or the Normschicht fields norm_rang/gilt_ab/gilt_bis/norm_entscheidung -- see knowledge_add for their meaning). Only given fields change; norm_entscheidung is optional here (unlike knowledge_add) and only needed when the change would otherwise contradict the node's existing decision (e.g. giving a norm_unbefristet norm a gilt_bis) -- if given, norm_entschieden_grund is then REQUIRED too. When a rank-1/2 directive is the source, betreiber_weisung carries the exact quote and records the operator as decision-maker.

ParametersJSON Schema
NameRequiredDescriptionDefault
kindNoReclassify. Only changed when given -- omitting it leaves the current kind untouched.
tagsNo
actorNoCalling agent identity; else BEGOD_KNOWLEDGE_ACTOR or unknown
modelNoCalling model; else BEGOD_KNOWLEDGE_MODEL or unknown
titleNoOptional: rename the node. path stays unchanged (path is derived from the title only at knowledge_add, never retroactively).
contentNo
gilt_abNoOptional: ISO-8601 date/timestamp
node_idYesNode ID or path
sessionNoStable session ID; else BEGOD_KNOWLEDGE_SESSION or unknown
summaryNo
gilt_bisNoOptional: ISO-8601 date/timestamp; must not be before gilt_ab (existing or given)
norm_rangNoOptional: set/change the norm rank
betreiber_weisungNoExact operator quote for a rank-1/2 instruction; at least 10 characters inside German opening and straight closing quotes.
norm_entscheidungNoOptional: change the norm/fact decision (see knowledge_add). Requires norm_entschieden_grund if given.
norm_entschieden_grundNoRequired if norm_entscheidung is given: free-text reason.

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full disclosure burden, and it does reveal meaningful behavior: partial-update semantics ("Only given fields change"), the conditional requirement that norm_entschieden_grund becomes mandatory when norm_entscheidung is given, and the side effect that betreiber_weisung "records the operator as decision-maker." However, for a mutation tool it omits standard behaviors an agent needs — reversibility, response/error shape, permissions — and does not say whether updates ripple into related entities like trust scores.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The core purpose is front-loaded in the first clause and every subsequent clause carries a distinct constraint or dependency — there is no filler or repetition of the schema. It is, however, one dense run-on paragraph built on em-dashes and parentheticals, which taxes careful reading and slightly hurts scannability.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 15-parameter mutation tool with no output schema and no annotations, the description covers the convoluted norm_entscheidung conditional thoroughly, which is the highest-risk part of calling this tool. But it omits the return value, failure/validation behavior, and broader side effects, so an agent cannot predict what a successful call returns or what else changes downstream.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 80% (nearly all parameters documented, with the three bare ones being self-explanatory tags/summary/content), so the baseline is 3. The description earns the extra point by adding cross-parameter meaning: it groups the mutable field families, defines partial-update semantics, explains the gilt_bis/norm_entscheidung contradiction rule, and states the norm_entschieden_grund dependency — relationships the flat schema cannot express.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with the specific verb+resource pairing "Update an existing knowledge node" and enumerates exactly which aspects change (title, summary, content, tags, Normschicht fields). It differentiates from the sibling knowledge_add by targeting existing nodes and even cross-references knowledge_add for field meanings, so an agent can route correctly without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The update-vs-create context is clear from "existing knowledge node" and the explicit contrast "unlike knowledge_add" for norm_entscheidung. Cross-parameter when-conditions are precise, e.g. "only needed when the change would otherwise contradict the node's existing decision" with a concrete gilt_bis example. It stops short of stating exclusions (e.g., don't use this for creation) or alternatives for node-vs-relation updates, so the guidance is context-rich but not fully explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

knowledge_zurueckziehenA

Withdraw a node: clears content and summary (no backup -- the text is gone), keeps title and path, keeps the row (with grund/timestamp/actor) so nothing vanishes without a trace. The node then drops out of knowledge_search and the recall hook. Reversible via knowledge_freigeben (which restores visibility only, not the emptied text) -- unlike the permanent, human-only endgueltig_entfernen.py, which this tool cannot reach. grund is required; empty grund is rejected, nothing changed.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathNoFull node path -- exactly one of node_id/path required
actorNoCalling agent identity; else BEGOD_KNOWLEDGE_ACTOR or unknown
grundYesRequired reason for withdrawal
modelNoCalling model; else BEGOD_KNOWLEDGE_MODEL or unknown
node_idNoNode ID -- exactly one of node_id/path required
sessionNoStable session ID; else BEGOD_KNOWLEDGE_SESSION or unknown

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full behavioral burden and does so exceptionally well. It discloses that the text is irretrievably lost with no backup, that the row remains for traceability, that the node leaves search and recall, and that an empty grund causes rejection with no changes.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but every clause earns its place: core effect, audit retention, search impact, reversibility, comparison with permanent deletion, and validation behavior. It is front-loaded with the main outcome and contains no filler or redundant restatements of the tool name.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive six-parameter tool with no annotations and no output schema, this description is unusually complete. It covers what changes, what persists, what disappears, how reversal works, which alternative is unavailable, and the key validation rule, leaving no critical ambiguity for an agent invoking it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all six parameters and the node_id/path exclusivity. The description adds extra meaning by stating that grund is mandatory and that an empty grund is rejected with no changes, which is a behavioral constraint not fully captured in the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource ('Withdraw a node') and enumerates exactly what is cleared versus what is kept, making the tool's function unmistakable. It also distinguishes itself from related operations like knowledge_freigeben and the permanent endgueltig_entfernen.py, so an agent can tell it apart from sibling tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description does not literally say 'use when...' but provides strong routing context: it clarifies that this tool empties content while preserving the audit row, that knowledge_freigeben restores only visibility, and that permanent deletion is reserved for a separate human-only tool. This is sufficient practical guidance for choosing it over alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

kurator_laufA

Background cleanup agent (Hermes curator.py comparison) that ACTS, not just reports like knowledge_lint.py -- but only within the safe boundary: knowledge_zurueckziehen() (reversible visibility toggle), never endgueltig_entfernen.py (human-only, no MCP tool). Evaluates all knowledge_lint categories; 15 are report-only with a stated reason each (see _KURATOR_KATEGORIEN_OHNE_HANDLUNG), only injection_suspects at sicherheit='hart' acts, and only for kind='node' (lessons have no withdraw mechanism, only a real DELETE, so they are reported, never touched). Default is a dry run (scharf=False): nothing is written, every potential action is returned with ausgefuehrt=false. scharf=True is the explicit switch to actually withdraw matches, each with a stated grund in the audit row.

ParametersJSON Schema
NameRequiredDescriptionDefault
actorNoCalling agent identity; else BEGOD_KNOWLEDGE_ACTOR or unknown
modelNoCalling model; else BEGOD_KNOWLEDGE_MODEL or unknown
scharfNofalse (default) = dry run, true = actually withdraw matches
sessionNoStable session ID; else BEGOD_KNOWLEDGE_SESSION or unknown

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden. It clearly discloses that the default writes nothing, that scharf=True performs actual withdrawals, that actions are returned with ausgefuehrt=false in dry-run mode, that only injection_suspects at sicherheit='hart' and kind='node' are touched, and that lessons lack a withdraw mechanism. It also characterizes the action as a reversible visibility toggle, not permanent deletion.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense and long, but nearly every sentence carries a meaningful constraint: dry-run behavior, safe boundary, category handling, node-only action, and audit-row explanation. Some references such as Hermes curator.py and knowledge_lint.py add context without bloating the core semantics. It is packed rather than padded, and the most important purpose and safety frame appear first.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex tool with no output schema and no annotations, the description covers the main operational details: what is report-only, what can act, when writes happen, and what outputs are returned. It does not fully describe the audit row structure or list all 15 report-only categories, but it points to _KURATOR_KATEGORIEN_OHNE_HANDLUNG for the latter. The agent can invoke it correctly with the dry-run default and scharf switch.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is already 100%, so the baseline is 3. The description adds significant meaning for scharf by explaining that false means no writes and every potential action is returned with ausgefuehrt=false, while true means actual withdrawal with a stated grund in the audit row. It does not add actor/model/session details, but those are adequately documented in the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description identifies a specific agent role and action: a cleanup curator that ACTS via knowledge_zurueckziehen() for only injection_suspects at sicherheit='hart' and kind='node'. It explicitly distinguishes itself from knowledge_lint.py by saying it acts rather than only reports, and it names the human-only alternative endgueltig_entfernen.py. This gives a clear, differentiated purpose beyond the tool name alone.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides concrete usage context: the default is a dry run, scharf=True is the explicit switch to actually withdraw, and only certain categories/conditions are ever acted upon. It names the human-only removal alternative and explains why lessons are never acted on. It does not explicitly enumerate all when-not-to-use cases, but the safe-boundary and dry-run instructions are strong guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lesson_queryB

Query lessons learned. Filter by type, project, or status. Optional 'query' searches description/root_cause/prevention by keyword and meaning (hybrid).

ParametersJSON Schema
NameRequiredDescriptionDefault
typeNo
queryNoOptional: Stichwort-/Bedeutungssuche in description/root_cause/prevention
statusNoactive
projectNo
max_resultsNo

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

There are no annotations, so the description carries the behavioral disclosure burden. It adds useful behavior beyond the schema: the optional 'query' performs a hybrid keyword-and-meaning search across specific fields. However, it does not disclose result limiting behavior, ordering, or the fact that status defaults to 'active' (though that is visible in the schema).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two short sentences with no wasted words. The main purpose is front-loaded, followed by the filtering options and the special hybrid search behavior. Every clause adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a five-parameter query tool with no output schema and no annotations, the description covers the main filters and the hybrid search but omits max_results behavior and the response shape. The default status is provided by the schema, but the overall context is adequate yet not fully complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 20%, so the description must compensate. It explains type, project, status, and query semantics, including the hybrid search targeting description/root_cause/prevention. Only max_results is left to the schema, which is largely self-explanatory given the parameter name and default.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states a specific verb and resource: "Query lessons learned." It also lists the main filter dimensions (type, project, status), making the tool's purpose plain. It does not explicitly differentiate from sibling tools like knowledge_search, but the lesson-specific scope is evident enough.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit guidance is given for when to use this tool versus alternatives such as knowledge_search or lesson_record/lesson_update. The usage context is only implied by the verb 'Query' and the mentioned filter fields, with no exclusions or routing hints.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lesson_recordA

Record a lesson learned. Pass same_as= when this is a repeat of an already-recorded lesson: increments that lesson's occurrences, appends this description to it as a dated, capped repetition note, and creates no new row (unknown same_as id is an error, never a silent new entry). Escalates to rule at 3+ occurrences. Without same_as: increments occurrences only on an exact duplicate (same type + byte-identical description); otherwise creates a new lesson and, if an active lesson of the same type looks similar, returns it as similar_lesson_hint (a hint only — never auto-merged; re-record with same_as to merge). anlass records what triggered this entry: 'selbst' (you wrote it unprompted) or 'betreiber' (an explicit human instruction, e.g. "merk dir das") are SELF-REPORTED -- only as reliable as the caller. 'hook' and 'skript' are objective in principle, but note the enforcing Stop-hook never calls this tool itself -- it only forces you to run /learn, which then calls this normally, so 'hook' is still self-reported by that skill, not verified by the server. Default 'unbekannt' if omitted; an unknown value is rejected with the allowed list, nothing is written (applies even on a duplicate/same_as bump, where the existing row's anlass is left untouched anyway). SET beinahefehler=true FOR A NEAR MISS: something you caught and corrected BEFORE it did damage -- a wrong number you almost reported as evidence, a command you almost ran on the wrong file, a claim you almost made without checking. Record it in the same flow, do not wait for the end of the session: this class is the cheapest to learn from and the one that goes unrecorded, because a correction in the same breath feels like a work step, not a mistake. It is counted, not judged -- what gets counted is the error class and what caught it, never who made it. bemerkt_woran is then MANDATORY (what caught it); without it nothing is written.

ParametersJSON Schema
NameRequiredDescriptionDefault
typeYes
actorNoCalling agent identity; else BEGOD_KNOWLEDGE_ACTOR or unknown
kreisNoOptional: restrict this lesson to one circle of people you belong to (BDW-E22). Empty (default) means everyone in your tenant. Set it AT CREATION.
modelNoCalling model; else BEGOD_KNOWLEDGE_MODEL or unknown
same_asNoID of an existing lesson this is a repeat of, e.g. 'L-6e48a9'
sessionNoStable session ID; else BEGOD_KNOWLEDGE_SESSION or unknown
occasionNoWhat triggered this entry -- selbst/betreiber self-reported, hook/skript objective in principle (see tool description). Default 'unbekannt'.unbekannt
projectsNoAffected projects
severityNomedium
caught_byNoWhat caught the near miss -- zahl (a number/output did not match expectation, no mechanism involved), test, waechter (hook/trigger/lint), gegenprobe (deliberate counter-check), wissen (a recalled lesson/node), betreiber (a human said so), zufall (noticed by chance while reading something else). Mandatory when beinahefehler=true.
near_missNoNear miss: caught and corrected before any damage. Requires bemerkt_woran.
node_pathNoRelated knowledge node path
preventionNo
resolutionNo
root_causeNo
descriptionYes

TDQS

A4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden and does so exceptionally well. It discloses that an unknown same_as ID 'is an error, never a silent new entry,' that similar_lesson_hint is 'a hint only — never auto-merged,' and that an unknown anlass value is 'rejected with the allowed list, nothing is written.' It also reveals subtle side effects such as occurrence increments, escalation to rule at 3+, and that the Stop-hook never directly calls this tool, making 'hook' only self-reported. This level of disclosure goes far beyond what structured fields could provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single dense block of text with long run-on sentences and no section breaks or bullet points. Every sentence does carry substantive edge-case information, so there is little filler, but the lack of structure makes it harder to parse quickly. The all-caps instruction 'SET beinahefehler=true' is attention-grabbing yet clutters the flow, and the text is arguably longer than necessary for the complexity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 16-parameter tool with no annotations and no output schema, the description covers the core workflow, duplicate handling, near-miss semantics, and many error conditions. However, it does not describe the return value or output shape (e.g., what a successful response contains, how similar_lesson_hint is structured, or what the 'rule' escalation returns). The parameter-name mismatch also leaves the near-miss/caught_by flow ambiguous. The description is substantial but not fully complete for an agent to confidently invoke the tool in all cases.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description adds meaningful semantics for same_as, occasion (anlass), near_miss (beinahefehler), and caught_by (bemerkt_woran), including the byte-identical duplicate rule and the mandatory nature of caught_by for near misses. However, it systematically uses parameter names that do not exist in the input schema: 'anlass' vs. 'occasion', 'beinahefehler' vs. 'near_miss', and 'bemerkt_woran' vs. 'caught_by'. This mismatch can lead an agent to construct invocations with invalid keys, which is a serious flaw that significantly undermines the semantic value of the description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with 'Record a lesson learned,' a precise verb+resource statement that clearly identifies the tool's function. The subsequent details about same_as handling, duplicate detection, and near-miss recording make it unmistakably distinct from sibling tools like lesson_update or knowledge_add. Even though sibling tools are not named, the operational specifics fully differentiate this tool's purpose.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit conditions for when to pass same_as ('when this is a repeat of an already-recorded lesson') and for near misses ('Record it in the same flow, do not wait for the end of the session'). It also explains when same_as should not be used and how merging should be done. However, it does not explicitly compare against alternative tools like lesson_update or lesson_query, so the guidance is context-rich but lacks sibling exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lesson_updateA

Correct or delete a recorded lesson. Only given fields are changed; unmangles field-tag corruption in the same way lesson_record does. Use delete:true to remove a bad entry.

ParametersJSON Schema
NameRequiredDescriptionDefault
actorNoCalling agent identity; else BEGOD_KNOWLEDGE_ACTOR or unknown
modelNoCalling model; else BEGOD_KNOWLEDGE_MODEL or unknown
deleteNoDelete the lesson instead of updating it
statusNo
sessionNoStable session ID; else BEGOD_KNOWLEDGE_SESSION or unknown
projectsNo
severityNo
lesson_idYesLesson ID, e.g. 'L-6e48a9'
preventionNo
resolutionNo
root_causeNo
descriptionNo

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With zero annotations, the description carries the full disclosure burden and handles it well: it reveals partial-update semantics ('Only given fields are changed'), data normalization behavior ('unmangles field-tag corruption'), and the destructive delete path. It omits return shape, reversibility, and error behavior, but the highest-risk traits are disclosed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two dense sentences with zero filler: purpose first, then scoping behavior, then delete usage. Each clause earns its place and the structure is well front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 12-parameter mutation tool with no annotations and no output schema, the description covers the essential semantics (what changes, corruption handling, deletion) but leaves gaps: no return-value description, no behavior for a nonexistent lesson_id, and no statement about update reversibility.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 42%, so the description must compensate. It adds crucial semantics: partial-update means all non-lesson_id fields are optional and only provided ones take effect, and delete:true is the deletion switch. However, the undocumented enums (status, severity) and content fields (root_cause, resolution, prevention, projects) get no elaboration, though their names are self-explanatory.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names specific verbs ('Correct or delete') and a specific resource ('a recorded lesson'), adding meaning beyond the tool name. It is immediately distinguishable from sibling lesson_record (creation) and lesson_query (reading) as the mutation path.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage context ('delete a bad entry', 'Use delete:true to remove a bad entry') and ties behavior to lesson_record, but never explicitly states when to prefer this tool over knowledge_update, lesson_record, or lesson_query. No exclusions or alternative routing are given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

project_actor_boundaryA

Fail-closed local actor/project check. Remote requests are denied as a tenant/auth coverage gap.

ParametersJSON Schema
NameRequiredDescriptionDefault
actorYes
remoteNo
project_idYes
requested_projectNo

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the burden of behavioral disclosure, and it does meaningfully: 'Fail-closed' is a strong behavioral signal that the tool returns denial/negative results when the check cannot be satisfied, and 'Remote requests are denied as a tenant/auth coverage gap' explains why and how a class of inputs is treated. It does not disclose output shape, error behavior, or side effects, but for a validation/boundary check the fail-closed semantics are the most important behavior and are clearly stated.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with high information density and no filler. The fail-closed behavior is front-loaded, and the remote-request policy follows immediately. Every clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple local boundary check, the description captures the critical policy behavior but leaves important context unstated: no output schema exists, and the description does not say what the check returns or what an agent should do after a denial. Given the low schema/annotation richness and the fact that an agent must invoke this correctly among 40+ siblings, the absence of a stated return/response contract or parameter rationale makes it merely adequate rather than complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the description does not define any of the four parameters. The names 'actor' and 'project_id' are self-explanatory enough, and 'remote' plus 'requested_project' are inferable as part of a boundary check, but the description adds no explicit meaning to the parameters. With no schema descriptions and no parameter explanation in prose, the agent is left to infer the semantics of 'remote' and 'requested_project' from the tool name and the remote-denial sentence alone, which is a real gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description's first clause, "Fail-closed local actor/project check," clearly identifies the verb (checks) and resource (actor/project) and distinguishes it from likely sibling tools like 'project_boundary' by emphasizing 'local' and the fail-closed boundary behavior. The second half adds a specific policy detail (remote requests denied) that reinforces what this check is for. It does not fully spell out a distinct operation name, but it is far from vague and does differentiate from the project-commit and session-family siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description makes the intended usage context explicit: this is a local actor/project authorization or boundary check that should fail closed, and remote requests are explicitly treated as a denied 'tenant/auth coverage gap.' This tells an agent when to reach for this tool (local actor/project checks) and gives exclusion logic (remote requests are not handled here). It does not name a specific alternative sibling, but it does convey a clear when/why distinction that is sufficient for selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

project_attachB

Idempotently attach a local Git project through project_ensure and record a revision-bound lifecycle witness. It never copies source or deletes project knowledge, receipts, capsule history, or files.

ParametersJSON Schema
NameRequiredDescriptionDefault
actorYes
project_idNoStable Brainlehr project scope; defaults to repository directory name
project_rootYesAny path inside the Git project

TDQS

B3.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden, and it discloses important behaviors: idempotency, delegation through project_ensure, the recording of a lifecycle witness, and explicit non-destructive guarantees. It does not cover permissions or error conditions, but the core side-effect profile is clearly visible.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tightly written sentences with no filler. The first sentence fronts the core action and mechanism, and the second earns its place by adding safety-relevant non-destructive guarantees.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Adequate for a straightforward attach tool: an agent can infer the non-destructive, idempotent behavior and likely call it with project_root and actor. However, there is no output schema, no annotations, and no explanation of how this relates to project_ensure and project_detach, leaving lifecycle semantics under-specified.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description adds no direct parameter-level meaning. The required 'actor' is only defined by minLength in the schema and is never explained, while project_root and project_id are already documented in the schema, so the description does not compensate for the gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('attach'), identifies the resource ('a local Git project'), and adds meaningful qualifiers: idempotent, via project_ensure, and records a revision-bound lifecycle witness. It is clearly distinct from detach, but it does not explicitly differentiate itself from the sibling project_ensure, so it stops short of 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains what the tool does but gives no guidance on when to choose it over project_ensure or project_detach, and no when-not-to-use conditions. The intended operation is stated, but the alternatives are left entirely to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

project_boundaryB

Return one token-capped request boundary for plan/read/edit/build/test/commit. It never captures prompt or thinking, never stores a user profile, and treats cwd, repository and manifest alone as unknown. Explicit mode wins; only a non-empty staged tree is an automatic code signal.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNoauto
phaseNoplan
operationNo
project_rootNoOptional path; examined only for a staged-tree signal in auto mode.

TDQS

B3.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the behavioral disclosure burden. It openly states privacy-relevant behavior: it never captures prompt/thinking, never stores a user profile, and treats cwd/repository/manifest alone as unknown. It also discloses the core decision rule for automatic code detection. It does not describe side effects or error behavior, but the disclosed invariants are meaningful and specific.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact: three sentences, each adding information about the tool's purpose, privacy guarantees, and decision rule. It is front-loaded with the core purpose. Minor jargon like 'request boundary' reduces immediate readability, but there is no fluff or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has no output schema, no annotations, and low schema coverage, so the description must provide substantial context. It explains privacy guarantees and the staged-tree rule, but it omits what the returned boundary contains, what the operation parameter means, how the mode enum values differ, and what the tool should be used for in practice. This is incomplete for an agent that must call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 25%, and the description does not compensate for the missing parameter details. The enum values for mode, phase, and operation are not explained beyond the phase list in the purpose statement and the 'Explicit mode wins' rule. Only project_root receives meaningful description, both in the schema and briefly in the tool description, leaving three parameters under-documented.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action ('Return') and identifies the resource ('one token-capped request boundary') and the scope of phases it applies to (plan/read/edit/build/test/commit). It is reasonably clear, though the term 'boundary' itself is not defined and the description does not explicitly distinguish this tool from related siblings like project_actor_boundary.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description does not state when to use this tool versus alternatives, and no sibling or alternative tool is mentioned. Some usage behavior is implied through mode resolution ('Explicit mode wins; only a non-empty staged tree is an automatic code signal'), but there is no direct guidance such as 'use when...' or 'if you need X, use Y instead.'

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

project_changeA

After a verified commit, store one compact change receipt and compute the complete transitive chain of statically proven Python import consumers. Returns consumer layers only up to max_distance; deeper layers remain available for lazy loading. Import edges prove dependency, not runtime data flow. Non-Python changes are reported as uncovered and require a project-specific registered analyzer.

ParametersJSON Schema
NameRequiredDescriptionDefault
base_commitYesCommit before the verified change
max_distanceNo
project_rootYes
verificationYes
semantic_summaryYesBehavior change, or an explicit statement that behavior did not change

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden. It discloses receipt storage, transitive consumer-chain computation, max_distance truncation with lazy loading, the distinction between import dependency and runtime data flow, and the uncovered non-Python case. It does not mention failure modes or permission requirements, but the disclosed semantics are substantial.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four dense sentences with no filler; the primary purpose is front-loaded and each sentence adds distinct information about behavior, limits, semantics, and edge cases. This is appropriately concise for the tool's complexity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the core behavior, truncation and lazy loading, the meaning of import edges, and the non-Python limitation—strong coverage given no annotations and no output schema. It still leaves the exact response envelope and the verification array semantics unspecified, so a perfect score is not warranted.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 40%, so the description must compensate. It does clarify max_distance (return truncation) and implies verification via 'verified commit,' but it does not explain what verification items should contain or how project_root is used. The schema already describes base_commit and semantic_summary, so the description adds only partial parameter value.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names specific actions: storing a compact change receipt and computing the complete transitive chain of statically proven Python import consumers. This clearly distinguishes the tool from generic project or knowledge tools and gives an agent an unambiguous sense of what it does.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The precondition 'After a verified commit' gives clear context for when the tool applies, and the max_distance/lazy-loading explanation clarifies how results are scoped. It does not explicitly name sibling alternatives or state when not to use it, so it stops short of full alternative routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

project_commit_ackA

Append one signed local acknowledgement for the current staged tree. The acknowledgement binds actor, base commit, staged/untracked digest and reason; edit it again and it becomes invalid. Reason must be non-secret.

ParametersJSON Schema
NameRequiredDescriptionDefault
actorYes
signatureYes
project_rootYes
acknowledgement_reasonYes

TDQS

A3.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It meaningfully discloses that the acknowledgement binds actor, base commit, staged/untracked digest, and reason; that editing invalidates it; and that the reason must be non-secret. It does not mention permissions or return behavior, but the disclosed invalidation and secrecy rules are substantive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two compact sentences with the action front-loaded and no redundant phrasing. Every clause adds information: scope, binding semantics, invalidation behavior, and the non-secret constraint.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a four-required-parameter operation with no annotations and no output schema, the description covers core semantics well. However, it leaves gaps around usage alternatives, explicit parameter mapping, and what a successful call returns, so it is not fully complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate for the bare parameter names. It directly maps actor and acknowledgement_reason, implies signature via 'signed', and loosely ties project_root to 'current staged tree', but it does not define expected formats or the exact use of project_root and signature in the binding.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action ('Append'), a specific resource ('one signed local acknowledgement'), and a scope ('current staged tree'), so an agent can understand the core operation. It does not explicitly distinguish itself from related commit workflow siblings like project_commit_gate, which keeps it from a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no explicit guidance about when to use this tool versus alternatives such as project_commit_gate or project_change. The description implies a context ('current staged tree') and gives one content constraint ('Reason must be non-secret'), but it does not tell the agent when to choose this tool or when to avoid it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

project_commit_gateA

Read-only check of the opt-in staged-tree gate. No configured gate means no enforcement; a local hook is not a security boundary.

ParametersJSON Schema
NameRequiredDescriptionDefault
project_rootYes

TDQS

A3.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full behavioral burden, and it does so well: it states the operation is read-only, explains that the gate is opt-in, and clarifies that absence of configuration means no enforcement. It also warns that a local hook is not a security boundary, which is valuable context beyond a simple status check. It does not describe the return format or possible outcomes, but the core behavioral traits are disclosed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two short sentences with no fluff. The core purpose is front-loaded, and the second sentence adds high-value interpretive and security guidance that earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple, but there is no output schema and no annotation coverage, so the description must explain both the input expectation and the return value. It explains the gate's semantics well but omits what 'check' returns and what project_root semantically requires, leaving an agent partially underspecified.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has one required parameter, project_root, with 0% schema description coverage, so the description must compensate by explaining what value should be passed. The description does not mention project_root at all, leaving the agent to infer its meaning from the name alone. No additional semantic value is added beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies a specific action ('check') and a specific resource ('opt-in staged-tree gate'), and the 'read-only' qualifier differentiates it from mutation-style siblings like project_commit_ack and project_change. However, it does not explicitly contrast itself with any sibling tool, so it stops short of full differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies this is the tool to use when you need to determine whether the opt-in staged-tree gate is enabled, and it gives useful interpretive context about what a missing gate means. It does not explicitly state when to prefer this tool over alternatives or when not to use it, so the guidance is implied rather than explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

project_contextA

Load task context progressively and token-efficiently. First call depth=summary: it returns at most five project-scoped summaries, eight bounded Git code hits, relevant project tool references, and the mandatory next-choice contract. Use depth=relations or depth=full only with up to three node IDs selected from that same summary result. Never recursively loads a branch and never stores raw source automatically.

ParametersJSON Schema
NameRequiredDescriptionDefault
taskYesConcise task keywords used for project-scoped knowledge and bounded Git code search
depthNosummary
max_resultsNo
project_rootYesAny path inside the Git project
selected_node_idsNo
evidence_witnessesNo
selected_witness_idsNo
capability_config_hashNo

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description must carry behavioral disclosure, and it does: bounded result sizes (five summaries, eight Git hits), a precondition for deeper modes, and side-effect constraints ('never recursively loads a branch', 'never stores raw source automatically'). It could add more about return shape and error behavior, but the core safety and sequencing traits are explicit.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three dense sentences, all load-bearing, with the most important operational rule (summary-first) front-loaded. No repetition of schema or annotation content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a no-output-schema, no-annotation tool with eight parameters and high complexity, the description gives a usable high-level protocol but omits the return contract details and several advanced parameters. 'Mandatory next-choice contract' is named but not explained, and there is no output schema to fill that gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 25%, so the description must compensate. It adds real meaning for depth and selected_node_ids (summary-first contract, up to three IDs) and bounds max_results, but it leaves evidence_witnesses, selected_witness_ids, and capability_config_hash entirely unexplained, which is a significant gap at this coverage level.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a clear verb and object ('Load task context progressively') and explains what the tool returns: bounded summaries, Git hits, references, and a next-choice contract. It does not explicitly differentiate itself from sibling tools like project_boundary or knowledge_read, so it misses the full 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives strong mode-ordering guidance: first call must be depth=summary, and deeper modes are only valid with up to three selected node IDs from that same result. It also states two absolute prohibitions (no recursive branch loading, no automatic raw-source storage). It stops short of naming alternative sibling tools for when project_context should be skipped.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

project_detachA

Detach only the active local project association. Knowledge, sources, receipts, capsule history and project files remain unchanged.

ParametersJSON Schema
NameRequiredDescriptionDefault
actorYes
project_rootYesAny path inside the Git project

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the transparency burden. It explicitly discloses that the operation is scoped to the active local project association and that knowledge, sources, receipts, capsule history, and project files remain unchanged, which reduces the risk of assuming a destructive teardown. It does not detail side effects like reversibility or whether the actor association is cleared.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The entire description is one front-loaded sentence that states the action, scope, and exclusions. Every phrase adds information; there is no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter operation the description is adequate, but with no output schema and no annotations it omits the result/return behavior and does not clarify the role of actor. It also leaves prerequisites implicit (e.g., a currently attached active local project).

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 50% (project_root is described as 'Any path inside the Git project'), but the description adds no parameter-level meaning and the required actor parameter is left undefined. At this coverage level, the description should compensate, and it does not.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb ('Detach') and a specific scope ('the active local project association'), and further clarifies boundaries by listing what is left unchanged. This distinguishes it from destructive or broader project operations among the siblings, notably project_attach.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied: call it to remove the active local project association. However, there is no explicit when-to-use/when-not-to-use guidance, no mention of project_attach as the inverse, and no conditions such as 'only when a project is currently attached.'

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

project_ensureA

Idempotently adopt or initialize a Git project for Brainlehr. Creates a compact .brainlehr.json capsule from Git facts and declared entry points, plus one project knowledge root; it never copies raw source code. Existing project-scoped knowledge is adopted, not duplicated. Explicit tool references distinguish available commands from planned capabilities.

ParametersJSON Schema
NameRequiredDescriptionDefault
toolsNoProject-specific capability references to merge
project_idNoStable Brainlehr project scope; defaults to repository directory name
project_rootYesAny path inside the Git project

TDQS

A4.1/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description discloses key behaviors: idempotency ('idempotently adopt or initialize'), non-copying of source code ('never copies raw source code'), and deduplication of existing knowledge ('adopted, not duplicated'). This goes well beyond what the schema states.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four purposeful sentences, each carrying a distinct point: purpose, artifact creation and non-copying, adoption semantics, and tool-reference statuses. No filler, front-loaded with the main action, though the final sentence could arguably be merged.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with only three parameters and no output schema, the description covers purpose, side effects, and important behavioral constraints (idempotency, no source copying). Preconditions like being a Git repository are implied by 'Git project' and the project_root description. Slight gap: no explanation of what happens on first run versus subsequent runs beyond idempotency.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema already provides meaningful descriptions for all three parameters (coverage 100%), including 'Any path inside the Git project' and 'Project-specific capability references to merge'. The description adds context about Git facts and entry points but not parameter-level syntax, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The verb 'adopt or initialize' with the resource 'Git project for Brainlehr' clearly states the action and scope, and the description further specifies concrete outputs (.brainlehr.json capsule, project knowledge root). It is distinct from sibling tools like project_attach or project_boundary, so an agent can tell it apart.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit when-to-use or alternatives are named; usage must be inferred from 'adopt or initialize'. The description implies this is the setup/ensure tool for Git projects but doesn't state when to choose it over related project tools such as project_change or project_attach.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

project_runtime_evidenceB

Register one bounded, tree-hash-bound result from an available manifest evidence tool. No raw code, prompt, transcript, database write or durable receipt is accepted.

ParametersJSON Schema
NameRequiredDescriptionDefault
artifactYes
project_rootYes

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It adds useful behavioral constraints: exactly one result, bounded, tree-hash-bound, and a clear list of rejected artifact types. However, it does not disclose side effects, persistence semantics, error behavior, idempotency, or return value, which would matter for a registration-style mutation tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two dense sentences with no filler. The primary action and resource are front-loaded, and the rejection criteria are expressed compactly. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation-like registration tool with no annotations and no output schema, the description is too thin. It does not define what makes an evidence tool 'available', what qualifies as a valid bounded result, what the tool returns or does on failure, or how the tree-hash-bound format should be supplied.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the description does not directly explain 'artifact' or 'project_root'. It indirectly characterizes the artifact as a bounded, tree-hash-bound result, but an agent still lacks guidance on the expected object shape, how project_root should be formatted, or how the tree hash should be represented.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a concrete action ('Register'), a concrete resource ('tree-hash-bound result from an available manifest evidence tool'), and adds explicit exclusions ('No raw code, prompt, transcript, database write or durable receipt is accepted'). It is distinct from the sibling knowledge and project tools, though 'available manifest evidence tool' is somewhat underspecified, so it misses a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use the tool: when you have a bounded, tree-hash-bound result from a manifest evidence tool. It also provides negative guidance by listing accepted input categories, but it never names an alternative tool or explicitly states what to use for raw code, prompts, transcripts, database writes, or durable receipts.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

prompt_invarianz_planenC

Waehlt off, light oder strong fuer eine Bewertung, Rangfolge oder Entscheidung.

ParametersJSON Schema
NameRequiredDescriptionDefault
riskNo
sharedNo
securityNo
task_typeYes
data_modelNo
irreversibleNo
vendor_lock_inNo
automatic_mutationNo

TDQS

C2.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden of behavioral disclosure. It only states that a selection is made, but does not reveal what happens after the selection, whether state is mutated, what the output is, or any side effects. This is a significant gap for a tool with 8 parameters and no output schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single concise sentence that is front-loaded with the main verb. However, it is under-specified for the tool's complexity and lacks any structured detail about parameters or outputs, making it more sparse than appropriately sized.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness1/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has 8 parameters, no annotations, and no output schema, yet the description provides only a bare high-level statement. An agent cannot determine valid values for task_type, the meaning of the boolean flags, or what the tool returns, so the description is far from complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% and the description does not compensate at all. It never mentions task_type, risk, or any of the boolean parameters, leaving an agent with no semantic understanding of how to fill them. The only values mentioned (off, light, strong) do not appear in the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Waehlt' selects) and a resource (off/light/strong for evaluation, ranking, or decision), making the core action clear. However, it does not differentiate this tool from siblings like prompt_invarianz_pruefen, nor does it mention the 'planen' (planning) aspect implied by the name.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It does not mention any conditions, exclusions, or related sibling tools that might be more appropriate.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

prompt_invarianz_pruefenB

Prueft evidenzbelegte Vergleichslaeufe auf Stabilitaet und Reihenfolgeeffekte.

ParametersJSON Schema
NameRequiredDescriptionDefault
runsYes
high_riskNo
thresholdNo

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. It only states that the tool checks something, but it does not disclose whether the operation is read-only, whether it has side effects, how threshold or high_risk influence behavior, or what the output looks like. This is a significant gap for a tool with no annotation support.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, compact sentence with no filler words and the main verb placed upfront. It is efficient and easy to parse, though the lack of supporting detail limits its overall usefulness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with three parameters, no annotations, and no output schema, this description is incomplete. It does not explain how the parameters interact, what constitutes a valid run, what the stability check returns, or whether any permissions or prerequisites are needed. An agent would likely need to inspect the schema or make assumptions to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It offers some semantic signal by linking 'Vergleichslaeufe' to the 'runs' parameter and 'evidenzbelegt' to the required 'evidence' field, but it says nothing about 'high_risk' or 'threshold'. These parameters remain essentially undocumented from a behavioral standpoint.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb ('Prueft') and a specific resource ('evidenzbelegte Vergleichslaeufe'), and specifies what is being tested ('Stabilitaet und Reihenfolgeeffekte'). This clearly differentiates it from the sibling 'prompt_invarianz_planen', which is about planning rather than checking invariance.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use the tool: when evidence-backed comparison runs need to be checked for stability and order effects. However, it does not explicitly state when not to use it, nor does it name alternatives such as 'prompt_invarianz_planen', leaving the usage guidance largely implicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

session_agent_reuseB

Recommend reuse, refresh-delta or a fresh agent from compact technical checkpoint state. It never stores or reads prompts, responses, hidden thinking or transcripts, and never spawns an agent.

ParametersJSON Schema
NameRequiredDescriptionDefault
project_idYes
session_idYes
role_capabilityYes
source_revisionYes
task_fingerprintYes
independent_reviewNo

TDQS

B3.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It clearly states what the tool never does: it never stores or reads prompts, responses, hidden thinking or transcripts, and never spawns an agent. This is specific and useful. It does not disclose whether the tool mutates checkpoint state or how recommendations are delivered, but the core privacy and side-effect boundaries are well covered.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two tight sentences with no filler. The first sentence leads with the action and decision options; the second adds valuable boundary constraints. Every sentence earns its place, though the term 'refresh-delta' is assumed to be domain-known.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with six parameters, five required, no output schema, and no annotations, the description covers intent and safety but leaves critical operational gaps: parameter meanings are unexplained, and the structure of the returned recommendation is not described. An agent would struggle to construct a correct call solely from this description.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the description does not explain any of the six parameters. Some names like session_id and project_id are self-evident, but task_fingerprint, role_capability, source_revision, and independent_review are left entirely unexplained. The description fails to compensate for the lack of parameter documentation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action ('Recommend') and names the concrete decision outcomes: reuse, refresh-delta, or a fresh agent from compact technical checkpoint state. It clearly distinguishes this as a recommendation-only tool by saying it never spawns an agent, but it does not explicitly differentiate itself from the session_checkpoint_* siblings or other session-related tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the tool is used when an agent-reuse decision is needed based on checkpoint state, and the mention of 'reuse, refresh-delta or a fresh agent' covers the decision space. However, it gives no explicit guidance on when to use this tool versus checkpoint read/write tools or other sibling tools, and it provides no exclusions or prerequisites.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

session_checkpoint_lesenC

Liest einen Checkpoint und gibt optional eine deterministische Chatwechsel-Empfehlung.

ParametersJSON Schema
NameRequiredDescriptionDefault
session_idYes
current_topic_fingerprintNo

TDQS

C2.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description must carry the behavioral burden. It does convey that this is a read operation and adds a useful behavioral trait by labeling the recommendation 'deterministisch.' However, it does not describe what happens when the checkpoint is missing, what the returned recommendation contains, or how determinism is achieved.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single efficient sentence with the core action front-loaded and no filler. It is appropriately sized for a simple tool, though a short parameter or output note would make it more useful.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no annotations, no output schema, and no parameter descriptions, this tool is under-documented. An agent cannot reliably know what to pass for the optional fingerprint or what shape the returned checkpoint and chat-switch recommendation take.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the description does not mention session_id or current_topic_fingerprint. The word 'optional' hints at some optionality, but an agent cannot determine which parameter is optional or how to populate current_topic_fingerprint.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Liest einen Checkpoint') and the distinctive secondary output ('gibt optional eine deterministische Chatwechsel-Empfehlung'), so an agent can tell this is a checkpoint-read tool. It does not explicitly contrast with sibling tools, but no direct checkpoint-reading sibling appears in the list.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool versus alternatives such as prompt_invarianz_pruefen or the knowledge/project tools. The chat-switch recommendation hints at one use case, but conditions, prerequisites, and exclusions are not stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

session_checkpoint_schliessenA

Löscht den temporären Checkpoint einer beendeten Sitzung idempotent.

ParametersJSON Schema
NameRequiredDescriptionDefault
session_idYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the disclosure burden. It explicitly discloses idempotency ('idempotent'), a valuable behavioral trait meaning repeated calls are safe. It also clarifies the checkpoint is temporary, mitigating destructive concerns; however, it does not mention other side effects or return/error behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, front-loaded German sentence that states action, object, condition, and behavior with zero filler. Every word carries meaning and no unnecessary information is included.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter idempotent deletion tool, the description covers the essential information: what is deleted, under what session condition, and that it is safe to repeat. It could add return or error behavior, but given the tool's simplicity and the explicit idempotency disclosure, this is not a major gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema only gives session_id as a string with 0% description coverage. The description's phrase 'einer beendeten Sitzung' implies session_id refers to a session that has already ended, which adds some meaning. But it does not specify the ID format or its relationship to the checkpoint set/read siblings, so compensation for the schema gap is partial.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses the specific verb 'Löscht' (deletes) with a precise resource, 'den temporären Checkpoint einer beendeten Sitzung', making the operation unmistakable. This clearly distinguishes it from the sibling checkpoint tools setzen and lesen, which set or read checkpoints rather than deleting them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It states the relevant context: the checkpoint belongs to a 'beendeten Sitzung' (ended session), which tells an agent when the tool applies. It does not enumerate alternatives or exclusions, but for a simple checkpoint-deletion tool the condition is sufficient.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

session_checkpoint_setzenB

Setzt einen temporären technischen Sitzungscheckpoint ohne Freitext, Recall oder Modellaufruf.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectYes
session_idYes
context_fractionYes
topic_fingerprintYes
expected_child_idsNo
terminal_child_idsNo
active_requirement_idsNo
next_authorized_actionYes
unresolved_evidence_idsNo

TDQS

B3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the burden of behavioral disclosure. It provides some useful traits: the checkpoint is temporary and no model/recall/free-text processing occurs. But it omits side effects such as whether an existing checkpoint is overwritten, persistence behavior, or prerequisites for the session.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single compact sentence with no filler. Every clause adds value: it identifies the action, the object, the temporary nature, and what the tool does not do.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness1/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is complex: 9 parameters, 5 required, no schema descriptions, and no output schema. The description does not explain required fields, array semantics, or invocation context, leaving the agent without enough information to call the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% and the description provides no parameter-level meaning. Required fields like context_fraction, topic_fingerprint, and next_authorized_action remain completely unexplained, so the agent cannot infer what values to supply.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Setzt') and resource ('temporären technischen Sitzungscheckpoint') and clarifies scope by excluding Freitext, Recall, and Modellaufruf. It is clearly distinguishable from reading or closing checkpoints, though it does not explicitly name sibling alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The 'ohne Freitext, Recall oder Modellaufruf' clause implies this is for low-level technical state capture rather than semantic or model-driven operations. However, there is no explicit when-to-use guidance or comparison to siblings like session_checkpoint_lesen or session_checkpoint_schliessen.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 45 tool updatesv0.1.0
    • First observedannahme_entscheiden
    • First observedannahme_erfassen
    • First observedannahme_liste
    • First observededit_batch_complete
    • First observedeinrichtung_starten
    • First observedfreigabe_setzen
    • First observedkatalog_holen
    • First observedkettenerklaerung_erklaeren
    • First observedknowledge_add
    • First observedknowledge_anmelden
    • First observedknowledge_browse
    • First observedknowledge_freigeben
    • First observedknowledge_modell
    • First observedknowledge_read
    • First observedknowledge_relation_add
    • First observedknowledge_relation_list
    • First observedknowledge_relation_remove
    • First observedknowledge_relation_update
    • First observedknowledge_search
    • First observedknowledge_selbstauskunft
    • First observedknowledge_sitzung
    • First observedknowledge_stats
    • First observedknowledge_trust_score
    • First observedknowledge_update
    • First observedknowledge_zurueckziehen
    • First observedkurator_lauf
    • First observedlesson_query
    • First observedlesson_record
    • First observedlesson_update
    • First observedproject_actor_boundary
    • First observedproject_attach
    • First observedproject_boundary
    • First observedproject_change
    • First observedproject_commit_ack
    • First observedproject_commit_gate
    • First observedproject_context
    • First observedproject_detach
    • First observedproject_ensure
    • First observedproject_runtime_evidence
    • First observedprompt_invarianz_planen
    • First observedprompt_invarianz_pruefen
    • First observedsession_agent_reuse
    • First observedsession_checkpoint_lesen
    • First observedsession_checkpoint_schliessen
    • First observedsession_checkpoint_setzen

TDQS

B3.1/5.0
Disambiguation3/5

Most tools fall into recognizable domain clusters (knowledge_*, lesson_*, project_*, session_*, annahme_*), and the detailed descriptions often explicitly separate near-neighbors. However, several abstract project-lifecycle tools (project_boundary, project_actor_boundary, project_commit_gate, project_runtime_evidence, project_commit_ack, project_change) are hard to distinguish by name alone, and freigabe_setzen vs. knowledge_freigeben use overlapping 'release' vocabulary for different operations.

Naming Consistency3/5

The server uses useful prefixes like knowledge_, project_, session_, and lesson_, but mixes English verbs (knowledge_add, lesson_record) with German verbs (knowledge_zurueckziehen, session_checkpoint_setzen) and inconsistent noun/verb structures (annahme_liste, freigabe_setzen, knowledge_trust_score). The pattern is readable but not predictable enough for an agent to guess tool names reliably.

Tool Count2/5

45 tools is far above the well-scoped 3-15 range and even above the 16-25 'heavy' band. While the overall domain is broad and each tool seems specialized, the surface would be much more navigable if project lifecycle/evidence tooling and knowledge statistics/reporting were consolidated or split into separate sub-servers.

Completeness4/5

The knowledge tree, relations, lessons, assumptions, sessions, project evidence, and setup each have reasonable lifecycle coverage, including nuanced operations like withdrawal, re-release, trust scoring, and curator runs. The main gaps are minor but real: no way to update an assumption after creation, no node move/reparent operation, and no catalog removal tool.

Maintenance

ActivityActive
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    B
    maintenance
    A semantic-memory MCP server that stores text 'memories' with provenance and enables recall by meaning (vector search), keyword (FTS5), or structured filters.
    16
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    Local-first, source-grounded memory for AI agents, with citations, bitemporal history, review-gated corrections, and MCP tools for search and recall.
    3
    Apache 2.0
  • A
    license
    Not graded
    quality
    C
    maintenance
    A privacy-preserving local RAG system integrated with MCP, enabling natural language queries over ingested documents and a SQLite database through vector search and local database tools.
    MIT

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/3lehr/brainlehr'

If you have feedback or need assistance with the MCP directory API, please join our Discord server