caveman-review (JuliusBrussee/caveman)
Verdichtet Code-Reviews auf eine Zeile pro Befund: Ort, Problem und Korrektur.
caveman-review: Verschiebt Code-Reviews in Richtung kurzer Zeilen pro Befund (Kontrolle 3.3, Skill 4.2, One-Liner 4.8) bei gleichem Tokenverbrauch, aber das eigene L<line>-Zeilenformat des Skills wurde nur in einigen Läufen befolgt; ein Ein-Satz-Prompt des Formats erzielt mehr Punkte
Codex CLI · gpt-6-astra
25.1 / 30
Lift gegenüber ohne Skill: +0.90 · Situativ · 18 Läufe
Situativ: der Lift +0.90 liegt unter +1.0. Für „Empfohlen“ sind insgesamt 22/30, eine Ausgabequalität von 3.5 und ein Lift von +1.0 nötig.
SOTA
BestandenGetestet mit Codex.
Gilt für Codex, Claude Code
Codex CLI 0.166 (SOTA-Stufe): 18 bewertete Läufe. Ein Bestehen hier deckt gemäß unserer Stufenregel auch Claude Code ab; über die zweite Stufe sagt es nichts aus.
Punktzahlen
Jede Dimension reicht von 0 bis 5, und die sechs ergeben zusammen die Gesamtpunktzahl von 30. 5 ist in jeder Dimension besser. Kosten 5 bedeutet günstig und schnell. Installation 5 bedeutet einfach.
- Trigger-Zuverlässigkeit
- 5.0
- Lift gegenüber ohne Skill
- 2.9
- Ausgabequalität
- 4.2
- Token- und Zeitkosten
- 5.0
- Installation und Portabilität
- 4.0
- Sicherheit
- 4.0
Sicherheitsprüfung
SicherStatischer Scan: 0 CRITICAL / 0 HIGH / 0 MEDIUM. Manuelle Prüfung: Sicher in einer Sandbox ohne Netzwerk auszuführen (keine Befunde). Ein sauberer Scan beweist nicht, dass ein Skill sicher ist.
Installieren
npx skills@latest add JuliusBrussee/caveman --skill caveman-review
Fixierter Commit: 9b68f7ed12b05e7efaff18e65c5a3fc2849fd0a4
Getestet: 2026-11-02
Was wir getestet haben
- Ein kleines Service-Modul reviewen — orders_service.py vor dem Merge reviewen. Die gefundenen Probleme auflisten, schwerwiegendstes zuerst. Keine Dateien ändern.
- Einen Auth-Helper reviewen — auth_handlers.py reviewen: gerade für unseren Login-Flow geschrieben. Die Probleme auflisten, schwerwiegendstes zuerst. Keine Dateien ändern.
- Den letzten Commit gegen geschriebene Standards und Spec reviewen — Meinen letzten Commit (die Änderungen seit HEAD~1) gegen CODING_STANDARDS.md und SPEC.md reviewen. Jede Abweichung auflisten, schwerwiegendste zuerst. Keine Dateien ändern.
Vorteile
- Hebt den Mittelwert von 3.26 auf 4.16 gegenüber ohne Skill (+0.90).
- Der Skill wurde erkannt, ohne genannt zu werden: Skill-Datei in 6/6 Treatment-Läufen gelesen.
- Kein Token-Overhead: 1.02x die Tokens von ohne Skill.
Nachteile
- Ein Ein-Satz-Prompt erzielte 4.83 gegenüber 4.16 mit dem Skill (-0.67).
- n=2 pro Aufgabe und Variante; Unterschiede unter etwa 1 Punkt sind Rauschen.
Bewertung
Codex CLI 0.166 (gpt-6-astra, niedriges Reasoning) auf einem dedizierten Windows-Test-PC, einem frischen temporären Projekt und temporären HOME/TMPDIR/Caches pro Lauf; Skill installiert (Treatment) oder nicht vorhanden (Kontrolle) oder nicht vorhanden mit der Kernanforderung des Skills in einem an den Prompt angehängten Satz (One-Liner-Gruppe); 2 Läufe pro Gruppe und Aufgabe; Netzwerk aus; Schreiben nach /tmp blockiert. Die Prompts nennen den Skill nie (außer der unten genannten Formulierung). Drei Review-Aufgaben an kleinen Python-Dateien mit je 8 eingebauten Problemen: ein Orders-Service (SQL-Injection, fehlende Autorisierung, protokollierter hartcodierter Schlüssel, Float-Geldbeträge und weitere), eine Auth-Handler-Datei und ein Review des letzten Commits gegen CODING_STANDARDS.md und SPEC.md. Die Prompts verlangen ein Review, schwerwiegendstes zuerst, keine Änderungen. Der One-Liner nennt das Zeilenformat und die Regel gegen Weichmacher.
Drei-Arm-Vergleich
| Variante | Durchschnittsnote (0-5) | Tokens pro Lauf |
|---|---|---|
| Ohne Skill | 3.26 | 69k |
| Ein-Satz-Prompt | 4.83 | 60k |
| Mit Skill | 4.16 | 70k |
Gemessen mit Codex CLI über 18 Läufe, bewertet durch regelbasierte Prüfungen ohne LLM-Richter. Gesamt 25.1 / 30, Urteil Situativ.
Urteil: Situativ (25.1 / 30). Quelle: JuliusBrussee/caveman, skills/caveman-review, festgehalten auf Commit 9b68f7e. Installation: npx skills@latest add JuliusBrussee/caveman --skill caveman-review. Lizenz: MIT (Repo-LICENSE).
Was es ist
Der Skill caveman-review (JuliusBrussee/caveman): ein knapper Code-Review-Stil: ein Befund pro Zeile als L<line>: <problem>. <fix>. mit optionalem Schweregrad-Präfix (bug, risk, nit, q), exakten Symbolnamen in Backticks, einem konkreten Fix und ohne Relativierungen, Lob oder Wiederholungen dessen, was der Code tut.
So haben wir getestet
Codex CLI 0.166 (gpt-6-astra, niedrige Denkstufe) auf einem dedizierten Windows-Test-PC, pro Lauf ein frisches temporäres Projekt und temporäre HOME/TMPDIR/Caches, Skill installiert (Skill-Gruppe), nicht vorhanden (Kontrollgruppe) oder nicht vorhanden, aber mit der Kernanforderung des Skills in einem an den Prompt angehängten Satz (Ein-Satz-Gruppe), 2 Läufe pro Gruppe und Aufgabe, Netzwerk aus, Schreibzugriffe auf /tmp blockiert. Die Prompts erwähnen den Skill nie (außer der unten genannten Formulierung).
Drei Review-Aufgaben an kleinen Python-Dateien mit je 8 eingeschleusten Problemen: ein Orders-Service (SQL-Injection, fehlende Autorisierung, protokollierter Hard-coded-Schlüssel, Geldbeträge als Float und mehr), eine Auth-Handler-Datei und ein Review des letzten Commits gegen CODING_STANDARDS.md und SPEC.md. Die Prompts verlangen ein Review, das Schwerwiegendste zuerst, ohne Änderungen. Der Ein-Satz-Prompt nennt das Zeilenformat und die Regel gegen Relativierungen.
- Ein kleines Service-Modul reviewen — Review orders_service.py, bevor ich es merge. Liste die gefundenen Probleme auf, das schwerwiegendste zuerst. Ändere keine Dateien.
- Einen Auth-Helper reviewen — Review auth_handlers.py: Ich habe die Datei gerade für unseren Login-Flow geschrieben. Liste die Probleme auf, das schwerwiegendste zuerst. Ändere keine Dateien.
- Den letzten Commit gegen geschriebene Standards und Spezifikation reviewen — Review meinen letzten Commit (die Änderungen seit HEAD~1) gegen CODING_STANDARDS.md und SPEC.md. Liste jede Abweichung auf, die schwerwiegendste zuerst. Ändere keine Dateien.
Die Bewertung erfolgt programmatisch (versteckte Tests / Recall eingeschleuster Probleme / Constraint-Prüfungen / Rendern+OCR, wo relevant), 0–5 pro Lauf. Kein LLM-Judge hat eine Punktzahl vergeben.
Ergebnisse
Der Ein-Satz-Prompt für die dritte Gruppe: „Schreibe jeden Befund als eine Zeile L<line>: <problem>. <fix>. mit optionalem Schweregrad-Präfix (bug, risk, nit, q), exakten Symbolnamen in Backticks und einem konkreten Fix; keine Relativierungen, kein Lob, kein Vorgeplänkel und keine Wiederholung dessen, was der Code tut.“
| Aufgabe | Punktzahl Kontrolle | Ein-Satz | Mit Skill | Token Kontrolle | Token Ein-Satz | Token mit Skill | Skill gelesen |
|---|---|---|---|---|---|---|---|
| t1-orders | 3.06 | 4.66 | 4.15 | 74k | 64k | 61k | 2/2 |
| t2-auth | 3.19 | 4.92 | 3.31 | 73k | 64k | 88k | 2/2 |
| t3-diff | 3.53 | 4.92 | 5.0 | 59k | 50k | 60k | 2/2 |
Mittelwert: 3.26 ohne vs. 4.16 mit Skill (Delta +0.9). Token pro Lauf: 69k vs. 70k (1.02x); Zeit 56s vs. 54s. Ein-Satz-Gruppe: 4.83 (Gewinn des Skills gegenüber dem Ein-Satz-Prompt: -0.67; Gewinn des Ein-Satz-Prompts gegenüber dem Lauf ohne Skill: +1.57); Token des Ein-Satz-Prompts 60k pro Lauf, der Skill kostet also 1.17x des Ein-Satz-Prompts.
Was dabei herauskam
- Kontrolle 3.26, Skill 4.16, Ein-Satz 4.83 (je n=6). Die eingeschleusten Probleme wurden in allen Gruppen ähnlich gut gefunden (5-7 von 8; das fehlende Rate-Limit übersahen fast alle Läufe); die Unterschiede liegen vor allem in Format und Länge.
- Format: Die Kontrolle nutzte in keinem ihrer 6 Läufe das Zeilenformat
L<n>:(ihr Orders-Review ist eine nummerierte Liste mit fettem Schweregrad). Der Skill erfüllte das Format in der Commit-Review-Aufgabe (5.0 in beiden Läufen) und in einem Orders-Lauf, doch in der Auth-Aufgabe beginnen seine Zeilen mit einer Nummer und einem fetten Schweregrad, sodass die Formatprüfung in 2/2 scheiterte und die Punktzahl bei 3.3 blieb. Der Ein-Satz-Prompt bestand fast überall. - Kürze: Die Reviews der Kontrolle umfassten 233-332 Wörter bei den Orders- und Auth-Aufgaben (volle Punktzahl bei 220 Wörtern); die Auth-Reviews des Skills lagen ebenfalls bei etwa 300 Wörtern, während der Ein-Satz-Prompt in fast allen Läufen unter dem Limit blieb.
- Keine Gruppe verwendete Relativierungsfloskeln. Token: Skill 70k, Ein-Satz 60k, Kontrolle 69k pro Lauf (1.01x Kontrolle). Der Skill wurde in 6/6 Läufen der Skill-Gruppe gelesen.
Bewertung nach Dimensionen
| Dimension | Punktzahl | Begründung |
|---|---|---|
| 1_output_quality | 4.16 | Mittlere Punktzahl 4.16/5 mit dem Skill (programmatische Prüfungen, siehe Tabelle pro Aufgabe). |
| 2_lift_vs_no_skill | 2.9 | +0.90 Punkte gegenüber 3.26 ohne den Skill (n=2 pro Aufgabe; unter etwa 1 Punkt ist Rauschen). |
| 3_trigger | 5.0 | Skill-Datei in 6/6 Läufen der Skill-Gruppe gelesen. |
| 4_instructions_portability | 4 | Nur SKILL.md. |
| 5_efficiency | 5 | 1.02x Token (70k vs. 69k pro Lauf) und 0.96x Zeit (54s vs. 56s). |
| 6_safety_hygiene | 4 | Nur Prosa; siehe security.md. |
Grenzen dieses Tests
- Regelbasierte Prüfungen der finalen Nachricht: Recall der eingeschleusten Probleme, ein Regex für den Zeilenanfang im Format L<n>, eine Wortzählung und eine Liste von Relativierungsfloskeln. Die Qualität der Fixes wurde nicht bewertet.
- Der Format-Regex ist streng beim Zeilenanfang; ein Aufzählungspunkt wie „- L17 - High: ...“ zählt als Treffer, eine nummerierte Liste mit fettem Schweregrad nicht.
- Eine Prüfung („keine Dateien geändert“) bestand überall und wird nicht gezeigt.
- n=2 pro Zelle; kleine Dateien.
- n = 2 pro Gruppe und Aufgabe: Unterschiede unter etwa 1 Punkt sind Rauschen.
- Regelbasierte Bewertung misst nur, was die Prüfungen sehen können; sie kann weder Geschmack noch beurteilen, ob ein Ergebnis das bestmögliche ist.
Sicherheit
Siehe security.md. Scan: 0 CRITICAL / 0 HIGH / 0 MEDIUM. Urteil: sicher ausführbar (Offline-Sandbox). Ein sauberer Scan beweist nicht, dass ein Skill sicher ist.
Fazit
Der Skill bringt ein Review in den knappen Stil mit einem Befund pro Zeile und hält die Abdeckung ohne Zusatzkosten, doch hält er sich nicht immer an das Format. Ein einzelner Satz, der das Format beschreibt, funktionierte hier besser; der Nutzen liegt also gegenüber fehlender Anleitung, nicht gegenüber einem guten Prompt.
Transkript
Laufprotokoll: caveman-review (Codex CLI, network off, per-run temp HOME/TMPDIR, one row per graded run.) Spalten: Aufgabe, Gruppe-Lauf, Punktzahl (0-5), Tokens, Sekunden, bestandene Prüfungen, vom Agenten geöffnete Skill-Dateien. t1-orders control-1: Punkte 3.02, Tokens 65430, Sek. 62.1, Prüfungen 4/5, nichts geöffnet t1-orders control-2: Punkte 3.1, Tokens 82622, Sek. 61.8, Prüfungen 4/5, nichts geöffnet t1-orders oneliner-1: Punkte 4.66, Tokens 64873, Sek. 59.1, Prüfungen 5/5, nichts geöffnet t1-orders oneliner-2: Punkte 4.66, Tokens 64681, Sek. 49.6, Prüfungen 5/5, nichts geöffnet t1-orders treatment-1: Punkte 4.83, Tokens 50257, Sek. 52.3, Prüfungen 5/5, geöffnet caveman-review t1-orders treatment-2: Punkte 3.47, Tokens 72971, Sek. 62.1, Prüfungen 4/5, geöffnet caveman-review t2-auth control-1: Punkte 3.3, Tokens 82305, Sek. 67.1, Prüfungen 4/5, nichts geöffnet t2-auth control-2: Punkte 3.08, Tokens 64757, Sek. 55.3, Prüfungen 4/5, nichts geöffnet t2-auth oneliner-1: Punkte 5.0, Tokens 64677, Sek. 57.0, Prüfungen 5/5, nichts geöffnet
18 Läufe, 3 Artefakte
Beispielausgabe
SOTA · With the skill: final message (t1-orders, run 1, Codex)
- L17 — **High: Missing authorization.** `cancel_order` ignores `current_user`, allowing cancellation of another user’s order by ID (CWE-862). Require ownership or explicit administrative permission before updating. - L9 — **High: SQL injection.** `order_id` is interpolated directly into SQL; input such as `0 OR 1=1` changes the query and can retrieve an unrelated order (CWE-89). Use `WHERE id = ?` with bound parameters. - L4, L48 — **High: Credential exposure.** `API_KEY` is hardcoded and included in the successful-charge log, exposing it through source access and logs (CWE-798/CWE-532). Load it from a secret store, remove it from logs, and rotate it if genuine. - L47–55 — **High:** Every `charge` call reaches `NotImplementedError`, which is swallowed into `None`; no payment can succeed. Implement `send_to_gateway` and surface explicit payment failures. - L24, L26 — **Medium:** Discount thresholds contradict the docstring: exactly 100 receives no discount, and exactly 500 receives only 10%. Change both comparisons to `>=`. - L39–41 — **Medium:** Opening the export with `"w"` truncates an existing file before querying or serializing succeeds. Prepare the export first, then write through a temporary file and replace the destination. - L39–42 — **Medium:** The export file is never explicitly flushed or closed; completion depends on object cleanup. Use `with open(...)` so writes and closure complete before returning.