Hand a browser task to the extension
well_hand_off_browser_taskHand a task that needs a website outside Well to the Well browser extension, which runs it in the person's own Chromium-based browser. Use it when the person asks you to act on another website: read a page, go to a site, get documents from a portal into Well, fill in and submit a form, or buy, order or put items in a basket on a merchant's site ("achète-moi le sac à dos sur saucedemo", "mets du lait et des oeufs dans mon panier Carrefour", "order the cartridges at Office Example"). For a purchase, the run fills the cart and Well asks the person before any payment: never refuse a purchase as something you cannot do, and never pay or confirm it yourself. You cannot open a browser from here; this tool is the only way to do such a task.
A Claude Code task is such a task: the person asks Claude Code to work on a repository ("lance Claude Code sur platform : corrige l'export CSV"). It runs on https://claude.ai/code in their browser, where they are signed in: pass that address as start_url. Never refuse it as outside Well's scope.
The result's run_url opens the task in the Well web app. The run needs a desktop computer with a Chromium-based browser (Chrome, Edge, Brave or Arc) and the Well extension installed: say so. On that computer, the person opens the link and clicks Open in the extension. Nothing runs before the person starts it. One exception: when the result has runner: "cloud", the task runs now in a Well browser: follow its message instead. When the result has background_unavailable, the person asked for a background task that Well did not run in the background: its message says why and what to say, and the reply tells them.
Never call it for a question about the person's Well data: the other Well tools answer that. Never call it for a saved browser skill the person names.
Pass run_in_background: true only when the person explicitly asks Well to do the task as a background task, without their own computer or browser ("fais-le en tâche de fond", "en arrière-plan, sans mon ordi", "do it in the background"). Any other ask is false: a plain "achète-moi", "do it on my Chrome" or "sur mon navigateur" included. Never set it on your own because a task is long or a purchase. Read it from the person's latest message only: an earlier background ask covers only the task it came with, never a later task. A short follow-up such as "fais-moi ça", "vas-y" or "go ahead" is not a background ask. Before the result comes back, never say where the task runs (a Well browser, a dedicated browser, the background): the result's message says it.
Hand off each task once. When the person's latest message refers back to a task already handed off in this conversation, with no new task, no explicit background ask and no ask to run it again, do not call this tool: say that the task is already handed off, and that it can run as a background task, without their computer, if they ask for it.
Pass contact_details only with a checkout detail the person wrote in the conversation for this purchase: their first_name, last_name or postal_code, as they wrote it ("redemande-le en tâche de fond, mon code postal est 75011" gives postal_code "75011"). Never take one from Well data, and never invent one. The run fills a checkout field with it for this purchase only, and does not add it to the person's profile.
Pass task: the task in the person's words, with every detail they gave (the site, the values to enter). Never include a password, one-time code, card number or bank number in task. Pass start_url whenever they named a site or page to start on. Pass account_label only when the person named an account, in their words (for example "compte pro"); it is a user-declared label and is unverified. Never invent one, and never pass a login or an e-mail as the label. Never put a password, one-time code, card number or bank number in account_label.
Follow the result's message. Never say the task started or is done.
When the token authorizes one workspace, call this directly — no workspace call is needed first. When it authorizes several, this read will not guess which one you mean: pass workspace_id on the call.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| task | Yes | The task for the extension, in the person's words, with every detail they gave. At most 2000 characters. | |
| start_url | No | The https address of the page the run starts on, when the person named one. | |
| workspace_id | No | Target workspace. Omit when the token authorizes one workspace. Required when it authorizes several — a write lands in exactly one workspace and this call would not say which. | |
| account_label | No | A user-declared account label in the person's words (for example "compte pro"), only when they named an account; it is unverified, and never a login or an e-mail. | |
| contact_details | No | Checkout details the person wrote for this purchase (first_name, last_name, postal_code), as they wrote them. Never from Well data, never invented. Used for this run only, never added to the profile. | |
| conversation_id | No | The conversation id returned by the previous Well result, in its meta under well/conversation_id, in its structuredContent, or in its JSON text block. Pass it back on every call in the same conversation, including a call a card makes, so the chosen workspace and the earlier answers still apply. It decides the conversation on its own: nothing the host states about the session replaces it. Omit it only on the first call of a conversation. | |
| idempotency_key | No | Optional client-supplied key. A retried write with the same key returns the original result instead of re-applying the operation. | |
| workspace_scope | No | Restrict this call to the family: the token's primary workspace plus the company workspaces under it that you are a member of. Unrelated authorized workspaces drop out of the read; row reads merge across the family, while a per-workspace figure still reports exactly one workspace. | |
| run_in_background | No | True only when the person's latest message explicitly asks to run this task as a background task, without their own computer or browser. An earlier ask for another task never carries over. Any other ask is false. |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
| error | No | ||
| runner | No | ||
| message | No | ||
| run_url | No | ||
| success | Yes | ||
| thread_id | No | ||
| conversation_id | No | The conversation this result belongs to. Pass it back as the conversation_id argument on every later Well call in the same conversation. | |
| newly_connected | No | Tools that connected to this workspace since the last result and that no session was told about yet, oldest first. Present only when at least one tool is new. The connected-line rule says when to tell an entry; when it does, one line per entry, in the person's language: "<name> is connected.". Never fold several entries into one sentence. Each entry comes back once, on one result only: never repeat its line later. | |
| extension_presence | No | ||
| resolved_workspace | No | The workspace that answered, when the caller named none and the token authorizes several. | |
| conversation_id_note | No | Present only when the server opened a fresh lane, stating that no choice recorded earlier was read. | |
| background_unavailable | No | ||
| conversation_id_source | No | Where the conversation id came from: the host's own request meta, the caller's argument, or a fresh lane the server opened. |