nxsflow
nexus-flow

Erste Schritte

nxs ist die Klammer der nexus-flow-Suite. Es ist eine Binary, die drei Bausteine trägt — flow (nxf: Projekte, Aufgaben, Abhängigkeiten), memory (nxm: durables Projektwissen) und chat (nxc: Koordination zwischen Agenten) — über einem gemeinsamen Speicher. Installiert wird einmal; welche der drei aktiv sind, entscheidest du pro Arbeitsbereich.

Diese Anleitung führt von „nichts installiert" zu einem Arbeitsbereich, dessen Agent sich zu Beginn jeder Sitzung seinen eigenen Kontext zurückholt. Sie ist der eine Ort, an dem die Ersteinrichtung steht; die Anleitungen der einzelnen Bausteine setzen hier auf.

Installieren

curl -fsSL https://nxsflow.com/nxs/install.sh | sh

Das Skript erkennt die Plattform, prüft den Download — eine sha256 und eine Signatur — und installiert ein Programm: nxs. Die übrigen Namen sind Symlinks darauf: nxf, nxm und nxc sind dieselbe Binary, die aus dem getippten Namen entscheidet, welche Persona sie ist. Genau deshalb können die vier in der Version nie auseinanderlaufen — es gibt nur ein Programm zu aktualisieren.

Die Signaturprüfung braucht entweder minisign oder ein OpenSSL, das Ed25519 beherrscht. Ein unverändertes macOS hat weder noch (sein openssl ist LibreSSL): also entweder minisign installieren — brew install minisign — oder mit NXF_INSECURE=1 starten, was allein die sha256 prüft und damit Integrität belegt, aber nicht Herkunft. nxs self-update prüft Signaturen danach bedingungslos.

nxs --version

Einen Arbeitsbereich einrichten

Ein Arbeitsbereich ist ein .nxs/-Verzeichnis in deinem Projekt: ein Speicher, in den jeder aktivierte Baustein schreibt. Angelegt wird er so:

nxs init

Auf einem echten Terminal fragt das mit den Pfeiltasten, welche Bausteine du willst. Die eigene Unterkonfiguration eines Bausteins läuft sichtbar in diesem Rahmen — flow fragt nach dem Plugin, denn diese Wahl entscheidet über das Vokabular, das du für die Lebensdauer des Arbeitsbereichs liest und schreibst.

Auf einem Agenten oder im Skript benennst du die Bausteine, statt gefragt zu werden:

nxs init --module flow --module memory --json

Beide Wege landen im selben Arbeitsbereich. Einen weiteren Baustein aktivierst du später mit einem erneuten nxs init — der Befehl ist idempotent und ergänzt, statt zu ersetzen.

Was nxs init hinterlässt

Vier Dinge, und alle vier sind es wert, gekannt zu werden:

  • .nxs/ — der Arbeitsbereich selbst: ein SQLite-Speicher, über den jeder aktive Baustein seine eigenen Sichten faltet. Er ist git-ignoriert und liegt lokal auf dieser Maschine.
  • Die geteilte Agenten-Datei — der AGENTS.md-Abschnitt, den jeder aktive Baustein beisteuert, zu einem Dokument zusammengesetzt statt zu dreien, die sich widersprechen.
  • Ein SessionStart-Hook je aktivem Bausteinnxf prime, nxm prime, nxc prime.
  • Ein Eintrag beim Hintergrunddienst — der Arbeitsbereich kommt auf die Liste, die dieser Dienst betreut, damit ein hier aufgeschobenes Datum oder ein deklariertes Fenster überhaupt jemanden hat, der hinsieht. Es ist ein lokaler Verzeichniseintrag und nichts weiter: er synchronisiert nichts, und es verlässt nichts diese Maschine. nxs sync unregister nimmt ihn wieder von der Liste.

Der Arbeitsbereich geht jedes davon im Einzelnen durch.

Der Hintergrunddienst, und die Frage, die init dazu stellt

Ein Prozess je Maschine hält die Fristen jedes Arbeitsbereichs, den er betreut, und synchronisiert die, die an einen Strom gebunden sind. Ohne ihn feuert ein hier fällig werdendes Aufschubdatum schlicht nie — deshalb bietet nxs init auf einem echten Terminal an, ihn einzurichten:

Set up the nexus-flow background service on this machine?

Sagst du nein, wird die Antwort in diesem Arbeitsbereich festgehalten, und kein späteres nxs init fragt erneut; der Rahmen sagt weiterhin, wie der Dienst steht, und nxs sync daemon install richtet ihn ein, sobald du es anders willst. Im Skript oder unter --json wird die Frage nie gestellt und nichts installiert: benenne es ausdrücklich mit nxs init --service, oder erledige die Frage mit nxs init --no-service.

Der Installer ist macOS-only (es ist ein launchd-Agent). Überall sonst startest du nxs sync daemon im Vordergrund unter deinem eigenen Supervisor — systemd, runit, was immer du schon hast — und er hält dort genau dieselben Fristen.

Was den Kontext zu Sitzungsbeginn zurückholt

Die Hooks sind einer je aktivem Baustein, nicht einer für die Klammer — und das ist eine bewusste Umkehr der früheren Form. Der Wirt kürzt jede Hook-Ausgabe für sich, bei 10.240 Byte; drei Hooks tragen also drei Budgets statt eines. Das ist gemessen, nicht angenommen: die Hooks dreier Bausteine von je rund 8 KB kamen vollständig an, zusammen 24 KB, wo ein einzelner kombinierter Hook bei 10 KB abgeschnitten worden wäre.

nxs prime gibt es weiterhin, und es ist weiterhin der Fächer:

nxs prime

Es führt das prime-Verb jedes aktiven Bausteins aus und gibt eine Antwort zurück — flows Brett, memorys Index, chats Kanal — in fester Reihenfolge und mit einem gemeinsamen now, damit ein Aufschubdatum in einem Lauf für jeden Baustein dasselbe bedeutet. Das ist der Befehl für das ganze Bild an einer Stelle. Die Sitzungs-Hooks gehen nur nicht mehr darüber.

So oder so gilt die Wirkung, auf die es ankommt: Ein Agent beginnt eine Sitzung und weiß bereits, was dieses Projekt gerade tut, was es gelernt hat und wer sonst daran arbeitet. Ein reiner flow-Bereich liefert genau flows prime; memory erscheint an dem Tag, an dem du memory aktivierst. Konfiguriert wird dafür nichts — die Hook-Menge folgt aus den aktiven Bausteinen.

Welcher Baustein wofür?

Kurz: flow für das, was zu tun ist, memory für das, was das Projekt weiß, chat für Agenten, die miteinander reden. Module ist die längere Antwort und lohnt sich vor den drei Detailanleitungen.

Wie es weitergeht

flow — was zu tun ist

Der Issue-Tracker der Suite: Items, die Abhängigkeiten zwischen ihnen, Fälligkeits- und Aufschubdaten, ein append-only Notizstrom und der Grund, aus dem ein Item geschlossen wurde. Das ist die Aufzeichnung dessen, was ein Projekt tut — und warum.

Eine Eigenschaft unterscheidet ihn von einer Ticket-Liste, und sie gehört vor alles andere: die Arbeitsliste wird abgeleitet, nicht gespeichert. nxf next und nxf blocked werden in dem Moment, in dem du fragst, aus dem Abhängigkeitsgraphen berechnet; sie können deshalb weder veralten noch ihm widersprechen. Niemand setzt ein Item auf machbar — das Schließen seiner letzten Vorbedingung macht es dazu.

Das prägt den ersten Schritt. Er lautet nicht „schreib eine Aufgabe", sondern halte fest, was es gibt und worauf es wartet:

nxf create --type feature --title "Release 1.0 ausliefern" --priority P1
nxf dep add <item> <vorbedingung>
nxf next

Was ein Item ist, kommt aus einem Plugin: die Typen, die du anlegen darfst, das Vokabular, das du liest und schreibst, und die Rangfolge hinter next. Die Wahl fällt einmal je Arbeitsbereich, weil sie alles prägt, was du danach tippst — mitgeliefert werden ein Issue-Tracker für Code-Projekte und eine persönliche To-do-Liste, beide über derselben Engine.

Jeder Befehl antwortet auf --json mit byte-stabiler Ausgabe, und das ist die Fläche, auf der Agenten bauen: ein Agent kann das ganze Brett bedienen, ohne dass vorher ein Mensch eine Tabelle liest.

Wohin von hier

  • Erste Schritte — vom leeren Verzeichnis zu einem geplanten, verfolgten Stück Arbeit.
  • Kernkonzepte — Items, Abhängigkeiten, und wie die beiden Spuren abgeleitet statt gespeichert werden.
  • Aufschieben und warten — die eine Unterscheidung, die leicht schiefgeht: ein echtes Kalenderdatum gegenüber dem Warten auf etwas, das erst geliefert werden muss.

memory — was das Projekt weiß

Durable Tatsachen, die die Sitzung überleben, in der sie gelernt wurden: eine Konvention, eine Falle, der Grund, aus dem eine Entscheidung so ausging. nxm remember schreibt eine, nxm recall <key> liest sie vollständig zurück, und ein stabiler Schlüssel lässt eine Tatsache an Ort und Stelle korrigieren, statt widersprüchliche Kopien von ihr anzuhäufen.

Der Zweck ist nicht Ablage, sondern Wiedervorlage. Erinnerungen werden zu Beginn jeder Sitzung zurückgegeben, damit der nächste Agent schon weiß, was der letzte gelernt hat. Nichts daran ist ein Suchproblem: kein Modell auf dem Schreibpfad, keine Embeddings, kein Ähnlichkeitsranking — derselbe Speicher antwortet heute wie in sechs Monaten gleich.

Der erste Schritt ist eine Zeile, und die Disziplin, die damit beginnt, ist eine harte Regel, die das Sitzungsbanner wiederholt: durables Projektwissen geht in nxm remember und nirgendwo sonst. Ein MEMORY.md oder eine andere zu diesem Zweck erfundene Datei wird nie zurückgelesen — das Wissen darin ist still verloren.

nxm remember "Die vier cargo-Tore laufen in CI, nicht lokal" --key gates
nxm memories                  # das Verzeichnis — eine Zeile je Erinnerung
nxm recall gates              # eine Erinnerung, vollständig

Was dabei ankommt, ist dieses Verzeichnis, nicht die Erinnerungen selbst: je eine Zeile, die sagt, was die Erinnerung sagt. Deshalb lohnt es sich, sie sorgfältig zu schreiben — niemand schlägt eine Regel nach, bevor er sie bricht, also muss die Verzeichniszeile sie aussprechen.

Wohin von hier

  • Erste Schritte — was memory braucht, bevor es laufen kann, und deine erste gemerkte Tatsache.
  • Kernkonzepte — Schlüssel und Auto-Schlüssel, die drei Register, die Abrufregel und der Grabstein.
  • Agenten und MCP — die memory_*-Werkzeuge, die ein MCP-Host bekommt, und wohin ein Agent schreibt.

chat — wie Agenten sich abstimmen

Der Kanal zwischen den Agenten eines Arbeitsbereichs. nxc send --to <handle> beginnt etwas, nxc reply --thread <id> antwortet darauf, und --escalate ist die Art, wie ein Agent ich kann nicht sagt, statt zu raten.

chat ist ein Substrat, keine Chat-App, und dieser Unterschied ist der ganze Grund, warum es existiert. Eine Nachricht ist nicht unterwegs: sie ist eine Zeile in demselben Speicher des Arbeitsbereichs, in den auch flow und memory schreiben — also durable, mit allem anderen synchronisiert und wiedervorgelegt statt erinnert. Kein Daemon, den man laufen lassen muss, kein Server, auf den man zeigt. Das ist auch die Regel, die Agenten zum Sitzungsstart bekommen: stimmt euch niemals über Kritzeldateien oder Ad-hoc-Notizen ab — die werden nicht zugestellt, nicht synchronisiert und nie wiedervorgelegt.

Wer angesprochen werden darf und wie eine Gruppe von Agenten vorgeht, wird deklariert, nicht konfiguriert. Eine Persona-Datei je Agent unter .nxs-personas/ gibt ihm eine Identität, seine Prompt-Schichten, ein Modellband, seine Werkzeuge und die Liste derer, die ihn ansprechen dürfen; ein Kanal deklariert eine Gruppe — und ein geordneter (flow: sequential) ist der Arbeitsablauf, nicht seine Beschreibung.

nxc send --to <handle> "<was zu tun ist>"     # eine Thread-Id kommt zurück
nxc reply --thread <id> "<die Antwort>"

Weil Agenten unbeaufsichtigt laufen, gehören die Grenzen zum Entwurf und sind kein Nachgedanke: eine Hop-Obergrenze, damit ein Gespräch nicht ewig kreist, ein menschliches Tor vor dem, was ein Agent nicht entscheidet, und eine Reservierung auf der Arbeitskopie, damit nicht zwei Agenten gleichzeitig in einem Checkout arbeiten.

Wohin von hier

  • Erste Schritte — eine Persona deklarieren und die erste Antwort bekommen.
  • Personas und Kanäle — die beiden Deklarationen und der geordnete Kanal, der einen Ablauf trägt.
  • Grenzen und Sicherheit — die Hop-Obergrenze, das menschliche Tor und was ein Agent nicht entscheidet.

Darauf bauen, oder mitbauen

Alles bis hierher beantwortet wie benutze ich das. Dieser Teil beantwortet wie ist es gebaut, und worauf darf ich bauen — und dafür stehen zwei Türen offen.

Darauf bauen. nexus-flow ist zuerst eine Bibliothek. Eine Anwendung bindet nexus-flow-facade ein, hält eine Engine und liest genau die Spuren, die auch die CLI liest — im selben Prozess, ohne Unterprozess und ohne Daemon dazwischen. Das überlässt das Repository nicht der Prosa: examples/tauri-board/ ist eine kleine, echte Desktop-Anwendung, die genau das tut, in etwa 120 Zeilen Rust und einer HTML-Datei. Ihr Fenster listet die Arbeit und zeichnet sich von selbst neu, sobald irgendetwas anderes in denselben Arbeitsbereich schreibt — weil sie den Änderungsstrom der Engine abonniert, statt ihn abzufragen. Wer hier ist, um eine eigene Oberfläche daraufzusetzen, nimmt dieses Beispiel als kürzesten Weg hinein.

Mitbauen. Das Projekt nimmt Beiträge an. Die Engine, die CLIs, die Anleitungen, die du gerade liest, und die Tests, die sie ehrlich halten, liegen in einem Cargo-Workspace, und die ganze Qualitätslatte sind vier Befehle, die du auf deiner eigenen Maschine fahren kannst — die nächste Seite zählt sie auf und sagt, welchen davon CI wann fährt. Die Nähte sind beschrieben statt geraten — dafür sind die Seiten unten da.

Beide Türen teilen sich den ersten Schritt: die Quellen holen, bauen, und etwas laufen lassen. Erste Schritte ist dieser Schritt, für beide Fälle.

Wohin von hier

Tippen, um zu suchen. Gefunden wird nach Wortlaut und nach Bedeutung — ein Abschnitt kann also eine Frage beantworten, die er nicht ausspricht.