Skip to content

The Kadmo extension ​

The Kadmo extension lets the Kadmo runtime on your computer drive Chrome: open a page, read it, click, type and fill in forms, take a screenshot, and hand the result back to the workflow or the MCP client that asked. Pages open with the sessions you are already signed in to, so nothing needs your passwords.

Its only peer is the runtime on your own computer, at localhost:9876. Install the runtime first: Install the runtime.

Install it ​

  1. Open the extension in the Chrome Web Store: Kadmo.
  2. Click Add to Chrome and confirm the permissions (each one is explained below).
  3. Pin it: click the puzzle icon in the toolbar, then the pin next to Kadmo.
  4. Make sure the runtime runs: kadmo service install installs it as your login service (Install the runtime). The extension connects by itself; the popup says Connected and Ready for automation.

The extension connects to the one runtime that runs for your user, and every MCP client reaches the browser through it: see One runtime per user.

How it connects ​

  • The extension connects to the runtime at ws://localhost:9876/ws as soon as Chrome starts, and tries again every 3 seconds while the runtime is not running. The port is fixed: a runtime on another port has no browser.
  • Once connected, it attaches to the first regular tab it finds (not a restricted page), or to the next one that finishes loading. That tab is the driven tab: every browser tool and workflow step acts on it.
  • It attaches with Chrome's debugger, so Chrome shows the bar "Kadmo" started debugging this browser while a tab is driven.
  • The runtime accepts one extension at a time. A second copy, for example in another Chrome profile, is turned away and tries again every 30 seconds.

The popup ​

Click the Kadmo icon in the toolbar. The popup has three states.

StateShowsButtons
Connecting...Reaching the Kadmo runtimenone
ConnectedReady for automation, or Recording actions... while recordingOpen Dashboard, the workflow count, Disconnect, Focus Tab, Record
Not ConnectedNo tab is attached. The text is fixed, Kadmo runtime not reachable and Start the Kadmo runtime on this computer. with a How to link to this site, whether the runtime runs or notConnect

Disconnect, Focus Tab and Record are the three round icons under the workflow count; hover one to see its name.

When a tab is attached but the runtime is not reachable, the popup shows the Connected state with Kadmo runtime not reachable and the same instructions, and Record is disabled. Opening the popup attaches the tab you are looking at when it can, so with the runtime stopped this is what you usually see.

ButtonWhat it does
Open DashboardOpens the runtime's dashboard at http://localhost:9876 in a new tab
N Actions · ViewThe number of workflows the runtime has; click it to open the dashboard's Skills view
DisconnectDetaches the driven tab. The connection to the runtime stays, and the extension attaches a tab again when the next page finishes loading.
Focus TabBrings the driven tab to the front
Record / Stop RecordingStarts and stops recording on the driven tab (see Record)
ConnectAttaches the tab you are looking at; it fails on a restricted page

Under Features, the Embed Buttons switch (Show action buttons on sites) turns page buttons on and off. It is on by default.

Embed buttons ​

A workflow can put a button on the pages it is meant for; clicking it runs the workflow on that page. While Embed Buttons is on, the extension asks the runtime which buttons a site has, by the site's host name, once per site. How to give a workflow a button: Embed buttons.

Record ​

Record makes the extension record what you do on the driven tab (clicks, typing, scrolling, page changes) and send it to the runtime. Typing is recorded as the field's value, password fields included, so record only what you mean to.

In this release the runtime does not turn these recordings into workflows: a recording started from the popup reaches the runtime and is not saved. Write workflows in YAML instead (Workflows).

HTTP sign-in ​

A site that asks for HTTP sign-in (the browser's own user name and password dialog) would stop a workflow. The runtime can hand the extension credentials for the site it names (the set_basic_auth tool); the extension answers that site's prompt in the driven tab with them, keeps them only for the browser session, and never answers twice after a rejected password. A prompt with no matching credentials is dismissed so the page never hangs.

Permissions ​

PermissionWhy the extension needs it
debuggerDrives the tab the runtime works in the way a user would: real mouse and key input, screenshots of the page, closing the page's own alert and confirm dialogs that would otherwise stop the workflow, and evaluating a script in the page when a workflow step asks for it. It attaches only to the one tab the runtime drives.
tabsFinds and focuses the tab the runtime drives, navigates it, reads its URL and title to report where the workflow is, and keeps the connection when the tab reloads or closes.
scriptingInjects the extension's own content script into a tab where it is not running yet (a tab opened before the extension was installed). Only the packaged file is injected.
storageKeeps your on/off choice for page buttons and, for the browsing session only, the sign-in credentials the runtime hands over for a site (cleared when the browser closes).
webRequestNotes when a request that was answered with sign-in credentials completes or fails, so a rejected password is never sent again in a loop.
webRequestAuthProviderAnswers a site's HTTP sign-in prompt in the driven tab with the credentials the runtime set for that one site.
Access to all sitesThe runtime's workflows open whatever site you automate, so the extension must work on any page. On other pages it only asks the runtime whether a workflow has a page button for that site (while Embed Buttons is on); nothing else is done on a page unless the runtime asks for it.

Privacy ​

  • The extension talks only to the Kadmo runtime on your own computer (localhost:9876). It sends nothing to Kadmo GmbH or anyone else, and has no analytics or error reporting. Its pages may connect to nothing but the runtime.
  • What it reads from a page goes to your runtime, because a workflow or MCP client you started asked for it.
  • No web page can use it: it answers only the runtime and its own popup, and offers no door to pages.
  • The full policy: kadmo.ai/privacy.

Restricted pages ​

Chrome does not let extensions drive its own pages, so the extension neither attaches to nor acts on:

PagesExamples
Browser pageschrome://, chrome-extension://, chrome-search://, chrome-untrusted://, chrome-distiller://, devtools://, edge://
Special pagesabout: (about:blank included), view-source:
The Chrome Web Storehttps://chromewebstore.google.com, https://chrome.google.com/webstore

Open a regular web page in a tab and the extension attaches to it.

Troubleshooting ​

SymptomFix
The popup says Connected with Kadmo runtime not reachableStart the runtime: kadmo service status says whether the login service runs it, kadmo service install installs it. Check curl http://localhost:9876/health.
The popup says Not ConnectedNo tab is attached, usually because the tab shows a restricted page. Open a regular web page and click Connect.
Connect failsThe tab shows a restricted page: open a regular web page and try again.
Connected, but the browser tools say the browser is not connectedNo tab is attached, or another program holds port 9876: kadmo doctor says which. See One runtime per user.
Two Chrome profiles have the extensionOnly one copy connects; the other retries every 30 seconds. Disable it in the profile you do not automate.
Actions happen in an unexpected tabThe extension drives the tab it attached first. Click Focus Tab to see it, or Disconnect and then Connect on the tab you want.
Page buttons do not appearCheck that Embed Buttons is on; see Embed buttons.

More on Troubleshooting.

On agents ​

A Kadmo agent's Chrome gets the extension by policy, installed from the store by its ID; nothing on this page is needed for an agent.