SafetyCard Request a review

Magentic-UI

Microsoft's human-in-the-loop web and local-file agent (MagenticLite): an orchestrator model plus the Fara browser-use model, served as a local web UI.

github.com/microsoft/magentic-ui · 2026-10-04 · d3c9d13

Defense-in-depth score

4.1 / 10

MagenticLite runs its shell and browser inside a Quicksand virtual machine and refuses to start without it, so model-written code never touches your host directly. But the web-browsing agent clicks, types and submits on any site with no approval, and the shell approval classifier is not a strict boundary. The dominant risk is prompt injection from a web page: it can make the agent read your shared folders and send their contents out through the browser, or act in web accounts you've logged into, without asking you.

Safest setup

Magentic-UI runs its shell, file tools and browser inside a Quicksand virtual machine, refuses to start without it, and shows you flagged shell commands and file writes before they run. The browser agent acts without approval, on an open network, with every login saved in its profile, so the safest setup narrows what that browser and the shared folders can reach and keeps the sandbox and approvals on.

SetupHowWhat it gives you
Task-only web accountsSign the agent's browser in only to the accounts this task needs, using separate low-privilege accounts where the site allowsThe websites themselves limit what browser actions can change, whatever the agent is asked to do C1
Only the folders neededShare only the specific project folders the task works onAgent reads and writes stay inside files you chose for this task C1
The Quicksand sandboxKeep the default Quicksand sandbox settingModel-written commands and the browser run in a virtual machine that never sees your host environment C4
Shell and file approvalsKeep the default approval_policy of require_approval_untrustedYou see the exact command or file change before each flagged call runs C2
Only the agents neededSet agent_mode to omniagent_only for tasks with no browsing, or websurfer_only for browsing with no shellEach task gets either the shell and files or the browser, not both together C3
A settings file you wroteStart from a directory without a config.yaml you didn't write, or pass your own with --config <path>Sandbox and approval settings come only from you C6
Round limitsKeep the default max_rounds of 100 for the orchestrator and the web surfer, or lower it for short tasksThe agents pause and ask you before continuing past a fixed number of steps C10
A limited networkRun Magentic-UI on a machine or network whose outbound access reaches only the sites the task needsAn outer boundary on where the browser and shell can send data C5

Approving with confidence

  • Read each prompt and approve calls one at a time; the session-wide auto-approve switch covers every later prompt in that session.
  • Package installs show the command but not what will run, so approve only the packages the task needs.
  • Browser actions run without a prompt; keep the live browser view in sight and press Stop if it heads somewhere unexpected.

Handling data

  • The local settings database keeps your model API key in plain text, and the event record keeps every tool call with its arguments; store both like other sensitive data.
  • The browser profile keeps cookies and logins across every session; sign out of sites once a task no longer needs them.

Key gaps (2)

  1. The web-browsing agent acts with no human approval: delegation is always auto-allowed and Fara's only check-in is a model-declared 'critical point'. C2 · Approval gates
  2. Worst case under prompt injection: a malicious page can make the agent read shared files and send them out through the ungated browser agent, and take irreversible web actions, with no human involved. C5 · Untrusted input blast radius

Criteria

C1 Identity & least privilege

0.45 / 1.00

MagenticLite does not hand the agent your own credentials: its shell and browser run inside a Quicksand virtual machine that receives none of the host environment, and the folders you can share are checked against a list of credential locations. But the agent has one static set of powers for the whole session: write access to every folder you share, unrestricted internet, and a browser profile whose logins persist across all sessions. There is no per-request authorization in code, so a hijacked agent can act in any web account you have ever signed into through the app.

C2 Approval gates

0.25 / 1.00

Shell commands and file writes outside the scratch workspace go through a rule-based classifier, and anything it flags shows you the exact command before it runs, with approve, deny or alternative choices. Two things undercut it. Handing a task to the web-browsing agent is always auto-allowed, and that agent clicks, types and submits forms on any site with no approval at all; its only 'check-in' is when the model itself decides to call something a critical point. And the classifier's allowlist is not a strict boundary, which can let the model step around the shell prompt. A session-wide 'auto-approve all' switch and an auto_approve policy in config.yaml turn the prompts off entirely.

C3 Tool & action scoping

0.30 / 1.00

The agent's main tools are general-purpose: a raw shell inside the VM and a browser that can go to any URL. Real argument validation exists only when you pick folders to share (resolved-path containment to your home directory plus a denylist of credential folders such as .ssh and .aws), but enforcement of the denylist is not a complete boundary. File-content handoffs to the browser agent are size-capped. Tool groups can be trimmed with agent_mode, but the default enables everything.

C4 Code-execution isolation

Strong 0.75 / 1.00

This is the strongest part of MagenticLite. By default every shell command, file tool and the browser run inside a Quicksand QEMU virtual machine, so model-generated code never runs on your host, and if the VM fails to boot the app refuses to start instead of falling back to the host. The weak points are what lives inside the VM: the folders you share are mounted read-write, network access is fully open, and the browser profile with your saved logins and cookies sits on the same VM disk the shell can read. Setting sandbox to null in config runs everything directly on your host, with your full environment, and nothing warns you.

C5 Untrusted input blast radius

0.13 / 1.00

Nothing structural limits what a malicious web page or file can make the agent do. Tool output is wrapped in a tag but otherwise enters the conversation like your own instructions, and reading untrusted content changes nothing about which tools are allowed. A hijacked agent can read your shared files (reads need no approval), pass their contents to the browser agent through the auto-allowed delegation, and have it type them into any site, or take irreversible actions in logged-in web accounts, all without asking you.

C6 Memory, context & configuration integrity

0.45 / 1.00

MagenticLite has no long-term memory tool and does not auto-load instruction files from your folders. Conversation state for resuming a session is stored on the host outside the VM, so the agent cannot edit it directly. What does persist across sessions is the shared browser profile (cookies, site storage, logins), which every session reuses and merges back, and the long-lived VM disk. Separately, a config.yaml in whatever directory you launch from is silently merged into the settings database and can switch off the sandbox or approvals for all future runs.

C7 Third-party extensions

0.30 / 1.00

MagenticLite loads no plugins or MCP servers. The only third-party code path is the agent installing packages inside the VM with pip, npm or apt, which the shell classifier sends to you for approval and shows the exact command. Packages are not pinned or verified, and they run inside the shared VM with access to your shared folders, the network and browser cookies.

C8 Secrets & sensitive-data protection

0.38 / 1.00

The LLM API key you enter during onboarding is stored in plain text in the local settings database, masked when shown in the UI, and scrubbed from websocket debug logs. It is never passed into the VM, so the agent's shell cannot read it. There is no telemetry. The main gap is the browser profile: cookies and saved logins for any site you signed into live on the VM disk, where the agent's shell can read them without approval and send them out over the open network.

C9 Audit & traceability

0.60 / 1.00

Every event the agents produce, including each tool call with its arguments, which agent issued it, and whether it was approved by you, by a session auto-approve, or by the safe-command classifier, is written by the backend to a local database outside the VM, along with your approval decisions. That gives a reasonable record of what happened. It is not tamper-evident, write failures are not checked, and its protection from the VM depends on mount validation that is not a complete boundary.

C10 Limits & kill switch

0.50 / 1.00

The orchestrator pauses after 100 rounds and the browser agent after 100 actions per delegation, asking you whether to continue, and each shell command times out after 60 seconds. Stop cancels the agent loop. There is no wall-clock or spending limit, and every delegation to the browser agent gets a fresh 100-action budget, so a long task can run thousands of browser actions between check-ins.