Skip to content

Portal

This content is for v1.0.8. Switch to the latest version for up-to-date documentation.

RustFox can serve a browser UI from the same binary. There is no separate frontend to deploy. The portal is off by default.

In config.toml:

[portal]
enabled = true
port = 8090
bind = "127.0.0.1" # keep loopback or a private network
token_sha256 = "<sha256>" # hash of your login token

Generate a token and its hash:

Terminal window
python3 -c 'import hashlib,secrets; t=secrets.token_hex(32); print("token:", t); print("token_sha256:", hashlib.sha256(t.encode()).hexdigest())'

Put the hash in token_sha256. Type the token itself on the login screen. Keep the token out of git and out of Telegram chat.

Restart after you change portal settings (rustfox restart, or /restart in Telegram). Then open http://127.0.0.1:8090 on the machine that runs RustFox.

If you have not set a hash, the startup log can print a temporary token (journalctl --user -u rustfox and look for temporary login). That token lasts for the life of the process. Pin a hash when you want a stable login.

Page What you can do
Chat Talk to the agent in the browser and watch tool calls stream. History is separate from Telegram
Agents Browse configured sub-agents. The pixel office shows Agent seats: idle agents roam, busy agents sit at a desk. Running state follows live signals only, not a static label
Memory Search the conversation and knowledge store, and browse recent entries
Tasks List cron and one-shot tasks, view run history, pause or resume
Settings Inspect the active config (secrets masked). Self-upgrade here uses the same auto, main, and release choices as Telegram

Those upgrade choices are on Update. Ask the bot /portal when you want the URLs it can see on this host (Commands).

In the portal, Reduce motion or Disable office animations stops idle roam in the pixel office. Agent rows still show honest busy state from the API (live_signal / definition_only).

Keep bind on loopback or a private network. The public internet is out of scope. LAN addresses, Tailscale, and login notes are in the RustFox portal access runbook. /portal in Telegram lists URLs for the current network and does not invent addresses the bind cannot serve.

A white or blank page on a source build usually means the web UI was not embedded. Use ./scripts/build-all.sh on Setup. Release binaries from GitHub already include the UI.