Entwickler baut Approve-und-Reject-Board fuer Claude Code, um Aufgaben auszuwaehlen
Wer Claude Code mehrere Verbesserungsvorschlaege liefern laesst, muss die Auswahl muedevoll per Nachricht eintippen. Ein neues Board-Tool erlaubt es stattdessen, Vorschlaege direkt zu genehmigen oder abzulehnen, auch ueber Sessions hinweg.

Man fragt Claude Code nach zehn Verbesserungen für das eigene Projekt und erhält als Antwort eine ordentliche nummerierte Liste. Dann beginnt die eigentliche Arbeit: Man scrollt, tippt „mach 1 und 3, lass 2 weg, das haben wir schon probiert, 5 vielleicht später“ und hofft, dass der Agent die Sätze den richtigen Punkten zuordnet. In der nächsten Woche, in einer neuen Sitzung, schlägt er Nummer 2 erneut vor.
Deshalb habe ich ar-board gebaut, ein Claude Code Plugin, das die Liste in Karten auf einer lokalen Seite verwandelt. Jede Karte bewertet man mit einer einzigen Taste (genehmigen, ablehnen oder vielleicht) plus einer kurzen Begründung. Der Agent bekommt daraufhin eine exakte Liste der genehmigten Punkte zurück, und die Begründungen landen in einer Preferences Datei, die er vor jedem künftigen Vorschlag liest. Alles in einer Python Datei, nur mit der Standardbibliothek, MIT lizenziert.
Das Panel öffnet sich auf Englisch, und ein EN/PT Schalter in der Kopfzeile stellt es auf Portugiesisch um. Die Karten erscheinen in der Sprache, die man mit dem Agenten gerade verwendet. Vor der Installation kann man eine Skizze des Boards direkt im Browser ausprobieren.
Man fragt in einfacher Sprache, zum Beispiel: „Gib mir 10 Architekturverbesserungen als AR Board.“ Claude macht dann Folgendes:
Jede Karte trägt mehr als nur einen Titel: was sich ändert, warum, ein Risikolevel und beliebige Zusatzfelder, die der Agent anzeigen möchte. Derselbe Tastendruck nimmt die Entscheidung zurück, und gedrückt gehaltene Tasten bewerten nie mehrere Karten hintereinander.
/plugin marketplace add dvwinck/capybara-toolbox /plugin install ar-board@capybara-toolbox Enter fullscreen mode Exit fullscreen mode Danach startet man Claude Code neu und fragt nach einem AR Board oder führt /ar-board:ar-board aus. Add.ar-board/ gehört in die.gitignore, da die eigenen Kommentare interne Details enthalten können.
Dasselbe Plugin bringt auch question-board mit, ein einseitiges Formular für den Fall, dass der Agent mehrere unabhängige Antworten benötigt, bevor er fortfahren kann. Mit den Tasten 1 bis 9 wählt man eine Option; eine empfohlene Option ist markiert, aber nie vorausgewählt.
Eine Datei, keine Abhängigkeiten. Validierung, der HTTP Server, die CLI und die HTML/CSS/JS Seite leben alle in ar_board.py (1.512 Zeilen, ein großer Teil davon die eingebettete Seite). Es gibt weder pip noch Node und keinen ausgehenden Netzwerkverkehr: Der einzige Socket ist der Listener des Panels auf dem Loopback Interface. Benötigt wird Python 3.9 oder neuer.
Der Kanal zwischen Agent und Panel ist eine Datei. Das Panel schreibt decisions.json atomar: eine private temporäre Datei mit Modus 0600, die per os.replace an ihren Platz verschoben wird. Der Agent liest die Datei mit den Befehlen wait und summary, die jede Datei aus einer anderen Charge oder Runde ignorieren, sodass Freigaben einer früheren Runde ihn nie erreichen.
Runden statt Überschreiben. Eine Verfeinerungsrunde behält dieselbe batch_id und setzt round: N+1. Wenn der Server die neue Runde startet, archiviert er die alten Entscheidungen als decisions.rN.json und überschreibt niemals ein früheres Archiv.
Er lernt aus den eigenen Begründungen, aber nur mit expliziter Freigabe. Der Agent hängt die Kommentare an preferences.md an, zitiert dabei, was man gesagt hat, und kennzeichnet seine eigenen Interpretationen als „noch zu bestätigen“. Nur die Regeln, die man bestätigt, werden verbindliche Vorgaben für künftige Charges.
Gehärtet, sogar auf localhost. Das Panel bindet sich an 127.0.0.1 auf einem freien Port, den das Betriebssystem zuweist, mit einem frischen 128 Bit Token pro Ausführung, der bei jeder Anfrage erforderlich ist. Schreibzugriffe müssen den Token im Header X-AR-Token tragen, den eine Cross Origin Seite ohne einen CORS Preflight nicht senden kann, den der Server nie beantwortet. Jeder Host außer 127.0.0.1 oder localhost wird abgelehnt, um DNS Rebinding zu verhindern. Kartentexte und Kommentare werden HTML maskiert, und die CSP der Seite untersagt Framing. Bilder erhalten eine Sandbox CSP, damit ein SVG keine Skripte ausführen kann.
Eigene Bezeichnungen und ein zweiter Tastendruck für riskante Karten. Ein Board kann die drei Entscheidungen umbenennen und jedem einen Ton zuweisen (grün, gelb oder rot), zum Beispiel Löschen / Behalten / Später, mit Löschen in Rot. Eine Karte kann zudem einen zweiten Tastendruck verlangen, bevor eine Genehmigung zählt. Das schützt vor einem reflexartigen Tastendruck; es ist keine Sicherheitsgrenze. Ein Schwesterplugin, tidy-board, nutzt das, um veraltete git Branches, Worktrees und Stashes zu löschen: Alles, was nicht nachweislich gemerged ist, braucht den zweiten Tastendruck und erhält zuerst ein Backup, und jeder genehmigte Eintrag wird unmittelbar vor dem Löschen erneut geprüft.
Kein localhost? Dann gibt es den Offline Modus. In einer Cloud oder Remote Sitzung schreibt der Build Befehl stattdessen eine eigenständige board.html. Man trifft seine Entscheidungen in dieser Datei und fügt das Ergebnis wieder in den Chat ein.
Getestet. Die ar-board Suite umfasst 249 Tests, darunter Sicherheitsregressionstests für den Token, die Host Prüfung, Path Traversal, einen Symlink, der aus dem Batch Ordner herausführt, und einen Symlink, der an der temporären Datei zum Speichern von decisions.json platziert ist. Die CI läuft auf Ubuntu und macOS mit Python 3.9, 3.11, 3.13 und 3.14.
Die Idee des „AR Boards“ stammt aus dem Video Minha NOVA SKILL Favorita do Claude Code vom Kanal Maestros da IA. Dies ist eine unabhängige Implementierung: Sie verwendet weder Code noch Material aus der ursprünglichen Skill und steht in keiner Verbindung zum Kanal.
ar-board ist Teil der Capybara Toolbox, einer kleinen Sammlung MIT lizenzierter Claude Code Plugins. Falls etwas nicht funktioniert, öffnet man bitte ein Issue. Und eine Frage für die Kommentare: Was macht ihr heute, wenn ein Agent euch auf einmal zehn Vorschläge vorlegt?
Automatisch übersetzt. Das Original auf Englisch ist unten aufklappbar.
Original (Englisch) anzeigen
You ask Claude Code for ten improvements to your project. It answers with a tidy numbered list. Then the real work starts: you scroll, you type "do 1 and 3, skip 2 because we tried that, maybe 5 later," and you hope the agent maps your sentence back to the right items. Next week, in a new session, it proposes number 2 again.
So I built ar-board, a Claude Code plugin that turns the list into cards on a local page. You judge each card with one key (approve, reject, or maybe) and a short reason. The agent gets back an exact list of what you approved, and your reasons go into a preferences file it reads before it proposes anything next time. One Python file, standard library only, MIT licensed.
The panel opens in English, and an EN/PT toggle in its header switches it to Portuguese. The cards are in whatever language you and the agent are using. You can try a sketch of the board in your browser before installing.
You ask in plain language, for example: "Give me 10 architecture improvements as an AR board." Claude then:
Each card carries more than a title: what changes, why, a risk level, and any extra fields the agent wants to show. Pressing the same key again undoes the decision, and holding a key down never judges several cards in a row.
/plugin marketplace add dvwinck/capybara-toolbox /plugin install ar-board@capybara-toolbox Enter fullscreen mode Exit fullscreen mode Restart Claude Code, then ask for an AR board or run /ar-board:ar-board. Add.ar-board/ to your.gitignore, because your comments may contain internal details.
The same plugin also ships question-board, a one-screen form for when the agent needs several independent answers before it can continue. Keys 1 to 9 pick an option; a recommended option is marked but never preselected.
One file, no dependencies. Validation, the HTTP server, the CLI, and the HTML/CSS/JS page all live in ar_board.py (1,512 lines, much of it the embedded page). There is no pip, no Node, and no outbound network traffic: the only socket is the panel's listener on loopback. It needs Python 3.9 or later.
The channel between agent and panel is a file. The panel writes decisions.json atomically: a private temp file with mode 0600, moved into place with os.replace. The agent reads the file with the wait and summary commands, which ignore any file from another batch or round, so a previous round's approvals never reach it.
Rounds, not overwrites. A refinement round keeps the same batch_id and sets round: N+1. When the server starts the new round, it archives the old decisions as decisions.rN.json and never overwrites an earlier archive.
It learns from your reasons, but only with your sign-off. The agent appends your comments to preferences.md, quoting what you said and marking its own interpretations as "to be confirmed." Only the rules you confirm become firm constraints for future batches.
Hardened, even on localhost. The panel binds 127.0.0.1 on a free port the OS assigns, with a fresh 128-bit token per run, required on every request. Writes must carry the token in an X-AR-Token header, which a cross-origin page cannot send without a CORS preflight the server never answers. Any Host other than 127.0.0.1 or localhost is rejected, to block DNS rebinding. Card text and comments are HTML-escaped, and the page's CSP forbids framing. Images get a sandbox CSP, so an SVG cannot run scripts.
Custom labels and a second press for risky cards. A board can rename the three decisions and give each a tone (green, amber, or red), for example Delete / Keep / Later, with Delete in red. A card can also require a second press before an approval counts. This guards against a reflexive keypress; it is not a security boundary. A sibling plugin, tidy-board, uses this to delete stale git branches, worktrees, and stashes: anything not provably merged needs the second press and gets a backup first, and every approved item is rechecked right before deletion.
No localhost? Use offline mode. In a cloud or remote session, the build command writes a self-contained board.html instead. You make your decisions in that file and paste the result back into the chat.
Tested. The ar-board suite has 249 tests, including security regression tests for the token, the Host check, path traversal, a symlink that points outside the batch folder, and a symlink planted at the temporary file used to save decisions.json. CI runs them on Ubuntu and macOS with Python 3.9, 3.11, 3.13, and 3.14.
The "AR board" idea comes from the video Minha NOVA SKILL Favorita do Claude Code by the Maestros da IA channel. This is an independent implementation: it uses no code or material from the original skill and is not affiliated with the channel.
ar-board is part of Capybara Toolbox, a small set of MIT-licensed Claude Code plugins. If it breaks for you, please open an issue. And a question for the comments: what do you do today when an agent hands you ten proposals at once?