Work: izolált munkaterületek
A Work a Libre WebUI natív coding-agent felülete. Minden task tartós conversationt,
explicit provider route-ot és /workspace filesystemet egyesít. A modell fájlt néz/
szerkeszt, task-scoped Docker containerben vagy Kubernetes Podban parancsot futtat és previewt indít.
Közvetlenül Libre WebUI-ban van, Libre Claw vagy agent daemon nélkül.
Minden API hitelesített Work-hozzáférésű accountot kér. Default csak admin; admin minden aktív usernek megnyithatja, de host-folder admin-only. Work arbitrary shell commandot enged sandboxban, network egresssel, ha runtime policy nem tiltja. Minden hozzáférő trusted runtime operator, nem egyszerű chat user.
Kiadási újdonságok
- Work és Chat külön sidebar action.
- Taskok normál sidebarban stabil pozícióval és direkt törléssel.
- Dedicated sandbox identity és tartós Docker volume/Kubernetes PVC taskonként.
- Conversation, run state, tools, model és ownership DB-ben.
- Live authenticated stream texthez, exposed reasoninghez, tools/resultshez, usagehez és state-hez.
- Server-owned worker skills inspect/edit/verify/preview guidance-szel, control files nélkül.
- Tool-capable Ollama, Cloud és provider plugins.
- Responsive Conversation/Workspace split drag/keyboard és mobil switcher.
- Files, Activity, Git, Terminal, Preview, Screen — a Work Computer.
- Light/dark syntax, formatting, conflict detection és drafts.
- Dismissible remote disclosure userenként.
- 25 locale, Arabic RTL, miközben code/paths/IDs/output LTR.
A tartós egység a workspace, nem folyamatos container. Libre indít/leállít/recreate-el, de volume megmarad.
Architektúra
Libre, nem model/browser választ names, image, mount, user, limits, network, preview port. Csak ezek a tools:
list_filesread_filewrite_filedelete_filemove_filesearch_filesrun_commandstart_previewstop_preview
delete_file/move_file path-guarded: nem lép ki, nem követ symlinket, directoryhoz
recursive flag kell és nem overwrite-ol. File helperrel preview alatt is működik, amikor run_command blokkolt.
Model request backendből jön, nem containerből és független network policytól.
Követelmények
- Docker backend: telepített/elérhető Docker és jog a
dockervagyWORK_DOCKER_COMMANDfuttatására. - Kubernetes: API credentials, Role/RoleBinding, namespace és NetworkPolicies
work.enabled=truemellett. - Tool-capable modell egészséges Ollama/Cloud vagy aktív plugin exact model/admin credentiallel.
- Storage image/project/dependency számára és hitelesített Work account.
Libre ellenőrzi Ollama tools capabilityt. Plugin protocol kell; elutasítás hibázik silent switch nélkül.
Helyi indítás
docker info
npx libre-webui@latest
Nyissa http://localhost:8080, login admin, Work, model és leírás. Docker nélkül
Runtime unavailable, Run disabled, host fallback nincs. Image első használatkor inspect/pull.
Work felület
Task létrehozása és visszatérés
Work, instruction, model, Run. Első message taskot, runt, route-ot és workspace-t hoz létre. Sidebarban marad; reopen visszaállít conversation, Files és selectiont. Régi messages paged, rename/delete menüből. Egy active run, következő instruction ugyanazt használja.
Composer dictation browser speech vagy STT útján és append. Created/moved files chipsként tool activity alatt, click Filesbe vált. Csak mutating tools ad chips.
Agent felvétele
Hire as an agent perszonával persistent named agentet készít. Persona name/system prompt a Work prompt elé kerül, runtime contract felülírja. Agents saját sidebar groupban avatar/activity/status mellett. Kompakt sidebarnál csak ezek a kitűzött agent-avatarok maradnak a sávban; az egyszeri Work-feladatok a sidebar kinyitásakor térnek vissza.
Status két tier: olcsó no-tools call ~8 szó ("Inbox at zero. 2 replies ready."), max 90
char; hiba a final első sorára esik. Ad hoc/failed csak deterministic,
WORK_STATUS_BLURB_MODEL=0 kikapcsolja. Unread monoton seen markerrel és dot-tal.
Értesítések: work-run-finished, work-run-attention,
work-takeover, közvetlen agent linkkel. Shared persona nem fedi fel owner memóriát;
törlés után agent folytat warninggal. API personaId, isAgent.
Agent lap
- Identity: avatar, név, activity, status.
- Screen: Work Computernél live view-only thumbnail, viewer budgetben, click full Screen.
- Routines: automations ugyanabban workspace/conversation/model/runtimeban,
nem új task. Schedule, pause/resume, + Routine bound; busy →
work-task-busy, nem queue. - Auto Review: az agent jóváhagyási kapcsolója és az összegyűjtött Always-allow szabályok (egy szabály törlése újra bezárja a hatókörét). Ha a task policyja kötelezővé teszi a felülvizsgálatot, a kapcsoló bekapcsolva rögzül.
- Taught skills kapcsolókkal.
Csatlakoztatott eszközök (MCP- és OpenAPI-szerverek)
A Work agentek ugyanazokat az eszközszervereket hívhatják, amelyek a
csevegéshez be vannak állítva — MCP vagy OpenAPI, rendszergazda által regisztrálva a
Beállítások → Eszközök alatt. Az agentnél névtérrel ellátott néven jelennek meg
(server__tool), a hívások pedig a Libre WebUI backendjéből futnak a megerősített
eszközátjárón át (SSRF ellen védett kimenő forgalom, felhasználónkénti hitelesítő adatok,
méret- és időkorlátok), soha nem a sandboxon belülről.
A felajánlás őszinte azzal kapcsolatban, hogy egy autonóm futás mit tud ténylegesen használni:
- Offline task egyet sem ajánl fel: akár van kimenő forgalma a backendnek, akár nincs, a
hálózat nélküli task offline marad — ugyanaz az indok, mint a
web_searchesetén. - A személyes hitelesítő adatot igénylő szerver, ha a felhasználó nem mentette el, már a felajánláskor kiszűrődik, mert egy autonóm futás nem tud megállni és bekérni. Adja meg az adatot a Beállítások → Eszközök alatt, és a következő futás felajánlja a szervert.
- Az eszköz-hozzáférési mód (csak rendszergazdák vagy minden felhasználó) és a szerverenkénti láthatóság pontosan úgy érvényes, mint a csevegésben, a persona eszközszerver-kötései pedig szűkítik, mely szervereket látja a hozzá felbérelt agent.
- Aktív jóváhagyásoknál a szerver által mellékhatásosnak minősített csatlakoztatott eszközök a döntésére várnak, mint bármely felügyelt művelet; a csak olvasható eszközök kérdés nélkül futnak.
Delegálás agentek között (@-említések)
A felbérelt agentek átadhatják egymásnak a munkát. A Work szerkesztőmezőjében a @ beírásával
említhet meg egy másik agentet; az aktuális agent az utasításaiban látja a társai listáját
(nevek és állapotsorok), és a megfelelő kéréseket a message_agent eszközzel delegálja. A
delegálás üzenetekkel történő koordináció, szándékosan nem közös számítógépeken keresztül:
minden agent megtartja saját elszigetelt munkaterét és sandboxát, a címzett pedig nem látja a
delegáló beszélgetést — a kérésnek magával kell hoznia a saját kontextusát.
A delegálás aszinkron. Az eszköz azonnal visszatér, a cél-agent a saját taskjában fut (a
beszélgetésében a kérés Delegated by címkével, a küldő nevével jelenik meg), és amikor
végez — kész, bemenetre vár, hibázott vagy megszakadt —, a végső válasza visszakerül a delegáló
agent beszélgetésébe Report from címkével ellátott üzenetként. Ha a delegáló még fut, a
jelentés a következő fordulóban jut el a modelljéhez; ha tétlen, a jelentés egyszerűen vár a
beszélgetésben — egy jelentés soha nem indít el magától futást, így két agent nem tud egymással
pingpongozni. A delegált futások nem delegálhatnak tovább, a foglalt cél őszintén elutasítja a
próbálkozást sorba állítás helyett, aktív jóváhagyásoknál pedig a message_agent ugyanúgy
megáll felülvizsgálatra, mint bármely mellékhatással járó művelet (az Always-allow szabály arra
az egy cél-agentre korlátozódik).
Műveletek jóváhagyása (Auto Review)
A mellékhatással járó műveletek futás előtt megállhatnak a döntésére. Ha egy taskra aktívak a
jóváhagyások — a Work policy beállítja a Require approval for side-effecting actions
kapcsolót, vagy az agent Auto Review kapcsolója be van kapcsolva —, a futás megáll a
run_command, computer_act, delete_file, move_file vagy message_agent végrehajtása
előtt, és döntési kártyát mutat a beszélgetésben: Allow once, Always allow vagy
Deny.
- Allow once pontosan ezt a hívást futtatja le, és legközelebb újra kérdez.
- Always allow lefuttatja a hívást, és szabályt ment a taskra: a fájl- és
számítógép-műveleteknél az egész eszközre, a
run_commandesetén a parancs programjára (az első tokenjére) szűkítve — aznpm run buildjóváhagyása a jövőbelinpmparancsokat hagyja jóvá előre, nem az egész shellt —, amessage_agentesetén pedig az egy cél-agentre szűkítve. A szabályok az Agent lap Auto Review szakaszában szerepelnek, és ott törölhetők. - Deny elutasítja a hívást. A modell megkapja, hogy a felhasználó megtagadta a műveletet, és változtatás nélkül nem próbálhatja újra; a futás ezzel a válasszal folytatódik.
A függő jóváhagyás értesítést is kivált (alkalmazáson belül, illetve engedélyezett web pusht), mert a futás már percek óta felügyelet nélkül dolgozhat, amikor a kapuhoz ér. Ha öt percen belül senki nem dönt, a kérés lejár, a művelet nem hajtódik végre, a futás pedig Needs input állapotban, normál átadással zárul, ahelyett hogy kivárná a büdzséjét.
A jóváhagyások a műveleteket szabályozzák, nem a láthatóságot: a write_file és a csak olvasható
eszközök felügyelet nélkül futnak, és minden döntés bekerül a biztonsági auditnaplóba.
Task állapot
| UI | Backend | Szín |
|---|---|---|
| Idle | idle | rgb(255, 255, 255) |
| Thinking | preparing vagy running | rgb(48, 121, 255) |
| Complete | completed | rgb(76, 212, 117) |
| Needs input | needs_input vagy cancelled | rgb(255, 204, 0) |
| Error | failed | rgb(255, 61, 129) |
Stop → Needs input fájlokkal. Round/tool budget kimerülése final no-tools handoff után szintén Needs input, nem hamis Complete. Active run nem zár conversationt; message a következő roundba kerül.
Átméretezés
xl split: default 45 %, 30–70 %, per user/browser ratio, arrows 2 %, Shift 10 %,
Home/End min/max, Enter/doubleclick reset. RTL vizuális irányt követ; mobilon switcher.
Fájlok
Files /workspace direct children, strict UTF-8, invalid bytes elutasítva. Light/dark
syntax, Cmd/Ctrl+S, Shift+Alt+F, conflict detection, task/path drafts és warnings.
Highlight 8 000 char/400 line felett pause, formatting 100 000/4 000 JS/TS/JSON/CSS/HTML/Markdown/YAML.
Modelváltozásnál red/green Changes a kör elejétől, unchanged fold, diff/editor toggle és
+added −removed. Baseline browser által korábban látott content; később nyitott file diff nélkül. Draft convenience, nem backup.
Activity
Tool calls/results, files, output, errors, LTR output RTL-ben. Active SSE:
snapshot, run_state, reasoning_delta, assistant_delta, tool_call, tool_result,
usage, skill_loaded, error, done.
Reasoning providerfüggő, csak API által visszaadott, hidden chain nem. Text/tools külön streamelhet. Output bounded; truncation nem jelenti, hogy nincs több.
Git
Helyi műveletek /workspace számára: init main, status/ahead/behind/20 commits,
bounded diff, stage 200 paths, commit admin/no-reply identityvel, branch és clean switch.
Local-only: nincs clone/fetch/pull/push/remotes/arbitrary Git/token/SSH/PR. Külön trusted broker kell, ideális GitHub App egy repo/operation hatókörrel. Ne tegyen long-lived credentialt workspace/env/configba.
Reads idle/active, writes elutasítva model/terminal/preview ownership alatt, switch clean
treevel. UI parancs fixed args 1000:1000-ként, nincs shell input. System/global config,
prompts, hooks, helpers, signing, submodules, external diff, textconv, network protocols
tiltott. Nem exact /workspace tree vagy külső Git dir és executable filter elutasítva.
Ez a Git API-t védi; Terminal/run_command arbitrary Gitje továbbra is sandboxhatár.
Beépített worker skills
Server-owned útmutató /workspace, read-only root, temporary process//tmp, network,
limits és preview lifecycle témában. A modell ellenőrzi instruction/manifest/lock/script/
repo állapotot, megőrzi az unrelated worköt, végigviszi implementationt, focused checket
futtat, diagnosztizál és csak verification után indít previewt. Csak contextben létezik,
nincs AGENTS.md; project instruction nem írja felül a securityt.
Terminal
Interactive shell ugyanabban sandboxban, 1000:1000, /workspace, privilege nélkül.
- Auth — Authorization short-lived one-use ticketre cserélődik task/protocol bound,
csak ticket/ID a
/ws/work-terminalURL-en. Minden input újraellenőrzi account/access/ownership; revoke zár és lease-t enged el. - Origin —
CORS_ORIGIN/BASE_URLesetén match; originless Electron még ticketet kér. TLS/firewall/proxy. - Admission — lease és
WORK_MAX_ACTIVE_RUNTIMES_*; terminal életben tart containert. - Concurrency
WORK_TERMINAL_MAX_SESSIONS_PER_TASKdefault 2; idleWORK_TERMINAL_IDLE_TIMEOUT_MSdefault 15 perc; active run végét megvárja.
Közvetlen Docker Engine API hijacked TTY miatt. WORK_DOCKER_SOCKET, majd DOCKER_HOST
(unix:// vagy HTTP tcp:// proxy Connection: Upgrade-dal), majd
/var/run/docker.sock. ssh:// vagy TLS tcp:// unavailable, fallback nélkül.
Kubernetes exec WebSocket resize-zal. Session nincs rögzítve és Activityben sincs.
Preview
Üres commandnál root package.json dev, root index.html bundled serverrel vagy egy
nested app. Root elsőbbség, multiple/no entry actionable error. Custom command
/workspace-ből, pl. cd apps/web && npm run dev -- --host 0.0.0.0 --port 4173, bind
0.0.0.0/WORK_PREVIEW_PORT, timeout 15 s. Model start_preview-t használ; normál
run_command background descendants-et takarít.
Képernyő (Work Computer)
Teljes bemutató: valódi, vágatlan futás (30×, majd valós idő), ahol agent NASA-képeket böngész, választ, majd Three.js galériát épít és tesztel egy promptból.
Work Computer policy Screen lapot ad: live virtual desktop ugyanabban sandboxban, window manager, dock, Chromium 1280×800. Nézhető, átvehető, hallgatható és demonstrációval tanítható. Lapnyitás on-demand GUI-t indít és VNC-over-WebSocket viewert köt.
Admin egy kattintással Enable: bundled GUI image build a saját Docker daemonon és
ready policy. Filtered proxy mögött build endpoint tiltott; pull
ghcr.io/libre-webui/libre-work-computer (libre-work-computer:latest) vagy build
deploy/work-computer/, majd Enable csak policyt hoz létre. Network access kötelező loopback port miatt.
Nincs szükség kézi docker build parancsra.
VNC localhoston két per-session password: view-only minden watchernek, full csak takeover
lease holdernek. WebSocket bridge az egyetlen surface, host loopbackon. One-use ticket
session/task bound és minden kapcsolatnál access check. Revoke azonnal vág. Max négy
viewer, watching activityként számít. Watching és run nem versenyez: mid-run ugyanahhoz
sandboxhoz kapcsolódik, nem blokkol következőt, run után megmarad team workerben is.
Browser profile /workspace/.browser-profile-ban tartós.
computer_observe full screenshotot, cursort, active windowt, URL-t, page/browser focust,
focused element descriptort és hash-t ad. DevTools loopback signals régi image-ben hiányozhat.
computer_act max 24 mouse/keyboard actions batch után screenshotot ad.
type/key focus assertionnel fail closed; batch megáll új window/title/focus esetén;
expected outcome title/URL/region adaptív deadline-nal, ahol "pending" nem success.
Adaptive settling pollinggal. Click receipt pixelváltozást, scroll_until target/edge
visibilityt és observations diffet ad. Egy subgoal checkpointként és recovery promptban marad.
Agent loop grounding stallt észlel: három azonos action unchanged screenen recovery notice, ismétlés inputot kér. Consecutive unverified expectations re-grounding notice. Rounds/latency/screenshots/guards/verdicts tool recordban és végső összegzésben.
Screenshots valódi image contentként mennek Ollama, Anthropic, Gemini, OpenAI Chat/ Responses felé, ezért vision model javasolt. Text-only elutasításnál run nem bukik: screenshotok kimaradnak, text observation marad és transcript jelzi degradationt. Csak legújabb képek live contextben, persistent transcript csak textet tárol.
Browser content blocking: uBlock Origin Lite ads/trackers ellen (pinned, checksum, managed policy) és cookie banner auto-dismiss. Ad scripts ártalmatlan local stubok. Agent nem ír credentialt és nem old CAPTCHA/2FA-t, blockernek jelzi. Untrusted taskhoz filtering DNS.
Audio default muted; speaker live stream. PulseAudio null sink monitor raw PCM-ként második
authenticated loopback WebSocketon, azonos ticket/access/cap. Aktuális deploy/work-computer/ image kell.
Take over mouse/keyboardet ad login/CAPTCHA lépéshez, I'm done visszaadja. Full és
view password per session, nem logolt; full csak lease holder. TTL két perc, UI alatt
megújul, más usertől nem vehető el. Allow screen takeover kikapcsolhatja; ekkor
Take over/Teach rejtett, endpoint és request_takeover elutasít, watching marad. Ember
irányításakor computer_observe/computer_act blokkolt. Credential közvetlenül page-re,
nem model/transcript. Régi image view-only.
Teach a task demonstrációt rögzít koordinátákkal és visible indicatorral. Read-only probe element tag/id/label és URL anchorral nevezi a célt — "Click "button#submit (Place order)"" — koordináta csak hint.
Save deterministic, model nélküli playbookot készít: keystrokes textté, click/drag 8
pixel, pause wait, secret/credential-shaped text (8+ char, 3 class) redacted és
request_takeover utasítás. Natural procedure anchored targets first, coordinates hints,
computer_observe reinterpretation, when/inputs/steps/verification, allowed scope a
meglátogatott hosts alapján (kilépés előtt stop/ask), approvals és failure handling.
taught- skillként Skillsben version/edit/share.
Computer runs owner enabled taught skills-t system promptba tölti és listázza. Replay
normál run. Skill chips worked/failed reviewt adnak, dated line a Track record részbe
(newest first, bounded, mindegyik version). Ne írjon valódi jelszót tanításkor; loginig
mutassa, majd request_takeover.
Szolgáltatók, útválasztás és adatközlés
Támogatott útvonalak
| Útvonal | Ellenőrzés és viselkedés |
|---|---|
| Helyi Ollama | Egészséges és az exact modell tool supportot jelez |
| Ollama Cloud | Explicit Ollama routing, cloud disclosure |
| Completion/chat plugin | Aktív, exact modell, current admin credential |
| Anthropic plugin | Work Anthropic messages/tool-use adapter |
| Gemini plugin | Work Gemini contents/function-calling adapter |
| Más kompatibilis plugin | OpenAI messages/tools/tool-choice shape |
Provider type és plugin ID taskon és runon tárolódik. A modellnév önmagában nem választ utat, azonos nevű plugin nem térít el meglévő taskot.
Mit kap a szolgáltató
- Work system prompt, worker skills és runtime limits;
- legutóbbi 30 user/assistant message, max 256 KB;
- tool definitions, assistant tool-call history és results directory/file/search/output/error tartalommal.
A named volume nem töltődik fel egészben, de tool result tartalma model conversationként a választott providerhez megy. Sensitive source előtt ellenőrizze retention, training, pricing és usage policyt.
Credential backendben marad, akár deployment-wide, akár user, és nincs Work containerbe mountolva. Az application-layer credential encryption nem whole-task encryption: conversation/tools/metadata normál DB content, files/dependencies normál volume/PVC. Threat model szerint host access és disk encryption kell.
Remote-provider tájékoztatás
Plugin modellek és :cloud/-cloud Ollama-nevek remote-nak számítanak. Választáskor
dismissible notice magyarázza data flow-t és több billable callt, preference userenként.
Minden route WORK_MAX_AGENT_ROUNDS budgetet használ, default 48, nincs külön 12-es
clamp. Tool-call budget max(128, nyolc per configured round). Kimerüléskor final
no-tools handoff leírja munkát/checks/blockers/remaining steps, majd Needs input,
nem raw exception vagy hamis Complete. Follow-up ugyanabban workspace-ben folytatódik.
Host folder workspace (opt-in)
Dockerben /workspace alapból task volume, így valódi fájlok nem elérhetők. Opcionálisan
host folder bindelhető. Kubernetes elutasítja és task PVC-t használ.
WORK_HOST_WORKSPACES_ENABLED=true
WORK_HOST_WORKSPACE_ROOTS=/Users/you/Projects
WORK_HOST_WORKSPACE_ROOTS :-tagolt roots lista, default server user home. Aktiválva
megjelenik Workspace folder; üresen izolált volume marad.
Path absolute, létező directory és symlink feloldás után configured rooton belüli.
.ssh, .gnupg, .aws, .config, .kube, .docker, .claude, .libre-webui,
node_modules tiltott. Resolved path taskkal tárolt és headerben látható.
A modell valódi fájlokat olvas/ír, a non-root/dropped caps/limits nem állnak közte és a directory között. Kikapcsolva tartsa, roots legyen szűk és version control alatt.
Perzisztencia és runtime-életciklus
| Állapot | Tárolás | Élettartam |
|---|---|---|
| Ownership, cím, provider, status | Libre DB | Task/user törléséig |
| Runs, errors, messages, tools | Libre DB | Task törléséig |
| Workspace files | Docker volume/K8s PVC | Cancel/preview stop/restart után is |
| Rootfs és temporary | Container/Pod | Disposable |
| Preview process | Running sandbox | Efemer, verified health idején |
| Unsaved draft | Browser session storage | Ideiglenes |
Minden task server-generated UUID-t kap. Sandbox/workspace names backendből, soha browser requestből. Runtime resources managed/ownership labels-szel. Reuse/delete előtt label ellenőrzött, más task erőforrása elutasítva.
Sandbox on-demand. File helper idle sandboxot leállít, command befejezés után stop, verified preview futva tarthatja. Workspace restart/recreate után újramountolódik.
Admin named runtime policies-t adhat: runtime image, memory/CPU/PID, Kubernetes workspace size, idle timeout, network default és Work Computer (GUI + browser), Allow screen takeover (és Teach). Task a policy configgal fut; üres mező globalt örököl, policy törlés után recreate-nél globalra tér vissza. Policy csak resource és switch, nem gyengítheti non-root/read-only/dropped/network hardeninget.
WORK_RUNTIME_IDLE_TIMEOUT_MS inaktivitás után leállítja a sandboxot, ha nincs command,
terminal vagy signed preview request, és felszabadítja slotot. Workspace megmarad.
Default 0: preview explicit stopig fut.
Backend startupkor active runs failed és preview state törlődik. Driver egy labeled queryvel listáz: ismert running sandboxot leállít, stopped változatlan, task row nélküli orfánt eltávolít. Ownership labelből, nem névből. Egy instance birtokoljon egy namespace/ daemon erőforrást. Ha cleanup nem bizonyítható, fail-closed, retry 10 s és mutable operations blokkolva.
Hálózati viselkedés
Named policy nélküli task network-enabled. Admin policy default off lehet, létrehozó kiválasztja. Nincs külön per-task switch; policyváltozás recreate után érvényes.
Dockerben dedicated managed bridge (libre-webui-work, WORK_NETWORK_NAME) ICC off
(com.docker.network.bridge.enable_icc=false): sandboxok egymást és default bridge-en
telepítési containereket nem érik el. Azonos nevű nem managed network esetén Libre elutasít.
Kubernetes ugyanazt a labelt, default-deny NetworkPolicyt, preview ingresset és internet
egresst használ work.networkPolicy.blockedEgressCidrs kivételével. Csak CNI enforcement
esetén hatékony; lásd Kubernetes.
Külső egress marad package/Git/API miatt; nem outbound firewall. Elérhető lehet Docker host, LAN, internet, metadata endpoint.
Egress policy hooks
WORK_RUNTIME_DNS(Docker) — vesszős resolver IP-k minden hálózatos sandboxon (--dns), filtering resolverrel name allow/deny. Nem cím elutasított, nincs flag injection.- Host/upstream firewall a managed bridge subneten.
WORK_NETWORK_NAMEelőre létrehozott networkre, managed label és ICC-disabled ellenőrzéssel.
DNS nem blokkol literal IP-t; garanciához host/cluster/upstream firewall. Work nem akadályozza automatikusan az adatküldést. Csak trusted user és offline named policy; nincs global env defaultváltó.
Network access nem ad credentialt. Nincs SSH key, cloud credential, browser profile,
home vagy socket mount. /workspace-be írt adat továbbítható. Sandbox traffic külön a
model traffictól, amelyet backend küld az explicit route-ra.
Sandbox biztonsági határ
Docker container:
- non-root
1000:1000, working/workspace, csak task volume; - read-only rootfs, bounded
/tmp, all caps dropped,no-new-privileges, non-privileged init; - CPU/memory/process/command/output limits;
- swap pinned (
--memory-swap=--memory); - managed network ICC off vagy no network;
- csak preview port host loopbackon.
Minden reuse előtt docker inspect újraellenőriz és ai.libre-webui.policy label hash.
Upgrade előtti policy container destroy/recreate.
Kubernetes megfelelő Pod security: non-root, read-only, RuntimeDefault, no escalation,
dropped caps, storage/resource limits, no ServiceAccount token, task PVC. Labels/fingerprint ellenőrzött.
További részletek: Kubernetes.
Path validation tilt absolute, traversal, backslash, NUL és túl hosszú. File helper real path/symlink escape ellen, writes temp + atomic rename.
Ez nem VM vagy malware lab; host kernel közös, runtime/image/dependency/kernel vuln átlépheti. Docker named volume önálló quota nélkül, ezért figyelje storage-t és host limiteket. Kubernetes PVC quota a provisionertől függ.
Docker production hardening checklist
Kubernetes ellenőrizze RBAC, Pod security, StorageClass és CNI policyt a Kubernetes útmutató szerint. Az app nem tud host firewallt, storage quota-t vagy daemon privilege-et kikényszeríteni.
1. Docker control izolálása
A fő containernek daemon control kell Work létrehozásához; socket control-plane credential, app compromise host compromise lehet.
docker-compose.socket-proxy.yml kiviszi a socketet a Libreből. Internal proxy tartja
/var/run/docker.sock-ot és csak containers, images, volumes, networks, exec, info API-t
enged; swarm, secrets, configs, build, commit, system tiltott. Libre
DOCKER_HOST=tcp://docker-socket-proxy:2375 felé megy mount/group nélkül; CLI, Terminal
és diagnostics követi. Proxy surface-t szűkít, blast radiust nem: create container bind-mountolhat hostot.
Erősebb: dedicated VM, vagy rootless dedicated daemon/separate runtime host. Ellenőrizze ownership, preview, cleanup, terminal. Ugyanaz a rootful socket read-only mounttal sem read-only API.
2. Sandbox-host management blokkolása
ICC off csak sandbox-sandboxot tilt, host services-t nem. Inspectálja bridge-et/subnetet:
docker network inspect libre-webui-work \
--format 'id={{.Id}} subnets={{range .IPAM.Config}}{{.Subnet}} {{end}}'
ss -lntup
Persistent firewall tiltsa bridge-ről SSH, Docker API, DB, monitoring/admin portokat.
Teszteljen disposable containerből és allowed downloads-t, majd persistálja. DOCKER-USER
forwardot kezel; host destinationhez INPUT szabály is kellhet.
3. Kimenő célok korlátozása
Tiltsa cloud metadata, private infrastructure és client LAN ranges értékeket, kivéve
explicit igény. WORK_RUNTIME_DNS filtering resolver és host/upstream firewall együtt.
DNS literal IP-vel, HTTP proxy direct connectionnel megkerülhető; containeren kívül enforce.
Külön named policies: offline, package-registry-only, open egress. Policy network attachot, külső firewall destinationt kezel.
4. Valódi storage quota
CPU/memory/swap/PID nem korlátozza volume-ot. Több kliensnél XFS project quota, quota-backed
logical volume vagy size-limited volume/PVC driver. Docker local ext4 nem kap megbízható per-volume quotát dokumentált mérettől.
Monitorozza ai.libre-webui.managed=true volumes-t és Docker data rootot, alert full előtt,
tesztelje failure módot. UI counter/du csak warning, nem enforcement.
5. Deployed policy ellenőrzése
Image/daemon policy változás után disposable Work task és docker inspect: non-root,
read-only root, caps dropped, no-new-privileges, memory/swap/CPU/PID, csak task volume,
expected network. Fő Libre mounts és public ingress csak authenticated proxy/tunnel, nem accidental Docker/preview port.
Preview biztonság és elérhetőség
Docker dynamic loopback port, Kubernetes Pod IP in-cluster. Model/browser nem választ
upstreamet. Libre signed capability URL exact task/endpointra, minden requestnél ellenőrzi
running állapotot és /api/work/previews alatt HTTP/WebSocket proxy. Stop/restart revokál URL-t.
Response eltávolít Libre credentials/upstream cookies. HTML iframe sandbox és CSP scripts/ forms/modals/downloads engedélyezésével, same-origin nélkül, külön tabban is. Generated kód untrusted és egresszel elküldheti workspace/browser inputot. Preview URL rövid secret, ne ossza meg.
Browser a Libre public origin proxyját tölti, ezért remote/HTTPS működik port/POD IP és
mixed-content nélkül. Reverse proxy őrizze WebSocket upgrade-ot /api/work/previews/ alatt.
Main app csak saját origin és Turnstile frame. Preview bypassolja Helmet policyt streaminghez és szűkebb sandbox CSP-t alkalmaz. Cross-origin embedder off, mert dev server headers hiányzik.
Telepítési mátrix
| Deployment | Runs és files | Preview |
|---|---|---|
npx libre-webui local | Docker telepítve/fut/elérhető | Signed origin proxy |
| Source local | Ugyanazok a követelmények | Dev API port 3001 |
| Electron | External backend, nincs saját runtime | Annak signed proxyja |
| Bare metal/VM remote | Docker a hoston | HTTP/WebSocket reverse proxy |
| Standard Docker Compose | Docker Desktopon alapból támogatott: image CLI, Compose socket mount, a Work-portok host.docker.internal felé mennek. Natív Docker Engine-hez kell még egy elérhető, nem nyilvános WORK_PREVIEW_BIND | Azonos public origin |
| Kubernetes/Helm | --set work.enabled=true, Pods/PVC/RBAC/default-deny, socket nélkül; Kubernetes | Signed proxy Pod IP-re |
Work futtatása, amikor a Libre WebUI Dockerben van
Minden Compose file engedélyezi: image Docker CLI, socket mount. Docker Desktop a
szállított routing-alapértelmezésekkel működik; natív Docker Engine esetén a
WORK_PREVIEW_BIND értékét is testvérkonténerekből elérhető, nem nyilvános
host-interfészre kell állítani, ahogy lent szerepel.
Task containerek a Libre container siblings elemei, host docker ps listában és
azonos lifecycle cleanup. Socket root-equivalent host control. Következmény:
minden Libre admin gyakorlatilag Docker host admin. Operator felel daemon/network/
lifecycle/backup/access következményért. Socket sor törlése kikapcsolja Worköt.
Socket web appból kivételéhez docker-compose.socket-proxy.yml; internal proxy csak
szükséges API-t enged DOCKER_HOST útján. Lásd Docker control izolálása.
Három feltétel:
- Docker CLI image-ben. Customhoz
docker-clivagyWORK_DOCKER_COMMAND. EgyébkéntThe "docker" CLI is not installed…. - Socket mount. Egyébként
No Docker daemon is reachable…. - Backend user socket groupban. Image
nodejsuid 1001, socketroot/docker, Composegroup_add: ['${DOCKER_GID:-0}']. Desktop default jó, Linux saját GID. EgyébkéntThe Docker socket is mounted but the Libre WebUI user cannot open it….
# Read the socket's group as seen INSIDE a container. A macOS host reports a
# different value, because Docker Desktop proxies the socket through a VM.
echo "DOCKER_GID=$(docker run --rm -v /var/run/docker.sock:/var/run/docker.sock \
alpine stat -c '%g' /var/run/docker.sock)" >> .env
docker compose up -d --force-recreate
Preview ports host loopbackon, signed proxyval HTTP/WebSocket, HTTPS/tunnel mögött efemer port publikálása nélkül. Restrictive sandbox, stop/restart régi URL-t revokál.
Docker backendnél publishing/connect address eltérhet. WORK_PREVIEW_BIND=127.0.0.1,
WORK_DOCKER_PUBLISHED_HOST a containerből elérhető host (host.docker.internal Desktop).
A szállított Compose-profilok mindkét értéket beállítják és a hostnevet leképezik. Natív
Linuxon a WORK_PREVIEW_BIND értékét a Docker-híd átjárójára (vagy más kifejezetten
elérhető, nem nyilvános host-interfészre) kell felülírni; az alias önmagában nem éri el a
host loopbacket. Ezeket a nyers, rövid életű portokat soha ne kösse 0.0.0.0 címre.
Concurrency: WORK_MAX_ACTIVE_RUNTIMES_PER_USER default 2, global 3; capabilities
limits/occupancy. Csak erőforrással emelje.
Kubernetesnél work.enabled=true, nem node socket; chart RBAC/namespace/policies/Pod/PVC.
Runtime konfiguráció
| Változó | Alap | Cél |
|---|---|---|
WORK_RUNTIME_BACKEND | docker | docker vagy kubernetes |
WORK_RUNTIME_IMAGE | node:22.22-bookworm@sha256:2d178f2785b96dfbf62a416ca2e40f50e30150b4ff3320d706f0d96e90600eb3 | Sandbox image |
WORK_DOCKER_COMMAND | docker | Docker CLI |
WORK_COMMAND_TIMEOUT_MS | 120000 | Timeout |
WORK_MAX_OUTPUT_CHARS | 50000 | Output max |
WORK_MAX_AGENT_ROUNDS | 48 | Round budget |
WORK_MEMORY_LIMIT | 2g | Memory |
WORK_CPU_LIMIT | 2 | CPU |
WORK_PIDS_LIMIT | 256 | Process |
WORK_PREVIEW_PORT | 4173 | Internal preview |
WORK_PREVIEW_BIND | 127.0.0.1 | Host bind |
WORK_DOCKER_PUBLISHED_HOST | same as WORK_PREVIEW_BIND | Backend dial host |
WORK_COMPUTER_SCREEN_PORT | 6080 | Screen bridge |
WORK_COMPUTER_AUDIO_PORT | 6081 | Audio bridge |
WORK_RUN_LEASE_WAIT_MS | 60000 | Lease wait |
WORK_MAX_ACTIVE_RUNTIMES_GLOBAL | 3 | Global active |
WORK_MAX_ACTIVE_RUNTIMES_PER_USER | 2 | Per admin |
WORK_MAX_TASKS_GLOBAL | 500 | Global tasks |
WORK_MAX_TASKS_PER_USER | 100 | Per admin tasks |
WORK_NETWORK_NAME | libre-webui-work | Managed bridge |
WORK_RUNTIME_DNS | unset | Resolver IPs |
WORK_DOCKER_SOCKET | DOCKER_HOST if unix:// or tcp://, else /var/run/docker.sock | Terminal engine |
WORK_TERMINAL_MAX_SESSIONS_PER_TASK | 2 | Terminal count |
WORK_TERMINAL_IDLE_TIMEOUT_MS | 900000 | Terminal idle |
WORK_RUNTIME_IDLE_TIMEOUT_MS | 0 (disabled) | Sandbox idle |
WORK_K8S_NAMESPACE | libre-webui-work | Pod/PVC namespace |
WORK_K8S_STORAGE_CLASS | cluster default | StorageClass |
WORK_K8S_WORKSPACE_SIZE | 5Gi | PVC size |
WORK_K8S_POD_READY_TIMEOUT_MS | 900000 | Pod ready wait |
WORK_K8S_POD_GONE_TIMEOUT_MS | 60000 | Pod gone wait |
Productionben fix image version/digest. Mutable tag tools és security boundary változást okozhat.
Az interaktív terminal kliens nem használ tcp:// endpointot aktív DOCKER_TLS_VERIFY mellett.
Run/preview/file/command/recreate közös capacity accounting. Nested same task nem extra.
Limit felett HTTP 429.
Fix protocol és UI korlátok
| Elem | Korlát |
|---|---|
| Új task/run message | 65 536 char és UTF-8 byte |
| Model ID | 500 char/byte |
| Plugin provider ID | 200 char |
| Active runs/task | 1 |
| Command text/timeout | 20 000 char / 1–600 s |
| Preview ready | 15 s |
| File read/write | 2 000 000 UTF-8 byte |
| Directory listing | első 1 000 |
| Message page/persisted | 200 és 1 000 000 byte / 100 KB |
| Model context | utolsó 30, max 256 KB |
| Tool output | ~20 000 char + marker |
| Highlight/format | 8 000/400 és 100 000/4 000 |
| Git status/diff/history/stage/msg | 2 000 000 / 600 000 / 20 / 200 / 4 000 |
| Agent loop | default 48 WORK_MAX_AGENT_ROUNDS |
| Tool-call budget | max(128, configured rounds × 8) calls |
File API UTF-8 text, nem binary; 2 MB felett nem nyitható.
API-összefoglaló
Minden endpoint /api/work alatt, authentication és current Work access kell. Default
admin-only; admin normál task operationt aktív users számára megnyithat. Host-folder és policy admin-only.
| Method | Path | Cél |
|---|---|---|
GET | /capabilities | Runtime/provider és limits |
GET | /tasks | Tasklista |
POST | /tasks | Task és első async run |
GET | /tasks/:id | State és recent messages |
GET | /tasks/:id/messages | Régi üzenetek |
PATCH | /tasks/:id | Rename/model route |
DELETE | /tasks/:id | Task/workspace delete |
POST | /tasks/:id/runs | Follow-up run |
POST | /tasks/:id/messages | Message active run alatt |
GET | /tasks/:taskId/runs/:runId/events | SSE |
POST | /tasks/:id/cancel | Cancel |
GET | /tasks/:id/approvals | Függő jóváhagyások + Auto Review |
PUT | /tasks/:id/approvals | Taskonkénti jóváhagyás kapcsolása |
POST | /tasks/:id/approvals/:approvalId | Döntés (egyszer/mindig, elutasítás) |
DELETE | /tasks/:id/approval-rules/:ruleId | Always-allow szabály törlése |
GET | /computer/setup | Work Computer setup status |
POST | /computer/setup | GUI build és policy |
POST | /tasks/:id/computer/start | Computer start |
GET | /tasks/:id/computer/control | Driver/takeover request |
POST | /tasks/:id/computer/control | Take over/renew |
DELETE | /tasks/:id/computer/control | Visszaadás |
POST | /tasks/:id/computer/teach | Demonstration save |
POST | /tasks/:id/computer/anchor | Click element resolve |
POST | /computer/skills/:slug/trace | Worked/failed trace |
GET | /tasks/:id/files | Directory list |
GET | /tasks/:id/file | Text read |
PUT | /tasks/:id/file | Text save |
GET | /tasks/:id/git | Git status/history |
GET | /tasks/:id/git/diff | Diff |
POST | /tasks/:id/git/init | Init |
POST | /tasks/:id/git/stage | Stage |
POST | /tasks/:id/git/commit | Commit |
POST | /tasks/:id/git/branches | Branch |
POST | /tasks/:id/git/switch | Switch |
POST | /tasks/:id/preview/start | Preview start |
POST | /tasks/:id/preview/stop | Preview stop |
Task ID authenticated ownerhez ellenőrzött. Account status/role/access minden requestnél
DB-ből, ezért revoke régi JWT mellett is érvényes. Update schema belső networkEnabled
mezőt tart compatibilityhez, UI nem mutatja; named runtime policyt válasszon, ne raw fieldet.
Törlés, fiókváltozások és backup
Task törlése
- Retiring state, nincs új mutáció.
- Active run cancel, sandbox stop.
- Ownership labels validáció.
- Container/Pod és volume/PVC delete.
- DB task törlés cascade runs/messages.
- Browser drafts API-siker után törölve.
Cleanup hiba esetén DB row marad és error jön repair/retryhez, nem hagy untracked sandboxot. Run/preview stop nem delete, volume/conversation marad.
Admin lefokozás és user törlés
Role revoke előbb persistálódik. Minden Work request current role/access check. Backend felfüggeszti taskokat és abort/stopot próbál. Cleanup hiba mellett hozzáférés továbbra is revoked és role update hibát jelez. Más user törlése előbb minden Work resource-t eltávolít; external cleanup hiba esetén user row marad ownership metadata miatt.
Teljes task backup
- Libre DB ownership, resource names, provider routing, runs, messages, activity; és
- minden
ai.libre-webui.managed=trueDocker volume/Kubernetes PVC a fájlokkal.
Disposable container/preview nem kell. Konzisztens backuphoz új Work stop és backend
stop, majd volume/PVC snapshot. DB és matching workspace együtt vissza, exact nevekkel és
ai.libre-webui.task=<task UUID>, ai.libre-webui.managed=true labels. Csak file copy
nem tart labels-t; csak DB fájl nélkül, csak storage ownership nélkül. Encrypted
credentials esetén data directory és key is.
Lokalizáció és arab RTL
Work mind a 25 locale-ra lefordított: English, Arabic, Bengali, Czech, Danish, German, Spanish, French, Hindi, Indonesian, Icelandic, Italian, Japanese, Korean, Malay, Dutch, Polish, Portuguese, Russian, Swedish, Thai, Turkish, Ukrainian, Vietnamese, Chinese.
Arabic lang="ar", dir="rtl" render előtt. Sidebar jobbra, Conversation jobbra,
Workspace balra, icons mirror, tab/resize RTL. Technical tartalom LTR: code, paths,
model IDs, commands/logs, tool output/metadata és code blocks. Természetes szöveg auto direction.
Hibaelhárítás
Runtime unavailable npx mellett
npx libre-webui hoston fut, de Dockert nem telepít. docker info ugyanazzal OS userrel;
ha hiányzik/nem éri el, install/start/permission fix, Work reload. Ollama vagy active
plugin model/credential is kell.
Runtime unavailable Dockerben vagy Kubernetesben
Standard Compose image-ben CLI és socket van. Panel megnevezi missing CLI, mount vagy
group hibát; utóbbinál DOCKER_GID és recreate. Lásd
Work Dockerben.
Kubernetes: --set work.enabled=true, runtime kubernetes, Pods/PVC, node socket nélkül;
lásd Kubernetes.
Nincs Work-kompatibilis modell
Ollama tools; pluginnál type completion/chat, active, exact model map, admin key és tool
calling. Fallback provider nincs.
Package install vagy remote Git hiba
Named policy engedjen hálózatot; nincs per-task toggle. DNS, proxy, firewall/NetworkPolicy, registry, certificate, runtime, upstream és image command ellenőrzése. Git lap local-only; remote csak Terminal/model felületen szándékos network/credential policy mellett. Ne illesszen long-lived tokent workspace-be.
Agent limitnél megáll
Round vagy derived tool budget elfogyott. Work final no-tools handoffot kér, Needs
input marad, nem állít completiont. Follow-up ugyanabban workspace-ben, vagy tudatosan
emelje WORK_MAX_AGENT_ROUNDS-ot megfelelő resource/cost mellett.
HTTP 429 indításkor
Runtime/task admission limit. Várjon stopra, töröljön obsolete taskot vagy emelje WORK_MAX_* értéket.
Preview nem ready
Command fusson, bind 0.0.0.0, WORK_PREVIEW_PORT 15 s alatt. Üres command automatikus
package.json dev vagy index.html, egy nested appal. Multiple/no entry esetén explicit
command /workspace-ből, pl. cd <app-directory> && ....
Preview serveren jó, remote browserben nem
Signed proxy build és restart régi loopback URL cseréjéhez. Hot reloadhoz WebSocket
upgrade /api/work/previews/ alatt. Docker port loopback, firewall opening nem kell.
Fájlok maradnak, preview leáll
Várt cancel/restart/stop/readiness után. Preview efemer, volume tartós; reopen és start.
Fájl nem nyílik/menthető
UTF-8 text max 2 MB. Conflict esetén reload. Highlight plain text 8 000/400 felett, format limit 100 000/4 000 csak dokumentált típusokra.
Work sandbox recoveryt jelez
Startup/teardown nem bizonyította stopot. Fail-closed és retry 10 s. Állítsa helyre Docker/Kubernetes access-t és nézze logot. Ne töröljön DB row-t labeled resource reconciliation előtt.
Task delete hiba
Runtime legyen elérhető. Várt ai.libre-webui.task label nélküli conflict resource
elutasított, nem törölt. Ownership konfliktus javítása után retry.
Biztonsági összegzés
- Default admin-only; mindenkinek megnyitva minden active account sandbox operator. Host-folder mindig admin-only.
- Backend kontrollálja Docker daemont vagy Kubernetes namespace-t.
- Container nem VM.
- Offline policy nélkül egress van; destination restriction operator dolga.
- Work volume önálló quota nélkül.
- Git local-only és remote credential nélkül.
- Host firewall, daemon isolation, outbound és quota operator control.
- Remote provider tool results-et és sok callt kap.
- Preview loopback signed/revocable proxy URL-en.
- Compose Docker runtime, Kubernetes
work.enabled=truePod/PVC. - Teljes backup DB + Work volumes.