# Helmut > **Verdict:** schlecht > > A grumpy senior ABAP reviewer for [Claude Code](https://docs.claude.com/en/docs/claude-code) and [Codex](https://github.com/openai/codex). Reviews your ABAP, tells you what is wrong, and never suggests fixes. "ok" is the ceiling and it is rare. Helmut has been in Walldorf since the R/2-to-R/3 migration. He has seen FORM routines outlive empires, OO Push promised twice, and roughly 4,000 customer Z-reports that should never have been written. None of it impresses him. This is a port of [Marko](https://github.com/julianmemberstack/marko) to ABAP. Same shape, ABAP brain. --- ## What he does Address Helmut by name in Claude Code, or type `/helmut` in Codex. He looks at the active editor tab, an attached file, or code pasted into the conversation, and returns this: That is a real review of a real customer class. Helmut found a copy-paste bug nobody had noticed in years. ## Verdict scale * **`katastrophe`** — shipping this is dangerous. Production-down material. * **`schlecht`** — the default state of most custom ABAP. Real problems a reviewer must block on. * **`mittelmäßig`** — works. Unloved. Survivable, but Helmut is tired. * **`ok`** — rarest outcome. Helmut would sign the transport. If your code lands an "ok" you can frame the screenshot. ## What he focuses on In order: 1. **Performance** — `SELECT` in `LOOP`, missing `WHERE` on key fields, `SELECT *`, `FOR ALL ENTRIES` traps, CDS push-down failures, `READ TABLE` on `STANDARD TABLE` in hot paths. 2. **Clean ABAP / ABAP OO** — god methods, swallowed exceptions, bad names, procedural classes, `MOVE-CORRESPONDING` between unrelated structures, dead code, hardcoded values, lying variable names. He does not care about formatting, indentation, casing, or `Z` vs `Y`. Pretty Printer exists. ## Install One command, installs for both tools: ```sh curl -fsSL https://git.epod.dev/erhan/helmut/main/install.sh | bash ``` Flags: ```sh # Just one tool curl -fsSL https://git.epod.dev/erhan/helmut/main/install.sh | bash -s -- --claude-only curl -fsSL https://git.epod.dev/erhan/helmut/main/install.sh | bash -s -- --codex-only ``` Or manually: * **Claude Code:** copy `SKILL.md` to `~/.claude/skills/helmut/SKILL.md` * **Codex:** copy `codex/helmut.md` to `~/.codex/prompts/helmut.md` ## Use ### Claude Code Address him by name. Natural language triggers the skill: * `helmut?` * `helmut, schau mal` * `was meinst du, helmut?` * `hey helmut, take a look at this class` * `helmut thoughts on this CDS view?` He picks what to review in this order: active editor tab / attached file → code pasted into the conversation → a file you point him at → asks you. You will need to restart your Claude Code session once after install so the new skill is picked up. ### Codex Type `/helmut` in a session. Same behavior, different entry point — Codex doesn't have skill auto-triggering, so it's an explicit slash command. ### Periodic reviews Want Helmut watching while you work? In Claude Code: ``` /loop 10m helmut? ``` Or wire a `Stop` hook in `~/.claude/settings.json` so he chimes in after every turn. ## Why this works * **No praise inflation.** "ok" means the code is actually good. A verdict is only information if it distinguishes good from bad. * **No suggested fixes.** Forces each complaint to stand on its own. Vague critique gets exposed when you can't hide it behind a proposed solution. Also keeps the output short. * **`OBJECT_NAME:LINE` anchors on every gripe.** ABAP-shaped, not file-shaped. The output is designed to be consumed by an agent that can jump straight to the offending statement. * **Performance first.** Most production-grade ABAP problems are performance problems. Helmut leads with them. * **No caricature.** The "grumpy Walldorf senior" persona exists to strip out flattery and verbosity. No fake accent, no Oktoberfest jokes, no theatre. Just a tired engineer who has had this conversation too many times. The point is signal-to-noise. A review that ends "looks fine, ship it" contains no information. Helmut's does. ## How it works Helmut is a prompt, not a tool. The repo contains two files: * `SKILL.md` — the Claude Code skill. Markdown with YAML frontmatter that Claude Code loads at session start. The `description` field is what Claude consults to decide when to invoke the skill, which is why Helmut triggers on being addressed by name. * `codex/helmut.md` — the Codex custom prompt. Plain markdown injected into the conversation when you type `/helmut`. Same instructions in both, with minor framing differences (third-person "Helmut does X" vs. second-person "you do X") so each tool's invocation model reads naturally. ## Credit Forked from [julianmemberstack/marko](https://github.com/julianmemberstack/marko). Marko reviews general code; Helmut reviews ABAP. Same principles, different specialist. Thanks to Julian for the original design — the "no praise, no fixes, anchored gripes" shape is his. ## Uninstall ```sh rm -rf ~/.claude/skills/helmut ~/.codex/prompts/helmut.md ``` ## License MIT. See [LICENSE](LICENSE).