Skip to content

Browser

Two Chrome extensions. Alexein Memory keeps where an app user searched, shopped and read, as journeys in their memory. Alexein Agent lets an agent work in their browser, with their approval.

What an app user did in their browser - a search, the pages that followed, how it ended - as one memory item per journey, so memory can answer "what was that site I found last week?" or "did I send that email?". And an agent working in that browser, with their approval.

Two extensions

The Browser connector is two Chrome extensions. Install either one, or both.

ExtensionWhat it doesInstall it to
Alexein MemoryKeeps your journeys: searches, the pages they led to, and how they endedAsk memory "what was that site I found last week?"
Alexein AgentLets your AI agents act in your browser, with your approval. It keeps nothing of your browsingLet Alexein Desktop, Claude Code or your own agent use your browser

Alexein Memory captures at the level you choose, from sites only to journeys with what you read. See What it captures. It never keeps passwords, card and bank numbers, one-time codes, government IDs or anything typed into a field. See What is never recorded.

Alexein Agent opens its own window for an agent's tabs, and uses only those and tabs you hand it. You see every action and can stop it. See Agents.

Each works alone. Together, they are one browser in My memory, and Alexein Memory doesn't capture the agent's tabs (see When both are installed).

Had the single extension named Alexein? It becomes Alexein Memory when you update it: same ID, same pairing, same settings. If you let agents use your browser, add Alexein Agent beside it and pair it.

Install and pair

Neither is on the Chrome Web Store yet: while they are in early access, members of an Alexein organisation install them from My memory.

You need a desktop Chromium browser (Chrome, Arc, Brave, Edge, Dia and the like; not Safari or Firefox, and not on a phone), to be signed in to My memory, at memory.alexein.ai, and, while the extensions are in early access, access to the Alexein-AI organisation on GitHub, where their downloads live. No access? Ask an admin of your Alexein organisation to add you.

Open Connectors › Browser in the browser you want to connect. The page offers both extensions, each with its own download and its own Pair button. Do the steps below for each one you want.

Install one

  1. Select Get Alexein Memory or Get Alexein Agent. alexein-memory.zip or alexein-agent.zip downloads; sign in to GitHub first if it says the page isn't found.
  2. Unzip it, and move the folder somewhere it will stay, such as your Documents. The browser loads the extension from this folder, so don't delete it.
  3. Open chrome://extensions (in Arc, Brave, Edge or Dia, their own extensions page) and turn on Developer mode.
  4. Select Load unpacked and choose the folder. The extension appears in the list; pin it from the puzzle-piece menu to keep it at hand.

Back on My memory's page, select Check again if it doesn't find the extension by itself.

Pair Alexein Memory

Select Pair Alexein Memory. The extension opens a tab to name this browser (for example Work or Personal). Then choose what it captures, on My memory's page or in that tab. Nothing is recorded until you choose.

Pair Alexein Agent

Select Pair Alexein Agent. Chrome asks to let Alexein Agent read and change data on all sites: allow it. Alexein Agent works only in its own window and in tabs you hand it, and reads nothing else. Then turn agents on (see Let an agent use your browser).

After pairing

The connected browser is marked This browser in your list of connectors. Each browser, and each profile in it, connects on its own and has its own settings.

If the one-click pair doesn't work, select Pair with a code instead: the page shows a one-time code (valid for 10 minutes, used once) to enter in the extension's popup.

Installed only one? The browser's page in My memory offers Add Alexein Memory to this browser or Add Alexein Agent to this browser for the other.

When both are installed

Alexein Agent tells Alexein Memory which tabs are the agent's, and Alexein Memory captures none of them. A tab you hand to the agent stops being recorded while the agent has it, and is recorded again once you take it back.

Update them

Select Get Alexein Memory or Get Alexein Agent again, replace the old folder with the new one, and select ↻ (reload) on the extension in chrome://extensions. Each extension keeps the same ID from version to version, so the browser stays connected:

ExtensionID
Alexein Memorygbpejneafkfafpbkbfjgdkdfbihhpkgo
Alexein Agentghmefnjpaafggmkgflpilpcbdgbafbae

Reload, don't remove and load again: removing an extension deletes its settings, and it pairs as a new browser.

Remove them

Alexein Memory. To stop recording for a while, select Pause on the browser's page in My memory, or in the extension's popup. To stop for good, select Disconnect on the browser's page (it asks whether memory keeps what it learned), then select Remove on Alexein Memory in chrome://extensions.

Alexein Agent. To stop agents for a while, select Stop the agent in its popup, or turn agents off under Agents in My memory. To stop for good, disconnect it on the browser's page, then select Remove on Alexein Agent in chrome://extensions.

A browser not seen for a week is marked Not seen since in My memory, with a button to disconnect it.

If something goes wrong

What you seeWhat to do
The extension needs ChromeYou're in Safari, Firefox or a phone browser. Use a desktop Chromium browser.
Not found here, though you loaded itSelect Check again. If it persists, check the extension is switched on in chrome://extensions, then reload it there.
Built for another environmentThe extension you loaded was made for a different Alexein server. Download it again from My memory.
Developer mode banner when the browser startsExpected for an extension loaded from a folder. Select Keep or close it.
Alexein Memory shows DisconnectedThe browser was disconnected in My memory, or re-paired elsewhere. Pair it again from Connectors › Browser.
Alexein Agent can't pairYou declined Chrome's request for site access. Select Pair Alexein Agent again and allow it.
Agents can't find this browserAlexein Agent isn't installed or paired here. Alexein Memory alone doesn't let agents in. Install and pair Alexein Agent.

See Overview for what happens to what the extensions read.

What it captures

Alexein Memory captures at one of three levels:

LevelCaptures
Sites onlyWhich sites were visited, and when
JourneysThe path through a task: searches, the pages they led to, and how it ended
Journeys + readingJourneys, plus what was read on the pages

Categories can be switched on or off on their own:

CategoryWhat it covers
SearchesWhat was searched for, and where it led
Shopping and ordersProducts looked at and orders placed, with items and totals
CommunicationThat you sent an email or message, and where. On email and chat sites only the site and time are kept, plus that you sent something: never a subject, a name or the message.
ReadingWhat was read on a page
Incognito windowsPrivate windows. Off by default.

On a page

At the Journeys and Journeys + reading levels, a page in a journey also captures what was done on it, as labels and numbers, never what was typed:

WhatRecorded
Time on the pageActive time: only while the tab is in front, its window focused and the person not away or locked
Links followedThe link's text, the site it led to, and its place in the results on a search page
ClicksThe short name of a button, tab, menu item or card clicked ("Show more", the "Reviews" tab, a product card): never the text around it
JumpsJumping to a section of the same page from its table of contents: the section's heading
ChoicesAn option picked in a list, a size or colour swatch, a radio button, a box ticked or cleared, with the label of its group
Forms sentWhat the form was for (search, checkout, contact, review, newsletter) and the labels of fields filled
ScrollingHow far down the page it got: a quarter, half, three quarters, the end
Video and audioPlayed, paused or finished, skipped ahead or back, sped up or slowed, muted or unmuted, and how long was watched, including when the person switches away mid-play
CopiesThat something was copied, and how long it was: never what
ReturnsComing back to a page after time on another
Browser actionsPrinting the page, searching within it (never what was searched for), zooming, and, if turned on in Alexein Memory, downloads (the file type and size, never its name) and bookmarking the page

Downloads and bookmarks need permissions Chrome asks for separately: they are off until turned on under Browser actions in Alexein Memory's settings, and recorded only from then on. Each kind is capped per page, and repeats within 2 seconds count once. Nothing of this is recorded on email and chat sites, in sign-in and payment forms, or in a field that holds personal details.

What is never recorded

  • Passwords, card and bank numbers, one-time codes and government IDs.
  • Anything typed into a field or a compose box.
  • Secret tokens in addresses.
  • Text that is hidden on the page: it is not read.
  • What an email or chat says. On email and chat sites (Gmail, Outlook, Slack, WhatsApp Web and the like) only the site and the time are kept, plus that you sent something: no page title, address or text.
  • An order's shipping details, where they are labelled. Order excerpts keep items and totals; labelled shipping and contact sections are dropped, and emails and phone numbers are blanked.
  • Emails and phone numbers in page titles: they are blanked.

This is removed in the browser, and again on the server, so a copy that slipped past one is caught by the other.

Site rules

Each site has a rule:

RuleEffect
NeverNothing from the site is recorded
Sites onlyOnly that the site was visited
DefaultWhatever the level and categories say

A rule covers the site's subdomains. Some sites are handled for you: sign-in pages, password managers and Alexein's own app are always off. Banking, health and government sites start at Never, and you can change that.

Settings apply from now on

The level, the categories and the site rules apply to what is recorded from the moment you change them. They never reach back into what is already recorded: lowering the level, switching a category off or setting a site to Never leaves past journeys as they were captured, in memory and in your trace.

Setting a site to Never stops recording it from now on. Past journeys that visited it stay until you delete them: delete a journey, disconnect with forget, or erase the app user (below).

Journeys

A journey is one task followed through: a search, the pages it led to, and the outcome. Each is one item in memory. It is updated while the journey is open and finalised after half an hour idle. Once it is finalised, the raw page events behind it are kept for your trace for 7 days (below), then deleted.

A new search joins the open journey when it starts within 10 minutes of it and is related: it shares a meaningful word with the journey's searches or pages, or is on the same kind of site. Going back and forth between two related searches makes them one journey, titled as a comparison. A search that is unrelated stays its own journey, even if the person goes back to the first one in between: looking up a restaurant in the middle of laptop research is a side task, not part of the research.

Idle time is measured by the browser's own clock, as of the last thing it sent. A browser that was offline, or whose clock is wrong, sends its journeys whole when it is back, rather than in pieces.

Memory can join a journey to the rest of what it knows. "Did I send that email?" works because memory finds the browser's send action and your mail connector's sent message together.

The trace

The trace shows what Alexein Memory recorded, what it removed and why, and what memory got, one journey at a time. It lives in two places:

  • In Alexein Memory, for the person whose browser it is: View my trace in the popup and in its settings. It shows that person everything, and adds the extension's own log of what the browser kept back.
  • In My memory, for the organisation's members: Connectors, Browser, then Open trace on a connected browser.

Both show the last 7 days, newest first, grouped by day. Pick a journey to see its path, one step per page, with why the journey started, why each page joined it and why it closed. Pick a step to see four things: what was done, what was kept and what was removed (with the reason, and whether the browser or the server removed it), how it fits the journey, and what memory got. Removed values are never shown, only what kind of thing was removed and why.

Each journey is one of:

StatusMeaning
OpenStill being built, or finished and about to be sent to memory
HeldBuilt, but deliveries to memory are paused on the server, so it has not been sent
DeliveredSent to memory
ForgottenDeleted. The trace keeps only when it started, until its 7 days pass

A held journey is not sent later if it sits untouched for 7 days: its trace expires and it is never delivered, even once deliveries are turned back on.

Quick reloads, redirects and visits under 2 seconds are merged into the step they belong to and shown as a count on it, not as steps of their own. Anything removed from a merged visit shows only in that day's Removed totals, the row at the top of each day that adds up what was removed: for example "2 pages on banking sites, 1 card number, 3 emails".

Who sees what in My memory

My memory decides what to send by the member's role, and the server enforces it, so it is not only hidden on screen.

RoleSees
Owner, adminPage detail: titles, addresses, reading excerpts and the memory item. A Technical section with the raw events and their ids, including events that never joined a journey.
Developer, viewerJourneys by site, step counts, the start, join and close reasons, delivery state, and how many things were removed and why. No titles, addresses, excerpts or raw data.

Owners, admins and developers can act from the trace: forget a journey, set a site to Never or Sites only, and clear the trace. Viewers can only look. The person in Alexein Memory always sees their own full trace, except the Technical section, which is My memory's.

How long the trace is kept

WhatKeptWhere
Raw page events, and the removal entries and reasons about them7 days after the journey's last event, then deleted. The journey stays in Recent journeys by its title, sites and times; what memory was sent is no longer shown there. Memory keeps it.The server
The extension's own log of what the browser kept back7 days (at most 5,000 entries), then deleted. Never sent anywhere. Emptied when the browser is disconnected.The device only
A journey you forgot, a disconnect with forget, an erased app userDeleted from the trace at once; memory forgets it as soon as it can be reachedServer, and memory

Changing a setting or a site rule applies from now on. Lowering the level, switching a category off, or setting a site to Never or Sites only never reaches back: past journeys stay in the trace and in memory until you delete them from the trace. The one exception is events still on their way from the browser when you change a setting: they are checked against the new setting when they arrive.

Clear my trace

Clear my trace in Alexein Memory, or Clear trace in My memory, empties the trace for that browser.

What goes:

  • The raw page events the server kept for the trace, the removal entries and reasons about them, and the delivery history. Finished journeys leave the trace.
  • In Alexein Memory, also the log on that device. My memory's Clear trace clears only the server's side: the log lives on the device, and clearing it is done from the extension.

What stays:

  • The browser's journey list (Recent journeys) and what memory got. Clearing is not forgetting; to remove a journey from memory, forget it.
  • Open journeys keep the raw events they need to finish, though their earlier removal entries are cleared.

Pausing

Pause stops recording: for 1 hour, until tomorrow, or until resumed. Nothing is recorded while paused.

Agents

An agent can use a person's browser through Alexein Agent: read a page, find a control, click, type, choose and go to a page. The person sees every action and can stop it. The browser is the app browser among the actions an agent is given, with the same key and X-Alexein-User header as memory.

Let an agent use your browser

Install Alexein Agent and pair it. Alexein Memory alone doesn't let agents in. See Install and pair.

Turn agents on. Open Connectors › Browser, your browser, then Agents. Turn on Let agents use my browsers in <collection>. Then choose what agents may do: Allow, Ask or Block for low, medium and high risk. The same settings show in Alexein Agent.

Connect your agent. Pick one of the paths below.

The switch covers every browser feeding that collection, and is off until you turn it on. Agents drive one browser at a time: the one in use, or the one you choose under Which browser, which lists only browsers with Alexein Agent. Turning the switch off takes the tools away at once, and a call still waiting ends PERMISSION_DENIED.

Connect your agent

Every path below needs Alexein Agent installed and paired in the browser the agent will use.

Alexein Desktop

Recommended: nothing to configure. Sign in to Alexein Desktop and, once Alexein Agent is paired, the browser tools are there.

Settings › Apps › Browser shows:

  • The status: Paired · online, Paired · offline, Stopped in the browser or Not set up.
  • Install Alexein Agent and Pair Alexein Agent while it is not set up; Manage once it is. Install opens My memory's download of alexein-agent.zip, and Pair opens My memory's pairing page.
  • Always allowed: actions you approved with Always, by site. Remove one to be asked again. A high-risk action is never kept.

By default the browser asks for approvals. To see them in Alexein Desktop instead, open Agents on your browser's page in My memory, then Approvals in your apps, and turn on Shows approvals in its own app for the key Alexein Desktop signed in with.

Alexein Desktop asks for high-risk actions, so your High risk setting decides them.

Claude Code, Cursor and other MCP clients

WhatValue
Server URLhttps://api.alexein.ai/v1/actions/mcp?providers=browser
Authorization headerBearer <personal key>
X-Alexein-User headerThe collection your browser feeds: me unless you made others

To get a personal key, open My memory › Keys and select Create key. Choose Read and write: a read key gets only the tools that look. Copy the key: it is shown once.

?providers=browser lists the browser's tools alone. Add &irreversible=1 to let your High risk setting decide high-risk actions; without it, the person is always asked.

Terminal
export ALEXEIN_API_KEY="tm_..."

claude mcp add --transport http alexein-browser "https://api.alexein.ai/v1/actions/mcp?providers=browser" \
  --header "Authorization: Bearer $ALEXEIN_API_KEY" \
  --header "X-Alexein-User: me"

Or share it with a project in .mcp.json. Claude Code fills in ${ALEXEIN_API_KEY}:

.mcp.json
{
  "mcpServers": {
    "alexein-browser": {
      "type": "http",
      "url": "https://api.alexein.ai/v1/actions/mcp?providers=browser",
      "headers": {
        "Authorization": "Bearer ${ALEXEIN_API_KEY}",
        "X-Alexein-User": "me"
      }
    }
  }
}

claude.ai and ChatGPT connectors are not supported yet: they need a sign-in, and this server takes a key.

Your own agent

Over MCP, use the server URL and headers above. Over REST, list the tools, then call one:

List the tools
curl "https://api.alexein.ai/v1/actions/tools?providers=browser" \
  -H "Authorization: Bearer $ALEXEIN_API_KEY" \
  -H "X-Alexein-User: me"
Call one
curl "https://api.alexein.ai/v1/actions/call?providers=browser" \
  -H "Authorization: Bearer $ALEXEIN_API_KEY" \
  -H "X-Alexein-User: me" \
  -H "Content-Type: application/json" \
  -d '{"name": "browser_start_task", "arguments": {"goal": "Find the opening hours of the British Museum"}}'

The answer is { "output": ..., "replayed": false }, output being the tool's answer. The tool list also says whether the browser is online and whether the person stopped the agent: "providers": { "browser": { "online": true, "stopped": false } }.

How a task works

A task is one request of the person's, from start to end.

  1. Call browser_start_task with a goal, and a short title if you like. It answers a taskId.
  2. Pass that taskId on every browser call for the request.
  3. End with browser_end_task, with the taskId and an outcome: done, failed, abandoned, or handed_over when the person has to finish it (to pay, sign in or decide). Add a summary for the person.
One task
{ "name": "browser_start_task", "arguments": { "goal": "Add a 48-pack of AA batteries to my cart on amazon.com", "title": "AA batteries" } }
{ "name": "browser_navigate", "arguments": { "url": "https://www.amazon.com", "taskId": "t_..." } }
{ "name": "browser_end_task", "arguments": { "taskId": "t_...", "outcome": "done", "summary": "Added to the cart." } }
  • Forgot to start one? Calls are grouped into an automatic task, and each answer says its id in metadata.taskId.
  • Where the person sees it. Each task has a timeline in My memory, under Agents › Tasks, and its tabs share a Chrome tab group in the Agent window, named from the task. Turn off Mark the agent's tabs in Alexein Agent's settings to stop grouping them.
  • Idle tasks end. A task with no call for 15 minutes ends by itself. A call naming an ended task is refused (INVALID_ARGUMENT): start a new one.
  • At most 20 open tasks per key. Starting one more ends the oldest.

Approvals and risk

Every action is low, medium or high risk. The server rates it from the tool, and the page where it acts decides the final rank.

RiskFor example
LowReading a page, finding an element, scrolling, going to a page, clicking into a field, opening a dropdown
MediumClicking a button such as Add to cart, typing into a field, choosing an option, anything in a tab the person handed over
HighPlace order, pay, book, send, post, delete, sign up; submitting a sign-in or payment form; entering a password or card number

The settings say what happens at each level: Allow runs it, Ask asks the person first, Block refuses it. A change applies to the next call.

SettingBy default
Low riskAllow
Medium riskAsk
High riskAsk
Sensitive sitesOff
  • Without &irreversible=1, a high-risk action always asks the person, whatever High risk says. Block still blocks it.
  • Sensitive sites are banking, health and government sites, and sign-in pages. While the setting is off, agents can neither read nor act on them.
  • Where the person is asked. In an approval bar in the browser, naming the action, the element and the site: "Click the button "Place order" on shop.example". Or, for an app allowed under Approvals in your apps, in that app. Alexein Desktop handles approvals itself; other clients get the browser's own approval.
  • One approval, one action. Always in Alexein Desktop keeps a low- or medium-risk action allowed on that site.

When the person says no, or the settings do:

CodeWhat it meansWhat to do
USER_CONFIRMATION_REQUIREDThe person declined, or did not answer in time. Nothing was done.Tell the person, and ask what to do instead. Don't retry.
POLICY_BLOCKEDThe settings block this level, or it is a sensitive site. Nothing was done.Tell the person: they can change it under Agents. Don't retry.

The tools

A read key gets the tools marked Read. A read and write key gets them all.

ToolKeyWhat it does
browser_start_taskReadStarts a task for one request, and answers its taskId.
browser_end_taskReadEnds a task with an outcome.
browser_observe_pageReadA numbered outline of the page: each [12] is an elementRef. region shows one part of the page in full.
browser_read_pageReadThe page's main text as markdown. section, find and cursor narrow it. For infinite feeds and lazy-loaded sections, pass loadMore: true.
browser_find_elementReadOne element and its ref. Several matches are listed to choose from. A link's result has its href.
browser_wait_forReadWaits until an element shows or goes, text shows, the URL matches, or the page is ready.
browser_verify_resultReadChecks the URL, text, an element or a field's value. element_state checks a radio, checkbox or option: checked, unchecked or selected.
browser_clickWriteClicks an element, by elementRef or locator. The answer says what changed.
browser_hoverWriteRests the pointer on an element, to open a menu.
browser_fillWriteTypes a value into a field, replacing what is there.
browser_press_keyWritePresses a key, such as Enter after a search.
browser_select_optionWriteChooses an option of a dropdown or a group of radios.
browser_scrollWriteScrolls the page or a container.
browser_navigateWriteOpens an http: or https: address. newTab: true opens it in another agent tab and answers its tabId.
browser_request_tabWriteAsks the person to hand over one of their own tabs. Rarely needed.

Locators. An element is found by its role and name first, by its label, placeholder, text or test id next, and by a CSS selector last. within narrows a locator to inside one container: {"role": "button", "name": "ADD", "within": {"role": "card", "name": "All Wraps Box"}}. If within matches several containers, give its nth (0 is the first). Several matches are ELEMENT_AMBIGUOUS, never a guess. XPath is refused.

Answers. Every call answers with ok, the tool's data, an error with a code, a message and whether it is retryable, and a verification: passed, failed, not_run or inconclusive. An action that changes a page reports success only once it is checked; otherwise it is VERIFICATION_FAILED.

Passwords, card numbers and one-time codes are never returned, whether typed into a field or written on the page, and neither are secret tokens in addresses.

Tips for agent builders:

  • Read rather than scroll. Use browser_read_page, with loadMore: true on a feed, rather than scrolling and observing.
  • Follow a link's href. Pass it to browser_navigate rather than clicking the link.
  • A stale ref? The page changed. Observe it again and use the new ref.
  • Covered by a pop-up? The answer names it and how to close it. Close it, then try again.

Troubleshooting

What you seeWhat to do
Browser offline (BROWSER_OFFLINE)Alexein Agent isn't running or paired. Open the browser with Alexein Agent on, and check it is paired under Connectors › Browser. Alexein Memory alone is not enough. If you chose a browser under Which browser, open that one.
Agents are switched off (PERMISSION_DENIED)Turn on Let agents use my browsers in <collection> under Agents.
Approvals show in the browser instead of the appTurn on Shows approvals in its own app for the app's key under Agents › Approvals in your apps. If it still asks in the browser, update Alexein Agent and reload it: an older one always asks in the browser.
Alexein can't work on this page (UNSUPPORTED_CONTEXT)Reload the tab. The browser's own pages and the Chrome Web Store can't be reached.
The page needs a login or a captchaThe person signs in or solves it in that tab. Then the agent goes on.
The agent paused after many stepsIn Alexein Desktop, a reply pauses after 60 browser steps. Select Keep going, or tick Until done to let it go on by itself.
You declinedThe agent waits for you. Reply with what to do instead.
Stopped in the browser (STOPPED_BY_USER)The person pressed Stop the agent. Resume it in Alexein Agent.

In the browser

The person always sees an agent at work, and can always stop it. None of this can be turned off.

  • The Agent window. The agent works in a window of its own, opened behind the person's when it first needs a tab, so it never takes over the window they are using. It opens tabs there, and can use only those and the tabs the person handed it: any other tab is PERMISSION_DENIED.
  • Handing a tab over. In Alexein Agent's popup or side panel, Let the agent use this tab gives the agent one of the person's own tabs, for example a site they are signed in to. Take this tab back ends it, and anything the agent was doing there is cancelled. When the agent calls browser_request_tab, the person sees the request there, and gives a tab or declines.
  • Not recorded. Alexein Agent keeps nothing of your browsing. With Alexein Memory installed too, the agent's own tabs, and a tab while it is handed over, are not recorded as the person's browsing. A tab taken back is recorded again from then on.
  • Stop. While an agent is active, the toolbar shows "AI", and the popup and side panel list its recent actions. Stop the agent there ends agent control at once: a call in flight ends CANCELLED, and every new call is STOPPED_BY_USER until the person resumes. My memory shows that the person stopped it.

Errors

A failed call is still a full answer, read by the model. Over MCP it is the tool result, marked isError; over HTTP it is the output of a 200 answer, with "ok": false.

CodeWhat happened, and what to do
INVALID_ARGUMENTThe arguments do not fit the tool, or the task has ended. Fix them, or start a new task.
ELEMENT_NOT_FOUND, ELEMENT_AMBIGUOUSNo element, or several, matched, or the ref is stale. Observe the page again and target one.
ELEMENT_NOT_INTERACTABLEThe element is hidden, disabled or covered. If a pop-up covers it, close it as the message says.
UNSUPPORTED_CONTEXTA page Alexein Agent cannot reach, such as the browser's own pages or the Chrome Web Store. Reload the tab.
NAVIGATION_FAILEDThe page did not load.
VERIFICATION_FAILEDThe action ran, but its result could not be confirmed. Check the page before trying again.
TIMEOUTNo answer in time. The action may have run.
POLICY_BLOCKEDThe settings block this level, or it is a sensitive site. Don't retry.
USER_CONFIRMATION_REQUIREDThe person declined the action, or did not answer. Don't retry.
PERMISSION_DENIEDNot a tab the agent may use, or agents were turned off or moved to another browser.
STOPPED_BY_USERThe person pressed Stop. Nothing runs until they resume; do not retry.
CANCELLEDThe call was cancelled: the person pressed Stop or took the tab back, or the caller went away. It may have run.
BROWSER_OFFLINENo browser with Alexein Agent paired, or it is not running. Answered at once, with what to do in the message. Nothing ran.
BROWSER_DISCONNECTEDThe browser went away with the action under way. It may have run.
RATE_LIMITEDToo many calls, or too many at once. Wait error.details.retryAfterMs when given, or for a call to end.
INTERNAL_ERRORSomething failed on our side. It may have run.

verification says whether the action ran: not_run means nothing was done, and inconclusive that it may have been. After an inconclusive answer, look at the page before acting again.

Waits and retries

  • How long a call waits. Each tool has a timeout: 10 seconds for most, and 30 for browser_wait_for and browser_navigate; browser_request_tab waits for the person as long as a call may. An agent can set its own with timeoutMs, up to 60 seconds. A call waits at most 90 seconds in all, the person's approval included. Give the client a timeout of at least 90 seconds.

  • Retries. Key every action that changes a page: over HTTP with an Idempotency-Key header, and over MCP, where a client cannot set a header for each call, with the tool's idempotencyKey argument. Both, different, are refused with 400 and INVALID_ARGUMENT. A retry with the same key does not act again:

    • Over HTTP, it is answered with the first call's result ("replayed": true). While the first call is still running, a retry answers 409 with the code IN_PROGRESS. When the first call may have acted without an answer to show for it, a retry answers 409 with OUTCOME_UNKNOWN.
    • Over MCP, it is answered with the first call's result as the tool result. The same two cases come back as an error result (isError) saying that a call with this key is still running, or may already have acted.

    An action that may have run is never run twice under its key: check the page, and use a new key to act again.

Limits

Per collection, at most 8 calls wait on the browser at once, and at most 10 calls a second and 600 a minute. Past either, a call is RATE_LIMITED.

Activity

Tasks, under Agents on the browser's page in My memory, lists agents' tasks, each with its timeline. Every action below it lists the newest 50 calls in any of the collection's browsers: when, the tool, the site, the risk and how it ended. Only the site is recorded, never what was typed, what was read or the full address. Both are kept 30 days. Alexein Agent keeps its own list on the device, for the side panel, for 7 days.

Erasing the app user deletes their agent settings and activity. Disconnecting a browser ends agents' access to it at once; disconnecting the last browser with forget deletes the agent settings and activity too.

Deleting and forgetting

Deleting is the only way to remove what is already recorded; changing a setting never does. Clearing the trace removes the trace only, not memory (see above).

  • Delete a journey from the trace in My memory, or with Forget this journey in Alexein Memory. It is erased from memory, including what memory learned from it, and its trace goes at once.
  • Disconnect the browser and choose to keep everything from it, or to forget everything from it. Forgetting removes its trace at once too. Agents can no longer use it; forgetting the app user's last browser also deletes their agent settings and activity.
  • Erase the app user and their connections, agent settings and agent activity are removed with them. See Erase a whole app user.
  • Delete a project or the organisation and every app user's connections, agent settings and agent activity go with it.