On this page
Use your Chrome
Haarness agents can work in your own Google Chrome, with the accounts you are signed in to,
through the Haarness for Chrome extension. Use it for tasks that need your sign-in, such as
"download last month's invoice from my billing page". It works from Desktop, the terminal UI,
haarness run and the SDKs, so you do not need Desktop open to browse.
For a dev server, or a site that needs no sign-in, Desktop's built-in browser keeps each chat in its own private profile instead.
You need: Google Chrome 125 or later on the computer that runs your Haarness projects.
Haarness for Chrome comes with Haarness: the haarness command from the
install command and the Desktop app both include it. It is not in the
Chrome Web Store yet, so you load it into Chrome yourself, once.
Before you start, know what you are allowing:
- Every site asks first, in each chat. Auto,
--yoloand your permission rules do not answer for you. - Agents use only their own tab groups. Your other tabs are left alone.
- You can pause or stop Haarness from its button in Chrome's toolbar at any time.
Set up Chrome from Desktop
- Open Settings → Browser and go to the Chrome group. Click Set up Chrome….
- Use Chrome with Haarness opens and prepares Chrome to start Haarness. It shows Chrome can start Haarness when that is done.
- Under Add Haarness for Chrome, follow the steps it shows:
- Copy the address
chrome://extensionsand open it in Chrome. Desktop cannot open it for you. - Turn on Developer mode at the top right of that page, and keep it on.
- Click Load unpacked. In the folder picker, press ⌘⇧G on macOS (Ctrl+L on Windows and Linux) and paste the folder path Desktop shows; the copy button next to it copies it. You can also click Reveal in Finder (Show in Explorer on Windows, Show in file manager on Linux) and drag the folder onto the picker.
- Pin Haarness to the toolbar: click the puzzle-piece button in Chrome's toolbar, then the pin next to Haarness.
- Copy the address
- Desktop shows Waiting for Chrome… and then Connected to Google Chrome.
Try it: ask "open example.com in Chrome and summarise it". The Chrome row in Settings → Browser now reads Connected · Google Chrome.
Set up Chrome from the terminal UI
Type /chrome (or /browser). The panel shows whether Chrome is connected and what to do next;
/chrome setup starts the setup at once.
- Press Enter to set up. Haarness prepares Chrome and shows the steps above, with the folder
path to paste after Load unpacked. Press
cto copy it. - Follow the steps in Chrome: Developer mode, Load unpacked, then pin Haarness to the toolbar.
- The panel says Chrome is connected. Press Esc to close it.
While it is open, e turns Let agents use Chrome on or off and d changes Browser for new
agent tabs. /status also has a Chrome line.
Set up Chrome from the command line
haarness browser setupIt prepares Chrome to start Haarness and ends with the next step, such as "Next, add Haarness for Chrome: open chrome://extensions, turn on Developer mode (keep it on), click Load unpacked, press ⌘⇧G and paste:", then the folder path and "Then pin Haarness to the toolbar." On Linux it says Ctrl+L; on Windows, paste the path into the folder box.
| To | Run |
|---|---|
| See whether Chrome is set up and which projects it reaches | haarness browser status |
| Undo the setup | haarness browser remove |
| Also delete the extension folder | haarness browser remove --all |
After remove, Desktop no longer sets Chrome up again by itself. Remove Haarness from
chrome://extensions as well.
Setup also prepares Chrome Beta, Chrome Canary, Chromium, Microsoft Edge, Brave and Vivaldi (not
on Windows), and Chrome for Testing on macOS, when it finds them. --browser picks one or more:
chrome, chrome-beta, chrome-canary, chrome-for-testing, chromium, edge, brave or
vivaldi. To use one of them, load Haarness for Chrome the same way from that browser's own
extensions page, such as edge://extensions. Haarness then shows it by its own name, such as
Connected · Microsoft Edge.
If HAARNESS_HOME or HAARNESS_DATA_DIR is set, or you pass --data-dir, setup stops and says
why; see Chrome does not connect.
Download Haarness for Chrome
The download page offers Haarness for Chrome as a zip, with its SHA-256 checksum.
You do not need it to get started: the haarness command and Desktop already include it, and the
setup above prepares the folder to load. Download it to keep the released files yourself:
- Download the zip and unzip it.
- Run
haarness browser setupon the same computer. Chrome needs it to start Haarness, whichever folder you load. - Open
chrome://extensions, turn on Developer mode, click Load unpacked and choose the unzipped folder. Pin Haarness to the toolbar.
The direct link to the latest one is
https://haarness.ai/api/v1/releases/stable/chrome-extension/download (preview instead of
stable for the preview channel).
Install it for your team
An administrator can install Haarness for Chrome on the Chrome browsers their organization manages, without Developer mode, through Chrome's ExtensionInstallForcelist policy. Add this entry:
accdjhmcgljbadpeanajllmcembhkomn;https://haarness.ai/api/v1/releases/stable/chrome-extension/updates.xmlChrome then installs the signed package of the current stable release and updates it with every
release (preview instead of stable follows the preview channel). Chrome accepts an extension from
outside the Chrome Web Store only on browsers your organization manages.
Each person still runs haarness browser setup once, or opens Desktop, which does it for them, so
that Chrome can start Haarness on their computer.
Keep it up to date
- Set up with Desktop: each time Desktop starts after an update, it refreshes the folder setup prepared, and Haarness for Chrome reloads itself when no agent is using it.
- Set up with the terminal UI or
haarness browser setup: after you update Haarness, runhaarness browser setupagain (or/chrome setup) to refresh the folder. Until you do, the Haarness button in Chrome's toolbar may say Update needed, with the command to copy. - Loaded from a zip: Chrome keeps running the folder you chose. When Haarness is newer, the Haarness button shows Update ready: load the newer zip, or the folder setup prints, in its place.
- Installed for your team: Chrome updates it from the policy's address.
What can agents do in Chrome?
The same things as in Desktop's browser: open tabs, read pages, click, type, fill in forms, take screenshots, upload files from your project and fetch downloads. Lighthouse audits, performance traces and CPU or memory profiling work only in Desktop's built-in browser.
- Only in their own tab groups. Each chat gets a tab group named after the chat, and a helper agent gets its own, with at most 32 tabs per chat. A new tab opens in the background of the window you used last, and Haarness never brings Chrome to the front by itself. In the window you are working in, agent tabs stay behind yours; if the agent needs a screenshot of one, it may ask you to show that tab.
- Your network. Pages load over your own connection, VPN and proxy, and
localhostis your computer. - Share a tab by dragging it into a chat's group. Take it back by dragging it out, ungrouping it or closing it; the agent is told you took it back. A page that an agent's tab opens in a new tab joins its group; a pop-up in a window of its own usually does not, and the agent cannot use it.
- Never:
chrome://pages, other extensions, files on your computer (file://), DevTools, or Incognito windows. - File pickers: a file chooser that a page opens during an agent's action, or in the 5 seconds after it, does not appear; the agent uploads files its own way instead.
- Your site settings stay: a site you already allowed to use the camera, microphone, location or notifications keeps that permission while an agent drives it.
- Which browser a new tab uses is set by Browser for new agent tabs, in Settings →
Browser or with
din/chrome. Automatic, the default, uses the Haarness browser when the chat is open in Desktop, otherwise Chrome. You can also just say "in Chrome" in your message. - Scheduled runs do not pick Chrome under Automatic, and neither do the helper agents and workflows they start. A scheduled run that does use Chrome cannot ask you, so it can use only sites you set to Always allow (see below).
Downloads
A file an agent downloads is saved where Chrome saves your downloads, and stays there. The agent
gets a copy of up to 5 MiB in your project's .haarness-chat-attachments folder, which Haarness
keeps out of Git. Only a download that starts in the agent's tab, while it acts or within 10
seconds after (an Export button that prepares the file first, say), counts as the agent's;
the agent never sees your other downloads.
If Ask where to save each file before downloading is on in Chrome's download settings, Chrome
opens its Save dialog, which the agent cannot answer, so the download does not finish until you
do. Turn that setting off at chrome://settings/downloads if agents should download without
you.
The bar at the top of Chrome
While an agent is working, Chrome shows a bar at the top saying that "Haarness" started debugging this browser, because that is how the extension controls tabs. It goes away about 30 seconds after the agent's last action. Cancel on that bar stops Haarness in this browser; see Stop or pause it.
Chat titles in tab groups
Tab groups are named after your chats. If Chrome syncs your tab groups to your Google account, those chat titles are synced too.
Approve a site in Chrome
Out of the box, browsing, downloads, uploads and scripts all ask first, for every site. The request says Allow in Chrome and what the agent wants, such as Use https://example.com in Chrome, followed by what that action uses: the address, the script it runs, the text it types or the files it uploads.
| Answer | Key | Allows |
|---|---|---|
| Allow in this chat | a |
That site, for that kind of action, in this chat until the Haarness server stops |
| Allow once | y |
This one action |
| Deny | n |
Nothing. The agent is told you said no |
Desktop shows the three as buttons; the keys are the terminal UI's.
You can answer from the Haarness button in Chrome too: a waiting request shows Waiting for
you with Allow in this chat and Deny, and the button shows !. A request that also needs
an answer outside Chrome, such as an upload of a file outside the project, says to answer it in
Haarness. haarness run at a terminal asks y (allow in this chat), o (once) or N.
- Each kind of action asks on its own. A site you allowed for browsing still asks before the agent downloads from it, uploads to it, or runs a script on it (Run scripts on … in Chrome). A script can read anything on the page, so allow it only where you would.
- Other chats ask again. An answer never carries over to another chat, and ends when the Haarness server for that project stops.
- Auto does not answer these. In Chrome the agent acts as you, in accounts where a mistake
can send a message, pay or delete. So Auto,
--yolo, hooks and allow rules in your configuration never approve a Chrome site. A chat you share with/rccannot answer from your phone either: answer on the computer running Chrome, or through Remote control › Hosts, which opens that computer itself. In a schedule the agent's Chrome action fails at once and the agent is told which site needs you;haarness runwith no terminal stops and names the site.
Stop being asked about a site
In Settings → Browser → Chrome site permissions, add the site and set Browsing, Downloads, Uploads and Scripts to Always allow, Requires approval or Block. The Default row covers every other site.
- These settings apply to every project on this computer. A project's own settings can only make Chrome stricter, never looser.
- A site you Block under Agent site permissions, for Desktop's browser, is blocked in Chrome too. Always allow there does not carry over.
- Let agents use Chrome turns Chrome off for agents. Turning Agent browser control off
also turns Chrome off, and so can a project's own settings. Settings → Browser and
/chromesay which one keeps Chrome off. - While an agent works, Chrome does not load pages, frames or images from a site you Block, even inside a page you allowed; the rest of the page still works. Requests a page makes from its workers, and WebSocket connections, are not filtered this way.
Stop or pause it
Click the Haarness button in Chrome's toolbar. It lists the chats using this Chrome:
- Stop next to a working chat stops that chat's turn, as stopping it in Haarness would.
- Show tabs brings that chat's tab group to the front; Close tabs closes them, and Close all agent tabs closes every chat's tabs.
- Turn off Let Haarness use this browser to pause. Work in progress stops at once and agents are told you paused Haarness, until you turn it back on.
- Cancel on the debugging bar stops everything Haarness is doing in this Chrome. Agents cannot use Chrome again until you click Resume on the Haarness button.
- Alt+Shift+S, Stop Haarness in this browser, stops every chat working in this Chrome and, like
Cancel, keeps agents out until you click Resume on the Haarness button. The button shows
the keys next to Stop all; change them at
chrome://extensions/shortcuts.
Pages you click or type in yourself are yours: what you do in a tab is not an agent action.
Use more than one Chrome profile
Load Haarness for Chrome in each Chrome profile you want agents to use. A chat keeps using the profile that already has its tabs; a new chat uses the profile you used last. To tell profiles apart, give each a Profile label on the Haarness for Chrome welcome page, opened with Settings & help on the Haarness button.
Chrome does not connect
- The Haarness button says Not set up. Chrome cannot start Haarness. Run the setup again
(Set up Chrome…,
/chromeorhaarness browser setup), then reopen the button. Do the same after you move Haarness Desktop: on a Mac it must be in your Applications folder, not run from the disk image. - Developer mode was turned off. Turn it back on at
chrome://extensions. - Chrome is connected, but the agent says it is not. Click Settings & help on the Haarness
button. Under Connected projects, a project Chrome cannot use shows Error and why:
- "Restart this project's Haarness server.": the server refused Chrome, most often because it
is older than Haarness for Chrome. When its running work has finished, run
haarness serve --stopin that project and open the project again. - "This project's Haarness server does not accept Chrome. Restart it without --anonymous.": you
started it yourself with
haarness serveand no token, or with--anonymous. Start it again withHAARNESS_SERVER_TOKENset.
- "Restart this project's Haarness server.": the server refused Chrome, most often because it
is older than Haarness for Chrome. When its running work has finished, run
- You use
HAARNESS_HOME,HAARNESS_DATA_DIRor--data-dir. Chrome reaches the projects of your usual Haarness data folder. With one of these set,haarness browser setupstops and explains why: your Chrome would start Haarness from that folder, and stop working once you delete it. To use it anyway, runhaarness browser setup --use-isolated-data-for-chromewith the same setting; Chrome then reaches that folder's projects too, until you runhaarness browser setupwithout it. - A work or school Chrome. Your organization may block extensions you load yourself, or the
way Chrome starts Haarness.
chrome://policylists the rules it sets; ask your administrator. - Chrome from Flatpak or Snap (Linux) cannot start Haarness. Install Chrome from Google's
package instead.
haarness browser statussays which browsers it could not set up.
What does not work yet
- Projects on another computer: Chrome works with Haarness projects on the computer where
Chrome runs. A project on a remote server, in Desktop or through
haarness attach, cannot use it. - Firefox and Safari are not supported.
- The Chrome Web Store: Haarness for Chrome is not listed there yet. Load it unpacked, or have your organization install it by policy.
Next
- Websites in your Chrome: how its approvals fit with the rest of Haarness's permissions
- What can an agent do in my Chrome?: what you trust when you allow a site