The Practical Business Operations Robot
Bro is an LLM computer-using agent (CUA) designed to autonomously perform mundane tasks related to business operations and administration, such as doing accounting, filing paperwork, and submitting applications. Bro is primarily designed to run on a dedicated VM or a spare laptop; it runs as a headless process and offers a remotely accessible web interface for monitoring and control.
ℹ️ "Bro" is Latvian for "one who beheads the Messiah".
Currently, Bro utilizes the general-purpose GPT-5 for high-level reasoning and planning, GPT-5(-mini) with auto-adjusted reasoning effort setting for GUI manipulation, and the fast and compact UI-TARS-1.5-7B for UI grounding (which is used directly, without any additional OCR or object detection). The agent is tuned to avoid touching UI unless absolutely necessary, preferring direct file access, shell commands, Python scripting, and hotkeys whenever possible. There is an option to replace the GPT & UI-TARS stack with the stock CUA model from OpenAI; it may perform better in certain scenarios, but it is also much more expensive to run.
You can even run UI-TARS locally (the 7B version only needs 32 GB of VRAM) and avoid OpenRouter. Warning though: quantized edits of UI-TARS cannot be used for grounding as-is!! The exact reasons for that elude my understanding, but quantized models tend to predict screen coordinates incorrectly (custom scaling factors are required).
Bro does not attempt to compete in the standard CUA benchmarks because it is primarily focused on practical utility in real-world office tasks rather than synthetic benchmarks. As an example where the two are at odds, Bro is able to log into a bank account using 2FA OTP codes generated by an authenticator app, while the current OSWorld flagman is too slow to succeed at that (OTP codes expire quickly); also, Bro tends to be very cheap to run because it heavily relies on low-cost models and minimal UI interactions.
Currently, Bro uses OpenRouter and OpenAI for inference. You must have valid API keys for both services
exported as environment variables OPENROUTER_API_KEY and OPENAI_API_KEY.
In the future we may add other models and other inference backends.
Bro has only been tested on GNU/Linux distributions so far with X11 (Wayland may not work). Adding support for macOS and Windows should be trivial and contributions are welcome.
git clone https://github.com/Zubax/bro
cd bro
pip install -e .To invoke Bro, export OPENAI_API_KEY and OPENROUTER_API_KEY, then go like:
bro --exe gpt-5+ui-tars-7bFor other options, see bro --help.
If you want to resume a previous session, use bro --resume.
To run Bro via SSH, be sure to source source_ssh.sh first,
and consider using tmux as explained below.
If provided, Bro will read ~/bro/system_prompt.txt and add the contents to the system prompt
after its internal system prompt. Use this to describe the operational environment (e.g., where to find certain files,
what software and online services to use, etc), how the bot should self-identify, its personality traits, and so on.
Bro will store some context files under the local brodir $PWD/bro/.
It is by design that if you clone Bro into your ~ and run it there, all three directories --
the local context directory, the global brodir, and the source directory -- will be the same.
The recommended practice is to give Bro a separate virtual machine or a spare laptop with the most recent Ubuntu LTS, configure a narrow screen resolution (not larger than about 1600x1200), disable Wayland, ssh there and run Bro in a terminal multiplexer. Do not attempt to run Bro on computers used by humans.
It may be a good idea to set up the shell on the remote machine to automatically run ssh sessions in tmux
to retain Bro sessions across disconnects.
One standard recipe is to add the following to ~/.bashrc or ~/.profile:
if [[ $- =~ i ]] && [[ -z "$TMUX" ]] && [[ -n "$SSH_TTY" ]]; then
tmux attach-session -t ssh_tmux || tmux new-session -s ssh_tmux
fiTo detach from a tmux session, press Ctrl+B followed by D. This will leave the session running in the background.
To reattach to the session later, use the command tmux attach-session -t ssh_tmux.
The web interface is intended for monitoring purposes only. It is available via http://<host>:8814.
To use Bro with Slack, you need to create a Slack app and obtain the necessary tokens.
-
Create a new Slack app at https://api.slack.com/apps
- Click "Create New App" → "From scratch"
- Give it a name (e.g., "Bro") and select your workspace
-
Enable Socket Mode
- Go to "Socket Mode" in the sidebar
- Toggle "Enable Socket Mode" to ON
- Generate an app-level token with the
connections:writescope - Copy this token - this is your
BRO_SLACK_APP_TOKEN(starts withxapp-)
-
Configure OAuth & Permissions
- Go to "OAuth & Permissions" in the sidebar
- Add the following Bot Token Scopes:
channels:history- View messages in public channelschannels:read- View basic channel infochat:write- Send messages as the botfiles:read- View files shared in channelsfiles:write- Upload and modify filesgroups:history- View messages in private channelsgroups:read- View basic private channel infoim:history- View messages in direct messagesim:read- View basic direct message infoim:write- Start direct messages with usersmpim:history- View messages in group direct messagesmpim:read- View basic group direct message infousers:read- View users in the workspace
-
Install the app to your workspace
- Scroll up to "OAuth Tokens for Your Workspace"
- Click "Install to Workspace" and authorize
- Copy the "Bot User OAuth Token" - this is your
BRO_SLACK_BOT_TOKEN(starts withxoxb-)
-
Enable Event Subscriptions
- Go to "Event Subscriptions" in the sidebar
- Toggle "Enable Events" to ON
- Under "Subscribe to bot events", add:
message.channels- Listen to messages in public channelsmessage.groups- Listen to messages in private channelsmessage.im- Listen to messages in direct messagesmessage.mpim- Listen to messages in group direct messages
- Click "Save Changes"
-
Get your Bot's User ID
- In your Slack workspace, click on the bot's name to view its profile
- Click the "⋮" (three dots) menu → "View full profile"
- Click "⋮ More" → "Copy member ID"
- This is your
BRO_SLACK_USER_ID(starts withU)
-
Invite the bot to channels
- In any channel where you want Bro to operate, type:
/invite @Bro
- In any channel where you want Bro to operate, type:
When using Bro with Slack, make sure to export all required environment variables:
export BRO_SLACK_BOT_TOKEN="xoxb-..."
export BRO_SLACK_APP_TOKEN="xapp-..."
export BRO_SLACK_USER_ID="U..."
export OPENAI_API_KEY="..."
export OPENROUTER_API_KEY="..."
bro --exe gpt-5+ui-tars-7bTo invoke a particular component for testing purposes, go like python3 -m bro.executive.ui_tars_7b.
Please open a ticket or shoot us a msg on the Zubax forum. Pull requests are welcome.

