Features

Browser actions

Some of the systems your work depends on have no API โ€” a supplier portal, a legacy admin console, a regulator's filing site, an internal tool nobody will ever build an integration for. A Trellaris agent can operate them the way a person does: it opens the page, reads what is there, fills the form and submits it. This is the browser tool โ€” the agent's hands for the web โ€” and, because acting on a real system is consequential, it is one of the most tightly governed things an agent can do.

Why it adds value

Agents already reach systems three ways: connectors for products with a governed API, knowledge for what is written down, and web search and fetch for the open, static web. The browser tool covers what those cannot: a site that renders behind JavaScript and a login, a multi-step UI, a form that has to be submitted, a report that only exists behind a session. It turns "we have a dozen web systems and none of them has an API" from a dead end into an agent task โ€” and it does it under the same governance as everything else on the platform, rather than as a brittle script running outside it.

What the agent can do

The tool exposes a small, deliberate set of operations. Two are reads and run immediately; four are writes and change a real system, so they are gated. Two of the writes are marked destructive โ€” the platform treats them with extra care.

OperationKindWhat it does
navigateReadOpen a page and return its text
extractReadRead a page's content (a table, a status, a value)
clickWriteClick a control
typeWriteEnter text into a field
submitWrite ยท destructiveSubmit a form โ€” the action that lands on the system
downloadWrite ยท destructivePull a file down (an invoice, an evidence receipt)

How a run is governed

Nothing about the browser tool is trusted by default. Every op passes through the same platform controls that govern any other tool, plus a few that exist only for it.

  1. Default-deny egress โ€” it can only reach where you allow

    Before a single page loads, the target host is checked against a browser-egress policy. With no policy, nothing is reachable; an administrator allows the specific hosts an agent may open, and everything else comes back browser.egress_blocked before the browser is even started. The allowlist is the outer wall: an agent cannot wander off to an arbitrary site, whatever a page or a prompt tries to make it do.
  2. Reads flow, writes pause for a person

    navigate and extract run straight through. Every write โ€” click, type, submit, download โ€” routes through the approval gate: the run pauses, and a human sees the exact action ("submit the disable form for alice@โ€ฆ") before it touches the system. Approve, and it executes exactly once; the agent never claims a change is done before the approval comes back. How much pauses is set by the agent's autonomy level and your policies.
  3. DLP on everything read back

    Whatever the agent reads off a page is passed through data-loss prevention before the model โ€” or anyone โ€” sees it, so a customer number or an SSN on an admin page is redacted just as it is everywhere else on the platform.
  4. Never a password

    The agent operates an already-authenticated session; it does not sign in, does not type a password or a credential, and does not create accounts or reset passwords by entering new ones. Those are for a person. The session comes from your vault, never from the conversation.
  5. A recording of every step

    Each op writes a durable record โ€” the operation, the target, and the (redacted) result โ€” attached to the run, and the whole sequence appears in the Observe timeline as spans with their timings. Optionally, the platform also captures a screenshot per op (see below). Nothing the agent does in a browser is invisible.
ControlWhat it protects
Browser-egress allowlistWhere the agent may go โ€” default-deny
Approval gate on writesNothing changes a system without a person
Autonomy levelHow much an agent may do before it pauses
DLP on extracted textSensitive data never leaves the boundary un-redacted
Recording + traceEvery step is auditable after the fact
Credential boundaryThe agent never types secrets; the session is vaulted
The allowlist is the security boundary The browser runs headless on a worker. In production the right home for it is an isolated sandbox, and that hardening is on the roadmap; until then the browser-egress allowlist is what stands between a hostile page and anything else โ€” so keep it tight, scoped to exactly the consoles an agent needs.

See what the browser did

A browser run leaves three trails, so an operator can reconstruct exactly what happened without having watched it live:

Screenshots are opt-in on purpose A screenshot is an image, and DLP cannot redact pixels โ€” a shot of a page captures whatever is on it. So per-op screenshots are off by default and are turned on only where the target is known-safe (a demo or a low-sensitivity console). Against a real system, the structured recording and the redacted trace are the governed record; screenshots are a deliberate choice, not a default.

Where it runs

In development and CI the tool drives a deterministic, offline browser, so tests are fast and repeatable and never touch the network. In a real deployment it drives headless Chromium, carried only in the worker that executes runs โ€” the rest of the platform stays lean. Turning it on for an environment is configuration: choose the driver, allow the console's host, and the same agent that behaved in tests now acts on the real thing.


Reference agent

The IT Fulfilment Agent

The browser tool ships with a built-in agent that shows what it is for: the IT Fulfilment Agent โ€” the hands behind the IT service desk. Where the ITHelp desk captures a request ("my laptop won't start", "I need a licence"), the Fulfilment agent carries it out in the admin console: assign or reclaim a licence, reset MFA, add someone to a group, disable a leaver's account. It answers to @it-fulfilment and lives in the org ring, visible from every workspace.

How a fulfilment runs

  1. Understand the change

    It states plainly what it is about to do and to whom โ€” "assign an M365-E3 licence to alice@contoso.test", "disable bob@contoso.test" โ€” and asks one question rather than guessing if the person or the action is unclear. It never invents an email, a licence or a group the request did not name.
  2. Verify first (reads)

    It opens the console and reads: does the user exist, are they already in that state, is a seat free before it assigns one. If the change is already done or would be wrong โ€” no free seats, the account already disabled โ€” it stops and says so rather than submitting anyway.
  3. Make the change (a write, through approval)

    It submits the specific form, and the run pauses for a person to approve. One change per confirmation, so an approver is never asked to bless two actions at once. After approval the change runs exactly once.
  4. Confirm with evidence

    It reads the resulting page back to confirm the new state and downloads the evidence receipt, so the ticket carries proof of exactly what changed. The report is two or three lines: what changed, for whom, who approved, and the new state.

Intake and fulfilment, joined

A request phrased as a question ("can you raise a ticket?") goes to the ITHelp desk for intake. A request phrased as an action in a system ("assign the licence and add them to Engineering") reaches the Fulfilment agent, because it is the only agent that holds the browser tool โ€” the platform routes a step to the agent that can actually perform it. The two are a pair: one takes the request, the other does the work.

A reference, not a black box The Fulfilment agent is a plain, versioned agent an organisation can read, edit and extend โ€” which console it drives, what it verifies, what it refuses are all in its definition. Out of the box it operates a built-in demonstration console with sample users, so the whole flow โ€” intake, routing, read, approval, evidence โ€” can be seen end to end before it is ever pointed at a real system.

Try it

@it-fulfilment what's the status of bob@contoso.test?
@it-fulfilment assign an M365-E3 licence to bob@contoso.test
@it-fulfilment disable alice@contoso.test โ€” she's left the company

The first answers straight away (a read). The others verify, then pause for your approval; approve in the inbox and the change lands, with a screenshot and an evidence receipt attached to the run.

Related: Approvals, Autonomy, DLP, Observability, Agents.