All plugins

de-law

German federal law, EU law and German federal court decisions for Hermes Agent: read one section or article (§ 203 StGB, Art. 6 DSGVO, Art. 50 AI Act) in the source wording with version status (Stand), gazette reference and a ready source line, search the index of federal laws, list a law's sections, and find and read published decisions of BVerfG, BGH, BVerwG, BFH, BAG, BSG and BPatG. Legal texts, not legal advice. Disclosure: sends HTTPS GET requests only to www.gesetze-im-internet.de (law folder names, the daily index, weekly abbreviation lists), www.rechtsprechung-im-internet.de (the daily index, document ids of decisions you read) and publications.europa.eu (CELEX numbers, text language, one SPARQL query per act listing its consolidated versions); section numbers and search words are not sent, because whole laws are downloaded and searched locally. Public sources, no key. Writes public legal texts and indexes (JSON with ETag, Last-Modified and fetch time; no questions, no session data) under HERMES_HOME/plugin-data/de-law/cache, capped by the cache_max_mb setting (default 200 MB). Reads only its own plugin settings. At most one request per second per host, 25 s timeout, 40 MB response cap. rechtsprechung-im-internet.de sends a tdm-reservation header; the plugin fetches its index and single decisions on request only, and case_law: false turns that source off. No hooks, no cron jobs, no background processes. Tools stay on every platform, including gateways (a guest can call them; hermes tools disables one). While the plugin is enabled, its skill adds one line to the skills index of every session.

MadeByBrain1Toolsv1.0.0Updated 13 days ago

About

German federal law, EU law and German federal court decisions for Hermes Agent: read one section or article (§ 203 StGB, Art. 6 DSGVO, Art. 50 AI Act) in the source wording with version status (Stand), gazette reference and a ready source line, search the index of federal laws, list a law's sections, and find and read published decisions of BVerfG, BGH, BVerwG, BFH, BAG, BSG and BPatG. Legal texts, not legal advice. Disclosure: sends HTTPS GET requests only to www.gesetze-im-internet.de (law folder names, the daily index, weekly abbreviation lists), www.rechtsprechung-im-internet.de (the daily index, document ids of decisions you read) and publications.europa.eu (CELEX numbers, text language, one SPARQL query per act listing its consolidated versions); section numbers and search words are not sent, because whole laws are downloaded and searched locally. Public sources, no key. Writes public legal texts and indexes (JSON with ETag, Last-Modified and fetch time; no questions, no session data) under HERMES_HOME/plugin-data/de-law/cache, capped by the cache_max_mb setting (default 200 MB). Reads only its own plugin settings. At most one request per second per host, 25 s timeout, 40 MB response cap. rechtsprechung-im-internet.de sends a tdm-reservation header; the plugin fetches its index and single decisions on request only, and case_law: false turns that source off. No hooks, no cron jobs, no background processes. Tools stay on every platform, including gateways (a guest can call them; hermes tools disables one). While the plugin is enabled, its skill adds one line to the skills index of every session.

de-law: German and EU law for Hermes Agent

de-law: German and EU law, word for word. Hermes Agent plugin

Ask Hermes for § 203 StGB, Art. 6 Abs. 1 lit. f DSGVO or Art. 50 AI Act and it reads the provision from the official source before it answers: the wording, the law's version status (Stand), the gazette reference, a link to the source page and a ready-made attribution line. It also searches the index of all German federal laws, lists the sections of a law, and finds and reads published decisions of the German federal courts.

Sources: Gesetze im Internet and Rechtsprechung im Internet (German Federal Ministry of Justice, edited by the Federal Office of Justice) and the Publications Office of the European Union (CELLAR, the data behind EUR-Lex). No API key, no account.

Legal texts, not legal advice. The plugin returns statute and court texts. It does not interpret them and does not replace a lawyer. The texts are the consolidated versions from the official databases; only the Bundesgesetzblatt and the Official Journal of the EU are legally binding.

Who it is for

  • Anyone who asks Hermes about German or EU law and wants the actual wording with a source instead of a quote from memory: founders, compliance and data protection officers, HR teams, consultants, journalists, students, and developers building on Hermes.
  • Lawyers and legal teams, as a starting point. It addresses a known weakness of AI assistants in legal work: provisions quoted from memory, wrongly or in an outdated version. It is not a complete legal research system: no commentary, no historical versions, no state law, no lower courts, and no knowledge of your own firm.

Beyond this plugin

de-law is free and stays free. If you want Hermes as part of the daily work of a firm, the next steps are not in a public plugin, because they depend on your own data and tools:

  • a private knowledge base for briefs, templates and matters, running on your own server, with a protected mode for confidential material;
  • a citation check for drafts: every § and file number is compared with the source text before a document leaves the firm;
  • connections to the systems you already use (mail, documents, calendar) and further sources, checked one by one for their terms of use.

MadeByBrain, the maintainer of this plugin, plans and builds such Hermes setups for businesses. If that is what you are looking for, get in touch through the website.

What you can ask

  • "Was steht in § 203 Abs. 1 StGB? Wortlaut mit Quelle und Stand."
  • "Zitiere § 43e Abs. 3 BRAO."
  • "Welcher Paragraph im BGB regelt das Widerrufsrecht bei Fernabsatzverträgen?"
  • "Quote Article 50(1) of the EU AI Act with the version date."
  • "Erwägungsgrund 47 DSGVO" or "Anhang III KI-VO"
  • "Was hat das Bundesverfassungsgericht in 2 BvE 5/26 entschieden? Nur Tenor."

Install

hermes plugins install MadeByBrain/hermes-de-law --enable

To install one exact version, pin the commit (the --ref option takes a full 40-character commit SHA, not a tag; every GitHub release lists its SHA):

hermes plugins install MadeByBrain/hermes-de-law --ref <commit-sha> --enable

Requires Hermes Agent v0.22.2 or newer. No Python dependencies (standard library only).

Tools

| Tool | What it does |
|---|---|
| de_law_get | One section or article in full text, optionally one paragraph (Absatz). German federal law and EU regulations and directives through the same call. |
| de_law_search | Find a law by abbreviation or title words (about 6,100 federal laws and ordinances, plus a list of well-known EU acts). |
| de_law_toc | Table of contents of one law, optionally filtered by a word in a heading or in the text, with a snippet. |
| de_case_search | Find decisions of BVerfG, BGH, BVerwG, BFH, BAG, BSG and BPatG by file number (Aktenzeichen), court and date range. |
| de_case_get | One decision: court, date, file number, ECLI, cited norms, and the parts you ask for (headnote, operative part, facts, reasons, grounds, dissent). |

Hermes lists plugin tools through Tool Search. The plugin also registers a small skill (de-law:read-law) that tells the model to use these tools before a web search and to quote the source line.

Ways to write a citation

§ 203 StGB, StGB § 203, 203 StGB, §§ 43e BRAO, § 43e Abs. 3 Satz 1 BRAO, § 203 Abs. 1 Nr. 3 StGB, Art. 1 GG, Artikel 1 GG, Art. 6 Abs. 1 lit. f DSGVO, Art. 6(1)(f) GDPR, Article 5(1)(a) of the GDPR, Erwägungsgrund 47 DSGVO, Recital 47 GDPR, Anhang III KI-VO, Annex III AI Act, Anlage 1 BRAO, § 1 des Bürgerlichen Gesetzbuchs.

A law can be named by its official abbreviation (StGB, BDSG, AO), by its title, by its folder name on Gesetze im Internet (bdsg_2018) or, for EU law, by a short name (DSGVO, GDPR, KI-VO, AI Act, DSA, DMA, NIS2, DORA, Data Act, DGA, eIDAS, MiCA, CRA, CSRD, CSDDD, Rom I, Brüssel Ia, EAA, Whistleblower-RL, ProdHaft-RL), a CELEX number (32016R0679) or its number (Verordnung (EU) 2016/679, Richtlinie (EU) 2022/2555, Regulation (EC) No 593/2008).

With Abs. the tool returns only that paragraph. Satz, Nr. and lit. are reported back as a pinpoint; the text returned is the whole paragraph that contains them.

What comes back

de_law_get for {"citation": "§ 43e Abs. 3 BRAO"} (real result of 24.10.2026, structure shortened):

{
  "ok": true,
  "jurisdiction": "DE",
  "paragraph": "3",
  "law": {"abbreviation": "BRAO", "title": "Bundesrechtsanwaltsordnung", "id": "brao",
          "enacted": "1959-08-01", "gazette": ["BGBl I 1959, 565"],
          "url": "https://www.gesetze-im-internet.de/brao/index.html"},
  "provision": {
    "citation": "§ 43e Abs. 3 BRAO",
    "id": "§ 43e",
    "title": "Inanspruchnahme von Dienstleistungen",
    "structure": ["Dritter Teil Rechte und Pflichten des Rechtsanwalts ...", "Erster Abschnitt Allgemeines"],
    "text": "(3) Der Vertrag mit dem Dienstleister bedarf der Textform. In ihm ist\n1. der Dienstleister unter Belehrung über die strafrechtlichen Folgen einer Pflichtverletzung zur Verschwiegenheit zu verpflichten,\n2. ...",
    "truncated": false
  },
  "version": {
    "status": [{"type": "Stand", "text": "Zuletzt geändert durch Art. 4 G v. 22.12.2025 I Nr. 349"}],
    "data_as_of": "2026-05-06",
    "note": "The status line (Stand) belongs to the whole law, not only to this provision."
  },
  "source": {
    "name": "Gesetze im Internet",
    "url": "https://www.gesetze-im-internet.de/brao/__43e.html",
    "data_as_of": "2026-05-06",
    "retrieved_at": "2026-10-24T16:18:06Z",
    "cache": "cached",
    "attribution": "Quelle: Gesetze im Internet (www.gesetze-im-internet.de), Bundesministerium der Justiz und für Verbraucherschutz, Redaktion Bundesamt für Justiz. Konsolidierte Fassung, Datenstand 06.05.2026, abgerufen am 24.10.2026, Auszug erstellt mit hermes-de-law. Verbindlich ist allein die im Bundesgesetzblatt verkündete Fassung."
  }
}

For EU law, version names the document read (02016R0679-20160504), consolidated_as_of, the Official Journal reference, the amending acts and corrigenda listed in the consolidated text, and its own legal notice ("Dieser Text dient lediglich zu Informationszwecken und hat keine Rechtswirkung ..."). The plugin reads the newest consolidated version whose date is not in the future. Recitals are read from the original Official Journal text, because consolidated texts leave them out.

source.cache says where the text came from: fresh (just downloaded), cached (local copy younger than max_age_hours), revalidated (the source confirmed the local copy is current), stale (the source could not be reached, so the last local copy is returned with stale: true and its date).

When something goes wrong

Tools never raise. A failure is a JSON object with ok: false, error, error_type and usually a next_step for the model.

| error_type | Example | next_step says |
|---|---|---|
| section_not_found | § 9999 BGB | do not guess a nearby number; list the law with de_law_toc |
| paragraph_not_found | § 203 Abs. 9 StGB | which paragraphs exist |
| article_not_found | Art. 120 DSGVO | how many articles the document has |
| law_not_found | BayDSG (state law) | search with other words; state law is not covered |
| ambiguous_law, ambiguous_case | a title word that fits several laws, a file number with several decisions | pick one of the listed candidates |
| not_covered | Richtlinie 2002/58/EG (no structured text) | give the user the EUR-Lex link instead |
| disabled | EU law or case law switched off in the settings | |
| bad_argument | no law, no number, a malformed date | how to call it |
| network, timeout, upstream, bad_response, too_large | source unreachable or changed | retry once, later |
| internal | a bug in the plugin | retry once, then link the source site |

Settings

Under plugins.entries.de-law.settings in config.yaml, or in the Desktop app under Settings, Plugins:

| Key | Default | Meaning |
|---|---|---|
| language | auto | Language of the attribution line: auto (the language of the text, German for German law), en, de. |
| eu_language | de | Default language for EU acts (de or en); the model can ask for the other one per call. German federal law exists in German only. |
| max_age_hours | 24 | Cached laws and indexes older than this are rechecked with the source. 0 = always recheck. |
| cache_max_mb | 200 | When the cache grows beyond this, the least recently used entries are deleted. |
| case_law | true | Allow de_case_search and de_case_get. |
| eu_law | true | Allow EU acts. |

Network, data and privacy

  • Three hosts, HTTPS only: www.gesetze-im-internet.de, www.rechtsprechung-im-internet.de, publications.europa.eu. Redirects are followed only to these hosts; a redirect to plain HTTP on the same host is upgraded to HTTPS. EUR-Lex itself is not contacted.
  • What is sent: for German law, the folder name of the law (/stgb/xml.zip), the daily index and, once a week, the alphabetical abbreviation list for one letter. The section number and your search words are not sent: the plugin downloads the whole law and picks the section locally. For EU law, the CELEX number and the language (Accept-Language: deu or eng), plus one query to the Publications Office SPARQL endpoint that lists the consolidated versions of that act. For case law, the daily index and the document id of the decision you read. Search and table-of-contents filtering run locally.
  • What is stored: public legal texts and indexes, as JSON, under <HERMES_HOME>/plugin-data/de-law/cache/ (with ETag and Last-Modified for cheap rechecks). No questions, no session data, no user data. The cache is capped by cache_max_mb; delete the folder at any time.
  • What is read: only the plugin's own settings, through Hermes's plugin settings API.
  • No credentials, no hooks, no cron jobs, no background processes, no shell commands, no telemetry, no self-updates. Python's urllib honours the system proxy settings (HTTPS_PROXY).
  • Gentle on public servers: at most one request per second per host, each with a 25-second socket timeout and a response cap (40 MB; 80 MB for the unpacked case-law index, which is about 23 MB). A cold de_law_get makes up to three requests for German law and up to four for EU law; a warm one makes none.
  • Tools on every platform: the five tools are available wherever the plugin is enabled, including messaging gateways (a guest a gateway admits can call them; hermes tools disables them per platform). While the plugin is enabled, its skill adds one line to the skills index of every session.

Sources, terms and attribution

  • German federal law comes from Gesetze im Internet (publisher: German Federal Ministry of Justice and Consumer Protection; editor: Federal Office of Justice). Its notes page offers the XML downloads for automated processing and explicitly allows deep links. Statutes are official works without copyright under § 5 of the German Copyright Act. The texts are consolidated by the Federal Office of Justice; the binding version is the one promulgated in the Bundesgesetzblatt. Every result carries a source line with the data date.
  • Court decisions come from Rechtsprechung im Internet (same publisher and editor). Its notes page offers the XML for automated processing; decisions are official works under § 5 of the German Copyright Act, and the decision documents checked carry accessRights: public. The server sends the HTTP header tdm-reservation: 1 (a text and data mining reservation) on every response. This plugin fetches the index and single decisions on request only and does not mine or bulk-download the collection. Turn case law off with case_law: false if your use requires it.
  • EU law comes from the Publications Office of the European Union. Its copyright notice licenses EU-owned content under CC BY 4.0: acknowledge the source and indicate changes. Every result names the source, the license, the document (CELEX) and that the plugin extracted the article and converted it to plain text (consolidation markers such as ►M1 are removed). Consolidated texts have no legal effect; only the Official Journal is authentic.

Limitations

  • Coverage: German federal law only. State law (Landesrecht), administrative regulations, the EU treaties (TEU, TFEU, Charter) and EU acts without ELI-structured text (many acts from before about 2013, for example Directive 2002/58/EC) are not covered; the tool says so and gives the EUR-Lex link.
  • Version: the current consolidated text only. No historical versions, no pending amendments. The Stand line applies to the whole law; a later amendment that is not yet in force is not shown.
  • Pinpoints: Satz, Nr. and lit. are not cut out; the whole paragraph is returned.
  • Tables inside a provision are flattened to one line per row with | between cells.
  • Case law: only what the federal government publishes on Rechtsprechung im Internet (about 85,000 decisions on 24.10.2026). Lower courts are not included. Searching is by file number, court and date, not by full text.
  • Gesetze im Internet sometimes lists a provision with its heading only; then text is empty and a note says so. Repealed provisions (weggefallen) are reported as repealed: true.
  • If a source changes its format, the plugin returns an error rather than wrong text; the fix is a new release.

Development

python -m unittest discover -s tests -v     # 35 offline tests, no network
hermes plugins validate . --install-deps     # the check the Hermes plugin catalog runs

The offline tests use small fixtures in the sources' formats (zipped at run time, no binary files in the repo) and a fake transport; they cover citation parsing, XML and XHTML conversion, cache states (fresh, cached, revalidated, stale), host allowlist and redirects, size caps, settings, error paths and that the registered tools match plugin.yaml.

How this was checked

On 24.10.2026, Hermes Agent v0.22.2 (CLI), Python 3.11, in an isolated HERMES_HOME with google/gemini-3.7-flash via OpenRouter: real questions about § 203 StGB, § 312g BGB, § 43e BRAO, Art. 6 DSGVO, Art. 50 AI Act (English) and BVerfG 2 BvE 5/26 were answered from the tool results with source line and version; a state law question returned law_not_found; § 9999 BGB returned section_not_found. Every CELEX number in the EU list was checked against the Publications Office (title and structured text). Not tested live: WebUI, Desktop app, messaging gateways (same tool code path, but untested), other models.

Auf Deutsch

de-law holt Paragraphen und Artikel aus den offiziellen Datenbanken: Bundesrecht von Gesetze im Internet, Entscheidungen der Bundesgerichte von Rechtsprechung im Internet, EU-Recht vom Amt für Veröffentlichungen der EU. Jede Antwort enthält Wortlaut, Stand, Fundstelle, Link und eine fertige Quellenzeile. Paragraph und Suchbegriffe verlassen den Rechner nicht, weil das Plugin das ganze Gesetz lädt und lokal zwischenspeichert. Das Plugin liefert Gesetzestexte, keine Rechtsberatung. Verbindlich sind nur Bundesgesetzblatt und Amtsblatt der EU.

License

MIT. See LICENSE. Built by MadeByBrain.

README from the reviewed commit 4be88cd; it updates when the author re-pins.

More by MadeByBrain

4 plugins by MadeByBrain in the catalog.

MadeByBrainchat-lengthTells the user when a chat is getting too long and hands them a short opener for a fresh chat; the new chat pulls the earlier context itself via session_search, no handover document. Fill level from real provider token counts, measured against Hermes' compaction point by default; notices at 70 % and 90 % (configurable), once each per chat, re-armed after compaction, never in cron, subagent, kanban, batch or webhook runs. Notice in the conversation language, English or German. Disclosure — on the turn that crosses a threshold, pre_llm_call adds a one-turn instruction to that turn's user message (never the system prompt; replayed byte-identical, so prompt caching stays intact); post_api_request stores per-session token counts, model and provider name and which notice fired (no message content) under HERMES_HOME/plugin-data/chat-length/, pruned after 30 days; reads the session title read-only from state.db and the compression settings read-only from config.yaml; no network calls, no tools, no dependencies.Communitytools1MadeByBrainprivacy-xrayWhere does your data actually go? Records every outgoing model request, the main loop and side tasks such as title generation, compression and vision, as metadata only: destination host, vendor, vendor HQ country, the model vendor behind aggregators such as OpenRouter (read from the model id; the final processing vendor behind an aggregator is not visible), size and counts of detected personal data types (e-mail, IBAN, payment card, phone, IPv4, German Steuer-ID and USt-IdNr, own watch terms). /xray canary invents a fictitious person and /xray trace shows every request and local store that carried it. /xray check audits the config with a severity and the exact hermes config set fix per path; /xray fix <id> --yes applies one; a session retention hint is advice only and is never applied. /xray fix --yes and /xray find run only on local surfaces (CLI, TUI, desktop, dashboard) unless allow_sensitive_on_gateways is turned on. /xray find searches the local stores for a person, /xray report writes a self-contained HTML leak map (no scripts, no external assets) with a before and after view of two canaries; a dashboard tab shows the same page in a sandboxed frame. Not legal advice and not a compliance certificate. Disclosure: no network calls, no model calls, standard library only. pre_api_request and pre_auxiliary_call are observers; they write one metadata line per request (time, session and turn id, task, provider, model, host, vendor, counts, canary id and message fields; never message text or matched values) to HERMES_HOME/plugin-data/privacy-xray/ledger.jsonl (rotated once at ledger_max_mb, default 5 MB). The llm_request middleware is off by default (guard: false); when turned on it masks canary values and watch terms in main model requests before they are sent. Reads the merged Hermes config through load_config_readonly. /xray trace, /xray find and /xray check read outside the plugin's own data, read-only and under a time budget (scan_seconds, default 30): state.db (messages, session titles, stored system prompts, delivery queue), session files including request dumps, memories, logs, cron output, other plugins' plugin-data, paste and pending folders; output shows counts and masked snippets only. Writes config only on /xray fix <id> --yes, through hermes_cli.config.set_config_value (same code as hermes config set); never deletes files. Stores fake canary persons, last check and trace results and requested HTML or Markdown/JSON reports under its plugin-data folder. Registers the tool privacy_xray (map, check, trace, find; read-only, never changes settings), the slash command /xray and a skill that adds one line to the skills index of every session while the plugin is enabled. No credentials, no shell commands, no cron jobs, no background processes, no telemetry.CommunitytoolsMadeByBrainwriting-guardStyle check for every Hermes answer in German and English: finds em and en dashes outside code, links and quotes (optionally replaces them by rule: ranges and list bullets become hyphens, dashes between words a comma), reports stock AI phrases (German and English) and mixed or switched forms of address (du/Sie) in German. Reports by default with one line appended to the answer; rule based, no model calls. Disclosure — no network calls and no model calls. A transform_llm_output hook reads the final answer of each turn; in report mode it appends one report line when there is a finding, in fix mode it also replaces dashes, with footer: false it never changes the answer; the returned text is what Hermes stores and shows. Stores per chat session id only the last form of address (du or sie) and a timestamp in HERMES_HOME/plugin-data/writing-guard/sessions.json (30 days, at most 2000 sessions); the last report with matched phrases stays in process memory only. Reads only its own plugin settings. Off on cron, subagent, kanban, batch and webhook by default. Registers the tool writing_guard_check (checks a draft, returns JSON), the slash command /writing-guard (settings, last report, check a text) and a skill that adds one line to the skills index of every session while the plugin is enabled.Communitytools