Using the workspace

Web and browser checks

How Dus searches the web with your provider's search tool, reads public pages safely, tests your app in a live browser, and checks UI with screenshots and design comparisons.

On models with a built-in search tool, Dus can search the web and cite the pages it used. Those models are Claude Sonnet and Claude Opus, and OpenAI's gpt-6 models. Searches run on your provider's side, appear in the chat as Search the web: …, and are counted and priced in your usage. Anthropic charges $10 per 1,000 searches, and each request is limited to 5 searches.

On other models, Dus has no search, but it can still read pages whose address it knows.

Reading web pages

Dus reads public pages with web_fetch, for example documentation, a changelog or an issue you link to. It works on every model.

  • Only http and https, and no addresses with passwords in them.
  • Private networks are refused: localhost, private and link-local addresses, and cloud metadata addresses. They're checked again after DNS lookup and at every redirect.
  • At most 2 MB is read, in up to 20 seconds, and at most 40,000 characters reach Dus (the start and end are kept).
  • Pages are requested as Duscode/<version> (+https://duscode.com), so site owners can see who's fetching.

Fetching needs no approval, like reading a file.

Dus in the Browser panel

Ask Dus to open a site ("open dovesure.com so I can see it") and it opens it with open_url in a tab of the Browser panel on the right of the chat, and brings the panel forward. Only then does Dus say the page is open. See The Browser panel.

Dus can also work on a site the way a person would, with the browser tool:

  • It looks first. Each look lists the page's buttons, links and fields with numbers, the text in view and what is above and below. Models that can see images also get a screenshot with the same numbers drawn on it. Dus then acts on "element 12", so it doesn't click the wrong thing.
  • Actions: open, click, type, choose in a list, hover, drag, scroll, press keys, upload a project file, answer the page's dialogs, switch tabs, go back and forward. Clicking by position is the fallback for canvas apps.
  • It checks each step. Every result says what changed on the page. Dus can say what it expects to see after a step, and a step that didn't do it counts as failed. The same step repeated three times with nothing changing is called out as a loop, and one task may take at most 200 browser steps.
  • Several safe steps can go in one call, stopping at the first that fails.

You watch every step live: a pointer, a ripple on each click, the target outlined, and a caption. You can take over at any time.

What Dus may do on websites

Some things only you do. Duscode enforces this itself, in every permission mode, whatever the model says:

  • Never done by Dus: buying or placing orders, payments and trades, creating accounts, accepting terms or cookie banners, deleting an account or data permanently, and solving or getting round a CAPTCHA. Dus asks you to do these yourself.
  • Asked every time: sending messages, posts or emails; account, permission and security changes; uploads; downloading a program; a form that sends to another site; and typing a saved secret from the vault. The approval shows exactly what will be sent, with passwords masked.
  • Asked once per site: deleting something (unless you allowed it for the site), and opening a site you didn't name in your request. Allow for this site remembers your answer for the project (Settings → Permissions).
  • Asked in Ask mode: signing in, other form submits, downloads and typing into a password field.
  • Plan mode lets Dus open and read pages, but not click or type.
  • Watch mode: on banking, email, admin, government (such as HMRC and Companies House) and health sites, Dus acts only while the Browser panel is open, and only you sign in.

Page text is data, not instructions. Everything a page says reaches Dus inside a fence marked as untrusted. If a page tries to give Dus instructions ("ignore your rules…"), Dus tells you instead of following them, and the panel shows a notice. Once a task has read internet pages, anything that could send data out (a network command, a vault secret, git push) asks you, even in Full Auto.

Signing in

When Dus reaches a sign-in page it offers two ways:

  • You sign in. The panel comes forward with Dus needs you. You type in the page yourself; Dus waits and sees nothing until you choose Hand back to Dus.
  • Saved login from the vault. You approve it, naming the site. Duscode types the values; Dus never sees them. It refuses on a look-alike address (a possible phishing page).

Two-factor codes, passkeys, CAPTCHAs and "allow this app" consent screens always go to you. Sign-ins are kept in the project's own browser profile, so you sign in once; other projects never see them.

In Builder mode

In Builder mode (see What Dus may do), browser steps are decided like everything else Dus does: reading and using pages are Dus's call; a new site, a plain form or a download go to the independent reviewer; sending, signing in, saved passwords, deleting and uploading are yours, on a plain-language card; and the actions that are never done stay blocked.

Apps on this computer

The session's preview and the services Dus runs for it open freely. Any other address on this computer, such as localhost:8080, is another program: Dus asks before opening it. A website can never reach an app on your computer, and nothing can open Duscode itself.

Browser checks

Typecheck and tests don't catch a blank page or a layout that looks nothing like the design. With browser_check, Dus opens a page in a fresh, hidden headless browser for a one-off look. You don't see this page, and it closes when the check ends; to show you a page, Dus uses open_url. It gets back:

  • the HTTP status and page title
  • console errors, uncaught page errors and failed requests
  • the visible text
  • a screenshot Dus can see

It can click, type and wait for an element or some text before looking, at desktop (1280×800) or phone (390×844) size. By default it opens the session's live preview.

  • Compare with a design. Attach a design image, or point to one in the project. Dus compares the two screenshots and gets a pixel-difference score as a hint.
  • Full-page screenshots can be saved for you under .duscode/screenshots/.
  • Other sites need your approval. Local addresses (localhost, 127.0.0.1, *.localhost) open freely. Any other site asks first, because the page's content is fed to the model.
  • Each check uses a fresh browser with no cookies or saved data. Duscode's own workspace refuses requests from it, so Dus can't click its own approvals.

Installing the browser

The Browser panel, live testing and browser checks need Chromium's headless shell, installed once. The Browser panel offers Install browser when it's missing, with the command shown:

bash
npx playwright install chromium-headless-shell
npx playwright install-deps chromium     # Linux and WSL only: system libraries

Without it, Dus is told how to install it, and the browser smoke check in the gate is skipped. To use another Chromium, set DUSCODE_CHROMIUM to its path.

If Dus reports that the browser check needs the playwright-core package, your Duscode build doesn't include the browser component yet. Email support@duscode.com and we'll send a build that does.

In the verification gate

"browserCheck": true in the project config adds a smoke check to the verification gate. It loads the preview and fails on an error status or an uncaught page error.

Images

With an OpenAI key, Dus can create images (for example icons or placeholder art) with gpt-image-2, at 1024×1024, 1536×1024 or 1024×1536. Each image needs your approval, is saved as a PNG in the project, and costs about $0.053.

Something missing or wrong? Email support@duscode.com.