Dokumentation
Leitfäden und die vollständige Befehlsreferenz für nxf — immer synchron mit der ausgelieferten Version.v0.27.0
Erste Schritte
nxf ist die nexus-flow Agent-CLI: eine schlanke, deterministische, offline-first Schnittstelle über dem Engine-Kern. Dieser Leitfaden führt Sie von einem leeren Verzeichnis zu einer geplanten, nachverfolgten Arbeitseinheit. Jeder Befehl unterstützt --json für maschinenlesbare, byte-stabile Ausgabe — das ist der Vertrag, auf dem Agenten aufbauen.
Installation
Laden und installieren Sie das neueste Release mit dem Installationsskript:
curl -fsSL https://nxf.nxsflow.com/install.sh | shEs erkennt Ihre Plattform, verifiziert den Download (sha256 + Signatur) und legt die drei Suite-Binaries in Ihrem PATH ab: `nxf` (den Issue-Tracker), `nxm` (dauerhaftes Agenten-Gedächtnis) und `nxs` (das Umbrella, das sie zusammenführt). Sie installieren einmal und entscheiden pro Workspace, welche Tools Sie aktivieren. Prüfen Sie es:
nxf --versionEinen Workspace initialisieren
Ein Workspace ist ein .nxs/-Verzeichnis in Ihrem Projekt — ein geteilter Speicher, in den jedes aktivierte Tool schreibt. Am schnellsten richten Sie ihn über das Umbrella ein, das fragt, welche Tools Sie nutzen wollen, und alles verdrahtet:
nxs initEs assembliert die geteilten Agent-Dateien und setzt einen einzelnen nxs prime-SessionStart-Hook, sodass Ihr Agent ab dann den Kontext jedes aktiven Tools mit einem Aufruf lädt (siehe Das nxs-Umbrella). Für einen Agenten oder ein Skript ist es nicht-interaktiv — nxs init --module flow --module memory (oder --json) richtet denselben Stand ohne Prompt ein.
Wenn Sie nur den Issue-Tracker wollen, initialisieren Sie ihn direkt. Das ist eine bewusste Plugin-Wahl — es gibt keine Voreinstellung, denn das Plugin bestimmt das Vokabular, das Sie lesen und schreiben (siehe Plugins). Für Softwarearbeit wählen Sie issue-tracker:
nxf init --plugin issue-trackerBeide Wege landen auf demselben .nxs/-Workspace und demselben nxs prime-Hook. Jede id in diesem Workspace wird unter einem kurzen, stabilen Namensraum namens prefix vergeben (die Beispiele unten verwenden ab12). Führen Sie nxf init --help aus, um die verfügbaren Plugins und ihre Beschreibungen zu sehen.
Ihre ersten Items erstellen
Items sind Projekte und Tasks. Erstellen Sie ein Projekt, um die Arbeit zu gruppieren, dann die Tasks darunter. Der --json-Datensatz ist die kanonische Form — beachten Sie die Feldnamen auf Engine-Ebene (type, belongs_to, status), die sich unabhängig vom aktiven Plugin nie ändern:
$ nxf create --type epic --title "Ship v1" --description "Cut the first release" --priority P1 --json
{"archived":null,"assignee":null,"belongs_to":null,"closed_at":null,"closing_comment":null,"completion_criterion":null,"defer_until":null,"deleted":null,"description":"Cut the first release","design":null,"due":null,"id":"ab12.0001","priority":"1","status":"open","title":"Ship v1","type":"epic"}$ nxf create --type feature --title "Write the CLI" --description "Build the command-line tool" --priority P1 --due 2026-12-31 --parent ab12.0001 --json
{"archived":null,"assignee":null,"belongs_to":"ab12.0001","closed_at":null,"closing_comment":null,"completion_criterion":null,"defer_until":null,"deleted":null,"description":"Build the command-line tool","design":null,"due":"2026-12-31","id":"ab12.0002","priority":"1","status":"open","title":"Write the CLI","type":"feature"}Der neue Task belongs_to das Projekt (über --parent), hat ein Fälligkeitsdatum und trägt Priorität 1.
Sehen, woran zu arbeiten ist
Zustände wie *ready* und *next* sind abgeleitet, nie gespeichert (siehe Kernkonzepte). Da nichts es blockiert, ist die Arbeit ready, und next ordnet sie nach der Policy des Plugins. Die menschliche Ansicht spricht das issue-tracker-Vokabular — P1, open:
$ nxf next
0001 P1 open [epic] Ship v1
0002 P1 open [feature] Write the CLI
↳ 0001 · Ship v1Das ist die gesamte Schleife: einmal init, Arbeit create, dann ready/next Ihnen sagen lassen, wohin es geht. Lesen Sie von hier aus Kernkonzepte für das Modell, oder Befehle für eine vollständige Arbeitssitzung.
Das nxs-Umbrella
nxs ist das Plattform-Umbrella über der Suite. Dieselbe Installation liefert alle drei Binaries; nxs führt zusammen, was Sie in einem Workspace aktivieren — über den einen geteilten .nxs/-Speicher:
nxs init— die Suite einrichten: wählen, welche Tools genutzt werden (interaktiv, oder
--module …/--json für einen Agenten), die geteilten Agent-Dateien assemblieren und den einzelnen nxs prime-Hook verdrahten.
nxs prime— das Session-Bootstrap, das der Hook ausführt: es fächert an dasprimejedes
aktiven Tools mit einer geteilten Uhr aus und hängt die Ergebnisse aneinander. Ein flow-only- Workspace liefert genau flows prime; memorys kommt dazu, sobald Sie es hinzufügen.
nxs sync bind/nxs sync run— den geteilten Speicher mit einem Relay synchronisieren (ein
Op-Log, also ist Synchronisieren eine Plattform-Operation, keine pro-Tool-Operation).
nxs migrate— den Workspace auf das aktuelle Schema heben und einen vor-v0.6.0-Workspace auf
das Umbrella-Modell aktualisieren (es schreibt einen alten nxf prime-Hook auf nxs prime um). Idempotent.
nxs doctor(Aliasnxs status) — eine tool-übergreifende Diagnose: aktive Module,
Schema-Version, Replica-Identität, Sync-Status und Speicher-Integrität.
Jedes Tool behält seinen eigenen gebrandeten Init, wenn Sie es direkt tippen (nxf init, nxm init); alle landen auf demselben .nxs/-Speicher und demselben einzelnen nxs prime-Hook.
Einen MCP-Host verbinden
MCP-native Hosts — Claude Desktop, Claude Code, Cursor, Windsurf — können die nxf-CLI nicht bedienen, deshalb liefert nexus-flow einen MCP-Server (nxs mcp serve), der die Lese- und Schreiboperationen Ihres Boards als MCP-Tools über denselben geteilten .nxs/-Store bereitstellt. Dieser Leitfaden verbindet einen Host damit — auch für den Fall, dass noch nichts installiert ist.
Eine Host-Konfiguration startet nur einen *Befehl*. Einen Host zu verbinden sind also zwei Entscheidungen: welcher Befehl den Server startet und welchen Workspace er öffnet.
Der schnellste Weg: der npx-Runner (ohne Installation)
Wenn Sie Node haben (die meisten Rechner haben es), müssen Sie nichts vorab installieren. Verweisen Sie den Host auf den @nexus-flow/mcp-Runner — er lädt das signierte nxs, verifiziert es, cached es und startet den Server beim ersten Start.
Für Claude Desktop fügen Sie dies in claude_desktop_config.json ein und starten neu:
{
"mcpServers": {
"nxs": {
"command": "npx",
"args": ["-y", "@nexus-flow/mcp"]
}
}
}Das bedient Ihr Standard-Board — einen nutzereigenen Workspace, den nexus-flow beim ersten Start automatisch anlegt (denselben, den die nexflow.it-Desktop-App nutzt, sodass Sie in beiden dasselbe Board sehen). Um ihn stattdessen auf ein bestimmtes Projekt zu richten, hängen Sie den Workspace nach -- an:
{
"mcpServers": {
"nxs": {
"command": "npx",
"args": ["-y", "@nexus-flow/mcp", "--", "--workspace", "/absoluter/pfad/zu/ihrem/projekt"]
}
}
}Alles nach -- wird direkt an nxs mcp serve durchgereicht. Der erste Start lädt und verifiziert nxs (ein paar Sekunden); spätere Starts nutzen den Cache und starten sofort, auch offline.
Wenn Sie nxs bereits haben: nxs mcp install
Mit nxs auf Ihrem PATH registriert ein Befehl den Server in jedem installierten Host für Sie — ohne JSON von Hand zu bearbeiten:
nxs mcp installEs schreibt einen idempotenten Eintrag, der den absoluten Pfad Ihres nxs-Binaries plus mcp serve nennt, und patcht Claude Desktop, Cursor und Windsurf, sofern gefunden (ein erneuter Lauf ändert nichts). Mit --setup wird im selben Schritt auch das Board angelegt — ein Befehl, der den Server registriert und den Workspace erzeugt, den er öffnet:
# Registrieren + personal-todo-Board am nutzereigenen Standard anlegen (Default für Wissensarbeit):
nxs mcp install --setup
# Registrieren + Coding-Board an dieses Projekt gepinnt anlegen:
nxs mcp install --setup --workspace "$PWD" --plugin issue-trackerUm statt des direkten Binärpfads den portablen, maschinenunabhängigen npx-Eintrag von der Kommandozeile aus zu schreiben, fügen Sie --runner npx hinzu.
Den Workspace wählen
Da ein Host kein Arbeitsverzeichnis hat, kann der Server „dieses Projekt" nicht erraten — Sie sagen, welches Board er öffnet:
- `--workspace` weglassen → der nutzereigene Standard-Workspace, beim ersten Start automatisch
angelegt. Ideal für ein einzelnes persönliches Board, geteilt über Ihre Hosts und die Desktop-App.
- `--workspace <absoluter-pfad>` → das Board dieses Projekts. Legen Sie es zuerst an (`nxs mcp
install --setup --workspace <pfad> oder dort nxs init`) — ein expliziter Pfad ohne Board ist ein Fehler, keine automatische Anlage.
- Ein einzelner laufender Server kann pro Tool-Aufruf auch auf ein anderes Board gerichtet werden,
indem man einem beliebigen Tool ein workspace-Argument übergibt — ein Server, viele Projekte, ohne erneute Registrierung.
nxs bootstrappen, wenn es nicht installiert ist
Zwei signierte Wege zu nxs, beide fail-closed:
- Das Ein-Zeilen-Installationsskript (installiert
nxf/nxm/nxsunter~/.local/bin, ohne
sudo):
``bash curl -fsSL https://nxf.nxsflow.com/install.sh | sh ``
- Der `npx`-Runner (oben) — er *ist* der Bootstrap für GUI-Hosts: er lädt und verifiziert
nxs
bei Bedarf, sodass die Host-Konfiguration das Einzige ist, was Sie hinzufügen.
Sicherheit
Jeder Abrufpfad verifiziert, bevor er ausführt, und auf dem npx-Weg gibt es keine unsichere Ausnahme:
- sha256 belegt, dass die Bytes beim Transport nicht verändert wurden.
- minisign (eine Ed25519-Signatur über das Tarball, geprüft gegen einen im Installer und im Runner
eingebackenen öffentlichen Schlüssel) belegt, dass die Bytes wirklich von uns stammen. Ein manipuliertes Artefakt, ein falscher Schlüssel oder eine fehlende Signatur bricht ab, bevor etwas läuft.
Nur Bytes, die beide Prüfungen bestehen, werden gecached und ausgeführt. install.sh schlägt auf einem Host ohne verfügbaren Verifizierer fehl (statt unverifizierte Bytes zu installieren), und nxs self-update verifiziert immer erneut.
Andere Hosts
Dieselben Einträge funktionieren für Cursor und Windsurf (und jeden MCP-Host, der einen stdio-Befehl startet). nxs mcp install erkennt und patcht alle drei; um einen gezielt anzusprechen, übergeben Sie --host claude-desktop | cursor | windsurf. Sobald verbunden, sendet der Server beim Verbinden Nutzungshinweise, und flow_next liefert Ihre bereite Arbeit — rufen Sie es in jeder Sitzung zuerst auf.
Kernkonzepte
Dies ist das plugin-freie Herz von nexus-flow. Alles hier ist universell — dasselbe Modell liegt jedem Plugin zugrunde; nur die Worte darüber ändern sich (Plugins).
Das Datenmodell
Es gibt zwei Arten von Item:
- Ein Projekt gruppiert Arbeit (ein Plugin nennt es vielleicht *Epic* oder *Project*).
- Ein Task ist eine Arbeitseinheit (ein *Issue*, ein *Todo*).
Items tragen eine kleine, feste Menge an Feldern auf Engine-Ebene — wörtlich sichtbar in jedem --json-Datensatz: id, type, title, description, design, status (open / in_progress / closed), priority, due, defer_until, assignee, belongs_to und ein closing_comment. Zwei Beziehungen verbinden Items:
- belongs-to: ein Task oder Projekt gehört zu genau einem übergeordneten Projekt (gesetzt mit
--parent). Das ist Containment — die Aufschlüsselung der Arbeit.
- Abhängigkeiten: eine gerichtete *muss-zuerst-fertig*-Kante zwischen zwei beliebigen Items
(Projekt oder Task), unabhängig vom Containment.
Über Abhängigkeiten hinaus können Items Erwähnungen tragen — Freitext-Referenzen per Short-id, die festhalten "dieser Text spricht über jenes Item", ohne es jemals zu blockieren. Jede Änderung wird als History aufbewahrt, und das Schließen eines Items hält einen Schließkommentar fest (das *Warum*, nicht nur das *Dass*).
Die Ursprungs-Intention bewahren
Titel und Beschreibung werden kurz nach der Anlage festgezurrt und dann stabil gehalten — sie sind die Aufzeichnung dessen, *was wir uns am Anfang vorgenommen haben*. Korrigiere sie einmal direkt nach der Anlage (etwa um ein Review einzuarbeiten), und lass sie danach in Ruhe. Neuer Kontext und alles, was du während der Abarbeitung lernst, gehen in den Append-Only-Notizen- Stream (nxf note add), nicht in ein Umschreiben der Ursprungsfelder. (Das ist heute eine Konvention; ein künftiges Release kann sie durch einen irreversiblen Per-Field-Lock erzwingen.)
Wenn ein Item wirklich keinen Sinn mehr ergibt, baue es nicht zu etwas Fremdem um — das würde seine Historie auslöschen. Lege stattdessen ein neues Item an und schließe das alte mit einer Begründung, die auf das neue verweist (Schließen ist der einzige Weg, auf dem ein Item das Board verlässt; es gibt kein Hard-Delete). Das ursprüngliche Item bleibt, geschlossen, als Teil der Aufzeichnung erhalten.
Warum das wichtig ist: So entsteht über die Zeit das Paar „das wollten wir erreichen" (Beschreibung und Design) ↔ „so haben wir es am Ende abgeschlossen" (Schließkommentar und Notizen). Genau dieses Paar aus Absicht und Ergebnis ist das, woraus man später lernt. Überschreibt man die Ursprungs-Intention, verliert man die eine Hälfte davon — und damit die Möglichkeit zu lernen. (Intention zu bewahren nützt nur, wenn man sie wiederfindet: nxf search durchsucht auch geschlossene Items, sodass das Paar auffindbar bleibt.)
Abhängigkeiten und Blockieren
Eine Abhängigkeit besagt, dass das *from*-Item auf das *to*-Item warten muss. Angenommen, ab12.0002 ("Write the CLI") kann nicht beginnen, bevor ab12.0003 ("Spec sign-off") erledigt ist — fügen Sie die Kante hinzu:
$ nxf dep add ab12.0002 ab12.0003 --json
{"msg":"ab12.0002 -> ab12.0003","ok":true}
Solange der Blocker offen ist, ist das abhängige Item blocked:
$ nxf blocked --json
[{"archived":null,"assignee":null,"belongs_to":"ab12.0001","blockers":[{"id":"ab12.0003","status":"open"}],"closed_at":null,"closing_comment":null,"completion_criterion":null,"defer_until":null,"deleted":null,"description":"Build the command-line tool","design":null,"due":"2026-12-31","id":"ab12.0002","priority":"1","priority_label":"P1","status":"open","title":"Write the CLI","type":"feature","type_label":"feature"}]Ableitung: ready / blocked / next
ready, blocked und next sind abgeleitet, nie gespeichert. Sie sind eine deterministische Berechnung über die Items und ihre Kanten — es gibt kein ready-Flag zu setzen oder zu vergessen. Ein Item ist ready, wenn es offen ist und keinen offenen Blocker hat; das Projekt und der nicht blockierte Task sind ready, während der blockierte Task fehlt:
$ nxf next --json
[{"archived":null,"assignee":null,"belongs_to":null,"closed_at":null,"closing_comment":null,"completion_criterion":null,"defer_until":null,"deleted":null,"description":"Cut the first release","design":null,"due":null,"id":"ab12.0001","parent":null,"priority":"1","priority_label":"P1","status":"open","title":"Ship v1","type":"epic","type_label":"epic"},{"archived":null,"assignee":null,"belongs_to":null,"closed_at":null,"closing_comment":null,"completion_criterion":null,"defer_until":null,"deleted":null,"description":"Approve the final spec","design":null,"due":null,"id":"ab12.0003","parent":null,"priority":"2","priority_label":"P2","status":"open","title":"Spec sign-off","type":"feature","type_label":"feature"}]next ist ready, in die Reihenfolge gebracht durch die Ranking-Policy des aktiven Plugins — dieselbe Ableitung, ein Schritt mehr. Da alles berechnet ist, macht das Schließen des Blockers das abhängige Item bei der nächsten Abfrage sofort ready; nichts muss neu geflaggt werden.
Zeit: due und defer
Zwei Datumsfelder formen ein Item über die Zeit. due ist ein Zieldatum (es kann das Ranking beeinflussen). defer_until verbirgt ein Item, bis ein Datum eintritt — nützlich für Arbeit, die Sie noch nicht beginnen können. Die Ableitung ist zeitabhängig, aber dennoch deterministisch: Übergeben Sie --now, um den Referenzzeitpunkt zu fixieren. In einem frischen Workspace ein zurückgestellter Task:
$ nxf create --type feature --title "Pay quarterly taxes" --description "File the quarterly tax return" --priority P3 --defer 2026-07-01 --json
{"archived":null,"assignee":null,"belongs_to":null,"closed_at":null,"closing_comment":null,"completion_criterion":null,"defer_until":"2026-07-01","deleted":null,"description":"File the quarterly tax return","design":null,"due":null,"id":"ab12.0001","priority":"3","status":"open","title":"Pay quarterly taxes","type":"feature"}Vor dem Defer-Datum ist er nicht ready:
$ nxf next --now 2026-06-15T00:00:00Z --json
[]
Am oder nach dem Datum liefert genau dieselbe Abfrage den Task — nur --now hat sich geändert:
$ nxf next --now 2026-08-01T00:00:00Z --json
[{"archived":null,"assignee":null,"belongs_to":null,"closed_at":null,"closing_comment":null,"completion_criterion":null,"defer_until":"2026-07-01","deleted":null,"description":"File the quarterly tax return","design":null,"due":null,"id":"ab12.0001","parent":null,"priority":"3","priority_label":"P3","status":"open","title":"Pay quarterly taxes","type":"feature","type_label":"feature"}]Dieser Determinismus — gleiche Eingaben, gleiches --now, byte-identische Ausgabe — macht nexus-flow sicher steuerbar für Agenten. Als Nächstes: Sehen Sie, wie ein Plugin all das darstellt in Plugins, oder gehen Sie den vollen Befehlssatz durch in Befehle.
Befehle
Eine Tour durch die meistgenutzten nxf-Befehle, in der Reihenfolge, in der eine Sitzung sie gewöhnlich verwendet. Führen Sie nxf <command> --help aus für die knappe, generierte Referenz (Flags, Typen, Voreinstellungen); dieser Leitfaden fügt die Erzählung hinzu. Kombinieren Sie jeden Befehl mit --json für deterministische, agentenfreundliche Ausgabe.
Die Sitzung unten setzt den Erste-Schritte-Workspace unter dem issue-tracker-Plugin fort.
Inspizieren
show ist das vollständige menschliche Detail eines Items — Felder, Beschreibung, Abhängigkeiten und Notizen:
$ nxf show ab12.0002
0002 P1 Write the CLI
=====================
TYPE: feature
STATUS: in progress
PARENT: 0001
DESCRIPTION
-----------
Build the command-line tool
DEFINITION OF DONE
------------------
DESIGN
------
Thin CLI over the core.
NOTES
-----
- started on the command layerlist gibt jedes Item aus; mit --json ist es der kanonische, byte-stabile Schnappschuss (id-geordnet, nicht gerankt):
$ nxf list --json
[{"archived":null,"assignee":null,"belongs_to":null,"closed_at":null,"closing_comment":null,"completion_criterion":null,"defer_until":null,"deleted":null,"description":"Cut the first release","design":null,"due":null,"id":"ab12.0001","priority":"1","priority_label":"P1","status":"in_progress","title":"Ship v1","type":"epic","type_label":"epic"},{"archived":null,"assignee":"dev","belongs_to":"ab12.0001","closed_at":null,"closing_comment":null,"completion_criterion":null,"defer_until":null,"deleted":null,"description":"Build the command-line tool","design":"Thin CLI over the core.","due":"2026-12-31","id":"ab12.0002","priority":"1","priority_label":"P1","status":"in_progress","title":"Write the CLI","type":"feature","type_label":"feature"},{"archived":null,"assignee":null,"belongs_to":null,"closed_at":"2026-06-23T00:00:00Z","closing_comment":"approved","completion_criterion":null,"defer_until":null,"deleted":null,"description":"Approve the final spec","design":null,"due":null,"id":"ab12.0003","priority":"2","priority_label":"P2","status":"closed","title":"Spec sign-off","type":"feature","type_label":"feature"}]search matcht über Titel, Beschreibung und Notizen:
$ nxf search "thin cli" --json
[{"archived":null,"assignee":"dev","belongs_to":"ab12.0001","closed_at":null,"closing_comment":null,"completion_criterion":null,"defer_until":null,"deleted":null,"description":"Build the command-line tool","design":"Thin CLI over the core.","due":"2026-12-31","id":"ab12.0002","priority":"1","priority_label":"P1","status":"in_progress","title":"Write the CLI","type":"feature","type_label":"feature"}]Ein Item bearbeiten
claim markiert ein Item als in Bearbeitung und weist es zu:
$ nxf claim ab12.0002 --assignee dev --json
{"archived":null,"assignee":"dev","belongs_to":"ab12.0001","closed_at":null,"closing_comment":null,"completion_criterion":null,"defer_until":null,"deleted":null,"description":"Build the command-line tool","design":null,"due":"2026-12-31","id":"ab12.0002","priority":"1","status":"in_progress","title":"Write the CLI","type":"feature"}update bearbeitet Felder — hier das design:
$ nxf update ab12.0002 --set "design=Thin CLI over the core." --json
{"archived":null,"assignee":"dev","belongs_to":"ab12.0001","closed_at":null,"closing_comment":null,"completion_criterion":null,"defer_until":null,"deleted":null,"description":"Build the command-line tool","design":"Thin CLI over the core.","due":"2026-12-31","id":"ab12.0002","priority":"1","status":"in_progress","title":"Write the CLI","type":"feature"}note add hängt eine Worklog-Notiz an; note list liest sie zurück:
$ nxf note add ab12.0002 "started on the command layer" --json
{"body":"started on the command layer","id":"[..]"}
$ nxf note list ab12.0002
- started on the command layer
close schließt ein Item ab und hält einen Schließkommentar fest (das *Warum*):
$ nxf close ab12.0002 --reason done --json
{"archived":null,"assignee":"dev","belongs_to":"ab12.0001","closed_at":"2026-06-23T00:00:00Z","closing_comment":"done","completion_criterion":null,"defer_until":null,"deleted":null,"description":"Build the command-line tool","design":"Thin CLI over the core.","due":"2026-12-31","id":"ab12.0002","priority":"1","status":"closed","title":"Write the CLI","type":"feature"}Die Arbeit strukturieren
dep add / dep remove verwalten die *muss-zuerst-fertig*-Kanten, die das Blockieren steuern (siehe Kernkonzepte):
$ nxf dep add ab12.0002 ab12.0003 --json
{"msg":"ab12.0002 -> ab12.0003","ok":true}
$ nxf dep remove ab12.0002 ab12.0003 --json
{"msg":"removed ab12.0002 -> ab12.0003","ok":true}
mention add / mention list / mention remove halten Freitext-Referenzen per Short-id fest — ein Verweis, der nie blockiert:
$ nxf mention add ab12.0002 ab12.0001 --json
{"msg":"ab12.0002 mentions ab12.0001","ok":true}
$ nxf mention list ab12.0002 --json
["ab12.0001"]
$ nxf mention remove ab12.0002 ab12.0001 --json
{"msg":"removed mention ab12.0002 -> ab12.0001","ok":true}
Einen Agenten bootstrappen
prime ist ein einziger Aufruf, der einem Agenten die plugin-bestimmte Zweckbeschreibung von nxf (purpose), die Arbeitsregeln, die gerankte next-Empfehlung (Top 7, laufende Arbeit zuerst), einen leverage-bewussten blocked-Schnappschuss, ein create-Beispiel mit dem Typ-Vokabular und der Prioritäts-Spanne des aktiven Plugins sowie die Befehlsreferenz (deren dep-Eintrag die Abhängigkeitsrichtung ausbuchstabiert) übergibt. Der deterministische Einstiegspunkt für eine automatisierte Sitzung:
$ nxf prime --json
{"blocked":[],"commands":[{"group":"Finding work","items":[{"name":"next","summary":"ready work in priority order (start here); add --include-in-progress for claimed work"},{"name":"blocked","summary":"list blocked work"},{"name":"show <id>","summary":"item detail with deps and notes"}]},{"group":"Creating & updating","items":[{"name":"create","summary":"create an item — see the `create` section above"},{"name":"update <id> --set k=v","summary":"edit fields"},{"name":"claim <id>","summary":"mark in progress"},{"name":"close <id> --reason","summary":"close with a comment"},{"name":"schema","summary":"introspect this plugin's field model (--json) before create/update"}]},{"group":"Dependencies & references","items":[{"name":"dep add <from> <to>","summary":"<from> depends on <to> (so <to> blocks <from> and must close first)"},{"name":"mention add <from> <to>","summary":"record a free-text short-id reference"}]},{"group":"Notes & search","items":[{"name":"note add <id> <text>","summary":"append a worklog note"},{"name":"search <query>","summary":"search title/description/design/DoD/notes"}]}],"context_recovery":"Run `nxs prime` after a context compaction, /clear, or a new session — hosts auto-call it in Claude Code when a nexus-flow workspace is resolved.","create":{"example":"nxf create --type <bug|chore|decision|epic|feature> --title /".../" --priority <P0|P1|P2|P3|P4>","long_text_hint":"Long text without shell escaping: pipe a field via STDIN (`--description -`), read it from a file (`--description-file <path>`), or pipe the whole item as JSON (`nxf create --json -`).","recommendation":"Always set --priority (named variants, highest first: P0 … P4); an item created without a priority ranks last in `next`."},"next":[{"id":"ab12.0001","parent":null,"priority":"1","status":"in_progress","title":"Ship v1","type":"epic"}],"next_total":1,"purpose":"nexus-flow is a software issue tracker for epics and issues. You record items, the dependencies between them, due/defer dates, and priority; `next` and `blocked` are then derived deterministically from that graph rather than stored, so the work list is always consistent.","rules":["Track all work in nexus-flow itself: open an item for every task rather than keeping a separate TODO list or scratch notes — the board is the single source of truth.","Find what to work on next: `nxf next`.","Claim work before starting it: `nxf claim <id>`.","Close with a reason: `nxf close <id> --reason <text>`.","Use `--json` everywhere for deterministic, machine-readable output.","Choose the containment edge deliberately: `parent` is gating — a child rests when its container rests (a deferred, blocked, or closed parent propagates down and hides or masks the child). For a loose association that must NOT gate the child, use `contributes_to` (e.g. cream belongs to the shopping list but only contributes to the birthday plan, so deferring the birthday never hides the cream).","Defer only for a real calendar date — a day before which the item genuinely cannot start (`--defer <date>` on create, or `nxf update <id> --set defer=<date>`); a placeholder date for /"someday, once X ships/" is an anti-pattern that hides the item on a false promise. To wait on an external DELIVERY instead — there are no cross-workspace dependencies — model the delivery as an open WAIT chore in this workspace (title it `WAIT: <what ships>`, e.g. `WAIT: acme-api v2`), have the dependents `nxf dep add <id> <wait-chore>` onto it, and CLOSE the chore — with the delivered version in the reason — to release the whole chain. Each workspace keeps its own anchor; see `nxf guide deferring-and-waiting`.","Correct an item's fields once shortly after creating it (e.g. to fold in a review); after that keep the fields stable and record what you learn while working as append-only notes (`nxf note add <id> <text>`), not field edits. The original title and description are preserved on purpose: paired with the closing comment they form the intent-vs-outcome pair you learn from, so when an item no longer fits, open a new one and close the old with a reason instead of rewriting it past recognition.","When you cite a task's short-id in free text (body or note), also record the reference: `nxf mention add <this-item> <cited-id>`. It keeps the citation resolvable if ids are remapped on sync, and never blocks (it is not a dependency)."],"session_close":["Capture unfinished work as a note so the next session has the context: `nxf note add <id> <text>`.","Close finished items with the reason they're done: `nxf close <id> --reason <text>`.","If the project is under version control, commit and push your code changes."],"workflows":[{"name":"Starting work","steps":["nxf next","nxf show <id>","nxf claim <id>"]},{"name":"Completing work","steps":["nxf close <id> --reason /".../"","nxf next # pick up the next unblocked item"]},{"name":"Creating dependent work","steps":["nxf create --type <type> --title /".../" --priority <P…>","nxf create --type <type> --title /".../" --priority <P…>","nxf dep add <child> <prereq> # child depends on prereq; prereq must close first"]}]}Plugins
Ein Plugin bildet den universellen Kern auf die Sprache und Policy eines Konsumenten ab. Nichts in der CLI kodiert Vokabular fest — alles ergibt sich aus der aktiven Plugin-Konfiguration, einmal bei nxf init gewählt. Ein Plugin legt vier Dinge fest:
- Vokabular: die Worte für die beiden Item-Typen und die drei Status.
- Prioritätslabels: die Namen für die Prioritätsstufen 0–4.
- Ranking: wie
nextdie ready-Menge ordnet. - Darstellung: welche Felder
listundshowanzeigen.
Die zwei mitgelieferten Plugins
- issue-tracker — Software-Issue-Tracking: Epics und Issues, P0–P4-Prioritäten,
abhängigkeitsbewusstes Ranking.
- personal-todo — Persönliche To-do-Liste: Listen und Todos, now/soon/later-Prioritäten für
alltägliche Aufgaben.
Ihre Vokabulare unterscheiden sich:
- issue-tracker: ein Projekt ist ein
epic, ein Task ist einissue; die Status sind
open / in progress / closed; die Prioritäten sind P0–P4; next rankt nach Priorität, dann Fälligkeitsdatum, dann id.
- personal-todo: ein Projekt ist ein
project, ein Task ist eintodo; die Status sind
todo / doing / done; die Prioritäten sind now / soon / later / someday / icebox; next rankt nach Priorität, dann id (kein Fälligkeitsdatum als Tiebreak).
Named Variants auflösen: types und priorities
type und priority sind beide *named variants* — eine kleine, plugin-definierte Menge mit fester Ordnung. nxf schema --json exponiert beide als gekeyte Map, sodass eine Regel jedes der beiden Felder auf jedem Item auflöst:
schema.types[item.type] # "task" -> "issue"
schema.priorities[item.priority] # "0" -> "P0"Der auf einem Item gespeicherte Wert ist der *Handle*, nicht das Label. Für priority ist dieser Handle ein Ordinal — "0" ist die höchste Priorität, aufsteigend gezählt — bewusst plugin-unabhängig, damit next numerisch ranken kann und gesyncte Items keine Fremd-Labels tragen. Die schema.priorities-Map übersetzt das Ordinal zurück in ein menschliches Label.
Ordinal-Stabilitätsvertrag. Innerhalb einer Schema-Version ist die Bindung Ordinal→Bedeutung stabil und append-only: priority.labels darf am Ende wachsen, aber Umsortieren oder Einfügen verschiebt die Bedeutung bereits gespeicherter Items und ist daher ein breaking Schema-Change — ein Schema-Version-Bump mit Migration, keine In-place-Änderung.
Gleiche Daten, nebeneinander
Die Naht ist am klarsten, wenn Sie die gleichen Befehle auf den gleichen Daten unter jedem Plugin ausführen. Beide Workspaces unten enthalten drei Tasks: zwei mit Priorität 1 (einer fällig 2026-02-01, einer fällig 2026-03-01) und einer mit Priorität 2.
next zeigt zwei Unterschiede auf einmal — das Vokabular und das Ranking. Unter issue-tracker gewinnt das früher fällige P1-Issue (Book venue) den Tiebreak:
$ nxf next
0002 P1 open [feature] Book venue
0001 P1 open [feature] Draft proposal
0003 P2 open [feature] Order badgesUnter personal-todo stehen dieselben beiden soon-Todos bei der Priorität gleich und fallen auf die id zurück, sodass das zuerst erstellte (Draft proposal) zuerst kommt — und die Labels sind nun now/soon/later, todo/doing/done:
$ nxf next
0001 soon todo [todo] Draft proposal
0002 soon todo [todo] Book venue
0003 later todo [todo] Order badgesDennoch ist der gespeicherte Datensatz derselbe — list --json ist id-geordnet und hängt nicht vom aktiven Plugin ab. Das Plugin legt Darstellung und Ranking darüber; es ändert nie die Daten. Das eine Feld, das ein Plugin besitzt, ist type: Das Typ-Set ist plugin-deklariert, also speichert issue-tracker feature, wo personal-todo todo speichert. Lässt man dieses eine Feld weg, sind die Datensätze byte-für-byte dieselben:
$ nxf list --json
[{"archived":null,"assignee":null,"belongs_to":null,"closed_at":null,"closing_comment":null,"completion_criterion":null,"defer_until":null,"deleted":null,"description":"Outline the event proposal","design":null,"due":"2026-03-01","id":"ab12.0001","priority":"1","priority_label":"P1","status":"open","title":"Draft proposal","type":"feature","type_label":"feature"},{"archived":null,"assignee":null,"belongs_to":null,"closed_at":null,"closing_comment":null,"completion_criterion":null,"defer_until":null,"deleted":null,"description":"Reserve the event space","design":null,"due":"2026-02-01","id":"ab12.0002","priority":"1","priority_label":"P1","status":"open","title":"Book venue","type":"feature","type_label":"feature"},{"archived":null,"assignee":null,"belongs_to":null,"closed_at":null,"closing_comment":null,"completion_criterion":null,"defer_until":null,"deleted":null,"description":"Print attendee name badges","design":null,"due":null,"id":"ab12.0003","priority":"2","priority_label":"P2","status":"open","title":"Order badges","type":"feature","type_label":"feature"}]show macht den Vokabularunterschied an einem einzelnen Item konkret. Issue-tracker:
$ nxf show ab12.0002
0002 P1 Book venue
==================
TYPE: feature
STATUS: open
DESCRIPTION
-----------
Reserve the event space
DEFINITION OF DONE
------------------
DESIGN
------
NOTES
-----personal-todo, dasselbe ab12.0002:
$ nxf show ab12.0002
0002 soon Book venue
====================
TYPE: todo
STATUS: todo
WHY
---
Reserve the event space
DONE WHEN
---------
PLAN
----
LOG
---Diese Verdopplung ist keine Redundanz — sie *ist* die Erklärung. Das --json ist die Bedeutung; das Plugin ist, wie ein bestimmtes Publikum sie liest und rankt. Ein Plugin bei init zu wählen ist daher eine echte Entscheidung; führen Sie nxf init --help aus, um die Optionen zu sehen, bevor Sie sich festlegen.
Migration
Dieser Leitfaden behandelt zwei Arten von Migration: bestehende Arbeit nach nexus-flow zu bringen und zwischen Hauptversionen von nexus-flow selbst zu wechseln.
Einen bestehenden Tracker einbringen
nexus-flow hat keinen Massenimporter — und braucht keinen. Items werden über dasselbe nxf create erstellt, das Sie tagtäglich verwenden, also ist eine Migration ein kurzes Skript, das Ihren alten Tracker durchläuft und nxf einmal pro Item aufruft, wobei jeder Datensatz auf das Kernmodell abgebildet wird: ein --type (Projekt oder Task), ein --title, optional ein --parent, --priority, --due und --description. Erstellen Sie Abhängigkeiten danach mit nxf dep add neu. Da jeder Befehl --json annimmt und deterministisch ist, ist das Skript leicht zu schreiben und zu verifizieren:
# sketch: one create per legacy ticket, then wire dependencies
nxf create --type project --title "Imported backlog" --json
nxf create --type task --title "Legacy #1234" --parent ab12.0001 --priority P2 --json
nxf dep add ab12.0002 ab12.0003Wählen Sie bei nxf init das Plugin, dessen Vokabular zum Quell-Tracker passt — das ist die einzige Vorab-Entscheidung, von der der Import abhängt.
Einen Sync-Stream binden
nexus-flow ist offline-first: Sie arbeiten lokal gegen .nxs/, und ein Sync-Stream bringt jede Replik auf der dauerhaften Server-Wahrheit zur Konvergenz. Binden Sie einen Stream einmal, dann führen Sie Sync aus, wann immer Sie sich wieder verbinden:
nxs sync bind --create
nxs sync run --remote https://your-relay.example.comDie Arbeit geht zwischen den Läufen offline weiter; sync run tauscht Änderungen aus und führt sie deterministisch zusammen (die Engine ist eine CRDT, sodass gleichzeitige Bearbeitungen ohne Koordinator konvergieren). Der Server ist der dauerhafte Datensatz, kein Lock — niemand muss online sein, damit Sie Fortschritte machen.
Migration über Hauptversionen hinweg
nexus-flow folgt einfachem SemVer. Innerhalb einer Hauptversion sind Upgrades (nxs self-update) nahtlos einspielbar. Ein Sprung der Hauptversion (z. B. 1.x → 2.0) ist die einzige Stelle, an der eine Breaking Change landen darf, und jede solche Änderung wird mit einer Migrationsnotiz ausgeliefert, die beschreibt, was automatisch ist und was Ihre Aufmerksamkeit braucht. Diese Notizen werden pro Hauptversion zu einem einzigen Upgrade-Leitfaden zusammengefasst.
Lesen Sie die zusammengefassten Notizen für eine Hauptversion, bevor Sie darauf upgraden — sie liegen neben diesem Leitfaden auf der Website unter /docs und in den Release-Notes der Version. Innerhalb einer 0.x-Serie gibt es noch keine Stabilitätsgarantie, prüfen Sie also bei jedem Update das Changelog.
Befehlsreferenz
Aus dem Befehlsbaum der CLI generiert. Führen Sie einen Befehl mit --help aus, um alle Flags und Typen zu sehen.
- nxf agent-manifest
- Emit nxf's declared contribution to the shared agent files (the AGENTS.md/CLAUDE.md section, the prime command, the SessionStart hook) as data. The `nxs` umbrella assembles the shared files from each active module's manifest (spec §6.2); `--json` is the machine contract
- nxf archive
- Archive one or more items — "closed and put away". Cascades DOWN: each root and its whole `belongs_to` subtree are archived, but only when the root is closed and every descendant is closed (already-archived counts as closed). Atomic per root, independent between roots; the result reports each root's outcome plus the full list of ids actually archived (incl. cascaded). Archiving is reversible — see `unarchive`
- nxf archived
- List archived items (any status). Ordered by archive-date descending (most recent first); override with `--sort`
- nxf blocked
- List blocked items (open, with an open blocker or in a cycle). Ranked by default; override with `--sort id`
- nxf claim
- Claim an item: mark it in progress (and optionally assign it)
- nxf close
- Close an item, recording why. Closing is final (no hard delete), so a reason is required
- nxf closed
- List closed items (excluding archived). Ordered by close-date descending (most recent first); override with `--sort`
- nxf contributes add
- Record that `from` contributes to `to` (both must exist; never blocks)
- nxf contributes list
- List the items `id` contributes to
- nxf contributes remove
- Remove the `from -> to` contributes-to edge
- nxf create
- Create a new item — a complete item in one call. Title, description, and priority are required; design, the definition of done, a parent, and dependencies are optional. Run `nxf schema` for the active plugin's field model (labels, constraints, required fields)
- nxf deferred
- List deferred items (open, unblocked, with a future defer date) — the lane that is neither ready nor blocked. Ordered by defer-date ascending (soonest first); override with `--sort`
- nxf dep add
- Make `from` depend on `to`: `to` blocks `from`, so `from` stays blocked until `to` closes. Rejected if it would create a cycle
- nxf dep remove
- Remove the dependency where `from` depends on `to`
- nxf guide
- Print an embedded, offline guide; no topic lists the available topics
- nxf init
- Initialize a `.nxs` workspace in the current directory: set up flow, then delegate the shared agent files + the single `nxs prime` SessionStart hook to the `nxs` assembler. To set up the whole suite (and pick tools interactively), use `nxs init` instead
- nxf label add
- Attach a label to an item (idempotent). The label is trimmed; a blank label is rejected
- nxf label list
- List an item's labels (sorted)
- nxf label remove
- Detach a label from an item (observed-remove)
- nxf list
- List items, optionally filtered by status and/or type. Id-ordered by default (so the `--json` record stays plugin-independent); override with `--sort rank`
- nxf mention add
- Record that `from` cites the short-id `to` in its free text (no blocking)
- nxf mention list
- List the short-ids `id` mentions
- nxf mention remove
- Remove the `from -> to` reference
- nxf next
- List ready work — open, unblocked, not deferred — ranked by the active plugin's `next` policy. Add `--include-in-progress` to fold in actionable claimed work; override the order with `--sort id`
- nxf note add
- Append a note to an item. Pass `-` as the text to read the note body from STDIN (escaping-free, multi-line)
- nxf note list
- List an item's notes
- nxf schema
- Describe the active plugin's field model — vocabulary, priorities, and per field whether it is required on create / settable on update and how. `--json` is the machine contract; run it to learn what `create`/`update` accept in this workspace (the static `--help` cannot carry the active plugin's vocabulary)
- nxf search
- Search items by substring over title, description, design, DoD, and notes. Results are grouped by lane priority (next+in-progress → blocked → deferred → closed), each group in its natural order; archived items are excluded by default
- nxf setup claude
- Wire Claude Code: (re)assemble the shared agent files (AGENTS.md/CLAUDE.md) and the single SessionStart hook that runs `nxs prime` (the umbrella fan-out) plus the `nxs`/module permission allowlist, merged into `.claude/settings.json` (idempotent, never overwriting). The canonical verb is `nxs setup claude`; this delegates to it (host setup is an umbrella responsibility)
- nxf show
- Show one item with its dependencies and notes
- nxf unarchive
- Unarchive one or more items, making them visible again. Cascades UP only: each item and its ancestor chain resurface, but its children/siblings stay archived. Partial per root; the result reports each root's outcome plus the full list of ids actually unarchived
- nxf update
- Update item fields via `--set field=value` (repeatable). The long-form `description`/`design`/`completion_criterion` are ordinary `--set` fields. Run `nxf schema` for the settable fields and their plugin names. Convention: correct the field model once shortly after creation; once it is stable, record what you learn as append-only notes (`nxf note add`) rather than further field edits