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:
| Modus | Bezeichnung in der Einstellung | Wer Strands verwenden darf |
|---|---|---|
disabled | Aus | Niemand, auch keine Administratoren (Standard) |
admins | Administratoren | Aktive Administratoren |
all-users | Alle Benutzer | Jedes 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,writeundedit, 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.
| Element | Grenze |
|---|---|
| Sitzungen pro Konto | 200 |
| Prompt-Länge | 32.000 Zeichen |
| Agenten-Turns pro Nachricht | 24 |
| Datei lesen oder schreiben | 2 MB pro Aufruf |
| Sitzungstitel | 120 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 Kontossessions/: die Strands-Sitzungssnapshots, die der Agent als Kontext nutzttranscripts/: das Transkript, das die Strands-Seite für jede Sitzung anzeigtworkspaces/: der private Arbeitsbereich jeder Sitzungchat-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.
| Methode | Pfad | Zweck |
|---|---|---|
GET | /api/strands/access | Zugriffsmodus lesen und ob LIBRE_STRANDS_ACCESS ihn festlegt (Admin) |
PUT | /api/strands/access | mode auf disabled, admins oder all-users setzen (Admin; 409, wenn festgelegt) |
GET | /api/strands/health | Verfügbarkeit der Engine sowie Harness- und SDK-Version |
GET | /api/strands/models | Modelle, die die Engine für dieses Konto steuern kann |
GET | /api/strands/sessions | Sitzungen auflisten |
POST | /api/strands/sessions | Sitzung erstellen (optional title und model) |
GET | /api/strands/sessions/:sessionId | Sitzung, ihr Transkript und den Status eines laufenden Turns lesen |
PATCH | /api/strands/sessions/:sessionId | Titel oder Modell einer Sitzung ändern |
DELETE | /api/strands/sessions/:sessionId | Sitzung 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/cancel | Laufenden 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
| Variable | Standard | Zweck |
|---|---|---|
LIBRE_STRANDS_ACCESS | nicht gesetzt (Admin-Einstellung, admins) | disabled, admins oder all-users festlegen; jeder andere Wert sperrt die Engine im ausgeschalteten Zustand |