Zum Inhalt springen
niclasedge.github.io

Automationopenspecgithubbeadsworkflow

Von TickTick über beads zu GitHub-Issues mit OpenSpec

Meine Aufgaben lagen in den letzten Monaten an drei Orten. Jeder Wechsel kam, weil ein Coding-Agent mehr von der Arbeit übernommen hat – und die Aufgabe dorthin musste, wo der Agent sie lesen und abschließen kann.

Station 1: TickTick

Eine klassische To-do-App: schnell erfasst, auf allen Geräten da. Für einen Agenten aber eine Blackbox – Aufgaben und Code lebten getrennt, und jede erledigte Aufgabe musste ich von Hand abhaken.

Vorteile Nachteile
Schnell erfasst, auf allen Geräten Liegt außerhalb der Repos
Erinnerungen, Kalender, Listen Agent kann Aufgaben weder lesen noch schließen
Keine Einrichtung je Projekt Kein Bezug zu Branch, Commit oder PR

Station 2: beads

beads (bd) legt die Aufgaben neben den Code ins Repo. Der Agent legt Tasks an, verknüpft Blocker (bd dep add <blockiert> <blocker>) und schließt sie selbst (bd close <id>).

In der Praxis kostete das mehr, als es brachte: ein eigenes Werkzeug mit eigener Datenbank, das in jedem Repo eingerichtet und gepflegt werden will, und regelmäßig Probleme, die nichts mit der eigentlichen Arbeit zu tun hatten. Dazu kommt die Sichtbarkeit: Ohne eigene Skripte sind die Aufgaben schwer einzusehen. Von außen kommt man nur über die GitHub-Content-API an die Dateien im Repo – möglich, aber mit Extra-Aufwand. Und bei mehreren Worktrees war nie ganz klar, welcher Stand gerade gilt.

Einen großen Mehrwert gegenüber Issues habe ich am Ende nicht gefunden.

Vorteile Nachteile
Aufgaben liegen im Repo beim Code Zusätzliches Tool je Repo, extra Overhead
Agent legt an und schließt selbst Häufige Probleme mit dem Werkzeug selbst
Abhängigkeiten zwischen Tasks Ohne eigene Skripte schwer einsehbar
Abruf von außen nur über die Content-API
Unklarer Stand bei mehreren Worktrees
Zweite Liste neben den GitHub-Issues

Station 3: GitHub-Issues mit OpenSpec-Change

Heute gibt es genau einen Ideenspeicher: GitHub-Issues. Sie sind in jedem Repo schon da, brauchen keine Einrichtung, werden in GitHub sauber angezeigt und sind über die API von überall abrufbar. Jedes Werkzeug – vom Agenten über die gh-CLI bis zur App auf dem Handy – kann sie lesen und schreiben. Und weil sie nicht im Branch liegen, sehen alle Worktrees denselben Stand.

Ein Issue mit dem Label idee ist ein künftiges Vorhaben. Es wird erst zur Arbeit, wenn daraus ein OpenSpec-Change wird – mit eigenem Branch, eigenem Arbeitsbaum und einem Pull Request gegen main.

flowchart TD
  I[GitHub-Issue mit Label idee] --> N[just neu: Branch + vier Artefakte]
  N --> G1[just gate1: Plan vollständig]
  G1 --> R[Test schreiben – rot]
  R --> G2[just gate2: roter Test belegt]
  G2 --> F[implementieren – grün, just fertig]
  F --> P[just pr → Merge → just archiv]

Die Gates sind Befehle mit Exit-Code, keine Bestätigungen. Gate 1 hält, wenn im Plan Testdateien fehlen. Gate 2 hält, wenn der Test nicht rot ist. Ohne bestandenen Abschluss verweigert just pr den Push. Jede Gate-Regel ist eine reine Funktion mit eigenem Test – ein Gate, das sich nicht prüfen lässt, wäre nur eine Behauptung.

Zwei Changes laufen nur parallel, wenn sich die Dateien, die sie laut proposal.md anfassen, nicht überschneiden.

Vorteile Nachteile
Nativ in jedem Repo, keine Einrichtung Braucht GitHub (bzw. eine Forge) und Netz
Sauber in GitHub sichtbar, per API abrufbar Kein schnelles Erfassen privater To-dos
Ein Stand für alle Worktrees
Issue → Change → PR → Merge hängt zusammen OpenSpec-Artefakte kosten pro Change Aufwand
Gates erzwingen Plan und roten Test Gates prüfen nicht, ob der Test das Richtige prüft

Was sich geändert hat

Station Wo die Aufgabe lebt Wer sie abschließt
TickTick App ich
beads Repo, eigenes Tool Agent (bd close)
Issue + OpenSpec GitHub + Branch Agent, aber nur über die Gates

Fazit

Das einfachere, überall vorhandene Werkzeug hat gewonnen. Issues können weniger als beads, aber sie sind schon da – und was ihnen fehlt, ergänzt der OpenSpec-Change samt Gates genau an der Stelle, an der Arbeit entsteht.