Strands-motorn
Libre WebUI har en inbyggd agentmotor som bygger på
Strands Agents harness, som är
öppen källkod (@strands-agents/harness 0.1.1 på @strands-agents/sdk 1.19.0).
Den körs i Libre WebUI:s backendprocess, så det finns ingen separat daemon att
installera. SDK:t läses in första gången motorn används. En server där Strands
är avstängt läser aldrig in det.
Motorn driver de modeller som Libre WebUI redan tillhandahåller:
- Ollama-modeller, när Ollama är aktiverat
- modeller från aktiva leverantörsplugin för chatt eller textkomplettering
Varje modellanrop går genom samma Ollama- och plugintjänster som chatten använder. Det finns ingen separat leverantörskonfiguration och ingen separat API-nyckel. Leverantörernas autentiseringsuppgifter och Ollama-reglaget gäller oförändrade.
Du kan använda motorn på tre ställen:
- sidan Strands, för beständiga agentsessioner
- Chatt, via posterna Strands i modellväljaren
- Work, som alternativet Strands i kompositörens reglage Motor
Åtkomst
En administratör väljer vem som får använda motorn under Inställningar → Användarhantering → Åtkomst och policyer → Strands-motor:
| Läge | Etikett i inställningen | Vem kan använda Strands |
|---|---|---|
disabled | Av | Ingen, inte heller administratörer (standard) |
admins | Administratörer | Aktiva administratörer |
all-users | Alla användare | Alla aktiva konton |
En ändring börjar gälla vid nästa förfrågan, utan omstart.
Om du vill låsa läget på driftsättningsnivå anger du LIBRE_STRANDS_ACCESS:
LIBRE_STRANDS_ACCESS=admins # or disabled, all-users
Ett låst läge spärrar reglaget i Användarhantering. Alla andra värden än
disabled, admins eller all-users låser motorn i avstängt läge i stället
för att falla tillbaka på den sparade inställningen.
Servern upprätthåller läget för varje REST-förfrågan, för chatt över WebSocket
och för varje modellanrop i en Work-körning. Om läget inte kan läsas nekas
åtkomst. Konton utan åtkomst ser varken Strands-sidan, Strands-posterna i
chatten eller Strands-motorn i Work, och API:t svarar 403.
Strands-sidan
Öppna Strands i sidofältet (/strands).
- Sessioner finns kvar efter omstarter, upp till 200 per konto. Det första meddelandet ger en ny session dess namn.
- Välj en modell för varje session. Standardmodell använder din standardmodell för chatt.
- Svaren strömmas medan de genereras, med modellens resonemang och ett kort för varje verktygsanrop.
- Stoppa avbryter den pågående turen. En session kör en tur i taget.
- När du tar bort en session tas även dess historik och arbetsyta bort.
Chatt
Välj Strands i modellväljaren. Posten finns i gruppen Agenter, bredvid Agent CLI-modellerna:
- Strands (
strands) använder motorns standard, som är din standardmodell för chatt. - Strands · modell (leverantör) (
strands:<route>) låser en modell och dess leverantör för konversationen.
Strands i chatten beror bara på Strands-åtkomsten. Det kräver inte reglaget för Agent CLI-modeller och visas även när det reglaget är avstängt. I chatten har agenten samma filverktyg som på Strands-sidan, i en privat arbetsyta per konto, och svaren kommer som text och resonemang. Se Installerade kodagenter för gruppen Agenter och för hur du använder en Strands-post som uppgiftsmodell för titlar och tankesammanfattningar.
Work
I Work-kompositören väljer du Libre WebUI eller Strands i reglaget Motor och väljer modellen separat. Med Strands planerar en Strands-agent varje steg, och Work kör de verktyg som agenten begär i Work-sandlådan enligt Works vanliga godkännandepolicy. Work är fortsatt den som bestämmer över transkriptet, godkännanden, verktygskörning och körhistorik. Strands-agenten kör inga egna verktyg i Work.
Den underliggande leverantörsmodellen måste stödja verktygsanrop. Work kontrollerar det innan en körning startar och avvisar en modell som inte anger stöd för verktyg.
Work-körningar som sparats i tidigare versioner med modellprefixet dsh: öppnas
som Strands-körningar. Se Work: Strands-motorn
för hur motorvalet samverkar med modeller som följer med från chatten.
Säkerhetsmodell
På Strands-sidan och i chatten har agenten en medvetet liten verktygsuppsättning:
read,writeochedit, för filer i dess arbetsyta- ramverkets plugin
todos, för att planera arbete i flera steg
Den har inget skal, ingen webbhämtning, inget minne och inga färdigheter, och
ingen AGENTS.md-fil förs in i dess instruktioner.
Varje session har en privat arbetsyta, som agenten ser som /workspace. Varje
sökväg löses upp efter att symboliska länkar har följts och måste stanna inom
den katalogen, så en länk i arbetsytan kan inte nå resten av disken. Sandlådan
vägrar att köra kommandon.
| Objekt | Gräns |
|---|---|
| Sessioner per konto | 200 |
| Promptlängd | 32 000 tecken |
| Agentturer per meddelande | 24 |
| Filläsning eller filskrivning | 2 MB per anrop |
| Sessionstitel | 120 tecken |
En tur som når gränsen för antal turer stoppas och talar om det. Varje tur kan göra flera modellanrop till dina leverantörer, så ge åtkomst med samma omsorg som all annan modellåtkomst som förbrukar leverantörsbudget.
Lagring
Strands-data lagras under <DATA_DIR>/strands/, inte i programmets databas.
Varje konto har en egen katalog, <DATA_DIR>/strands/users/<account-hash>/, som
innehåller:
registry.json: kontots sessionslistasessions/: de Strands-sessionsögonblicksbilder som agenten använder som kontexttranscripts/: transkriptet som visas på Strands-sidan för varje sessionworkspaces/: varje sessions privata arbetsytachat-workspace/: arbetsytan som används av chattens turer
Ta med <DATA_DIR>/strands/ i säkerhetskopiorna om sessionerna är viktiga för
dig.
Användning
Leverantörsanvändning (/usage) tillskriver Strands-anrop agenten Strands i
avsnittet Agenter. Se Agentanvändning.
API
Varje route kräver ett autentiserat konto med Strands-åtkomst, utom
/api/strands/access, som kräver en administratör.
| Metod | Sökväg | Syfte |
|---|---|---|
GET | /api/strands/access | Läs åtkomstläget och om LIBRE_STRANDS_ACCESS låser det (admin) |
PUT | /api/strands/access | Sätt mode till disabled, admins eller all-users (admin; 409 om låst) |
GET | /api/strands/health | Motorns tillgänglighet samt versionerna av ramverket och SDK:t |
GET | /api/strands/models | Modeller som motorn kan driva för det här kontot |
GET | /api/strands/sessions | Lista sessioner |
POST | /api/strands/sessions | Skapa en session (valfria title och model) |
GET | /api/strands/sessions/:sessionId | Läs en session, dess transkript och om en tur pågår |
PATCH | /api/strands/sessions/:sessionId | Ändra en sessions titel eller modell |
DELETE | /api/strands/sessions/:sessionId | Ta bort en session med dess transkript och arbetsyta |
POST | /api/strands/sessions/:sessionId/messages | Skicka { "text": "..." } och strömma turen som NDJSON |
POST | /api/strands/sessions/:sessionId/cancel | Stoppa den pågående turen |
Meddelandeströmmen skriver en JSON-händelse per rad: turn-start, text,
reasoning, tool-start, tool-result, done (med stoppanledningen och
tokenanvändningen när leverantören rapporterar den) och error. Om
anslutningen stängs avbryts turen. Om du skickar ett meddelande medan en tur
pågår returneras 409.
Konfiguration
| Variabel | Standard | Syfte |
|---|---|---|
LIBRE_STRANDS_ACCESS | inte satt (administratörsinställning, admins) | Lås disabled, admins eller all-users; alla andra värden låser motorn i avstängt läge |