Ugrás a fő tartalomra

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.

Csak megbízható felhasználók

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_files
  • read_file
  • write_file
  • delete_file
  • move_file
  • search_files
  • run_command
  • start_preview
  • stop_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 docker vagy WORK_DOCKER_COMMAND futtatására.
  • Kubernetes: API credentials, Role/RoleBinding, namespace és NetworkPolicies work.enabled=true mellett.
  • 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_search eseté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_command esetén a parancs programjára (az első tokenjére) szűkítve — az npm run build jóváhagyása a jövőbeli npm parancsokat hagyja jóvá előre, nem az egész shellt —, a message_agent eseté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

UIBackendSzín
Idleidlergb(255, 255, 255)
Thinkingpreparing vagy runningrgb(48, 121, 255)
Completecompletedrgb(76, 212, 117)
Needs inputneeds_input vagy cancelledrgb(255, 204, 0)
Errorfailedrgb(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-terminal URL-en. Minden input újraellenőrzi account/access/ownership; revoke zár és lease-t enged el.
  • OriginCORS_ORIGIN/BASE_URL eseté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_TASK default 2; idle WORK_TERMINAL_IDLE_TIMEOUT_MS default 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)

Nézze, ahogy egy Libre WebUI Work agent képeket kutat és interaktív űrgalériát készít

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

ÚtvonalEllenőrzés és viselkedés
Helyi OllamaEgészséges és az exact modell tool supportot jelez
Ollama CloudExplicit Ollama routing, cloud disclosure
Completion/chat pluginAktív, exact modell, current admin credential
Anthropic pluginWork Anthropic messages/tool-use adapter
Gemini pluginWork Gemini contents/function-calling adapter
Más kompatibilis pluginOpenAI 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ó.

Ez szűkíti a sandboxot

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

ÁllapotTárolásÉlettartam
Ownership, cím, provider, statusLibre DBTask/user törléséig
Runs, errors, messages, toolsLibre DBTask törléséig
Workspace filesDocker volume/K8s PVCCancel/preview stop/restart után is
Rootfs és temporaryContainer/PodDisposable
Preview processRunning sandboxEfemer, verified health idején
Unsaved draftBrowser session storageIdeiglenes

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

Ellenőrizze a kiválasztott policyt

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_NAME elő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

DeploymentRuns és filesPreview
npx libre-webui localDocker telepítve/fut/elérhetőSigned origin proxy
Source localUgyanazok a követelményekDev API port 3001
ElectronExternal backend, nincs saját runtimeAnnak signed proxyja
Bare metal/VM remoteDocker a hostonHTTP/WebSocket reverse proxy
Standard Docker ComposeDocker 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_BINDAzonos public origin
Kubernetes/Helm--set work.enabled=true, Pods/PVC/RBAC/default-deny, socket nélkül; KubernetesSigned 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:

  1. Docker CLI image-ben. Customhoz docker-cli vagy WORK_DOCKER_COMMAND. Egyébként The "docker" CLI is not installed….
  2. Socket mount. Egyébként No Docker daemon is reachable….
  3. Backend user socket groupban. Image nodejs uid 1001, socket root/docker, Compose group_add: ['${DOCKER_GID:-0}']. Desktop default jó, Linux saját GID. Egyébként The 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óAlapCél
WORK_RUNTIME_BACKENDdockerdocker vagy kubernetes
WORK_RUNTIME_IMAGEnode:22.22-bookworm@sha256:2d178f2785b96dfbf62a416ca2e40f50e30150b4ff3320d706f0d96e90600eb3Sandbox image
WORK_DOCKER_COMMANDdockerDocker CLI
WORK_COMMAND_TIMEOUT_MS120000Timeout
WORK_MAX_OUTPUT_CHARS50000Output max
WORK_MAX_AGENT_ROUNDS48Round budget
WORK_MEMORY_LIMIT2gMemory
WORK_CPU_LIMIT2CPU
WORK_PIDS_LIMIT256Process
WORK_PREVIEW_PORT4173Internal preview
WORK_PREVIEW_BIND127.0.0.1Host bind
WORK_DOCKER_PUBLISHED_HOSTsame as WORK_PREVIEW_BINDBackend dial host
WORK_COMPUTER_SCREEN_PORT6080Screen bridge
WORK_COMPUTER_AUDIO_PORT6081Audio bridge
WORK_RUN_LEASE_WAIT_MS60000Lease wait
WORK_MAX_ACTIVE_RUNTIMES_GLOBAL3Global active
WORK_MAX_ACTIVE_RUNTIMES_PER_USER2Per admin
WORK_MAX_TASKS_GLOBAL500Global tasks
WORK_MAX_TASKS_PER_USER100Per admin tasks
WORK_NETWORK_NAMElibre-webui-workManaged bridge
WORK_RUNTIME_DNSunsetResolver IPs
WORK_DOCKER_SOCKETDOCKER_HOST if unix:// or tcp://, else /var/run/docker.sockTerminal engine
WORK_TERMINAL_MAX_SESSIONS_PER_TASK2Terminal count
WORK_TERMINAL_IDLE_TIMEOUT_MS900000Terminal idle
WORK_RUNTIME_IDLE_TIMEOUT_MS0 (disabled)Sandbox idle
WORK_K8S_NAMESPACElibre-webui-workPod/PVC namespace
WORK_K8S_STORAGE_CLASScluster defaultStorageClass
WORK_K8S_WORKSPACE_SIZE5GiPVC size
WORK_K8S_POD_READY_TIMEOUT_MS900000Pod ready wait
WORK_K8S_POD_GONE_TIMEOUT_MS60000Pod 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

ElemKorlát
Új task/run message65 536 char és UTF-8 byte
Model ID500 char/byte
Plugin provider ID200 char
Active runs/task1
Command text/timeout20 000 char / 1–600 s
Preview ready15 s
File read/write2 000 000 UTF-8 byte
Directory listingelső 1 000
Message page/persisted200 és 1 000 000 byte / 100 KB
Model contextutolsó 30, max 256 KB
Tool output~20 000 char + marker
Highlight/format8 000/400 és 100 000/4 000
Git status/diff/history/stage/msg2 000 000 / 600 000 / 20 / 200 / 4 000
Agent loopdefault 48 WORK_MAX_AGENT_ROUNDS
Tool-call budgetmax(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.

MethodPathCél
GET/capabilitiesRuntime/provider és limits
GET/tasksTasklista
POST/tasksTask és első async run
GET/tasks/:idState és recent messages
GET/tasks/:id/messagesRégi üzenetek
PATCH/tasks/:idRename/model route
DELETE/tasks/:idTask/workspace delete
POST/tasks/:id/runsFollow-up run
POST/tasks/:id/messagesMessage active run alatt
GET/tasks/:taskId/runs/:runId/eventsSSE
POST/tasks/:id/cancelCancel
GET/tasks/:id/approvalsFüggő jóváhagyások + Auto Review
PUT/tasks/:id/approvalsTaskonkénti jóváhagyás kapcsolása
POST/tasks/:id/approvals/:approvalIdDöntés (egyszer/mindig, elutasítás)
DELETE/tasks/:id/approval-rules/:ruleIdAlways-allow szabály törlése
GET/computer/setupWork Computer setup status
POST/computer/setupGUI build és policy
POST/tasks/:id/computer/startComputer start
GET/tasks/:id/computer/controlDriver/takeover request
POST/tasks/:id/computer/controlTake over/renew
DELETE/tasks/:id/computer/controlVisszaadás
POST/tasks/:id/computer/teachDemonstration save
POST/tasks/:id/computer/anchorClick element resolve
POST/computer/skills/:slug/traceWorked/failed trace
GET/tasks/:id/filesDirectory list
GET/tasks/:id/fileText read
PUT/tasks/:id/fileText save
GET/tasks/:id/gitGit status/history
GET/tasks/:id/git/diffDiff
POST/tasks/:id/git/initInit
POST/tasks/:id/git/stageStage
POST/tasks/:id/git/commitCommit
POST/tasks/:id/git/branchesBranch
POST/tasks/:id/git/switchSwitch
POST/tasks/:id/preview/startPreview start
POST/tasks/:id/preview/stopPreview 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

  1. Retiring state, nincs új mutáció.
  2. Active run cancel, sandbox stop.
  3. Ownership labels validáció.
  4. Container/Pod és volume/PVC delete.
  5. DB task törlés cascade runs/messages.
  6. 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=true Docker 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=true Pod/PVC.
  • Teljes backup DB + Work volumes.

Kapcsolódó dokumentáció