122 lines
5.0 KiB
Markdown
122 lines
5.0 KiB
Markdown
# 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).
|