Moteur Strands
Libre WebUI intègre un moteur d’agents fondé sur le
harnais open source Strands Agents
(@strands-agents/harness 0.1.1 sur @strands-agents/sdk 1.19.0). Il s’exécute
dans le processus du backend de Libre WebUI : aucun démon séparé n’est donc à
installer. Le SDK est chargé à la première utilisation du moteur ; un serveur
sur lequel Strands est désactivé ne le charge jamais.
Le moteur pilote les modèles que Libre WebUI sert déjà :
- les modèles Ollama, lorsque Ollama est activé
- les modèles des plugins de fournisseurs de chat ou de complétion actifs
Chaque appel de modèle passe par les mêmes services Ollama et de plugins que ceux utilisés par le chat. Il n’y a ni configuration de fournisseur distincte ni clé API distincte. Les identifiants des fournisseurs et l’interrupteur Ollama s’appliquent sans changement.
Vous pouvez utiliser le moteur à trois endroits :
- la page Strands, pour des sessions d’agent persistantes
- Chat, grâce aux entrées Strands du sélecteur de modèle
- Work, comme option Strands du contrôle Moteur du compositeur
Accès
Un administrateur choisit qui peut utiliser le moteur dans Paramètres → Gestion des utilisateurs → Accès et politiques → Moteur Strands :
| Mode | Libellé dans le paramètre | Qui peut utiliser Strands |
|---|---|---|
disabled | Désactivé | Personne, administrateurs compris (par défaut) |
admins | Administrateurs | Les administrateurs actifs |
all-users | Tous les utilisateurs | Tous les comptes actifs |
Une modification prend effet dès la requête suivante, sans redémarrage.
Pour fixer le mode au niveau du déploiement, définissez LIBRE_STRANDS_ACCESS :
LIBRE_STRANDS_ACCESS=admins # or disabled, all-users
Un mode fixé verrouille le contrôle dans Gestion des utilisateurs. Toute valeur
autre que disabled, admins ou all-users verrouille le moteur en position
désactivée au lieu de revenir au paramètre enregistré.
Le serveur applique le mode à chaque requête REST, au chat WebSocket et à
chaque appel de modèle d’une exécution Work. Si le mode ne peut pas être lu,
l’accès est refusé. Les comptes sans accès ne voient ni la page Strands, ni les
entrées Strands du chat, ni le moteur Strands de Work, et l’API répond 403.
Page Strands
Ouvrez Strands depuis la barre latérale (/strands).
- Les sessions sont conservées après un redémarrage, jusqu’à 200 par compte. Le premier message donne son nom à une nouvelle session.
- Choisissez un modèle pour chaque session. Modèle par défaut utilise votre modèle de chat par défaut.
- Les réponses s’affichent au fil de leur génération, avec le raisonnement du modèle et une carte pour chaque appel d’outil.
- Arrêter annule le tour en cours. Une session exécute un seul tour à la fois.
- Supprimer une session efface son historique et son espace de travail.
Chat
Choisissez Strands dans le sélecteur de modèle. L’entrée figure dans le groupe Agents, à côté des modèles d’agents CLI :
- Strands (
strands) utilise le modèle par défaut du moteur, c’est-à-dire votre modèle de chat par défaut. - Strands · modèle (fournisseur) (
strands:<route>) fixe un modèle et son fournisseur pour la conversation.
Dans le chat, Strands dépend uniquement de l’accès à Strands. Il n’a pas besoin de l’interrupteur des modèles d’agents CLI et reste visible lorsque celui-ci est désactivé. Dans le chat, l’agent dispose des mêmes outils de fichiers que sur la page Strands, dans un espace de travail privé par compte, et ses réponses arrivent sous forme de texte et de raisonnement. Consultez Agents de programmation installés pour le groupe Agents et pour utiliser une entrée Strands comme modèle de tâche pour les titres et les résumés de raisonnement.
Work
Dans le compositeur de Work, choisissez Libre WebUI ou Strands dans le contrôle Moteur, puis sélectionnez le modèle séparément. Avec Strands, un agent Strands planifie chaque étape, et Work exécute les outils qu’il demande dans le bac à sable de Work, selon la politique d’approbation habituelle de Work. Work reste la référence pour la transcription, les approbations, l’exécution des outils et l’historique des exécutions ; dans Work, l’agent Strands n’exécute aucun outil par lui-même.
Le modèle de fournisseur sous-jacent doit prendre en charge l’appel d’outils. Work le vérifie avant le démarrage d’une exécution et refuse un modèle qui n’annonce pas cette prise en charge.
Les exécutions Work enregistrées par des versions antérieures avec un préfixe de
modèle dsh: s’ouvrent comme des exécutions Strands. Consultez
Work : moteur Strands pour savoir comment le
choix du moteur interagit avec les modèles repris depuis le chat.
Modèle de sécurité
Sur la page Strands et dans le chat, l’agent dispose d’un jeu d’outils volontairement restreint :
read,writeetedit, pour les fichiers de son espace de travail- le plugin
todosdu harnais, pour planifier un travail en plusieurs étapes
Il n’a ni shell, ni récupération web, ni mémoire, ni compétences, et aucun
fichier AGENTS.md n’est injecté dans ses instructions.
Chaque session dispose d’un répertoire d’espace de travail privé, que l’agent
voit comme /workspace. Chaque chemin est résolu après le suivi des liens
symboliques et doit rester dans ce répertoire : un lien placé dans l’espace de
travail ne peut donc pas atteindre le reste du disque. Le bac à sable refuse
d’exécuter des commandes.
| Élément | Limite |
|---|---|
| Sessions par compte | 200 |
| Longueur du prompt | 32 000 caractères |
| Tours d’agent par message | 24 |
| Lecture ou écriture de fichier | 2 Mo par appel |
| Titre de session | 120 caractères |
Un tour qui atteint la limite de tours s’arrête et le signale. Chaque tour peut effectuer plusieurs appels de modèle auprès de vos fournisseurs : accordez donc l’accès avec le même soin que tout autre accès aux modèles qui consomme le budget des fournisseurs.
Stockage
Les données Strands se trouvent sous <DATA_DIR>/strands/, et non dans la base
de données de l’application. Chaque compte possède son propre répertoire,
<DATA_DIR>/strands/users/<account-hash>/, qui contient :
registry.json: la liste des sessions du comptesessions/: les instantanés de session Strands que l’agent utilise comme contextetranscripts/: la transcription affichée sur la page Strands pour chaque sessionworkspaces/: l’espace de travail privé de chaque sessionchat-workspace/: l’espace de travail utilisé par les tours du chat
Incluez <DATA_DIR>/strands/ dans vos sauvegardes si ces sessions comptent pour
vous.
Utilisation
La page Utilisation des fournisseurs (/usage) attribue les appels Strands à
l’agent Strands dans sa section Agents. Consultez
Utilisation des agents.
API
Chaque route exige un compte authentifié disposant de l’accès à Strands, sauf
/api/strands/access, qui exige un administrateur.
| Méthode | Chemin | Rôle |
|---|---|---|
GET | /api/strands/access | Lire le mode d’accès et savoir si LIBRE_STRANDS_ACCESS le fixe (admin) |
PUT | /api/strands/access | Définir mode sur disabled, admins ou all-users (admin ; 409 s’il est fixé) |
GET | /api/strands/health | Disponibilité du moteur et versions du harnais et du SDK |
GET | /api/strands/models | Modèles que le moteur peut piloter pour ce compte |
GET | /api/strands/sessions | Lister les sessions |
POST | /api/strands/sessions | Créer une session (title et model facultatifs) |
GET | /api/strands/sessions/:sessionId | Lire une session, sa transcription et savoir si un tour est en cours |
PATCH | /api/strands/sessions/:sessionId | Modifier le titre ou le modèle d’une session |
DELETE | /api/strands/sessions/:sessionId | Supprimer une session avec sa transcription et son espace de travail |
POST | /api/strands/sessions/:sessionId/messages | Envoyer { "text": "..." } et diffuser le tour en NDJSON |
POST | /api/strands/sessions/:sessionId/cancel | Arrêter le tour en cours |
Le flux de messages écrit un événement JSON par ligne : turn-start, text,
reasoning, tool-start, tool-result, done (avec la raison de l’arrêt et
la consommation de jetons lorsque le fournisseur la communique) et error.
Fermer la connexion annule le tour. Envoyer un message pendant qu’un tour est en
cours renvoie 409.
Configuration
| Variable | Valeur par défaut | Rôle |
|---|---|---|
LIBRE_STRANDS_ACCESS | non définie (paramètre administrateur, administrateurs) | Fixer disabled, admins ou all-users ; toute autre valeur verrouille le moteur en position désactivée |
Dépannage
Consultez Problèmes du moteur Strands.