Browsing live pages
web_fetch does a plain HTTP GET. The browse tool opens the URL in a real Chromium and
reads the page after its JavaScript has run, which is the only way to read a
single-page app or a dashboard.
It is off by default, because driving a real browser is far slower than a fetch. Turn it
on in /settings → browser, or:
browser = truebrowser_path = "" # only to point at your own copy of the engineThe engine ships with koda
Section titled “The engine ships with koda”browse drives agent-browser, a
self-contained native binary. The installer fetches it, and if it did not, the first
browse call does — one pinned version, checked against a pinned hash before anything is
written, unpacked into koda’s own directory. No npm, no Node, nothing to install by hand.
koda browser install # fetch or update it explicitlykoda browser status # which engine koda would use, and where it came fromkoda looks for the engine in browser_path first, then its own copy, then your system
PATH, then the common locations (/opt/homebrew/bin, ~/.cargo/bin,
~/.npm-global/bin, /usr/local/bin) — so a copy you installed yourself still works.
KODA_AGENT_BROWSER_URL points the download at a mirror for an air-gapped install. The
hash check still applies.
Which browser, and whether you watch it
Section titled “Which browser, and whether you watch it”browser = truebrowser_channel = "chrome" # chrome · msedge · a path · "" for the bundled onebrowser_headless = true # false to watch the windowBoth are rows in /settings — browser build and browser window.
browser_channel defaults to chrome, so koda drives the Chrome you already have rather
than downloading a second browser. An absolute path drives any other Chromium build, which
is how Brave or Arc get used:
browser_channel = "/Applications/Brave Browser.app/Contents/MacOS/Brave Browser"If the browser you named will not start, koda says so and uses the bundled Chromium instead. The point is to read the page, not to fail because a preference could not be met.
Turning browser_headless off opens a real window, which is worth doing when you want to
watch what the agent is looking at, or to sign in somewhere first.
Calling it
Section titled “Calling it”The tool takes a url and an optional wait_for CSS selector for a page that fills in
late. Only http and https are accepted.
Its description names it as the agent-browser / browser tool, so asking koda to “use browser” or “open this in a browser” finds it, rather than getting a literal answer about having no tool by that name.
What comes back is page text, and the agent is told to treat it as untrusted data rather than instructions.
The uncensored edition
Section titled “The uncensored edition”The stealth browsing stack on the uncensored branch exists so an agent can read pages
that block automation — Cloudflare and DataDome-class fingerprinting. It drives your real
Google Chrome, non-headless.