Your AI says "done." Exnos is how it knows.

One tool call returns the live state of the Chrome tab you're working on: fields, buttons, console errors, network requests and performance, in milliseconds. It can also record a tab over time, so your AI can read back what changed. It reads local pages and only the other sites you allow. Read-only. Local. Free.

Install Exnos GitHub

GOL Free License. Node 18+. Works with Claude Code, Cursor, and any MCP client.

Two steps. Connect the MCP server, load the Chrome extension.

1. Connect your agent

claude mcp add-json --scope user exnos '{"command":"npx","args":["@golproductions/exnos"]}'

2. Load the extension

npx @golproductions/exnos@latest path
Open chrome://extensions, enable Developer mode, click Load unpacked, pick that folder. Badge reads ON when connected.

What it sees.

A single exnos_verify call returns:

Navigation

URL, title, ready state - navigation facts, not assumptions.

Page text

The rendered text of the page, 3,000 characters by default and up to 20,000, marked when cut. Changes anywhere on the page are reported.

Forms

Every field in view with its live value and a selector. Passwords, keys, tokens, CSRF tokens and card numbers are masked.

Controls

Every button with its disabled state. Checkboxes and radios with checked state.

Console

Errors with message and stack, warnings, and failed resource loads, counted separately from page load.

Network

The site's own fetch and XHR: URL, method, status, short response body, timing. Failures first. Other sites' requests only when asked.

WebSocket

Sent and received frames, last 30.

Storage (on request)

localStorage, sessionStorage and cookies, only when asked, with tokens and session values redacted.

Performance

Page load, TTFB, DOM ready and paint timing.

Focus

Which element has focus right now.

Shadow DOM

Pierces component library boundaries.

Iframes

Title and text of same-origin frames, and a count of cross-origin frames it cannot read.

App globals

Any window.__* values the app sets.

Record mode.

exnos_verify is a snapshot. A recording keeps watching: every few seconds Exnos samples the tab and saves what changed, so a bug that comes and goes, or a list that changes all day, can be read back later.

What it saves

The URL, the title, whether the tab was on screen, and the console errors, warnings and requests that are new since the last sample. Point it at part of the page and it also saves that part's text and its rows or cards, with their position on screen.

Only what changed

Unchanged samples are not saved. A heartbeat every 30 seconds shows the recording went on.

Outlives the session

A recording keeps running after your AI session ends, for up to 24 hours. A later session can list it, read it back or stop it.

Stays on your machine

Recordings are saved in ~/.exnos/recordings on your computer. Your AI cannot choose where they are written.

Same rules

The same sites as exnos_verify, checked on every sample. If the tab moves to a site Exnos may not read, the recording stops. Form field values are never recorded.

Keep it on screen

Chrome slows tabs you cannot see. For pages that update live, keep the recorded tab visible.

Tools.

ToolWhat it returns
exnos_verify Full live state. Optional tab (URL/title substring) targets another tab. Optional selector deep-dives one element: text, visibility, computed styles, HTML; if nothing matches, the rest of the state still comes back. Optional maxText returns more text (up to 20,000 characters). Optional includeHidden also lists fields and buttons out of view or hidden. Optional screenshot adds an image of the tab.
exnos_tabs The tabs Exnos can read: title, URL, active state, and how many others it is not listing.
exnos_fetch_tabs Full live state from several tabs in one call. Pass tabs as an array of URL/title substrings; optional selector applies to every match. Tabs that fail come back as errors beside the ones that succeeded.
exnos_screenshot A PNG screenshot of the visible Chrome tab, returned as an image your AI can see, for visual bugs where text state is not enough. Optional tab targets another tab.
exnos_record_start Starts recording a tab. Optional selector is the part of the page to watch and items its rows or cards; every sets the seconds between samples (default 2) and duration the minutes to record (default 60, up to 24 hours).
exnos_record_status Every recording, newest first: its state, samples taken, changes saved, errors and file, including recordings started in earlier sessions.
exnos_record_read Reads a recording back: the last few minutes or a time range, latest or earliest first.
exnos_record_stop Stops one recording, or all of them.

Notes.

Server on 127.0.0.1:17872 (the Chrome extension connects on this port, so keep it free). GET / returns {"exnos":true,"extension":true|false}.

Extension reconnects automatically after Chrome or server restart.

npx fetches the newest server on its own, but the Chrome extension does not update itself. After an update, open chrome://extensions and click reload on Exnos.

Internal pages (chrome://) cannot be inspected.

Exnos reads local pages (localhost, 127.0.0.1, local files) and any other site you allow by clicking its icon in Chrome's toolbar; click again to remove it. Your AI cannot allow a site, and tabs on other sites are not listed. Console and network capture starts when a page loads; a page that was already open needs one reload.

Network tap intercepts fetch and XHR at document_start. Requests made before the extension loaded are not captured.

Stop guessing what the browser shows.

Free. Built by GOLProductions. Two minutes to install.