Web UI
The malac daemon serves a web UI. It shows the same workspaces, tabs and agents as the terminal UI, live, and every setting can be changed from it. Several browsers and terminals can be open on one workspace at once.
Open it
Section titled “Open it”malac web # make sure the daemon runs and print the addressmalac web --open # and open it in your default browsermalac web UI: http://127.0.0.1:7700/?token=8995bbb2…The address includes a token, which the daemon keeps in ~/.malac/daemon.token across restarts, so an open page reconnects by itself after malac daemon restart. Delete that file to get a new token. In the terminal UI, Connection → Show the web UI address shows the same URL and the web segment of the status line copies it.
That address, with the master token, works only on the daemon’s machine. Other computers, browsers and phones pair for a token of their own: opened at the daemon’s address without a token, the web UI shows a pairing form.
malac web --cwd <folder> also adds a tab for that folder to the current workspace (or activates the one that exists), which is what the VS Code extension uses.
What you can do
Section titled “What you can do”- Workspaces. Switch between workspaces, create, rename and delete them. W opens the switcher.
- Tabs. The tab bar holds the workspace’s tabs. New tab opens a folder picker with recent folders, a filter, hidden folders on request, and labels for what each folder holds (a git repository, a malac project,
AGENTS.md, a Rust, Node, Python or Go project). It lists folders belowdaemon.browse_root, your home folder by default. Tabs can be renamed, reordered and closed; closing a tab whose agents work asks first. - Agents in a tab. A tab can hold several agents; start another with New agent in this tab (N) and switch between them. Each one shows its streaming transcript with tool calls, edits as diffs, todo lists and usage.
- Agents page. A tree of every live agent in the workspace, with status, model, activity, tokens and cost, and a live preview of the selected one on wide screens (A).
- Jobs page. Every background job, its status, folder and agent, the selected job’s output, and Stop (J).
- Attachments. The attach picker lists the tab’s folder: a folder opens, a file (shown with its size) attaches, and a typed path works too. Files are read when you send; a folder attaches as a listing.
- Approvals. Permission requests appear with Allow, Always allow and Deny. They appear in every connected client, terminals included, and close everywhere once one of them answers.
- Model and mode. Pick the model for a new agent or the next turn, and cycle the tab’s permission mode (M).
- Stop. Cancel the current turn and its subagents.
- Tools and services. The home page lists the control service, with its state (for example “Connected, 28 tools”, or which macOS permission is missing), and your MCP servers.
- Settings. General, Providers (including API keys), Models, Permissions, MCP servers, Control service (browser profiles,
control.toml), Memory, Agents, Profiles, Interface (including the daemon’s idle timeout and browse root), Remote access, Advanced (the raw TOML files) and About. - Remote access. Whether other devices may connect, the bind address, port and public address, the tunnel to start with the daemon, pairing codes with a QR code, the paired devices with Revoke, keep-awake, and how to connect. See Remote access.
- About. The malac version, updates, and the daemon serving the page: its version, process, start time, clients, and a button to stop it.
The UI follows your system’s light or dark setting and has a theme switch (D). Press ? for every keyboard shortcut.
Applying settings
Section titled “Applying settings”Settings are saved to the configuration files. Apply reloads the tabs that are idle, so their next agent uses the new settings; tabs with running agents pick them up the next time they load. Settings the daemon itself reads ([daemon], [web], [remote], [update], [control]) apply the next time it starts.
Options of malac web
Section titled “Options of malac web”| Option | Meaning |
|---|---|
--open |
Open the UI in the default browser |
--json-ready |
Print one JSON line with url, token and urls once ready, then stay connected until stopped (for editor integrations) |
--cwd <folder> |
Add or activate a tab for this folder |
--port, --host, --remote, --token |
How the daemon listens, when this command starts it |
The tab options -m, --profile, --mode, -y and --no-control apply to the tab that --cwd opens. When the daemon already runs, it keeps its address, token and interfaces; malac daemon restart --remote restarts it with remote access on.
Security
Section titled “Security”- Tokens. Every API request and the event stream need a token. The master token in the printed URL works only on this machine; paired devices use their own, which you can revoke.
- Local by default. The daemon binds to
127.0.0.1and refuses every request that is not local: from another machine, through a proxy or a tunnel, or from a page that rebinds its name to this machine (DNS rebinding). - Remote access is opt-in and plain HTTP.
web.remote = true(ormalac daemon start --remote) lets paired devices in. Traffic is not encrypted, so on networks you don’t trust, use an SSH tunnel, Tailscale or a reverse proxy with TLS:
ssh -L 7700:127.0.0.1:7700 devbox # then open the printed URL locallyA project’s .malac/config.toml cannot set [web], [daemon] or [remote]. See Remote access for the whole model.
Developing the UI
Section titled “Developing the UI”The UI is a set of static files compiled into the binary. Set MALAC_WEB_DIR to a checkout’s web/ directory when starting the daemon to serve the files from disk instead, so changes show up on reload:
malac daemon stopMALAC_WEB_DIR=$PWD/web cargo run -p malac -- daemon runmalac is created by lobirus and released under the MIT license. About malac