Zum Hauptinhalt springen

Strands-Engine

Libre WebUI bettet eine Agenten-Engine ein, die auf dem quelloffenen Strands-Agents-Harness aufbaut (@strands-agents/harness 0.1.1 auf @strands-agents/sdk 1.19.0). Sie läuft im Backend-Prozess von Libre WebUI, daher musst du keinen separaten Daemon installieren. Das SDK wird geladen, wenn die Engine zum ersten Mal verwendet wird; ein Server, auf dem Strands ausgeschaltet ist, lädt es nie.

Die Engine steuert die Modelle, die Libre WebUI bereits bereitstellt:

  • Ollama-Modelle, wenn Ollama aktiviert ist
  • Modelle aus aktiven Chat- oder Completion-Anbieter-Plugins

Jeder Modellaufruf läuft über dieselben Ollama- und Plugin-Dienste, die auch Chat verwendet. Es gibt keine separate Anbieterkonfiguration und keinen separaten API-Schlüssel. Anbieterzugangsdaten und der Ollama-Schalter gelten unverändert.

Du kannst die Engine an drei Stellen verwenden:

  • auf der Seite Strands, für dauerhafte Agentensitzungen
  • in Chat, über die Strands-Einträge in der Modellauswahl
  • in Work, als Option Strands der Engine-Auswahl im Eingabebereich

Zugriff​

Ein Administrator legt unter Einstellungen → Benutzerverwaltung → Zugriff und Richtlinien → Strands-Engine fest, wer die Engine verwenden darf:

ModusBezeichnung in der EinstellungWer Strands verwenden darf
disabledAusNiemand, auch keine Administratoren (Standard)
adminsAdministratorenAktive Administratoren
all-usersAlle BenutzerJedes aktive Konto

Eine Änderung gilt ab der nächsten Anfrage, ohne Neustart.

Um den Modus auf Bereitstellungsebene festzulegen, setze LIBRE_STRANDS_ACCESS:

LIBRE_STRANDS_ACCESS=admins # or disabled, all-users

Ein festgelegter Modus sperrt das Steuerelement in der Benutzerverwaltung. Jeder andere Wert als disabled, admins oder all-users sperrt die Engine im ausgeschalteten Zustand, statt auf die gespeicherte Einstellung zurückzugreifen.

Der Server setzt den Modus bei jeder REST-Anfrage, beim WebSocket-Chat und bei jedem Modellaufruf eines Work-Laufs durch. Lässt sich der Modus nicht lesen, wird der Zugriff verweigert. Konten ohne Zugriff sehen weder die Strands-Seite noch die Strands-Einträge im Chat oder die Strands-Engine in Work, und die API antwortet mit 403.

Strands-Seite​

Öffne Strands über die Seitenleiste (/strands).

  • Sitzungen bleiben über Neustarts hinweg erhalten, bis zu 200 pro Konto. Die erste Nachricht gibt einer neuen Sitzung ihren Namen.
  • Wähle für jede Sitzung ein Modell. Standardmodell verwendet dein Standard-Chatmodell.
  • Antworten werden während der Erzeugung gestreamt, mit dem Reasoning des Modells und einer Karte für jeden Werkzeugaufruf.
  • Stoppen bricht den laufenden Turn ab. Eine Sitzung führt immer nur einen Turn gleichzeitig aus.
  • Wenn du eine Sitzung löschst, werden ihr Verlauf und ihr Arbeitsbereich entfernt.

Chat​

Wähle Strands in der Modellauswahl. Es erscheint in der Gruppe Agenten neben den Agent-CLI-Modellen:

  • Strands (strands) verwendet den Standard der Engine, also dein Standard-Chatmodell.
  • Strands · Modell (Anbieter) (strands:<route>) fixiert ein Modell und seinen Anbieter für das Gespräch.

Strands in Chat hängt nur vom Strands-Zugriff ab. Es benötigt den Schalter für Agent-CLI-Modelle nicht und erscheint auch, wenn dieser Schalter ausgeschaltet ist. In Chat hat der Agent dieselben Dateiwerkzeuge wie auf der Strands-Seite, in einem privaten Arbeitsbereich pro Konto, und seine Antworten kommen als Text und Reasoning an. Unter Installierte Programmieragenten findest du mehr zur Gruppe Agenten und dazu, wie du einen Strands-Eintrag als Aufgabenmodell für Titel und Reasoning-Zusammenfassungen verwendest.

Work​

Wähle im Eingabebereich von Work in der Engine-Auswahl Libre WebUI oder Strands und wähle das Modell separat. Mit Strands plant ein Strands-Agent jeden Schritt, und Work führt die angeforderten Werkzeuge in der Work-Sandbox unter der normalen Freigaberichtlinie von Work aus. Work bleibt maßgeblich für Transkript, Freigaben, Werkzeugausführung und Laufverlauf; der Strands-Agent führt in Work keine eigenen Werkzeuge aus.

Das zugrunde liegende Anbietermodell muss Werkzeugaufrufe unterstützen. Work prüft das vor dem Start eines Laufs und lehnt ein Modell ab, das keine Werkzeugunterstützung angibt.

Work-Läufe, die frühere Versionen mit dem Modellpräfix dsh: gespeichert haben, öffnen sich als Strands-Läufe. Unter Work: Strands-Engine erfährst du, wie die Engine-Wahl mit Modellen zusammenspielt, die aus Chat übernommen werden.

Sicherheitsmodell​

Auf der Strands-Seite und in Chat hat der Agent bewusst nur wenige Werkzeuge:

  • read, write und edit, für Dateien in seinem Arbeitsbereich
  • das Harness-Plugin todos, um mehrstufige Arbeit zu planen

Er hat keine Shell, keinen Webabruf, kein Gedächtnis und keine Skills, und es wird keine AGENTS.md-Datei in seine Anweisungen eingefügt.

Jede Sitzung hat ein privates Arbeitsverzeichnis, das der Agent als /workspace sieht. Jeder Pfad wird nach dem Auflösen symbolischer Links geprüft und muss in diesem Verzeichnis bleiben, sodass ein Link im Arbeitsbereich den Rest der Festplatte nicht erreichen kann. Die Sandbox verweigert die Ausführung von Befehlen.

ElementGrenze
Sitzungen pro Konto200
Prompt-Länge32.000 Zeichen
Agenten-Turns pro Nachricht24
Datei lesen oder schreiben2 MB pro Aufruf
Sitzungstitel120 Zeichen

Ein Turn, der die Turn-Grenze erreicht, stoppt und meldet das. Jeder Turn kann mehrere Modellaufrufe an deine Anbieter auslösen. Vergib den Zugriff deshalb mit derselben Sorgfalt wie jeden anderen Modellzugriff, der Anbieterbudget verbraucht.

Speicherung​

Strands-Daten liegen unter <DATA_DIR>/strands/, nicht in der Anwendungsdatenbank. Jedes Konto hat ein eigenes Verzeichnis, <DATA_DIR>/strands/users/<account-hash>/, mit folgendem Inhalt:

  • registry.json: die Sitzungsliste des Kontos
  • sessions/: die Strands-Sitzungssnapshots, die der Agent als Kontext nutzt
  • transcripts/: das Transkript, das die Strands-Seite für jede Sitzung anzeigt
  • workspaces/: der private Arbeitsbereich jeder Sitzung
  • chat-workspace/: der Arbeitsbereich für Chat-Turns

Nimm <DATA_DIR>/strands/ in deine Sicherungen auf, wenn dir die Sitzungen wichtig sind.

Nutzung​

Anbieter-Nutzung (/usage) ordnet Strands-Aufrufe im Abschnitt Agenten dem Agenten Strands zu. Siehe Agentennutzung.

API​

Jede Route erfordert ein authentifiziertes Konto mit Strands-Zugriff, außer /api/strands/access, das einen Administrator erfordert.

MethodePfadZweck
GET/api/strands/accessZugriffsmodus lesen und ob LIBRE_STRANDS_ACCESS ihn festlegt (Admin)
PUT/api/strands/accessmode auf disabled, admins oder all-users setzen (Admin; 409, wenn festgelegt)
GET/api/strands/healthVerfügbarkeit der Engine sowie Harness- und SDK-Version
GET/api/strands/modelsModelle, die die Engine für dieses Konto steuern kann
GET/api/strands/sessionsSitzungen auflisten
POST/api/strands/sessionsSitzung erstellen (optional title und model)
GET/api/strands/sessions/:sessionIdSitzung, ihr Transkript und den Status eines laufenden Turns lesen
PATCH/api/strands/sessions/:sessionIdTitel oder Modell einer Sitzung ändern
DELETE/api/strands/sessions/:sessionIdSitzung samt Transkript und Arbeitsbereich löschen
POST/api/strands/sessions/:sessionId/messages{ "text": "..." } senden und den Turn als NDJSON streamen
POST/api/strands/sessions/:sessionId/cancelLaufenden Turn stoppen

Der Nachrichtenstream schreibt ein JSON-Ereignis pro Zeile: turn-start, text, reasoning, tool-start, tool-result, done (mit dem Stoppgrund und der Tokennutzung, sofern der Anbieter sie meldet) und error. Das Schließen der Verbindung bricht den Turn ab. Wer eine Nachricht sendet, während ein Turn läuft, erhält 409.

Konfiguration​

VariableStandardZweck
LIBRE_STRANDS_ACCESSnicht gesetzt (Admin-Einstellung, admins)disabled, admins oder all-users festlegen; jeder andere Wert sperrt die Engine im ausgeschalteten Zustand

Fehlerbehebung​

Siehe Probleme mit der Strands-Engine.