Mesin Strands
Libre WebUI menyertakan mesin agen yang dibangun di atas
Strands Agents harness sumber
terbuka (@strands-agents/harness 0.1.1 di atas @strands-agents/sdk 1.19.0).
Mesin ini berjalan di dalam proses backend Libre WebUI, jadi tidak ada daemon
terpisah yang perlu dipasang. SDK baru dimuat saat mesin pertama kali digunakan;
server yang mematikan Strands tidak pernah memuatnya.
Mesin ini menjalankan model yang sudah disajikan Libre WebUI:
- model Ollama, jika Ollama diaktifkan
- model dari plugin penyedia chat atau completion yang aktif
Setiap panggilan model melewati layanan Ollama dan plugin yang sama dengan yang dipakai Chat. Tidak ada konfigurasi penyedia terpisah dan tidak ada kunci API terpisah. Kredensial penyedia dan sakelar Ollama berlaku tanpa perubahan.
Mesin ini dapat digunakan di tiga tempat:
- halaman Strands, untuk sesi agen yang persisten
- Chat, melalui entri Strands di pemilih model
- Work, sebagai opsi Strands pada kontrol Mesin di composer
Akses
Administrator menentukan siapa yang dapat menggunakan mesin ini di Pengaturan → Manajemen Pengguna → Akses dan kebijakan → Mesin Strands:
| Mode | Label di pengaturan | Siapa yang dapat menggunakan Strands |
|---|---|---|
disabled | Mati | Tidak ada, termasuk administrator (bawaan) |
admins | Administrator | Administrator aktif |
all-users | Semua pengguna | Setiap akun aktif |
Perubahan berlaku pada permintaan berikutnya, tanpa restart.
Untuk mengunci mode di tingkat deployment, atur LIBRE_STRANDS_ACCESS:
LIBRE_STRANDS_ACCESS=admins # or disabled, all-users
Mode yang dikunci akan mengunci kontrolnya di Manajemen Pengguna. Nilai apa pun
selain disabled, admins, atau all-users justru mengunci mesin dalam keadaan
mati, alih-alih kembali ke pengaturan yang tersimpan.
Server menerapkan mode ini pada setiap permintaan REST, pada chat WebSocket, dan
pada setiap panggilan model dalam run Work. Jika mode tidak dapat dibaca, akses
ditolak. Akun tanpa akses tidak melihat halaman Strands, entri chat Strands, atau
mesin Work Strands, dan API menjawab 403.
Halaman Strands
Buka Strands dari sidebar (/strands).
- Sesi tetap tersimpan setelah restart, hingga 200 per akun. Pesan pertama menjadi nama sesi baru.
- Pilih model untuk setiap sesi. Model default memakai model chat default Anda.
- Balasan dialirkan saat dihasilkan, lengkap dengan penalaran model dan kartu untuk setiap panggilan alat.
- Hentikan membatalkan giliran yang sedang berjalan. Satu sesi menjalankan satu giliran dalam satu waktu.
- Menghapus sesi akan menghapus riwayat dan ruang kerjanya.
Chat
Pilih Strands di pemilih model. Entri ini muncul di grup Agen di samping model agen CLI:
- Strands (
strands) memakai model bawaan mesin, yaitu model chat default Anda. - Strands · model (penyedia) (
strands:<route>) mengunci satu model beserta penyedianya untuk percakapan tersebut.
Strands di Chat hanya bergantung pada akses Strands. Fitur ini tidak memerlukan sakelar model agen CLI, dan tetap muncul saat sakelar itu mati. Di Chat, agen memiliki alat file yang sama seperti di halaman Strands, dalam satu ruang kerja pribadi per akun, dan balasannya tiba sebagai teks dan penalaran. Lihat Agen koding terpasang untuk grup Agen dan untuk memakai entri Strands sebagai model tugas untuk judul dan ringkasan pemikiran.
Work
Di composer Work, pilih Libre WebUI atau Strands pada kontrol Mesin, lalu pilih modelnya secara terpisah. Dengan Strands, agen Strands merencanakan setiap langkah, dan Work menjalankan alat yang dimintanya di sandbox Work sesuai kebijakan persetujuan Work yang biasa. Work tetap menjadi sumber otoritatif untuk transkrip, persetujuan, eksekusi alat, dan riwayat run; agen Strands tidak menjalankan alatnya sendiri di Work.
Model penyedia yang mendasarinya harus mendukung pemanggilan alat. Work memeriksanya sebelum run dimulai dan menolak model yang tidak menyatakan dukungan alat.
Run Work yang disimpan oleh rilis sebelumnya dengan awalan model dsh: dibuka
sebagai run Strands. Lihat Work: mesin Strands
untuk cara pilihan mesin berinteraksi dengan model yang dibawa dari Chat.
Model keamanan
Di halaman Strands dan di Chat, agen sengaja diberi sekumpulan alat yang kecil:
read,write, danedit, untuk file di ruang kerjanya- plugin
todosdari harness, untuk merencanakan pekerjaan beberapa langkah
Agen tidak memiliki shell, web fetch, memori, maupun skill, dan tidak ada file
AGENTS.md yang disisipkan ke instruksinya.
Setiap sesi memiliki direktori ruang kerja pribadi, yang dilihat agen sebagai
/workspace. Setiap path diselesaikan setelah mengikuti symlink dan harus tetap
berada di dalam direktori itu, sehingga tautan di ruang kerja tidak dapat
menjangkau bagian lain dari disk. Sandbox menolak menjalankan perintah.
| Item | Batas |
|---|---|
| Sesi per akun | 200 |
| Panjang prompt | 32.000 karakter |
| Giliran agen per pesan | 24 |
| Baca atau tulis file | 2 MB per panggilan |
| Judul sesi | 120 karakter |
Giliran yang mencapai batas giliran akan berhenti dan memberi tahu hal itu. Setiap giliran dapat melakukan beberapa panggilan model ke penyedia Anda, jadi berikan akses dengan kehati-hatian yang sama seperti akses model lain yang menghabiskan anggaran penyedia.
Penyimpanan
Data Strands disimpan di <DATA_DIR>/strands/, bukan di basis data aplikasi.
Setiap akun memiliki direktorinya sendiri,
<DATA_DIR>/strands/users/<account-hash>/, yang berisi:
registry.json: daftar sesi milik akunsessions/: snapshot sesi Strands yang dipakai agen sebagai kontekstranscripts/: transkrip yang ditampilkan di halaman Strands untuk setiap sesiworkspaces/: ruang kerja pribadi setiap sesichat-workspace/: ruang kerja yang dipakai oleh giliran Chat
Sertakan <DATA_DIR>/strands/ dalam cadangan jika sesi-sesi tersebut penting
bagi Anda.
Penggunaan
Penggunaan Penyedia (/usage) mencatat panggilan Strands atas nama agen
Strands di bagian Agen. Lihat
Penggunaan agen.
API
Setiap rute memerlukan akun terautentikasi dengan akses Strands, kecuali
/api/strands/access, yang memerlukan administrator.
| Metode | Path | Tujuan |
|---|---|---|
GET | /api/strands/access | Membaca mode akses dan apakah LIBRE_STRANDS_ACCESS menguncinya (admin) |
PUT | /api/strands/access | Mengatur mode ke disabled, admins, atau all-users (admin; 409 jika dikunci) |
GET | /api/strands/health | Ketersediaan mesin serta versi harness dan SDK |
GET | /api/strands/models | Model yang dapat dijalankan mesin untuk akun ini |
GET | /api/strands/sessions | Menampilkan daftar sesi |
POST | /api/strands/sessions | Membuat sesi (title dan model opsional) |
GET | /api/strands/sessions/:sessionId | Membaca sesi, transkripnya, dan apakah ada giliran yang sedang berjalan |
PATCH | /api/strands/sessions/:sessionId | Mengubah judul atau model sesi |
DELETE | /api/strands/sessions/:sessionId | Menghapus sesi beserta transkrip dan ruang kerjanya |
POST | /api/strands/sessions/:sessionId/messages | Mengirim { "text": "..." } dan mengalirkan giliran sebagai NDJSON |
POST | /api/strands/sessions/:sessionId/cancel | Menghentikan giliran yang sedang berjalan |
Aliran pesan menulis satu event JSON per baris: turn-start, text,
reasoning, tool-start, tool-result, done (dengan alasan berhenti dan
penggunaan token jika penyedia melaporkannya), dan error. Menutup koneksi akan
membatalkan giliran. Mengirim pesan saat giliran sedang berjalan menghasilkan
409.
Konfigurasi
| Variabel | Bawaan | Tujuan |
|---|---|---|
LIBRE_STRANDS_ACCESS | tidak ditetapkan (pengaturan admin, admins) | Mengunci disabled, admins, atau all-users; nilai lain mengunci mesin dalam keadaan mati |
Pemecahan masalah
Lihat Masalah mesin Strands.