Spec Kit, gepflegt von GitHub, macht spezifikationsgetriebene Entwicklung zu einer CLI, die ihr installiert, und zu Skills, die der Agent aufruft. Das PyPI-Paket heißt specify-cli. Das Quell-Repository ist github/spec-kit. Es ersetzt weder Cursor noch Claude Code, GitHub Copilot oder Codex. Es zwingt diese Agenten, zuerst das beobachtbare Verhalten zu schreiben, danach die Technikwahl und zuletzt die Änderungen am Repository. Stand November 2026 nutzt Windows PowerShell-Skripte direkt. WSL muss nicht zuerst installiert werden. Diese Seite ist die Installation, die Verzeichnisstruktur und die Befehlsreihenfolge. Warum eine Spezifikation vor dem Code existieren muss, steht im Leitfaden zur spezifikationsgetriebenen Entwicklung. Wo Skill-Dateien liegen, steht im Agent-Skills-Leitfaden.
Warum „bau mir ein Board“ schon der falsche Anfang ist
Der Konflikt zwischen altem und neuem Weg ist konkret. Der alte Weg ist sitzungszentriert. Ziel, Stack und Ordnerlayout landen in einem Chat. Der Agent rät und ändert Dateien. Wechselt die Maschine oder die Person, ist der Kontext weg. Der neue Weg ist artefaktzentriert. Prinzipien stehen in .specify/memory/constitution.md. Verhalten und der Grund dafür stehen in specs/<feature>/spec.md. Der Stack wartet auf plan.md. Die ausführbare Reihenfolge wartet auf tasks.md. Das aktive Feature ist das Verzeichnis, auf das .specify/feature.json zeigt, nicht die Erinnerung an den letzten Thread.
2026 ist das ein Installationsproblem, kein Haltungsproblem, aus drei Gründen. Erstens spaltet sich die Aufrufschreibweise nach Agent. Cursor, Claude Code und der Standard-Skills-Modus von Copilot nutzen /speckit-specify. Codex nutzt $speckit-specify. Die Punktform in der Dokumentation ist nur eine Referenzschreibweise. Zweitens lässt eine Installation mit uv und eine zweite mit pipx zwei specify-Binaries zurück. Die alte Kopie auf dem PATH lehnt --integration ab. Drittens kann die optionale Git-Erweiterung nummerierte Branches anlegen, aber git checkout selbst schaltet das aktive Feature nicht um. Alle drei Dinge passieren vor der ersten Zeile Produktcode.
Wie Spec Kit die Arbeit in Schichten teilt
Behandelt die neun Slash-Skills nicht als eine flache Checkliste. Sie landen auf drei Arten von Artefakten, und nur zwei Pfade sind zulässig.
Die Prinzipienschicht gibt es einmal pro Repository. /speckit-constitution hält harte Grenzen für Qualität, Tests, Rechte und Nutzung fest. Spätere Schritte werden an dieser Datei gemessen. Die Feature-Schicht gibt es einmal pro Feature. /speckit-specify beantwortet nur, was eine Nutzerin beobachten kann und warum es existieren soll. /speckit-clarify fragt die unklaren Stellen und schreibt die Antworten in die Spezifikation zurück. Die Implementierungsschicht ist der erste Ort, an dem ein Framework oder ein Verzeichnis erlaubt ist. /speckit-plan erzeugt Plan, Recherche, Datenmodell und Verträge. /speckit-tasks zerlegt den Plan in Abhängigkeitsreihenfolge und markiert parallele Arbeit mit [P]. /speckit-implement ändert Dateien in dieser Reihenfolge. /speckit-converge vergleicht den Code mit den Artefakten, hängt fehlende Aufgaben an und wiederholt das, bis es Converged meldet.
Zwei Qualitätstore liegen dazwischen. Verwechselt sie nicht mit „der Code ist fertig“. /speckit-checklist baut eine Liste der Anforderungsqualität, die bei der prüfenden Person bleibt. Ein Haken bedeutet, die Anforderung ist klar, nicht, dass das Feature implementiert ist. /speckit-analyze ist nur lesend. Es meldet Konflikte zwischen spec.md, plan.md und tasks.md und ändert das Repository nicht. Die eingebaute Datei checklists/requirements.md pflegen specify und clarify. Eigene Checklisten bleiben bei der prüfenden Person. Implement hält an und fragt, wenn Kästchen offen sind. Es hakt sie nicht für euch ab.
Der kurze Pfad passt zu einer kleinen Änderung, deren Grenze schon klar ist: specify, plan, tasks, implement, converge. Der volle Pfad passt zu allem, das ihr ausliefern wollt: constitution einmal pro Projekt, danach specify, clarify, plan, checklist, tasks, analyze, implement, converge. Ein Defekt folgt dem offiziellen Bug-fixing-Schnellstart. Eine Idee, der ihr euch noch nicht verpflichtet habt, folgt der Idea-Assessment. Beides ist keine Voraussetzung dieses spezifikationsgetriebenen Pfads.
Installation unter Windows, macOS und Linux
Die gemeinsamen Voraussetzungen sind Python 3.11 oder neuer, Git nur wenn ihr die Git-Erweiterung aktiviert, und der Agent, mit dem ihr tatsächlich Code schreibt. Nutzt uv für eine dauerhafte Installation. Das Terminal startet die CLI. Slash-Skills laufen im Agent-Chat.
| System | Einstieg | Was es ausführt | Kontext | Für wen |
|---|---|---|---|---|
| Windows | uv in PowerShell installieren, --script ps | Skripte liegen in .specify/scripts/powershell/ | Kein WSL nötig | Ein alltäglicher Windows-Rechner |
| macOS | uv in der zsh installieren, --script sh | Skripte liegen in .specify/scripts/bash/ | specify liegt meist unter ~/.local/bin | Ein lokaler Mac oder ein Remote-Mac |
| Linux | uv in bash installieren, --script sh | Dieselben bash-Skripte wie unter macOS | Liegt das System-Python unter 3.11, zuerst uv python install 3.12 | Server, CI, Cloud-Hosts |
| Ein Skript für alle drei | --script py | Python-Skripte plus die Plattform-Shell als Rückfall | Das Team will sh und ps nicht trennen | Ein Repository, mehrere Systeme |
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex" uv tool install specify-cli specify version specify self check specify init deskboard --integration cursor-agent --script ps
curl -LsSf https://astral.sh/uv/install.sh | sh uv tool install specify-cli specify version specify self check specify init deskboard --integration cursor-agent --script sh
Nach der Installation prüft zwei Dinge. specify version beweist nur, dass der Befehl läuft und eine Version ausgibt. Es beweist nicht, ob die Binary von PyPI oder von GitHub stammt. specify self check ist nur lesend. Es sagt, ob ein neueres Release existiert, und ändert die Installation nicht. Die Dokumentation zeigt Release-Tags mit führendem v, zum Beispiel v0.12.11. Eine Quellen-Installation pinnt ihr mit uv tool install specify-cli --from git+https://github.com/github/spec-kit.git@vX.Y.Z, das v bleibt. Ein PyPI-Pin ist uv tool install specify-cli==X.Y.Z. Aktualisiert mit demselben Werkzeug wie bei der Erstinstallation: uv tool install --force specify-cli, pipx install --force specify-cli oder pip install --upgrade specify-cli.
Initialisiert ein Repository mit vorhandenem Code nicht auf einem schmutzigen Arbeitsbaum. Zuerst committen oder sichern, danach specify init --here --force --non-interactive --integration claude. --force bedeutet nur, dass ihr das Zusammenführen der Vorlagen in bestehende Dateien akzeptiert. CI ohne Tastatur braucht --non-interactive, sonst bleibt init in einem Pfeiltasten-Menü stehen. Liegt die Agent-Binary auf einer anderen Maschine, ergänzt --ignore-agent-tools und überspringt die lokale Prüfung. Nicht-interaktives init nimmt Copilot, solange ihr kein anderes --integration übergebt.
Ratet den Integration-Schlüssel nicht. Cursor ist cursor-agent, nicht cursor. Weitere übliche Schlüssel sind claude, copilot, gemini, pi, omp und codebuddy. Ein interaktives Terminal fragt, wenn ihr --integration weglasst. Ein Skript oder eine Pipe muss den Schlüssel setzen.
Zeigt specify version eine alte Nummer, schaut zuerst mit which specify auf den Pfad. Bleibt eine 0.1-Binary liegen, wird --integration zu No such option: --integration, und das alte --ai meldet No matching release asset found. Das ist kein Netzfehler. Der vordere PATH-Eintrag zeigt auf eine andere Installation. Entfernt nur die Kopie, die ihr nicht nutzt, und aktualisiert mit dem ursprünglichen Werkzeug plus --force oder --upgrade. Wer beide Werkzeuge abwechselnd benutzt, hat danach wieder zwei Binaries.
Neun Befehle: wo sie laufen, was sie ändern dürfen, für wen sie sind
Die nächsten beiden Tabellen teilen sich dieselben Spalten. Der echte Unterschied ist der Einstieg und die Ausführungsgrenze, nicht der Modellname.
| Schritt | Einstieg | Was es ändern darf | Kontext | Für wen |
|---|---|---|---|---|
| constitution | /speckit-constitution im Chat | Schreibt die Prinzipiendatei, nicht den Produktcode | Einmal pro Repository | Neues Projekt oder geänderte Prinzipien |
| specify | /speckit-specify | Erzeugt spec.md und die eingebaute Anforderungsliste | Nur Verhalten und Grund | Jedes Feature |
| clarify | /speckit-clarify | Fragt und schreibt Clarifications zurück | Lücken in der Spec | Alles, das ihr ausliefert |
| plan | /speckit-plan | Plan, Recherche, Datenmodell, Verträge | Der Stack gehört hierhin | Nachdem die Spec stabil ist |
| checklist | /speckit-checklist | Liste für die Prüfung, kein Anspruch „Code fertig“ | Ob die Anforderung klar ist | Der volle Pfad |
| tasks | /speckit-tasks | tasks.md in Abhängigkeitsfolge, [P] für parallele Arbeit | Die Plan-Artefakte | Vor jeder Dateiänderung |
| analyze | /speckit-analyze | Nur lesender Konfliktbericht über die drei Artefakte | Ändert das Repository nicht | Vor implement |
| implement | /speckit-implement | Ändert Dateien und startet Befehle je Aufgabe | Offene Listen halten es an | Eine isolierte Umgebung |
| converge | /speckit-converge | Hängt Aufgaben an, bis Converged kommt | Code gegen Artefakte | Nach jedem Implementierungsdurchlauf |
| Agent | Einstieg | Was es ändern darf | Kontext | Für wen |
|---|---|---|---|---|
| Cursor | --integration cursor-agent, dann /speckit-specify im Chat | Skills liegen in .cursor/skills/speckit-*/SKILL.md | Automatisches Workflow-Dispatch braucht zusätzlich die lokale cursor-agent-CLI und fordert Vertrauen sowie Auto-Freigabe an | Ihr schreibt dieses Repo schon in Cursor |
| Claude Code | --integration claude | Skills liegen in .claude/skills/ | --no-model-invocation hält Kern-Skills aus dem Kontext, bis ihr sie tippt | Claude im Terminal |
| GitHub Copilot | --integration copilot | Standard-Skills liegen in .github/skills/ | --integration-options="--commands" ist das ältere agents/prompts-Layout | VS Code oder Copilot CLI |
| Codex | $speckit-specify | Der Skills-Modus nutzt ein Dollarzeichen, keinen Slash | Den Punkt-Befehl aus der Doku nicht in Codex einfügen | Codex CLI |
Kurzen oder vollen Pfad nach der Lage wählen
| Wenn ihr | wählt | nicht |
|---|---|---|
| eine kleine Funktion ändert, deren Grenze schon im Issue steht | Kurzer Pfad: specify, plan, tasks, implement, converge | Zuerst keine Prinzipiendebatte öffnen |
| ein Feature mit Rechte- oder Datengrenze ausliefert | Voller Pfad, einschließlich clarify, checklist und analyze | Nicht aus dem ersten Spec-Entwurf implementieren |
| einen bestehenden Defekt behebt | Den Bug-fixing-Schnellstart, beginnend bei der Reproduktion | Den Defekt nicht als neues Feature tarnen |
| noch entscheidet, ob die Idee einen Bau verdient | Den Idea-Assessment-Schnellstart | Nicht zuerst das Repo anlegen und die Spec nachziehen |
| ein Repo mit vorhandenem Code initialisiert | specify init --here --force nach einem Commit | Vorlagen nicht auf einen schmutzigen Baum mergen |
| in CI oder auf einem Remote-Knoten initialisiert | --non-interactive, plus --ignore-agent-tools, wenn der Agent woanders liegt | init nicht auf ein Pfeiltasten-Menü warten lassen |
Das laufende Beispiel ist ein Notizboard, das auf einer Maschine bleibt. Nichts wird hochgeladen. Die erste Phase hat kein Passwort. Drei festgelegte Mitglieder. Vier Spalten unter einem Projekt: Zu erledigen, In Arbeit, Bestätigung nötig, Fertig. Eine Karte wechselt die Spalte per Ziehen. Einen Kommentar darf nur die Autorin ändern. Specify hält dieses Verhalten und den Grund fest. Im Plan steht erst „lokales SQLite, keine Remote-API“. Steht die Datenbank schon in specify, wird die erste technische Ahnung zu einer Anforderung, die niemand mehr infrage stellen darf.
Der specify-Text im Chat bleibt auf dieser Körnung. Drei feste Personen öffnen ein Projekt und ziehen Karten zwischen vier Spalten. Bearbeiten und Löschen eines Kommentars darf nur die Autorin. Beim Start wird kein Passwort gefragt. Speicherort, Framework und Tabellenname gehören nicht hinein. In dem Moment, in dem sie dort stehen, überholt die Spezifikation den Plan. Erst im Plan legt ihr fest: Speicherung in lokalem SQLite, eine Seite, kein Netz.
Agent, Skripttyp und eine isolierte Maschine zusammenbringen
Schreibt ihr dieses Repository schon in Cursor, nehmt cursor-agent und den Skripttyp der Maschine: ps unter Windows, sh unter macOS und Linux. Nach init ruft ihr im Chat einen Skill nach dem anderen auf, auf dem kurzen oder dem vollen Pfad. Lest das Artefakt, bevor der nächste Skill kommt. Fügt nicht alle neun Befehle in einen Prompt ein.
Nutzt ihr vor allem Claude Code, ist der Schlüssel claude. Drängen viele Skill-Beschreibungen den Kontext, initialisiert mit --integration-options="--no-model-invocation", damit die Kernbefehle nur laufen, wenn ihr /speckit-specify tippt. Copilot bleibt beim Standard-Skills-Layout. --commands nur, wenn ihr ausdrücklich die älteren Agent-Dateien wollt.
Implement ändert Dateien und startet Befehle. Den ersten Durchlauf nicht auf einem Laptop mit Produktionsschlüsseln machen. Legt das Repository auf einen Remote-Mac, lest den Diff und merget danach zurück. Wie ihr einen Knoten bestellt, steht unter Mac mini mieten. Das Budget steht unter Preise. Enthält die Spec einen macOS-Build oder eine Signatur, läuft diese Phase auf einem echten Mac-Knoten und bleibt mit OpenClaw-Cloud-Automatisierung vom Alltagsrechner getrennt. Schlägt die Installation fehl, prüft Verbindung und Systemvoraussetzungen im Hilfe-Center, bevor ihr Spec Kit die Schuld gebt.
Fünf Fehler, die den Rest der Arbeit neu erzwingen
- Framework und Datenbank schon in specify schreiben. Der Stack gehört in den Plan. Steht in der Spec „muss diese Bibliothek nutzen“, verbringen clarify und analyze ihre Zeit damit, diese Wahl zu verteidigen.
/speckit-specifyim Terminal tippen. Slash-Skills gibt es nur im Agent-Chat. Das Terminal startetspecifyselbst.- Den Punkt-Befehl aus der Doku in Cursor einfügen. Der Cursor-Skill heißt
/speckit-specify. Die Punktform ist Referenzschreibweise. - Mit uv und pipx installieren. Eine alte 0.1.x-Binary meldet
No such option: --integrationoder bei--aiNo matching release asset found. Führtwhich specifyaus, bevor ihr entscheidet, welche Kopie weg soll. - git checkout als Feature-Schalter benutzen. Ändert
.specify/feature.jsonoder setztSPECIFY_FEATURE_DIRECTORY. Ein Branch-Wechsel allein lässt die Befehle auf das vorherige Feature-Verzeichnis zeigen.
Sieben Schritte
- Installiert uv und specify-cli. Führt
specify versionundspecify self checkaus. Bestätigt, dass derPATHgenau eine Binary trifft. - Wählt
--scriptnach Betriebssystem und--integrationnach dem Agenten, den ihr wirklich nutzt, und startetspecify init. Bei einem bestehenden Repo zuerst committen und--here --forceergänzen. - Führt
/speckit-constitutioneinmal im Agent-Chat aus. Nur Prinzipien: Eingaben prüfen, Kommentare darf nur die Autorin ändern, die erste Phase lädt nichts hoch. - Beschreibt Verhalten und Grund des Notizboards mit
/speckit-specify. Wollt ihr es ausliefern, folgt/speckit-clarifyund schließt die Fragen zu Ziehen, Rechten und einem leeren Projekt. - Erst wenn die Spec stabil ist,
/speckit-plan. Danach checklist, tasks und analyze. Meldet analyze einen Konflikt, korrigiert das Quellartefakt. Flickt ihn nicht während implement. - Startet
/speckit-implementauf einem isolierten Mac oder in einem sauberen Verzeichnis. Ist die Aufgabenliste lang, arbeitet phasenweise. Schluckt nicht die ganzetasks.mdin einem Durchlauf. - Startet
/speckit-converge, bis Converged kommt. Dann den Diff lesen: Dateien außerhalb der Spec und jedes Geheimnis, das ins Repository geschrieben wurde.
Fragen, die die Installation entscheiden
Worin unterscheidet sich Spec Kit vom Chatten in Cursor?
Ein Chat bleibt in dieser Sitzung. Wechseln Person oder Maschine, ist er weg. Spec Kit schreibt Prinzipien, Spec, Plan und Aufgaben als Markdown ins Repository. Das aktive Feature ist das Verzeichnis in .specify/feature.json, nicht die Erinnerung an den letzten Thread.
Heißt der Befehl /speckit-specify oder /speckit.specify?
Cursor, Claude Code und der Standard-Skills-Modus von GitHub Copilot nutzen die Bindestrichform im Agent-Chat, nicht im Terminal. Der Skills-Modus von Codex nutzt $speckit-specify. Die Punktform in der Dokumentation ist Referenzschreibweise. Fügt sie nicht in Cursor ein.
Braucht Windows zuerst WSL?
Nein. 2026 nimmt Spec Kit unter Windows standardmäßig PowerShell. Übergebt bei init --script ps. macOS und Linux nehmen bash, das ist --script sh.
Darf ich mit uv und pipx installieren?
Nein. Ihr behaltet zwei specify-Binaries. Die alte Kopie vorn im PATH lehnt --integration ab oder meldet No matching release asset found. Aktualisiert mit dem ursprünglichen Werkzeug, mit --force oder --upgrade.
Wechselt git checkout das aktive Feature?
Nein. Das aktive Feature ist .specify/feature.json. Überschreibt es mit SPECIFY_FEATURE_DIRECTORY. Die optionale Git-Erweiterung kann nummerierte Branches anlegen, ein Checkout allein aktualisiert diesen Zustand nicht.
Zuerst den richtigen Befehl installieren, dann den Agenten ins Repository lassen
Spec Kit ist nicht wertvoll, weil es einen weiteren Slash-Befehl gibt. Es ist wertvoll, weil „Spec, dann Plan, dann Dateien ändern“ zu Dateien im Repository wird, die eine andere Person prüfen kann. Windows nutzt PowerShell. macOS und Linux nutzen bash. Cursor nutzt cursor-agent und Bindestrich-Skills. Eine kleine Änderung nimmt den kurzen Pfad. Ein Feature, das ihr ausliefert, nimmt den vollen Pfad. Implement läuft auf einem isolierten Knoten. Der nächste Schritt ist keine weitere Prompt-Sammlung. Führt specify version aus und bestätigt, dass die Binary vor euch die gerade installierte ist. Stimmt die Nummer nicht, korrigiert den PATH, bevor ihr einen Skill tippt.
Weiterlesen
- Spezifikationsgetriebene Entwicklung: die Methode, nicht der Installer →
- Agent Skills: was wohin gehört →
- OpenClaw-Automatisierung auf einem Remote-Mac →
implement ändert das Repo und startet Befehle — zuerst auf einem isolierten Mac
Der Implementierungsschritt erzeugt nicht nur Markdown. Er folgt tasks.md, schreibt Dateien und startet Skripte. Den ersten Durchlauf nicht auf einem Laptop mit Produktionsschlüsseln machen. Ein Remote-Mac trennt Repo und Zugangsdaten pro Sitzung, damit ihr den Diff lest, bevor er auf dem Team-Branch landet.