Das apparat-Kommando

Apparat wird über das apparat-Kommando gesteuert. Du rufst es im Projektverzeichnis oder global (wenn verlinkt) auf.

Aufruf-Varianten

Die natürliche Form schreibt sich wie ein Befehl:

apparat vault init recherche
apparat entity new person --title="Maria Beispiel"

Diese Zwei-Wort-Form ist die, die du dir merken willst.

Hilfe zu einem Kommando

apparat help vault init
apparat help entity new

zeigt Argumente, Optionen und Standard­werte für das jeweilige Kommando. Das ist die maschinenlesbare Referenz; dieses Handbuch ergänzt sie um Beispiele und Kontext.

Übersicht der verfügbaren Kommandos

Die Kommandos sind nach Namespace gegliedert — jeder Namespace hat eine eigene Übersichts­seite, von der aus du zu den einzelnen Unter­kommandos navigierst.

vault — Vault-Verwaltung:

entity — Entitäten:

asset — Asset-Dateien:

graph — Beziehungs-Graph:

vector — Semantische Suche:

ner — Schreibassistenz:

consolidate — Vokabular-Konsolidierung:

chat — Dialog mit dem Vault:

llm — Inferenz-Backend:

octane — Web-Oberfläche:

user — Account-Verwaltung:

Mandanten-Ergonomie:

Mehr zur Architektur und Roadmap.

Installation

Per Default liegt das apparat-Kommando im Projektverzeichnis und du rufst es als ./apparat auf. Für globale Nutzung gibt es zwei Wege:

Symlink nach /usr/local/bin/ (empfohlen):

sudo ln -s "$(pwd)/apparat" /usr/local/bin/apparat

Per PATH-Variable:

echo "export PATH=\"$(pwd):\$PATH\"" >> ~/.bashrc

Beide Varianten erlauben dir anschließend, apparat aus beliebigen Verzeichnissen heraus aufzurufen — das Kommando findet artisan über seinen eigenen Skript-Pfad, nicht über getcwd().

Container-Kommandos werden automatisch im Container ausgeführt

In einer Mehrmandanten-Installation liegen die Sammlungen eines Mandanten im Web-Container dieses Mandanten. Deshalb führt das apparat-Kommando praktisch jeden Aufruf, der eine Sammlung berührt, automatisch dort aus — du tippst auf dem Host, gearbeitet wird im Container. Das gilt für die alltäglichen Sammlungs-Kommandos wie entity new, entity list oder vault validate ebenso wie für die, die ohnehin einen nur dort laufenden Dienst brauchen: den Embedding-Dienst (Bedeutungssuche), den Sprach­erkennungs-Dienst, das Sprach­modell für den Chat und die Datei­beobachtung.

Auf dem Host bleiben allein die Kommandos, die die Installation als Ganzes oder über Mandanten hinweg verwalten — das Einrichten, das Anlegen und Abgleichen von Mandanten und der Umgebungs-Abgleich. Sie würden in einem einzelnen Mandanten-Container keinen Sinn ergeben.

Du tippst also schlicht

apparat entity list --vault=recherche
apparat entity search "barrierefreie formulare" --semantic

und musst dich um Container-Details nicht selbst kümmern. Voraussetzung ist, dass der Container läuft (docker compose up -d); fehlt er, bricht das Kommando mit einer entsprechenden Fehlermeldung ab. Auf einer Einzel-Installation ohne eigene Mandanten gilt dasselbe Prinzip mit dem mitgelieferten Web-Container.

Vier Hinweise im Detail:

Mehrere Mandanten und die Mandanten-Wahl

Eine Apparat-Installation kann mehrere Mandanten beherbergen — etwa eine eigene Umgebung je Domain, jede mit ihren eigenen Sammlungen und ihrem eigenen Login. Auf einer gewöhnlichen Einzel-Installation gibt es genau einen Mandanten; dann brauchst du dich um die Mandanten-Wahl nicht zu kümmern, alles wird automatisch erkannt.

Sobald ein Kommando in den Container delegiert wird, muss feststehen, welcher Mandant gemeint ist. Die Reihenfolge:

  1. --tenant=<name> am einzelnen Aufruf,
  2. die Umgebungsvariable APPARAT_TENANT,
  3. automatische Erkennung, wenn es nur einen Mandanten gibt.

Welcher Mandant daraus resultiert — und woher die Wahl stammt —, zeigt dir ein einzelner Befehl:

apparat tenant

Er listet die bekannten Mandanten und nennt den aktuell aufgelösten samt Quelle (Flag, Umgebungsvariable oder automatische Erkennung). Lässt sich kein eindeutiger Mandant bestimmen, sagt er das ebenfalls — dann hilft --tenant=<name>.

Für längeres Arbeiten in einem Mandanten lohnt die interaktive Shell: Sie bindet Mandant und Sammlung einmal und nimmt danach präfixfreie Kommandos entgegen.

Das Einrichten eines neuen Mandanten gehört zur Server-Installation und ist daher nicht Teil des täglichen Arbeitens mit dem apparat-Kommando.

Nicht-interaktiver Modus

Jedes Kommando, das normalerweise interaktive Rückfragen stellt (z.B. entity new), akzeptiert die Option --no-interaction. In dieser Betriebsart fehlt jede Rückfrage — du musst alle benötigten Werte als Flags mitgeben, sonst bricht das Kommando mit einer Fehlermeldung ab. Das ist praktisch für Skripte und CI-Pipelines:

apparat entity new person \
  --title="Maria Beispiel" \
  --tag=wcag --tag=kollegin \
  --body-file=/tmp/notiz.md \
  --no-interaction

Stdin wird in diesem Modus als Body-Quelle akzeptiert, falls weder --body noch --body-file gesetzt ist — cat notiz.md | apparat entity new person --title=X --no-interaction funktioniert also auch.

Exit-Codes

Apparat-Kommandos halten sich an die POSIX-Konvention:

Code Bedeutung
0 Erfolgreich
1 Fehler (siehe Ausgabe)
2 Warnungen ohne harte Fehler (vault validate)