Skip to main content
Glama

SceneScout

Your coding agent, turned into an exploratory QA tester for any web app.

Works with Claude Code · Cursor · VS Code (Copilot) · Codex CLI · Gemini CLI · Copilot CLI · Windsurf · any MCP client

test npm license: MIT node >= 20

🌐 Website · 📖 Guide · 🐛 What it catches · 🎬 QA with evidence · 🚀 Get started · 🚦 CI · 🔒 Safety · 📚 Docs

Scripted end-to-end tests answer one question: does this exact flow still work? They say nothing about the rest of the app. SceneScout lets the agent you already use explore a running web app like a curious, thorough tester. It clicks, fills forms, switches roles and calls the API behind a hidden button, then writes a report of what is broken and what could be better, with a picture and evidence for every line.

Try it on any app you are allowed to test. No account, no API key, no setup:

npx -y scenescout http://localhost:3000
flowchart LR
  A["🧠 Your coding agent<br/>Claude Code, Cursor, Copilot…"] -- MCP --> S["🔭 SceneScout<br/>browser · checks · memory"]
  S --> App["🌐 Your running app"]
  S --> R["📋 Report<br/>plain words + pictures"]
  S --> E["🎬 Evidence<br/>replay, videos, test report"]

👥 Who it's for

🛠️ Developers

🧑‍💼 QA, product and non-technical teams

Findings with the request that failed (GET /api/orders?status=archived → 500), the steps, and a Playwright regression-test skeleton

Each problem in plain words first: what was done, what was expected, what happened, and a picture of the page

Next to the source, the file behind the bug and a likely fix

Visible problems shown, not described: a covered button, a broken image, text too faint to read

A deterministic gate for pull requests, with SARIF for code scanning

Journeys recorded step by step, as frames and video, so a pass is something you can watch

Runs from your editor's agent, or unattended in CI

A test report laid out by your template, with expected and actual results, deviations and blank sign-off rows

Related MCP server: visual-ui-debug-agent-mcp

🐛 What it catches

A real run against the small demo app in this repository, which has bugs planted on purpose. The two you can see are outlined:

It filed twelve findings. A few from the report:

🔴 [HIGH] A double-click on Create order creates two orders 2× click fired the same state-changing request 2× (POST /api/orders)

🔴 [HIGH] A clerk can approve an order by calling the endpoint the page hides from them POST /api/orders/1037/approve 200 as clerk: the button was hidden, the server did not agree.

🔴 [HIGH] Filtering orders by Archived fails, and the page shows an empty table instead of an error GET /api/orders?status=archived → HTTP 500

🟠 [MEDIUM] The "New: bulk import" badge sits on top of the All orders button (callout 1) "All orders" overlaps "New: bulk import" (81%), measured from layout boxes, no screenshot needed.

What it looks for, on every page, after every action:

  • 📐 Broken layout, from geometry: controls that overlap, sit off-screen, hide under a sticky bar or can never be scrolled into view. The CSS bugs a person spots at a glance, found without one.

  • 🧨 Real breakage: console errors, crashes, failed requests, 4xx and 5xx responses, broken images, dead-end pages.

  • 🔓 Permission leaks: it calls the app's own API as each role, so "the button is hidden" becomes "the server refuses it", or doesn't.

  • 🤥 Pages that lie: "Saved!" after the server refused the save, or an empty table after the request failed.

  • 👆 Impatient users: a double-click that sends the same order twice.

  • ♿ Accessibility and craft: contrast, focus, labels, target sizes, spacing and type, with a 0 to 100 score per page.

  • 🧭 Friction: how many steps a task takes, and where a user had to go back.

  • 💉 Security smells: typed markup that comes back as an element, and tokens posted to any window.

Everything it checks.

🎬 Automated QA with evidence

Save the journeys that matter, the happy paths and the ones that must fail politely, and scenescout check replays them on every pull request with no model involved. Recorded, each run leaves proof you can watch and hand to someone who never opens a terminal.

flowchart LR
  PR["🔀 Pull request"] --> C["🚦 scenescout check<br/>--record --video --template"]
  F["📝 Saved journeys<br/>.scenescout/flows/*.json"] --> C
  C --> G["✅ / ❌ A gate on the pull request"]
  C --> RP["🖼️ replay.html<br/>every step, with frames"]
  C --> V["🎞️ A video per journey"]
  C --> TR["📄 Test report<br/>your template, SHA-256 manifest,<br/>blank sign-off rows"]

A journey is a few lines of JSON, written by hand or kept from a flow your agent just walked. This is the demo's happy path:

{
  "name": "place an order",
  "id": "TC-01",
  "requirements": ["REQ-ORD-1", "REQ-ORD-2"],
  "steps": [
    { "action": "navigate", "target": "/orders-new.html", "expected": "The new-order form is shown" },
    { "action": "type", "target": "testid=new-order-customer", "value": "Harbour Bakery", "expected": "The customer is filled in" },
    { "action": "type", "target": "testid=new-order-items", "value": "4", "replace": true, "expected": "The item count is 4" },
    { "action": "click", "target": "testid=new-order-submit", "expected": "The order is created" },
    { "action": "expect-request", "request": "POST /api/orders", "status": "2xx" },
    { "action": "expect-element", "target": "testid=new-order-created-link", "state": "visible", "expected": "A link to the new order is shown" }
  ]
}

Against the demo app, with the three journeys in examples/flows (one creates an order, so the check is allowed to send it):

npx scenescout check http://127.0.0.1:4173 --flows examples/flows --mode read-only --flow-writes allow \
  --record --video --template examples/report-template.json

The journey, as it ran (one of the videos it filmed):

The replay page: each journey with a pass or fail badge. A journey that broke opens at the step that broke, with the page as it was after every step:

The test report, laid out by a template you write once: test IDs, the requirements each covers, expected and actual results, a screenshot per step, every deviation listed again for the reviewer, and the SHA-256 of each piece of evidence. SceneScout signs nothing; the sign-off rows are for your people.

Everything is one self-contained HTML page per report, with no scripts, nothing loaded from the network, and a layout that prints. Recording a check and a test report from a template have the details, including what to keep out of the pictures.

📺 Watch it work

A narrated eight-minute tour of every feature, on the demo app, is on the website.

Each exploratory run opens a live view on your machine, with one card per agent: what it is doing, the page it is on, and a feed of every action. Three agents are testing the demo app in parallel here:

You can read the report while the agents are still working, and scrub back through any session's timeline. Beside report.md, every run writes report.html, the whole run as one self-contained page; ask for a recorded run and it also keeps a frame after every action.

✨ Why it's different

  • 🧠 Your agent is the brain, so no extra API key. The engine contains no model. It gives the agent you already pay for deterministic tools and the testing method to use them.

  • 📐 It reads structure, not pixels. The agent sees every element with its role, state and layout box, so overlap and broken images are measured, not guessed from a screenshot.

  • 🛡️ Safety is enforced on the network, not requested in a prompt. Every request the page sends is judged against the session's write mode, and a request the mode refuses never reaches your server.

  • ✅ "Done" is a contract. The report lists everything not tested, and at the extensive level refuses to finish while any known page is unvisited.

  • 🧠 It remembers. Each run starts from what the last one learned, and re-tests the bugs earlier runs left open.

  • 📊 It is measured, not asserted. Every change to how it explores is scored against an app with planted bugs and a held-out app it is never tuned on (the log):

xychart-beta
  title "Planted defects found per run, demo app (13 planted)"
  x-axis "Run" ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"]
  y-axis "Found" 0 --> 13
  bar [11, 12, 9, 10, 11, 11, 10, 10, 11, 13, 11, 11, 12]

Each bar is one run of eight parallel agents, re-scored against today's answer key. One run is noisy: read the trend across runs, not a single bar.

🚀 Get started

1. Install for your agent (Node 20 or newer):

npx -y scenescout install                      # Claude Code: skill, MCP server and the test browser
npx -y scenescout install --client cursor      # or vscode, codex, gemini, copilot, windsurf
npx -y scenescout doctor                       # every line should be a ✓
  • Claude Code plugin: /plugin marketplace add brunoboto96/SceneScout, then /plugin install scenescout@scenescout-marketplace. The command becomes /scenescout:scenescout.

  • Claude Desktop: download scenescout-X.Y.Z.mcpb from the latest release and open it. No terminal needed. In the chat, pick Check my site from its prompts to start a guided check without writing a prompt (guided prompts).

  • Any other MCP client: add a stdio server whose command is npx -y scenescout@3.32.0 serve. Each client's config.

2. Start your app, then a fresh session of your agent, and ask:

Use SceneScout to test http://localhost:3000

In Claude Code there is a command too: /scenescout --url http://localhost:3000 --level medium. On its own, /scenescout asks instead: where your client can show a form, one guided form (the address, what to check, how you sign in, how careful to be and how thorough), and otherwise four plain questions in chat. A care level that writes on a site that is not on your computer, or that creates test data, asks you to confirm it in a second form the agent cannot answer (care levels). While it runs, scout_status follows the check in plain words, says what went wrong in one sentence with one thing to do (the site does not open, the sign-in ran out, the check ran out of time), and at the end the problems come back as cards you can mark "not a bug". After a fix, Re-check after a fix checks them again in the care level they were found in, never a looser one, and a check you want to repeat can be saved by name (never with a password or token) and run again. Is it safe to run on my live site? Rather press buttons than write prompts? The optional mod's /scenescout-guided panel does the same from a form in the Claude Code CLI or the desktop Code tab (the mod).

3. Read the report in .scenescout/report.md. It opens with a Summary in plain words (what was checked, what was found, the problems as a table, and each problem's steps, what was expected and what happened), then the Evidence (each problem's picture, on a run that has them), with the Technical details and, in report.html, the Steps folded one click away. A complete example. To hand it round, ask for a team report (scout_team_report, or Make a team report in the chat's menu or the guided panel): .scenescout/team-report.html has a cover, each problem as a card with its picture, what was not checked and blank sign-off lines, with an evidence folder beside it holding the pictures and a manifest of every file's SHA-256. To file problems as GitHub or Jira tickets, pick File problems as tickets (or File as tickets on the guided panel): you see a preview first, and SceneScout files only after you say yes in its own form (how).

No app handy? Clone this repository and run npm run demo:serve: the demo app starts on http://127.0.0.1:4173, and its README lists every planted bug.

Behind a sign-in? Sign in once yourself, SSO and MFA included, and every session reuses it:

npx -y scenescout login http://localhost:3000 --role admin    # then: /scenescout --role admin

Signing in covers roles, expiry and scripted sign-in for CI.

🚦 In CI

What it does

Needs a model?

scenescout check

A deterministic gate: measures every page, replays your saved journeys and visual baselines, fails only on what it can prove; recorded, it leaves the evidence above

No

scenescout ci

An unattended exploratory run, driven by the Anthropic or OpenAI API. It reports and never fails the build

An API key

/scenescout qa

A comment on a pull request that tests its preview deploy and replies with the results; /scenescout qa check runs your own check instead

An API key (qa check: none)

scenescout export

Files the findings as GitHub or Jira issues, each once

No

scenescout preflight

Checks in seconds, with no browser, that the runner can reach the app, that a saved sign-in has not expired and, when asked, the model's API; each cause has its own exit code

No

A gate on every pull request that keeps its evidence, as a GitHub Action:

- uses: brunoboto96/SceneScout@v3
  with:
    url: http://127.0.0.1:3000
    record: on
    video: on
    template: tests/report-template.json

docs/ci.md has complete workflows, every option, and the same check on GitLab CI, CircleCI or any shell.

Ask for it on a pull request

Type a command in a pull request comment and SceneScout answers in the thread, with pictures taken by a real browser:

Comment

Reply

/scenescout qa

Explores the pull request's preview and replies with what it found

/scenescout qa show the Save button

A picture of that element

/scenescout qa compare the Save button

The element on the base and on the pull request, with the changed pixels highlighted

/scenescout qa check

Runs your saved journeys on the branch and replies with each one's result; the video of every journey is in the run's files

The preview commands test a deployed preview, so the pull request's code never runs beside the model's key; qa check runs your own workflow and uses no key. Setting it up.

🔒 Safe by default

Mode

What may leave the page

🔵 observe

GET, HEAD and OPTIONS requests, signing in, signing out and refreshing a token, and any POST you name as a read that does not look destructive. Any other form that posts is refused. The default for a first look and for an agent's run on a remote site with no source

🟢 read-only

Also ordinary form posts, which can create a record or change one that was there. PUT, PATCH, DELETE, requests that look destructive and clicks on controls labelled delete, archive and the like are refused. The default for scenescout check and for an agent's run on a local app

🟡 safe-write

Also PUT, PATCH and DELETE, but only on records this run created

🔴 destructive

Everything. Only when you say the data is disposable: the agent is told never to choose it, and the config file below can rule it out

A team can commit .scenescout/config.json to cap what any agent may choose, for example {"preset": "strict"} to keep every run in observe (the config file).

SceneScout sends no telemetry. Every path by which data leaves the machine (the agent's model, scenescout ci, export, /scenescout qa, CI artifacts, downloads), what each carries and how to turn it off is in What leaves the machine. {"egress": "none"} in the config file makes SceneScout refuse every one it sends itself; it cannot stop your coding agent from sending what it reads to its own model. {"redactPageText": "pii"} masks email addresses, phone numbers and card numbers in what the tools return to the agent, at the cost of hiding bugs that are about that content.

What the policy cannot stop: a link is opened like any page, so a link that changes something just by being opened (an unsubscribe link) is followed, unless you turn on refusing those in observe and read-only; only HTTP is judged, so messages over a WebSocket are not; and in Firefox and WebKit the later hops of a redirect that keeps a write's method go out unjudged. Which refusals are guarantees and which are pattern matching is in the Safety model, and scenescout policy explain POST <url> says how any one request would be judged in each mode.

The policy sits on the network, so a blocked request never reaches your server. The page gets a refusal instead, which is how SceneScout catches a page that claims success anyway. A saved journey that creates something, like the order above, runs only when the check is told --flow-writes allow, against a test environment. Findings, memory and reports stay in a .scenescout/ folder that keeps itself out of git.

IMPORTANT

Only test sites you own or are allowed to test.Safety model.

📚 Documentation

Start here

A first look, install, a first run, reading the report, the live view

Ways to use it

Interactive runs, parallel agents, CI, pull-request QA, filing issues

What it checks

Every check and every scout_* tool

Signing in · Safety model

Roles and saved logins; what each mode refuses and why

What leaves the machine

Every path data leaves by, to whom, and the egress setting

Network requirements

Every host each command needs, scenescout preflight to check a runner reaches them, how a failure on the network is told from the app's (with an optional retry), running behind a proxy or a firewall's allowlist header, caches, mirrors and self-hosted runners

Recipes

Setups for seven kinds of project

Configuration reference

Every option, environment variable and action input

Troubleshooting

Symptoms and fixes, upgrading and uninstalling

Running it in CI

Saved journeys, recording, test reports from templates, every workflow

How it works

Diagrams of a run, an action, the write policy, lanes

Benchmark · Validation

How runs are scored against answer keys, and runs on public apps

Design decisions

Why the rules are what they are

🔧 Contributing

Start with VISION.md (what is in scope) and CONTRIBUTING.md (local setup and how changes land). AGENTS.md holds the house rules for people and coding agents alike.

Found a way past the write policy, or another security problem? Report it privately: SECURITY.md.

MIT licensed.

Available Tools

48 tools
scout_attachA

Launch a browser and attach to a running web app. First attach in this conversation and you have read neither the SceneScout skill nor scout_playbook? Call scout_playbook before this. Write policy is enforced at the NETWORK layer: mode='observe' lets out only GET, HEAD and OPTIONS, plus signing in, signing out and token refresh, and POSTs the user named in readPosts; every other request is blocked — choose it for a target that holds real data, where even an ordinary form submission would create a record; mode='read-only' (default) blocks destructive-labeled elements AND all PUT/PATCH/DELETE + destructive POSTs, but lets ordinary form POSTs through; mode='safe-write' allows creating data and permits updates/deletes ONLY on resources this session created (use when the user wants create/edit flows tested); mode='destructive' allows everything — ONLY when the user explicitly confirmed a disposable/seeded environment. Pass role to sign in with a login the user saved by scenescout login <url> --role <name>, or a Playwright storage-state JSON as storageStatePath. Pass session to keep MULTIPLE roles alive at once (one browser each, genuinely concurrent) for collaboration testing — target each directly with every tool's session param, or use scout_session to set which one is the default; coverage and findings merge into one project memory.

NameRequiredDescriptionDefault
urlYesBase URL of the running app, e.g. http://localhost:3000
modeNoWrite policy (see tool description). Default 'read-only', or the SceneScout config's maxMode when that is stricter; a mode above the config's maxMode is refused. Never choose 'destructive' yourself — user opt-in only.
openNoOpen the live view (on this attach) and/or report.html (when scout_report writes it) in the user's default browser: 'live', 'report', 'both' or 'none'. Default: the SCENESCOUT_OPEN environment variable, else 'both' on a local desktop session (headed or headless) and 'none' in CI, over SSH, or with no display. It can ask for less, never more: what SCENESCOUT_OPEN leaves out stays shut (SCENESCOUT_OPEN=none shuts both), and with SCENESCOUT_OPEN unset CI, SSH or no display shuts both; the result says what was not opened and why. Pass it only when the user asked for something other than the default.
roleNoSign in as a role whose login was saved with `scenescout login <url> --role <name>` (kept in the project's .scenescout/auth/). Every session given the same role gets its own browser built from that one login. Not with storageStatePath. No saved login for the role: the attach is refused and names the command to run — ask the user to run it, since it opens a window for them to sign in.
taskNoWhat this session is doing right now, shown under its objective from the moment it appears, e.g. Signing in and taking stock. Passed alone it is read as the 2.0 spelling of `objective`. Defaults to a placeholder so a fresh card never reads as idle.
dedupNoHow this run tells a filed finding from one already recorded. Default: the SCENESCOUT_DEDUP environment variable, else 'rule', the store's rule alone. 'judge': the rule first, then, for a filing the rule keeps apart from everything recorded, a model is asked whether it is one of the open findings on its page, and merges it when it says so. It sends each pair's titles, categories and evidence, and the page's path, to a model provider, so this argument alone does not switch it on: the person running the server does, with SCENESCOUT_DEDUP=judge and ANTHROPIC_API_KEY or OPENAI_API_KEY in the server's environment. Applies to every session of the project until the run ends.
headedNoShow the browser window
paceMsNoA floor between actions, in milliseconds, for when a person is watching and needs to keep up — following a flow, taking notes, demonstrating. Default 0: as fast as the page allows, which is what a run wants otherwise. Changeable mid-run with scout_session {paceMs}.
planIdNoThe guided plan this attach carries out, as its scout_attach call lists it. Once any guided plan is built in this server, an attach above 'observe' without an accepted plan's id is refused, and so is one above the plan's mode or on another site than the plan's, and any attach passing readPosts or trustedEmbeds. A plan's confirmation covers one check: once no session carries the plan, it must be confirmed again. Never leave it out to get round a plan's confirmation.
recordNoKeep a frame of the page after every action, under .scenescout/recordings/, and show it beside that step in report.html. Default: the SCENESCOUT_RECORD environment variable (on or off), else off: a recording is pictures of the app under test sitting in the project folder. Turn it on for QA work, where the run is evidence and not only a report.
browserNoBrowser to drive. Default: the SCENESCOUT_BROWSER environment variable, else chromium. A build that is not on disk is downloaded on this attach, once, except in CI or with SCENESCOUT_BROWSER_DOWNLOAD=off, where the attach names the command to run. Use firefox or webkit for a cross-browser pass; stay on chromium otherwise.
sessionNoSession name for multi-role runs (e.g. 'admin', 'qa'). Creates/replaces that session's browser and makes it the default. Default: 'default'.
evidenceNoWhat happens to the picture each scout_finding takes of what it is about. 'inline': kept under .scenescout/recordings/, shown in report.html, and returned in the scout_finding result so the conversation shows it. 'file': kept and shown in the report only. 'off': none taken. Default: the SCENESCOUT_EVIDENCE environment variable, else 'inline', or 'file' in a CI job. Pictures are bounded in size and in how many one session returns (see the configuration reference).
objectiveNoThis session's objective: the whole remit you were given, in one sentence ("Admin lane: §2 registers, §7 plan gating", "Approve and reject orders as a manager"). It sits above the task, which is what the session is doing at any moment. Shown to whoever is watching the run; worth setting whenever more than one session is live.
readPostsNoPOST endpoints that only read, e.g. ["POST /api/search", "POST https://api.example.com/reports/query"], which observe mode then lets out — ONLY when the user named them. Never add one yourself, even when the gap ledger lists a refused POST: ask the user. Exact paths; * stands for one path segment. Still refused when the path or body looks destructive or the body is a GraphQL mutation. Observe mode only. Default: the SCENESCOUT_READ_POSTS environment variable, else none; while a guided plan is open in this server, none, and the variable is not read.
projectPathNoAbsolute path to the project (memory + report live in .scenescout/ here). Pass it whenever you have a project or working folder. Omitted: the client's workspace folder, else a folder per tested site under the user's documents folder (Documents/SceneScout/<host>/, or SCENESCOUT_PROJECTS_DIR), which the result names — tell the user where it is.
navTimeoutMsNoHow long a page may take to load, in ms. Default: the SCENESCOUT_NAV_TIMEOUT_MS environment variable, else 20000 (crawled pages 15000; a value set here applies to them too). Raise it only when timeouts come from a loaded machine rather than the app.
trustedEmbedsNoOrigins of embedded frames (e.g. "https://pay.example.com") whose writes out of the app may go out — ONLY when the user named them, typically a provider in test mode, and only in safe-write mode. Never add one yourself. Hostile input, repeated-click probes and uploads stay refused in them.
viewportWidthNoViewport width (default 1280); use e.g. 390 for a mobile pass
viewportHeightNoViewport height (default 900)
actionTimeoutMsNoHow long one click, keystroke, hover or pick may take, in ms. Default: the SCENESCOUT_ACTION_TIMEOUT_MS environment variable, else 5000. Raise it only when timeouts come from a loaded machine rather than the app.
storageStatePathNoOptional Playwright storage-state JSON path for authenticated exploration. Not with `role`.

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does: it discloses that write policy is enforced at the NETWORK layer with per-method rules, that 'destructive' is user-opt-in only, that a missing role login refuses the attach and names the fix, and that multi-session coverage/findings merge into one project memory. That is exactly the enforcement/auth/concurrency context an agent cannot infer.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose is front-loaded and most content is necessary for a 22-parameter, unannotated tool, but the write-policy sentence is a dense run-on with four clauses chained by dashes and semicolons, and the role/session passage lacks structure. Readable but not scannable.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a session-establishing tool with 22 params, no annotations and no output schema, it covers the high-stakes surfaces (write policy, auth, plan gating, session concurrency) and failure behavior. Lower-stakes knobs (evidence, record, open, browser) are left entirely to the schema, which is acceptable at 100% coverage, but the description never says what the attach itself returns.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3, but the description adds real meaning the schema defers to — the schema's `mode` description literally says "see tool description," and the description supplies the per-mode request rules. It also explains the `role`/`session` relationship (one browser per role, target via each tool's `session`).

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a concrete verb+resource: "Launch a browser and attach to a running web app." It is clearly distinguishable from sibling action tools (scout_click, scout_navigate) — this is the session-establishing tool — and it names the prerequisite sibling scout_playbook.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives explicit selection criteria for every mode: observe for targets with real data, safe-write "when the user wants create/edit flows tested", destructive "ONLY when the user explicitly confirmed a disposable/seeded environment", plus a sequencing rule (call scout_playbook first on a first attach). It also names the alternative path (role vs storageStatePath, scout_session for defaults).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

scout_backB

Go back in browser history (tests back-button resilience).

NameRequiredDescriptionDefault
taskNoWhat you are DOING right now, in a few words: the action, not the acceptance criteria. "Filtering the documents register by status", "Filling the deviation form with invalid dates", "Signing in as QA_Team" — NOT "§2.4 filtering narrows the set and the filter is reflected in the URL", which is what you are CHECKING, not what you are doing. Naming the item you are on is fine ("§2.4: filtering the documents register"); keep the rest to what a colleague would see over your shoulder. It stays set until you pass a different one, so a batch costs a few words, not one per call. Required on the tools that act unless a journey or an earlier call already set one.
leaveNoHow to answer if the page asks to confirm leaving (a beforeunload prompt over unsent input): true leaves and discards that input, false stays. Omitted, observe and read-only stay and other modes leave. The result says when the page asked.
sessionNoTarget this session directly instead of the active one — pass it explicitly when dispatching to MULTIPLE sessions in one turn (e.g. two scout_click calls with different `session`), which then run CONCURRENTLY rather than queueing. Omit for single-session sequential use.
objectiveNoOld name for `task` (2.0). Prefer `task`.

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden, yet it says nothing about behavior: what happens at the start of history, whether the navigation waits for load, whether a beforeunload prompt can block it (the schema's `leave` param implies it can), or what the result indicates.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single short sentence with no waste; the core action is front-loaded. It is arguably too terse for a tool with zero annotations, but nothing is redundant.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple and its schema is richly documented, so most calling information is present. However, with no annotations and no output schema, the description leaves behavioral expectations (history boundaries, prompt handling, result reporting) entirely unaddressed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the parameters (task, leave, session, objective) are thoroughly documented in-schema, including the beforeunload semantics. The description adds nothing beyond baseline for parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ("Go back in browser history") and adds the testing intent in parentheses. It is clearly distinguishable from scout_navigate and scout_click, though it doesn't name those siblings explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The parenthetical "tests back-button resilience" hints at when this is used (back-button/beforeunload resilience checks), but there is no explicit when-to-use vs. scout_navigate, no exclusion conditions, and no mention of what to do if there is no history.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

scout_captureA

Save a PNG of ONE element — its bounds plus a margin, from a real screenshot — under .scenescout/captures/, to show a person how it looks. Give the element's ref from the latest scout_snapshot. Not a way to judge design: scout_design_audit measures it.

NameRequiredDescriptionDefault
keyNoInstead of a ref: the element's key from an earlier scout_capture result, to capture the same element on another deployment
refNoThe element's ref from the latest scout_snapshot
nameNoThe file's name: letters, digits and dashes. Default: capture
marginNoCSS pixels kept around the element. Default 8
sessionNoTarget this session directly instead of the active one — pass it explicitly when dispatching to MULTIPLE sessions in one turn (e.g. two scout_click calls with different `session`), which then run CONCURRENTLY rather than queueing. Omit for single-session sequential use.

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Without annotations, the description carries the full burden. It discloses that it saves a file under a specific path and uses a real screenshot, which is useful, but it does not describe what the return value is, whether files are overwritten, or any permission/error behavior expected for a write tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with the core action and output location. The prerequisite and exclusion follow logically with no wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a write tool with no annotations and no output schema, the description covers purpose, prerequisite, and one alternative adequately. However, it omits behavioral details an agent might need—such as the format of the return value or file collision behavior—leaving it minimally sufficient rather than complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents each parameter thoroughly. The description adds a note about using a ref from the latest scout_snapshot, but that is already present in the schema's ref description, so it adds little semantic value beyond the structured fields.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Save), resource (PNG of ONE element), scope (bounds plus margin), output location (.scenescout/captures/), and purpose (to show a person how it looks). It also explicitly distinguishes itself from the design-audit sibling, so an agent can tell what this tool uniquely does.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides clear context: it requires a ref from the latest scout_snapshot and explicitly says it is not for judging design (use scout_design_audit instead). It does not mention the full-page screenshot sibling, but the 'ONE element' emphasis gives adequate guidance for most calls.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

scout_cardsFinding cardsA
Read-onlyIdempotent

Show the project's findings as plain cards, worst first: impact (Blocks users, Annoying, Cosmetic, Worth a look), title, what kind of problem, the page, numbered steps, what was expected, what happened, and the finding id. Use it at the end of a guided check, or whenever the person wants to read what was found in plain words; post each card's text as it is. By default fixed findings and the ones the person marked not a bug are left out (the count of the second is given; filter {feedback: ["not-a-bug"]} lists them). Pass ids to show exactly those. pictures: "inline" puts each card's picture in the result as an image (at most 10, at most 1024 px on the longer side), "files" (default) names each picture's file, "none" leaves them out. Touches no browser.

NameRequiredDescriptionDefault
idsNoShow exactly these finding ids, whatever their status or label
limitNoHow many cards at most (default 20, at most 50)
filterNoNarrow the cards. Omitted parts take their defaults
picturesNo"inline": each picture as an image in the result; "files" (default): its file; "none"

Output Schema

NameRequiredDescription
cardsYes
totalYes
missingYes
notABugYes

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare read-only/idempotent/non-destructive, but the description adds non-obvious behavior: defaults exclude fixed and 'not-a-bug' findings, the not-a-bug count is still surfaced, and an explicit escape hatch (`filter {feedback: ["not-a-bug"]}`) is given. It also discloses inline picture caps (10 images, 1024 px) and that it 'touches no browser', none of which appear in structured fields.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action and ordering, then usage, then defaults, then pictures — a sensible priority order with zero filler sentences. It is one long run-on paragraph with stacked parentheticals, which makes it denser than it needs to be and slightly harder to scan than a bulleted or multi-sentence structure.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only listing tool with a full output schema, every agent-facing question is answered: what is returned, in what order, what is hidden by default, how to reveal it, how pictures are delivered, and that no browser interaction occurs. Nothing needed to invoke it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so a 3 is the floor, and the description goes beyond it: it explains the default exclusion of fixed/not-a-bug and how to override it, that `ids` bypasses status/label filtering, and that 'files' is the default picture mode with inline limited to 10 images at 1024 px. The `limit` parameter is not mentioned in the description, a minor gap given the schema covers it.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Show the project's findings as plain cards') plus the ordering rule ('worst first') and enumerates exactly what each card contains (impact, title, problem kind, page, steps, expected, actual, id). That level of specificity makes it unmistakable against siblings like scout_report or scout_recap, which imply aggregate/reporting output rather than per-finding plain-text cards.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit trigger conditions: 'at the end of a guided check, or whenever the person wants to read what was found in plain words,' and adds an output-format instruction ('post each card's text as it is'). It does not name a sibling alternative or say when to prefer scout_recap/scout_report instead, which keeps it short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

scout_clickA

Click an element by its ref from the latest scout_snapshot. Returns the outcome plus any oracle violations triggered. clicks=2 (or 3) probes IMPATIENT-USER behaviour: a rapid multi-click that fires the same state-changing request twice means the control is not guarded against double submission (button stays enabled, endpoint not idempotent) — use it on every important submit/create button once; the result says explicitly whether duplicates fired.

NameRequiredDescriptionDefault
refYesElement ref, e.g. e12
taskNoWhat you are DOING right now, in a few words: the action, not the acceptance criteria. "Filtering the documents register by status", "Filling the deviation form with invalid dates", "Signing in as QA_Team" — NOT "§2.4 filtering narrows the set and the filter is reflected in the URL", which is what you are CHECKING, not what you are doing. Naming the item you are on is fine ("§2.4: filtering the documents register"); keep the rest to what a colleague would see over your shoulder. It stays set until you pass a different one, so a batch costs a few words, not one per call. Required on the tools that act unless a journey or an earlier call already set one.
leaveNoHow to answer if the page asks to confirm leaving (a beforeunload prompt over unsent input): true leaves and discards that input, false stays. Omitted, observe and read-only stay and other modes leave. The result says when the page asked.
clicksNo1 = normal; 2-3 = rapid repeated clicks (double-submit probe)
sessionNoTarget this session directly instead of the active one — pass it explicitly when dispatching to MULTIPLE sessions in one turn (e.g. two scout_click calls with different `session`), which then run CONCURRENTLY rather than queueing. Omit for single-session sequential use.
objectiveNoOld name for `task` (2.0). Prefer `task`.

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden. It usefully discloses that the tool returns the outcome plus oracle violations and that the result says whether duplicate submissions fired, but it does not state broader safety details such as whether clicks can navigate away, require auth, or cause irreversible state changes.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core action and return behavior, then explains the multi-click probe. The second sentence is dense but purposeful, and there is little wasted text.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a parameter-rich interaction tool with no annotations and no output schema, the description covers purpose, click semantics, and return highlights. However, it leaves out important behavioral context around side effects, navigation, and destructive risk, which is a noticeable gap for a click tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all six parameters. The description still adds meaningful semantics for clicks by explaining the IMPATIENT-USER double-submit probe and what a positive result means, and it clarifies that ref comes from the latest scout_snapshot.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action and resource: clicking an element by its ref from the latest scout_snapshot. It also distinguishes the tool's outcome focus by noting it returns the result plus oracle violations, which helps an agent understand this is an interaction-and-check tool rather than a generic browser action.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives clear usage context for the multi-click probe, including when to use clicks=2 or 3 and that it should be used once on important submit/create buttons. It does not explicitly compare against siblings such as scout_press or scout_select, but the core when-to-use guidance is present.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

scout_closeA

Close a session's browser (memory persists on disk). Default: the DEFAULT session. Pass session to close a specific one, or all=true to close every live session at the end of a multi-role run. A session that is a lane of a parallel run (named by scout_lane_brief or scout_lane_report) is not closed until its lane report has been accepted by scout_lane_report, since folding needs the session attached; the refusal names every such lane.

NameRequiredDescriptionDefault
allNoClose every live session
forceNoClose even a lane whose report has not been folded yet. Its decisions are then lost: nothing is kept for calibration and nothing checks its defects were filed. Prefer folding it with scout_lane_report first.
sessionNoSession to close (default: the default session)

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does well: it discloses that memory persists on disk, that the default target is the default session, that lane sessions are held open until their report is accepted, and that refusals enumerate blocked lanes. It omits the destructive consequence of `force` (though the schema covers it), which is the main behavioral gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core action, then proceeds through the default, the explicit parameters, and the lane constraint. Every sentence earns its place, including the longer lane caveat that prevents a real misuse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 3-parameter close tool with no output schema, the description covers purpose, default behavior, bulk closing, and the critical lane-report dependency. It is largely complete, though it could mention `force` and what happens to a session after closure (e.g., whether it can be reopened) to be fully self-contained.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all three parameters thoroughly, including the risky `force` behavior. The description largely restates the default and `all` semantics and adds only modest context (end-of-multi-role-run usage), so it does not add much beyond the structured schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Close a session's browser', with the important qualifier that memory persists on disk. It is immediately clear what the tool does, though it does not explicitly contrast itself with sibling tools such as scout_session that likely create or switch sessions.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives clear routing: default closes the default session, `session` targets a specific one, and `all=true` is for the end of a multi-role run. It also states a when-not condition for lanes pending report folding, but never mentions the `force` escape hatch, so the agent reading only the description lacks the full set of options.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

scout_coverageA

Show exploration coverage: states visited, which elements remain unexercised, which options of a dropdown used this run no session has chosen yet, and which forms seen this run no session has submitted with every text field blank. Use to decide where to explore next and when the level's budget is satisfied. In a parallel run it shows this session's own work by default — the routes it reached this run and the forms it saw — so one lane is not handed another's gaps; scope:"project" shows every session's, each form and route tagged with the sessions that saw it.

NameRequiredDescriptionDefault
scopeNo'session': only the routes this session reached this run and the forms it saw. 'project': every route in the memory, across runs and sessions. Default: 'session' when other sessions share this project, else 'project'.
sessionNoTarget this session directly instead of the active one — pass it explicitly when dispatching to MULTIPLE sessions in one turn (e.g. two scout_click calls with different `session`), which then run CONCURRENTLY rather than queueing. Omit for single-session sequential use.

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the burden and does disclose the non-obvious default: session-scoped in a parallel run but project-wide when no other session shares the project, plus that project scope tags each form and route with the sessions that saw it. It omits any permission, cost, or pagination behavior, so it is strong but not complete.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose and content list are front-loaded in the first sentence, with the scoping behavior after. The second sentence is dense and partly restates the scope enumeration already in the schema, but every clause carries information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, and the description does describe what is returned (visited states, unexercised elements, tagged routes/forms), which an agent needs to interpret the result. The only gap is that the exact shape of the returned coverage data is not characterized.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds real meaning beyond the schema: it explains why the default flips between session and project, and that 'project' tags forms/routes with the sessions that saw them, which the schema does not state.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Show exploration coverage') and then enumerates the concrete content: states visited, unexercised elements, unselected dropdown options, and unsubmitted blank-field forms. That content distinguishes it from reporting siblings like scout_status or scout_lane_report, though no sibling is named explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Use to decide where to explore next and when the level's budget is satisfied' gives a clear decision context, and the parallel-run sentence explains when session vs project scope applies. No explicit exclusion or named alternative is given, so it stops short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

scout_crawlA

Engine-side route sweep in ONE call: visits each path (default: all known routes not yet visited), records states into coverage memory, and returns a per-route health summary (HTTP status, element count, what the main area holds, oracle violations, dead-ends, auth-redirects, and ERROR-VIEW or STILL-LOADING for a main area showing only an alert or a loading placeholder). Navigation-only — safe in read-only mode. Use this FIRST for broad coverage; explore interactively only where it flags problems or where journeys matter.

NameRequiredDescriptionDefault
pathsNoPaths to visit, e.g. ['/orders','/settings'], or full URLs on the attached origin. A path resolves from the origin's root, whatever page the session attached on. Omit to crawl all unvisited known routes.
sessionNoTarget this session directly instead of the active one — pass it explicitly when dispatching to MULTIPLE sessions in one turn (e.g. two scout_click calls with different `session`), which then run CONCURRENTLY rather than queueing. Omit for single-session sequential use.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does most of it: it discloses the side effect (states recorded into coverage memory), the safety profile ('Navigation-only — safe in read-only mode'), and the default crawl scope (all known routes not yet visited). It does not disclose cost/duration, request volume, or what happens on the 150-path cap, which matters for a tool that sweeps up to 150 routes in one call.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The lead clause front-loads the identity and the 'ONE call' differentiator, and the closing sentence carries the routing advice. The first sentence is dense with a long parenthetical status glossary, but each item listed is information an agent needs to interpret the return value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, and the description compensates by enumerating the returned per-route signals including the special ERROR-VIEW and STILL-LOADING states. Combined with the stated default scope and safety mode, an agent has enough to call it and interpret results without further discovery.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the schema already explains path resolution semantics and the concurrent multi-session use of `session`, so the description adds little beyond restating that it visits 'each path'. Baseline 3 applies since structured fields do the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('route sweep... visits each path') plus the exact outputs: coverage memory writes and a per-route health summary enumerating HTTP status, element count, main-area contents, oracle violations, dead-ends and auth-redirects. It also carves out its scope against the interactive tools ('Navigation-only', 'explore interactively only where it flags problems'), so an agent can separate it from scout_click/scout_navigate without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Use this FIRST for broad coverage; explore interactively only where it flags problems or where journeys matter' is an explicit ordering rule with a named condition that selects the alternative. The default behavior when `paths` is omitted is also stated, so the agent knows what happens on a bare call.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

scout_criterionA

Record whether one acceptance criterion of a ticket read with scout_tickets passed, failed or was not tested, with how sure you are. The link from a criterion to the findings that show it is YOUR judgement, stated with a confidence — never matched on words. A "fail" names the findings that show it (file them with scout_finding first); "not-tested" says why in untestedBecause. Recording the same criterion again from the same session replaces your earlier verdict. Touches no browser.

NameRequiredDescriptionDefault
reasonYesWhat you saw, or why it could not be tried, in a sentence
ticketYesThe ticket's id as scout_tickets gave it, e.g. "PROJ-12" or "T1"
sessionNoTarget this session directly instead of the active one — pass it explicitly when dispatching to MULTIPLE sessions in one turn (e.g. two scout_click calls with different `session`), which then run CONCURRENTLY rather than queueing. Omit for single-session sequential use.
verdictYes"pass", "fail" or "not-tested"
findingsNoIds of the findings that show this criterion failing (required for a fail; may be given for a pass, none for not-tested)
criterionYesThe criterion's id, e.g. "AC2" (or just "2")
confidenceYesHow sure you are of this verdict and of the findings linked to it, from 0 to 1. State it honestly
untestedBecauseNoOnly with verdict "not-tested": "no-access" (the role this run used could not reach it), "observe-blocked" (it needs a change sent and this session is in observe mode), "out-of-scope" (it is outside what this run could check, such as an email or another system)

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does well: it discloses that re-recording replaces the prior verdict (mutation/idempotency semantics) and that the tool 'touches no browser' (side-effect boundary). It could say more about permissions or what happens across sessions, but the key behavioral traits are covered.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core action and stays dense but purposeful; each sentence (verdict semantics, finding linkage, replacement behavior, no-browser note) earns its place. Slightly long, but no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For an 8-parameter mutation tool with no annotations and no output schema, the description covers the essentials: what is recorded, how findings link, replacement behavior, and side-effect scope. Nothing critical appears missing for correct invocation, though more on cross-session or concurrency implications could round it out.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline would be 3. The description adds value beyond the schema by framing the criterion-to-finding link as the agent's judgement stated with confidence rather than word-matching, and by spelling out that a fail names findings while not-tested uses untestedBecause — reinforcing the conditional parameter relationships.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb (record) and resource (a verdict on one acceptance criterion of a ticket read via scout_tickets), plus the confidence dimension. It distinguishes itself from siblings by referencing scout_tickets for the source and scout_finding for the linked evidence, so an agent can tell what it does and what it does not.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives explicit conditions: file findings with scout_finding FIRST when the verdict is 'fail', and explain 'not-tested' via untestedBecause. It also states the replacement behavior (re-recording the same criterion from the same session overwrites the earlier verdict), leaving little to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

scout_design_auditA

Computed-style design audit of the current page — a design connoisseur's read WITHOUT screenshots. Measurable defects (⚠): WCAG contrast, tiny targets, clipped text, aspect-distorted images, horizontal overflow, sibling cards touching with no gap (naming their parent), missing keyboard-focus indicators (sampled with real Tab presses). Craft suggestions (→): line measure and line-height rhythm, spacing-scale adherence, typography entropy, palette discipline (gray census, accent hue families, pure-#000 body text), elevation/control consistency, heading structure, indistinguishable links, and AI-slop tells (gradient text, glassmorphism, side-stripe borders, neon glows, violet gradients, identical card grids). Ends with a SYSTEM SUMMARY of design-system coherence and a PAGE SCORE whose why: line lists the largest deductions behind it; once four pages are audited, a SITE CONSISTENCY block sets this page's button heights, radii, headers, tabs and grays beside the other pages' and names the values only one page uses. Run once per representative page; the → tier is improvement feedback — file genuine opportunities as ux-polish findings with the concrete numbers, not just defects.

NameRequiredDescriptionDefault
sessionNoTarget this session directly instead of the active one — pass it explicitly when dispatching to MULTIPLE sessions in one turn (e.g. two scout_click calls with different `session`), which then run CONCURRENTLY rather than queueing. Omit for single-session sequential use.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations, so the description carries the full burden, and it does substantial work: it enumerates what is measured, discloses that keyboard-focus sampling uses 'real Tab presses' (an actual page interaction, not a passive read), and explains the four-page threshold before the SITE CONSISTENCY block appears. It does not state runtime cost, whether the page must be loaded/authenticated first, or that the audit is read-only with respect to the page.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the one-line purpose before the catalogue of checks. The middle run of check names is long but each item defines an output category the agent will receive, so it earns its space; the tail about four-page site consistency is more than a caller needs up front.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, so the description must convey the return shape — and it does: ⚠ measurable defects, → craft suggestions, SYSTEM SUMMARY, PAGE SCORE with a why: line, and the conditional SITE CONSISTENCY block. An agent knows what it will get back and how to use it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

One optional parameter with 100% schema coverage, and the schema already explains the concurrency-vs-sequential semantics of `session` in detail. The description adds nothing about the parameter, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: a computed-style design audit of the current page. Explicitly distinguishes itself from the screenshot-based siblings (scout_screenshot, scout_capture) with 'WITHOUT screenshots', so an agent can route between them without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Run once per representative page' gives clear execution context, and the closing sentence tells the agent what to do with the results (file → items as ux-polish findings with concrete numbers). It stops short of naming a specific alternative tool to use when the agent wants visual rather than computed-style evidence.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

scout_feedbackLabel a findingA

Record the person's own verdict on a finding: "not-a-bug" or "confirmed", with their reason if they gave one (at most 300 characters). Call it only with what the person said; never label a finding yourself. The finding is kept either way, keeps its id, and a later filing of the same problem still merges into it; cards and the status pane list a not-a-bug one apart. export: true instead lists every label in the project as candidates for a maintainer to review: they never change an answer key or the dedup by themselves. Touches no browser.

NameRequiredDescriptionDefault
idNoThe finding the person is labelling. Required unless export
exportNoList every label as candidates for a maintainer, instead of labelling
reasonNoWhy, in the person's words
verdictNo"not-a-bug" or "confirmed". Required unless export

Output Schema

NameRequiredDescription
verdictNo
findingIdNo
candidatesNo

TDQS

A4.1/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well past annotations (readOnlyHint=false, destructiveHint=false, idempotentHint=false) by disclosing consequences: the finding is kept either way, retains its id, and later filings of the same problem still merge into it, while not-a-bug entries are surfaced separately in cards and the status pane. It also bounds export mode (candidates only, never alters the answer key or dedup on its own) and states 'Touches no browser.' That is exactly the non-obvious side-effect context an agent needs before mutating.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Primary action is front-loaded in the first clause and almost every sentence carries load-bearing information about side effects or admissibility. The export behaviour is buried mid-paragraph behind semicolons, making the mode harder to spot than it should be, but nothing is padded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With annotations and an output schema already present, the description fills the remaining gaps: mutation semantics, persistence of the finding and its id, dedup behaviour, separate surfacing of not-a-bug, export's read-only-for-maintainers scope, and the absence of browser interaction. An agent can call this correctly and predict the result without further information.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents id, export, reason and verdict, including the 'Required unless export' conditional. The description mainly restates those facts (the 300-character limit, the two verdict strings) and adds little syntax or format detail beyond them; baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names a specific verb and resource ('Record the person's own verdict on a finding') and enumerates the two allowed verdict values, so the action is unambiguous. It does not contrast itself with plausibly overlapping siblings such as scout_finding, scout_resolve or scout_verify, so an agent must infer which one records a human verdict versus which drives automated resolution.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit admissibility rule — 'Call it only with what the person said; never label a finding yourself' — which is a real when-to/when-not constraint an agent could otherwise get wrong. It also explains the alternate export mode. It stops short of naming a sibling alternative for the case where the agent does want to act on a finding itself.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

scout_findingA

Record a structured finding (bug, UX issue, or improvement). Deduplicates across runs; automatically captures the recent action trace as the repro, and a picture of what it is about (the element ref names, else the viewport), kept for report.html and returned in this result as an image. Use for anything worth reporting: crashes, oracle violations you confirmed, dead ends, confusing UX, permission leaks, missing testids — and design-audit improvement opportunities (ux-polish) with their concrete measurements.

NameRequiredDescriptionDefault
refNoThe ref, from the latest scout_snapshot, of the element the finding is about. Its picture (the element plus a margin) is kept with the finding and shown in report.html. Omit it and the picture is the viewport.
titleYesOne-line summary of the defect
detailYesWhat happened, what was expected, and the evidence
sessionNoTarget this session directly instead of the active one — pass it explicitly when dispatching to MULTIPLE sessions in one turn (e.g. two scout_click calls with different `session`), which then run CONCURRENTLY rather than queueing. Omit for single-session sequential use.
categoryYesPick the closest — use 'other' only when nothing fits
evidenceNoCanonical machine signature for dedup, e.g. 'GET /api/reports/dashboard 403' or 'widget dashboard-summary-widget shows 0'. Same bug re-found later should produce the same string.
severityYes
conventionNoOnly for a WORTH-A-LOOK finding: the observation is real, and it is a defect only under a convention of this project you cannot see. Name that convention, e.g. 'a 4px spacing scale' or 'test ids on every control'. The report lists it under "Worth a look", apart from the defects, and does not count it as one. Not for "I could not tell": leave that unfiled or look closer. Omit for a defect.

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does real work: it discloses deduplication across runs, automatic capture of the action trace as repro, automatic element/viewport screenshotting, persistence into report.html, and return of that image. It does not state what happens on a duplicate hit (merged? returned id?) or permission/session prerequisites, which are the remaining behavioral gaps for a mutation tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Effectively one dense paragraph of three sentences, front-loaded with the action and followed by purpose/behavior/examples in a sensible order. It is long but nearly every clause carries information; the parenthetical about report.html and the returned image is slightly buried mid-sentence.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For an 8-parameter write tool with no output schema, the description covers purpose, side effects, storage, and return (image), which is most of what an agent needs. Missing are severity grading guidance and the outcome of deduplication, which matter for correct invocation but are secondary.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 88%, so baseline is 3 and the description adds little beyond it: ref semantics are restated, and category is only implied through examples. `severity` is required with an enum and no schema description, yet the description never says how to grade high/medium/low — a real omission the description could have filled.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb+resource ('Record a structured finding') and immediately narrows the domain to bugs, UX issues, and improvements, then enumerates concrete qualifying cases (crashes, dead ends, missing testids, ux-polish). It is unmistakably a write-a-defect tool rather than a navigation or inspection tool, though it never names the nearest sibling (scout_note) to draw the line explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Use for anything worth reporting:' followed by a concrete enumeration gives clear positive selection criteria, and the convention field adds a genuine negative case ('Not for "I could not tell": leave that unfiled'). It lacks an explicit contrast with scout_note or scout_ticket_file, so the agent must infer when a finding becomes a ticket.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

scout_guided_confirmAsk the person to confirm a guided planA

Ask the PERSON, through a form this server shows them, whether a guided plan whose care level writes may start: May submit forms on a site that is not on this computer, or May create test data anywhere (which also asks them to type a code the form shows). You may make this call; you cannot answer it, and nothing you pass accepts a plan. The plan is accepted only when the person says yes in the form. When they decline, close it, go back, mistype the code, or this client cannot show forms, the plan stays unaccepted and the result says so: tell the person, and offer the same check in Look only. Never retry it on their behalf. Touches no browser.

NameRequiredDescriptionDefault
planIdYesThe plan to confirm, as scout_guided_plan or scout_intake returned it

Output Schema

NameRequiredDescription
modeYes
planIdYes
outcomeYes
acceptedYes
tellPersonYes

TDQS

A4.2/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations it discloses that acceptance can only come from the person in the form, that the call has no browser side effects, that failure is reported in the result, and that retrying is forbidden. These are critical behavioral facts the annotations (readOnly=false, openWorld=false) do not convey.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

It is front-loaded with the core action, but the sentences are long, nested, and syntactically tangled (e.g. 'a guided plan whose care level writes may start'), making it harder to scan than necessary. The content earns its place, but the structure costs readability.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Output schema exists, so return values need not be explained, and the description still covers failure modes and the no-browser trait. For a single-parameter human-gated confirmation tool this is nearly complete, with only the form mechanics left implicit.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the single planId parameter is fully documented in the schema. The description adds the useful clarification that no parameter value can itself accept the plan, but gives no format or sourcing detail beyond the schema's own note. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action (ask the person, via a server-shown form, to confirm a guided plan) and names the exact conditions the plan must meet. It is clearly a human-in-the-loop confirmation gate, distinct from scout_run_plan or scout_guided_plan. The phrasing is dense enough that the purpose takes some parsing, keeping it from a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly says the agent may make the call but cannot answer it, that nothing passed accepts the plan, and that it must never be retried on the person's behalf. It enumerates the decline paths (close, go back, mistype, client cannot show forms) and prescribes the fallback of offering the check in Look only, which is exactly the when/when-not guidance an agent needs.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

scout_guided_planBuild a guided planA
Read-only

Turn a person's guided choices into a plan in plain words: the write mode its care level is, what each area does and holds back, what to tell the person, the calls to make in order, and its time and page limits. Pass choices to build a new plan, or planId to read one already built (a panel builds it and hands you only the id). A plan whose care level writes on a site that is not on this computer, or that creates test data anywhere, is built unaccepted: scout_guided_confirm asks the person, and until they accept, scout_attach above observe is refused. Once any plan is built, every scout_attach above observe must name an accepted plan's planId. A care level above the SceneScout config's maxMode is refused. Touches no browser.

NameRequiredDescriptionDefault
planIdNoA plan already built, to read it back. Exactly one of choices or planId
choicesNoThe person's choices. Exactly one of choices or planId

Output Schema

NameRequiredDescription
modeYes
areasYes
callsYes
levelYes
budgetYes
planIdYes
choicesYes
confirmYes
recheckNo
objectiveYes
tellPersonYes
signInHealthNo

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond readOnlyHint=true, it discloses the acceptance state machine a plan may land in, why it happens (writing care level on a remote site, or creating test data anywhere), and the concrete consequence on scout_attach. It also confirms the tool touches no browser, which is the key behavioral fact for an agent deciding whether to call it.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The build/read split is front-loaded and every sentence carries governance information that an agent needs. It is dense, with long compound sentences and several policy clauses stacked together, but nothing is filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The annotations cover the safety profile, the schema covers all parameters, and an output schema exists, so the remaining burden on the description is behavioral and procedural. It covers that fully: build vs read mode, acceptance gating, the confirm handoff, and the maxMode ceiling.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, and enum-level detail (care, areas, signIn, thoroughness) already lives in the schema descriptions, so the schema does the heavy lifting. The description restates the exactly-one-of choices/planId rule, which the schema also says, and adds little new parameter-level semantics. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: turns guided choices into a plan, and can also read back an existing plan by id. Both entry modes (choices vs planId) are stated explicitly. It does not differentiate itself from similar siblings such as scout_playbook, scout_run_plan, or scout_recheck_plan, so it stops short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It states exactly when to use each mode ('Pass choices to build a new plan, or planId to read one already built'), and notes the panel scenario where only an id is handed over. It also spells out downstream rules: unaccepted plans block scout_attach above observe, scout_guided_confirm asks the person, and a care level above the config's maxMode is refused.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

scout_hoverA

Hover an element by ref like a user pausing the pointer on it, and report what it reveals: tooltips/popovers (diffed against pre-hover state), any other new page text that appeared (labelled as possibly unrelated on busy pages), the title attribute, and aria-describedby text — each item truncated to 300 chars. Hovering does not count as exercising the element. Use on badges, icons, truncated text, and error indicators BEFORE concluding an element 'does nothing' — hover-gated UI is invisible to snapshots and clicks.

NameRequiredDescriptionDefault
refYesElement ref, e.g. e12
sessionNoTarget this session directly instead of the active one — pass it explicitly when dispatching to MULTIPLE sessions in one turn (e.g. two scout_click calls with different `session`), which then run CONCURRENTLY rather than queueing. Omit for single-session sequential use.

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full load and does well: it discloses the return shape, that results are diffed against pre-hover state, that each item is truncated to 300 chars, and that on busy pages new text may be unrelated and is labelled as such. It does not cover wait/timing behavior for animations or whether the hover is dismissed afterward, which are the remaining material gaps for this kind of tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the action and the payoff (what it reveals), then the caveats about truncation and possibly-unrelated text, then the usage directive. Dense and largely waste-free, though the second clause is a long run-on that could be split for scanability.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, and the description compensates by describing the returned payload fields and their 300-char truncation. With no annotations, it also warns that results are state-diffed and may contain noise on busy pages. Complete enough to call correctly; only timing/teardown semantics are unstated.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both `ref` and `session` are already documented in the schema, including the concurrency rationale for multi-session dispatch. The description only echoes 'by ref' and adds nothing about the session parameter. Baseline 3 applies when the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (hover) on a specific resource (element by ref) and immediately enumerates what it returns: tooltips/popovers diffed against pre-hover state, new page text, title attribute, and aria-describedby. It is clearly distinguishable from scout_click and scout_snapshot, which it implicitly contrasts by noting hover-gated UI is invisible to them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives concrete application targets (badges, icons, truncated text, error indicators) and a strong directive: use BEFORE concluding an element 'does nothing'. It also clarifies the boundary condition that hovering does not count as exercising the element. It stops short of naming an alternative tool explicitly, but the snapshot/click contrast supplies the routing context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

scout_intakeStart a guided checkA

Ask how the person wants their site checked when they gave no settings. Where this client can show a form, the person chooses there: the site's address, what to check, a journey or tickets, how they sign in, how careful to be and how thorough. This then builds a guided plan, asks the person to confirm it in a second form when its care level needs that, and returns the plan: what to tell them, then the calls in order. Otherwise, or when they decline or close the form, it returns four plain questions for you to ask in chat. Never asks for a password. Touches no browser.

NameRequiredDescriptionDefault
urlNoThe site's address, when the person already said it: the form starts with it filled in

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds real behavior beyond the annotations: the form flow, the second confirmation form when the care level requires it, the exact return shapes (plan with guidance then ordered calls, or four plain questions), and two safety statements ('Never asks for a password', 'Touches no browser'). It leaves the non-idempotent, non-read-only character implied rather than stated, so it isn't fully transparent about what state the intake creates.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One dense paragraph that front-loads the trigger condition and then walks through the branches in the order an agent will encounter them. Slightly run-on ('how they sign in, how careful to be and how thorough'), but no sentence is expendable.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, and the description fully covers both possible returns and the two-form interaction sequence. An agent knows what it will get back and what it must do next in either branch.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With one parameter at 100% schema coverage the baseline is 3, but the description adds meaning the schema does not: the url is optional and pre-fills the form when the person already stated the address. That is a genuine behavioral note about how the parameter is consumed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific action: elicit the person's checking preferences when no settings were given, then build a guided plan. It distinguishes itself from siblings like scout_guided_plan and scout_guided_confirm by describing the two-form flow and the chat fallback. The opening phrase 'Ask how the person wants their site checked' is slightly indirect as a verb+resource statement, but the rest of the description pins the purpose down.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a clear entry condition ('when they gave no settings') and describes the branch taken when the client cannot render a form or the person declines/closes it. It does not explicitly name a sibling alternative (e.g. scout_guided_plan) for the case where settings already exist, which keeps it out of the top band.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

scout_journeyA

Measure how EASY a real task is, not just whether it works — the question pass/fail e2e suites never answer. Wrap one user goal: scout_journey {action:'start', goal:'Create an order'}, perform it the way a first-time user would (navigate by CLICKING through the UI, not by jumping to a known deep URL — a shortcut invalidates the measurement), then scout_journey {action:'end', completed:true|false}. Returns interaction cost (clicks, navigations, distinct screens, elapsed), the actual path taken, and friction signals: BACKTRACKS (returning to a screen already left — the clearest sign the next step wasn't discoverable), screen count, and over-interaction. Run it on each module's primary journey; an abandoned journey is a high-severity finding.

NameRequiredDescriptionDefault
goalNoFor start: the user-facing task, e.g. 'Create an order and assign it'
noteNoFor end: what made it hard or easy, in one line
actionYes'start' before attempting the task, 'end' when done or blocked
sessionNoTarget this session directly instead of the active one — pass it explicitly when dispatching to MULTIPLE sessions in one turn (e.g. two scout_click calls with different `session`), which then run CONCURRENTLY rather than queueing. Omit for single-session sequential use.
completedNoFor end: did the user actually achieve the goal? false is a strong finding.

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the behavioral burden. It transparently lists what is returned (interaction cost, path, friction signals like BACKTRACKS, screen count, over-interaction) and warns that shortcuts invalidate the measurement. It does not explicitly state whether the tool modifies the application or requires specific permissions, but its description as a measurement wrapper implies read-only behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, well-structured paragraph that front-loads the core purpose and then provides necessary operational details. Every sentence contributes useful information, though it could benefit from minor formatting (e.g., bullets) for readability.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (a measurement wrapper with start/end lifecycle), the description covers the essential workflow, return values, and usage frequency. It omits details about the session parameter's concurrency behavior, but the schema compensates. No output schema exists, yet the description adequately explains the return format.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already documents all five parameters. The description restates the start/end usage pattern with goal and completed, but adds no new meaning beyond what the schema provides for parameters like session or note. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb+resource: 'Measure how EASY a real task is' and explicitly contrasts this with pass/fail e2e suites. It then details the start/end wrapper pattern with concrete examples, making it unambiguous what the tool does and how it differs from simple pass/fail testing.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It states when to use the tool ('Run it on each module's primary journey') and gives a crucial usage constraint ('navigate by CLICKING through the UI, not by jumping to a known deep URL — a shortcut invalidates the measurement'). However, it does not explicitly name alternatives or when not to use it, leaving some inference to the agent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

scout_lane_briefA

For a run split across parallel agents (lanes). Divides the app's known routes between N lanes and returns each lane's session name, the objective to attach it with, and the routes it owns — whole modules per lane, balanced by route count, so no two lanes audit the same area and none is left unopened. Call it after the first crawl, when route knowledge is complete. Touches no browser; pass the briefs to your lane agents, then use scout_lane_report for what they hand back.

NameRequiredDescriptionDefault
goalNoWhat the whole run is for; each lane's objective is written against it
lanesYesHow many lanes to split across (1–8)
routesNoRoutes to split. Omit to split every route this project knows about.
fromRunNoStart from an earlier run's record: a ci.json, or a project directory (relative to this project). With fromRunMode continue, the lanes take the routes it never worked on first, then the ones it left work on with what to do first, then the rest; with replay, one lane per session it had, following its routes and steps in order. Default SCENESCOUT_FROM_RUN, else none (the stable split).
sessionNoTarget this session directly instead of the active one — pass it explicitly when dispatching to MULTIPLE sessions in one turn (e.g. two scout_click calls with different `session`), which then run CONCURRENTLY rather than queueing. Omit for single-session sequential use.
runMinutesNoHow long the lanes will run, in minutes (default 60). When they attach by a saved role, the brief is refused if that login will not last this long plus the margin.
fromRunModeNoWith fromRun: continue (default) or replay. Default SCENESCOUT_FROM_RUN_MODE, else continue.
expiryMarginMinutesNoHow long past the run a saved role's login must still last, in minutes (default 10).

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does disclose the important traits: it touches no browser, the split is whole-modules balanced by route count, and the split guarantees no overlapping lanes and no unopened routes. It does not cover failure modes such as the saved-role login-expiry refusal, which only appears in the schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The core action and the lane-isolation guarantee are front-loaded, and the sequencing guidance follows without filler. The opening fragment ("For a run split across parallel agents (lanes).") is slightly abrupt, but no sentence is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a coordination tool with 8 parameters and no output schema, the description usefully describes the return payload (session name, objective, owned routes) and the no-browser contract. Minor gaps around refusal/error behavior are acceptable since the schema documents the triggering parameters.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so every parameter including fromRun, fromRunMode, runMinutes, and expiryMarginMinutes is already documented in structured data. The description only reinforces the meaning of `lanes` (N lanes) and the default route set. This is the expected baseline when the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a concrete verb and resource: divides the app's known routes between N lanes and returns each lane's session name, objective, and owned routes. It also explicitly separates itself from scout_lane_report, which handles what the lanes hand back, so an agent can pick between them without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

"Call it after the first crawl, when route knowledge is complete" gives the precondition, and the closing sentence routes the agent to scout_lane_report for the reverse direction. It also tells the agent what to do with the output (pass the briefs to lane agents) rather than call this tool itself for browsing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

scout_lane_reportA

For a run split across parallel agents (lanes). Without reply: returns the paragraph to put in a lane's prompt, telling it to hand back ONE typed JSON object (verdicts, severities and categories from closed sets, a calibrated confidence per decision, routes covered, what blocked it). With reply: parses what the lane handed back and returns the one-line fold (defects, highs, unsure, mean confidence, routes) or the reason it was refused, to relay to the lane once. Touches no browser.

NameRequiredDescriptionDefault
laneYesThe lane's name, as used in its session
replyNoThe text the lane handed back; omit to get the instruction instead

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full burden and does well: it discloses the return payload for both modes (prompt paragraph vs. fold of defects/highs/unsure/mean confidence/routes), states that refusals come back with a reason, and closes with "Touches no browser" to rule out side effects. It omits whether lane names must be unique or how malformed replies are handled, but the safety profile is unambiguous.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the scope condition ("For a run split across parallel agents") then split cleanly into without-`reply` and with-`reply` cases. The parenthetical enumerations of fold contents are dense but each item is informative. Slightly crowded phrasing keeps it off a 5.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, so the description must describe returns, and it does for both modes including the refusal path. For a 2-parameter, single-purpose coordination tool that is nearly complete; only edge-case behavior (invalid lane, unparseable reply) is left implicit.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds real semantics: `reply` is "the text the lane handed back" and omitting it flips the tool into instruction mode, which is richer than the schema's own wording. `lane` gets no extra detail beyond the schema's "as used in its session".

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific mechanism: with no `reply` it produces the instruction paragraph for a lane's prompt, and with `reply` it parses the lane's return and folds it into a one-line summary. That is a concrete verb+resource statement for a two-mode tool. It stops short of naming the sibling it should be chosen over (e.g. scout_lane_brief), so an agent must infer the boundary from context.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The two branches are explicitly conditioned on the presence of `reply`, which is exactly the decision an agent needs to make when calling this tool. It also states the fold result is "to relay to the lane once", implying a single-use handoff. No explicit when-not guidance or named alternative is given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

scout_loginA

Open a visible browser window for the USER to sign in to the app as a role, and save that sign-in for scout_attach { role }. Use it when an attach is refused because no sign-in is saved for the role, or the saved one has expired. Tell the user first, in plain words: "A browser window is opening. Sign in there as you normally would; it closes by itself once you are in." The window saves once the user is back on the app with a new session (a round trip through a single sign-on provider is followed, not taken for the end) and closes. Never type credentials into it yourself. Returns once signed in and saved, or after waitSeconds with the window still open: then call scout_login again with the same role to keep waiting. Closing the window saves nothing. Needs a desktop: on a machine with no display, ask the user to run scenescout login <url> --role <name> where they can see the window.

NameRequiredDescriptionDefault
urlYesWhere to sign in: the app's address or its sign-in page, e.g. http://localhost:3000/login
roleYesThe name to save the sign-in under, e.g. admin; scout_attach { role } signs in with it
browserNoBrowser to open. Default: the SCENESCOUT_BROWSER environment variable, else chromium
successUrlNoOnly when the user says how to tell: signed in once the URL's path contains this, or the URL starts with it (an absolute URL), instead of when a new session appears
projectPathNoAbsolute path to the project (the sign-in is saved in .scenescout/auth/ here), as for scout_attach. Omitted: the same folder an attach with no projectPath uses for this site, which the result names.
waitSecondsNoHow long this call waits for the user before returning with the window still open (default 120)

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does: it discloses that the window closes on its own, that an SSO round trip is followed rather than treated as completion, that closing the window saves nothing, that the agent must never type credentials, and that the call can return with the window still open. It also flags the desktop/display prerequisite that would otherwise cause a silent failure.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose and the when-to-use trigger are front-loaded, then the user-facing instruction, then the save/return semantics, then the display caveat. It is dense but nearly every sentence carries operational information; the only mild cost is length, which makes the critical 'never type credentials' and 'closing saves nothing' points harder to scan.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, so the description must explain what the call returns, and it does ('Returns once signed in and saved, or after waitSeconds with the window still open'). Combined with the desktop caveat and the credential-handling rule, nothing an agent needs in order to call this safely is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so 3 is the baseline, but the description adds real meaning beyond the schema: role is the key scout_attach consumes, successUrl is only relevant 'when the user says how to tell', and waitSeconds governs whether the call returns with the window still open. url and browser are left to the schema, which already covers them well.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource ('Open a visible browser window for the USER to sign in to the app as a role, and save that sign-in') and ties the artifact to a named consumer, scout_attach { role }. That linkage alone separates it from every other sibling in the list.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives an explicit trigger ('when an attach is refused because no sign-in is saved for the role, or the saved one has expired') and an explicit fallback for the no-display case (run `scenescout login <url> --role <name>` where the window is visible). It also names the retry pattern: call again with the same role to keep waiting.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

scout_navigateA

Navigate to a path on the attached origin (e.g. '/orders') or a full URL on it. A path resolves from the origin's root, whatever page the session attached on. Also supports 'back' via scout_back.

NameRequiredDescriptionDefault
taskNoWhat you are DOING right now, in a few words: the action, not the acceptance criteria. "Filtering the documents register by status", "Filling the deviation form with invalid dates", "Signing in as QA_Team" — NOT "§2.4 filtering narrows the set and the filter is reflected in the URL", which is what you are CHECKING, not what you are doing. Naming the item you are on is fine ("§2.4: filtering the documents register"); keep the rest to what a colleague would see over your shoulder. It stays set until you pass a different one, so a batch costs a few words, not one per call. Required on the tools that act unless a journey or an earlier call already set one.
leaveNoHow to answer if the page asks to confirm leaving (a beforeunload prompt over unsent input): true leaves and discards that input, false stays. Omitted, observe and read-only stay and other modes leave. The result says when the page asked.
targetYesAbsolute URL or path like /settings
sessionNoTarget this session directly instead of the active one — pass it explicitly when dispatching to MULTIPLE sessions in one turn (e.g. two scout_click calls with different `session`), which then run CONCURRENTLY rather than queueing. Omit for single-session sequential use.
objectiveNoOld name for `task` (2.0). Prefer `task`.

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden and does add useful context: paths resolve from the origin root regardless of the current page, and full URLs must be on the attached origin. However, it does not describe navigation timing, failure behavior, or other side effects, leaving meaningful gaps.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, front-loaded with the core action, then the path-resolution rule, then the back alternative. Nothing is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The schema fully documents all five parameters, including task, leave, and session semantics, and the description covers the target behavior and back alternative. It is sufficient for correct invocation, though it does not discuss post-navigation state or error handling.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the parameter documentation baseline is 3. The description goes beyond the schema's simple '/settings' example by explaining that paths resolve from the origin root whatever page the session attached on, and that full URLs must be on that origin.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: navigate to a path on the attached origin or a full URL on it. It also distinguishes the back behavior by naming scout_back as the sibling to use instead. An agent can tell what this tool does without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It clearly establishes the navigation context and points to scout_back for going back. It does not explicitly exclude other navigation-adjacent approaches like clicking links, but the intended usage is clear enough.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

scout_networkA

List the data requests (fetch and XHR) the current page made since its document loaded: method, path, status and time, oldest first, each marked with the route it was sent from when a client-side route change moved the page since. Use it when the page and the server seem to disagree — an empty list where the API has data, a stale value after a save — to tell a request that failed, one still pending and one that never ran apart. Read-only: it lists what the browser already saw and sends nothing. Credentials in query strings are redacted. A full page load starts a new list; scout_request's own calls are marked.

NameRequiredDescriptionDefault
limitNoHow many of the newest to list. Default 40.
sessionNoTarget this session directly instead of the active one — pass it explicitly when dispatching to MULTIPLE sessions in one turn (e.g. two scout_click calls with different `session`), which then run CONCURRENTLY rather than queueing. Omit for single-session sequential use.
containsNoOnly requests whose path contains this text, e.g. /api/things

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden and does so well: it states read-only behavior, explains that it sends nothing, notes credential redaction in query strings, clarifies that a full page load resets the list, and marks scout_request's own calls.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core purpose and then adds usage and safety context in a tight paragraph. Every clause carries useful information, with no redundant restatement of the schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the absence of annotations and output schema, the description provides enough detail to call the tool correctly: it describes the return fields, ordering, route marking, redaction, session-reset behavior, and diagnostic use cases.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents limit, session, and contains in detail. The description adds no parameter-specific guidance beyond the schema, which is the baseline expectation when coverage is complete.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific resource and scope: data requests (fetch and XHR) made by the current page since document load, including method, path, status, time, and route origin. It also differentiates this from sibling scout_request by noting that scout_request's own calls are marked.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives clear diagnostic scenarios: when the page and server disagree, such as an empty list where the API has data or a stale value after save, and explains that it distinguishes failed, pending, and never-run requests. It stops short of naming when not to use it or explicitly pointing to an alternative tool beyond the scout_request marking note.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

scout_noteA

Cumulative WRITTEN knowledge about the tested app — .scenescout/ASSUMPTIONS.md, in prose a human can read and correct. memory.json stores coverage; this stores UNDERSTANDING, so every run starts smarter than the last. READ it at the start of every session ({action:'read'}). ADD durable learnings as you go ({action:'add', section, note}): what the app is for (app-model), who each role is and what they're FOR — infer the persona from what the role can see and do, e.g. 'qa-role = reviewer: approves orders, cannot administer' (roles), UI patterns the app follows (conventions), rules discovered the hard way like 'an order can only ship once approved' (constraints), fragile areas worth re-testing every run (risks), domain terms (glossary), and how to get the app testable at all — the command that regenerates an expired login state, what has to be running (setup), which the engine reads back to you the next time a storage state has expired. Notes are dated, attributed to the acting role, and deduplicated. Do NOT record session-specific facts (ids, counts) — only durable knowledge.

NameRequiredDescriptionDefault
noteNoFor add: the learning, one or two sentences, written for a future reader with no context
actionYes'read' the accumulated knowledge, or 'add' one durable learning
sectionNoFor add: which knowledge section this belongs to
sessionNoTarget this session directly instead of the active one — pass it explicitly when dispatching to MULTIPLE sessions in one turn (e.g. two scout_click calls with different `session`), which then run CONCURRENTLY rather than queueing. Omit for single-session sequential use.

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does much of it: notes are dated, attributed to the acting role, deduplicated, persisted across runs, and the setup section is read back by the engine on storage-state expiry. It omits whether notes can be edited or removed once written, and whether read returns the whole file or one section.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose is front-loaded in the first two sentences, but the rest is a single dense run-on paragraph with nested em-dash asides and inline JSON examples that duplicate the schema. Every claim is relevant, yet the readability cost is real compared with a short bulleted section list.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, so the description must carry return expectations; it conveys that read yields human-readable prose and enumerates the section taxonomy, which is enough to call it correctly. What read actually returns (whole file vs. a section) is left implicit.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and both enums already document their values, so the baseline is 3. The description goes somewhat beyond the schema by explaining what belongs in each section in prose (persona inference for roles, examples for constraints), but the note format and session parameter behavior are largely restated from the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names a specific resource (.scenescout/ASSUMPTIONS.md), its content type (cumulative written knowledge about the tested app) and explicitly contrasts it with memory.json ('memory.json stores coverage; this stores UNDERSTANDING'). It does not distinguish itself from the nearest sibling, scout_playbook, which is the one an agent could plausibly confuse it with.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit when-to-use ('READ it at the start of every session'), when-to-add ('ADD durable learnings as you go'), and an explicit exclusion ('Do NOT record session-specific facts (ids, counts) — only durable knowledge'). Each of the seven sections is named with the condition that selects it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

scout_playbookA

Return the SceneScout testing method: setup order, write modes, how to explore, what counts as done, how to report. Call this ONCE before the first scout_attach in a conversation, then follow it. If this client offers a SceneScout skill, load that instead — it is the same text, so never read both. Takes no input and touches no browser.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden, and it states 'Takes no input and touches no browser,' making the read-only, side-effect-free nature clear. It also warns that calling it again is unnecessary and that it duplicates the skill text.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tightly packed sentences: content, usage timing/alternative, and input/side-effect constraints. No filler, and the most decision-relevant information appears first.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a no-input, no-output-schema tool, the description fully covers what the tool returns, when to invoke it, how it relates to the skill alternative, and that it has no browser side effects. Nothing an agent needs to call or follow it is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so the schema already says nothing is needed. The description adds the explicit confirmation 'Takes no input,' which aligns with the empty schema, earning the zero-parameter baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb and resource: 'Return the SceneScout testing method' and enumerates its contents (setup order, write modes, exploration, done criteria, reporting). This clearly distinguishes it from the sibling execution tools like scout_attach and scout_report.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says when to call it: 'ONCE before the first scout_attach in a conversation, then follow it.' It also names an alternative and provides a rule: if a SceneScout skill is offered, load that instead and 'never read both.'

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

scout_pressB

Press a keyboard key (e.g. Escape, Tab, Enter) — useful for closing modals and testing keyboard navigation.

NameRequiredDescriptionDefault
keyYes
taskNoWhat you are DOING right now, in a few words: the action, not the acceptance criteria. "Filtering the documents register by status", "Filling the deviation form with invalid dates", "Signing in as QA_Team" — NOT "§2.4 filtering narrows the set and the filter is reflected in the URL", which is what you are CHECKING, not what you are doing. Naming the item you are on is fine ("§2.4: filtering the documents register"); keep the rest to what a colleague would see over your shoulder. It stays set until you pass a different one, so a batch costs a few words, not one per call. Required on the tools that act unless a journey or an earlier call already set one.
sessionNoTarget this session directly instead of the active one — pass it explicitly when dispatching to MULTIPLE sessions in one turn (e.g. two scout_click calls with different `session`), which then run CONCURRENTLY rather than queueing. Omit for single-session sequential use.
objectiveNoOld name for `task` (2.0). Prefer `task`.

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden, and it does disclose the observable effect (dismisses modals) and example key values. It says nothing about whether the target element must have focus first, whether modifier combos are supported, or what happens if the key is invalid, which are real failure modes for a keypress tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One front-loaded sentence with the action first, examples second, and rationale last. No filler, though the modal example and the navigational example are slightly redundant for such a small tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a four-parameter tool with no annotations and no output schema, the description is thin: it omits focus requirements, whether the press is dispatched to the page or a specific element, and what the tool returns or reports. The schema covers the harness parameters, but the actual behavioral contract of pressing a key is underspecified.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 75% and the richly documented task/session/objective parameters are already fully explained in the schema. The description's only added parameter value is clarifying that `key` expects a named key such as Escape/Tab/Enter, which is useful since that field has no schema description, but it never addresses multi-key sequences or modifiers.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a concrete verb and resource (press a keyboard key) and supplies representative values (Escape, Tab, Enter) so an agent immediately knows the operation. It does not distinguish itself from the nearest sibling, scout_type, which also sends keyboard input, so the boundary is left implicit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives two concrete situations where this is the right call: closing modals and testing keyboard navigation. It never says when NOT to use it or names scout_type/scout_click as alternatives, so the agent must infer that typing text belongs elsewhere.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

scout_recapEnd-of-check cardA
Idempotent

The recap of the guided check that has just ended, for the person to share with their team: the address, pages checked, problems found by impact, problems a re-check confirmed fixed, and the time it took. Returns it as an SVG picture and as lines of text; with save: true it is also written to the project's .scenescout/recap.svg. Built from the check's figures only. Refuses while no guided check has ended. Touches no browser.

NameRequiredDescriptionDefault
saveNoAlso write the picture to .scenescout/recap.svg

Output Schema

NameRequiredDescription
svgYes
dateYes
fileYes
rowsYes
titleYes
planIdYes
addressYes

TDQS

A4.1/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the annotations: it explains the write side effect that justifies readOnlyHint=false (`.scenescout/recap.svg` when save is true), declares an error condition (refuses with no ended check), clarifies the data source ('built from the check's figures only'), and rules out browser activity. These are exactly the operational facts an agent needs before invoking.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The payload contents are front-loaded, then outputs, then side effect, then preconditions — a logical order with no filler. Slightly list-heavy but each clause carries information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Even though an output schema exists, the description still tells the agent what comes back (SVG plus text lines) and covers preconditions, side effects, and data provenance. Nothing needed to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Only one parameter at 100% schema coverage, and the schema already documents `save` identically. The description restates the same effect rather than adding format or failure details, so it hits the baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific artifact (the recap card of the guided check that just ended) and enumerates its contents — address, pages checked, problems by impact, confirmed fixes, elapsed time. That scopes it apart from scout_team_report and scout_lane_report without naming them explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The precondition 'Refuses while no guided check has ended' plus 'for the person to share with their team' makes the timing and audience clear. No explicit exclusion or named alternative (e.g. scout_team_report), so it stops short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

scout_recheck_planPlan a re-check after a fixA
Read-only

Build a guided plan that checks again the problems earlier checks left open, and says which are gone, still there or changed. It runs in the care level the problems were found in, never a looser one: problems found in a looser care level are left for a re-check of their own, and problems on another site for a re-check of that site. It is a new plan: where its care level needs the person's confirmation, scout_guided_confirm asks them again, whatever an earlier check was given. Follow it as you would scout_guided_plan's: attach with its planId, then scout_verify. By default every open problem but those the person marked not a bug, worst route first, at most 25; pass ids for exactly those. Touches no browser.

NameRequiredDescriptionDefault
idsNoRe-check exactly these finding ids. Default: every open one but those marked not a bug
signInNoHow the person signs in to the site, as in the check that found them (default none). Never a password
addressNoThe site, when no check has run in this conversation: its problems are read from the folder SceneScout keeps for it, and only those on it are re-checked

Output Schema

NameRequiredDescription
modeYes
areasYes
callsYes
levelYes
budgetYes
planIdYes
choicesYes
confirmYes
recheckNo
objectiveYes
tellPersonYes
signInHealthNo

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds behavior beyond the annotations: each call yields a NEW plan so prior confirmations do not carry over and scout_guided_confirm must ask again, and the tool touches no browser (consistent with readOnlyHint). That non-idempotent, no-side-effect-on-site profile is exactly what annotations alone could not convey.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose is front-loaded in the first sentence and every clause carries information (scope limits, confirmation semantics, follow-up flow, defaults). It is dense and runs long as a single paragraph, which slightly hurts scannability.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema, full param coverage and annotations already present, the description supplies the remaining decision-critical context: care-level scoping, cross-site exclusion, confirmation reset, and sequencing with scout_attach/scout_verify. Nothing needed to invoke it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already documents ids, signIn and address, and the description's default rule largely restates the ids default. It does add one thing the schema lacks: ordering ('worst route first', at most 25) and the site-scoping effect of address, but that is marginal against a fully documented schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and artifact: build a guided re-check plan over problems earlier checks left open, classifying them as gone, still there or changed. This is clearly separable from scout_guided_plan (fresh check) and from per-site or looser-care-level re-checks it explicitly excludes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly scopes the call to the care level where problems were found and says what is NOT handled here ('problems found in a looser care level are left for a re-check of their own, and problems on another site for a re-check of that site'). It also prescribes the follow-up flow (attach with planId, then scout_verify) and names scout_guided_confirm as the confirmation path.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

scout_reportA

Generate the final markdown report — findings, page quality scores (worst first), role capability matrix, oracle rollup, and the GAP LEDGER (an explicit list of what was NOT tested). Writes the full document to .scenescout/report.md and returns a bounded SUMMARY (full reports exceed client token limits). Gates by level: 'minimal' needs all routes visited + ≥1 design audit; 'medium' additionally needs several routes audited; 'extensive' REFUSES while the gap ledger is non-empty — that refusal is the completeness guarantee: an extensive report only generates when nothing known is left untested. force=true overrides (only when the user capped the budget).

NameRequiredDescriptionDefault
forceNoGenerate even though gates are unmet (only when the user capped the budget)
levelNoWhich completion contract to enforce — match the level the run was asked formedium
reportNoWhich parts the report carries. 'both' (default): the Summary first — what was checked, when, for how long and how carefully, what was found, the problems as a table with their impact (blocks users, annoying, cosmetic), then each problem folded with its numbered steps, what was expected and what happened — then the Evidence (each problem's picture and the frames recorded before it, only when there is one), then the technical details, folded. 'qa': the Summary and the Evidence alone, for a tester or anyone not technical. 'dev': the technical report alone, unfolded. report.html adds the steps every session took, folded, whichever is chosen. It applies to the files this call writes; the live view always shows both.both
historyNoHow much of the history to print. 'index' lists findings from earlier runs, and resolved ones, as a row each: id, severity, age, title. 'full' prints every one in full as before — on one project that was 1.75 MB against 113 KB, nearly half of it findings already fixed. Use 'full' when handing the document to someone who has no access to the memory.index
sessionNoTarget this session directly instead of the active one — pass it explicitly when dispatching to MULTIPLE sessions in one turn (e.g. two scout_click calls with different `session`), which then run CONCURRENTLY rather than queueing. Omit for single-session sequential use.

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does so well: it discloses the write target (.scenescout/report.md), why the return is a bounded summary (full reports exceed client token limits), and the refusal-as-completeness-guarantee behavior. That is exactly the contract-level detail an agent needs before invoking.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the what and outputs in the first sentence, then the gating rules. Dense with parentheticals and caps and slightly long, but nearly every clause conveys actionable contract detail rather than filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, yet the description explains the return (bounded summary vs. full file), the file side effect, and the gating contract that governs successful invocation. Nothing an agent needs to call this correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, and the description goes beyond it by explaining the enforcement semantics of `level`, the constrained role of `force` ('only when the user capped the budget'), and the report/history tradeoffs. It reinforces rather than duplicates the schema, though not every parameter is addressed in the prose.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Generate') and resource ('the final markdown report') and enumerates the exact contents: findings, page quality scores, role capability matrix, oracle rollup, and gap ledger. It is clearly the terminal report tool, though it never names siblings like scout_lane_report or scout_recap to draw the boundary.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly describes the level-gated completion contracts and the refusal condition ('extensive REFUSES while the gap ledger is non-empty'), plus the force override only when the user capped the budget. Strong when/when-not guidance, but it does not point to any alternative tool for partial or intermediate reporting.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

scout_requestA

Call the app's own API as this session, with the UI bypassed — the check that turns a hidden or disabled control into a proven refusal. A button that is not shown proves nothing; the same action refused by the server does. The fetch runs IN the page, so it carries the session's cookies and replays the Authorization header the app itself last sent, and it passes through the same interception the write policy is enforced on: in safe-write a mutation on a record this session did not create is refused here exactly as it would be for a click, and that refusal is the engine's safety net, not a finding. Returns the status line, the timing, the headers that decide whether two responses are truly identical (content-type, location, www-authenticate, retry-after, cache-control), and the body — its first 2000 characters, or the part named by select (one JSON value by path) or offset/limit (a window of characters). Unlike a shell call, every request is recorded in the run's trail and its signature is what a finding should quote. Paths are fenced to the attached origin: use another session to reach another host.

NameRequiredDescriptionDefault
bodyNoRequest body, sent as application/json unless a content-type header is given
pathYesPath on the attached origin, e.g. /api/things/12, or a full URL on that same origin
taskNoWhat you are DOING right now, in a few words: the action, not the acceptance criteria. "Filtering the documents register by status", "Filling the deviation form with invalid dates", "Signing in as QA_Team" — NOT "§2.4 filtering narrows the set and the filter is reflected in the URL", which is what you are CHECKING, not what you are doing. Naming the item you are on is fine ("§2.4: filtering the documents register"); keep the rest to what a colleague would see over your shoulder. It stays set until you pass a different one, so a batch costs a few words, not one per call. Required on the tools that act unless a journey or an earlier call already set one.
limitNoHow many characters to return with offset or select. Default 2000, or 8000 for a select with no offset.
methodNoDefault GET
offsetNoReturn the body (or the selected value) from this character on. The body is cut at 2000 characters by default; the result names the next offset.
selectNoReturn one value of a JSON response body by its dotted path, e.g. "stats.open" or "items.0.name", pretty-printed and up to 8000 characters. A path that is not there says which keys are.
headersNoExtra headers. One given here wins over the app's own, which is how a session tests a different or absent credential. A method override (X-HTTP-Method-Override, X-HTTP-Method, X-Method-Override, or _method in the path's query or the body) is judged by the write policy as the method it names.
sessionNoTarget this session directly instead of the active one — pass it explicitly when dispatching to MULTIPLE sessions in one turn (e.g. two scout_click calls with different `session`), which then run CONCURRENTLY rather than queueing. Omit for single-session sequential use.
objectiveNoOld name for `task` (2.0). Prefer `task`.

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations exist, and the description carries the whole load: cookies and the app's last Authorization header ride along, requests pass through the same interception the write policy enforces, safe-write may refuse a mutation on a record the session did not create, and that refusal is explicitly labeled a safety net rather than a finding. Side effects (recorded in the run trail, signature quotable by a finding) and edge behavior (paths fenced to the origin) are all disclosed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action and scope in the first clause, and nearly every sentence adds information. The aphorism 'A button that is not shown proves nothing; the same action refused by the server does' is justification-flavored prose in an otherwise dense single paragraph.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 10-parameter tool with no annotations and no output schema, the description still covers what comes back — status line, timing, the specific comparison-deciding headers, body truncation at 2000 characters with select/offset alternatives, and the next-offset hint. Nothing an agent needs to call it correctly or interpret the result is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so every parameter is already documented — including select paths, offset/limit windows, headers overriding the app's own, and method-override policy. The description restates the body-window behavior and header precedence but adds essentially no semantics the schema does not already carry, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource — call the app's own API as this session — and immediately fixes the scope: UI bypassed, run in-page, fenced to the attached origin. An agent can distinguish it from scout_click (UI actuation) and from a shell call without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives the decisive selection criterion — a hidden/disabled control proves nothing, a server refusal does — and the host-fencing exclusion ('use another session to reach another host'). It never names scout_click or scout_navigate explicitly as the alternative for normal interaction, so routing is inferred rather than stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

scout_resolveA

Mark a finding as resolved (by its id, shown when recorded and in the report). Resolved findings move to the report's green ✅ Resolved section, and reopen automatically as flagged REGRESSIONS if re-found later. Use when the user says a bug is fixed, or when re-testing shows the evidence no longer reproduces.

NameRequiredDescriptionDefault
idNoAlias for `findingId`.
sessionNoTarget this session directly instead of the active one — pass it explicitly when dispatching to MULTIPLE sessions in one turn (e.g. two scout_click calls with different `session`), which then run CONCURRENTLY rather than queueing. Omit for single-session sequential use.
findingIdNoFinding id, e.g. a1b2c3d4e5

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the behavioral burden and does well: it discloses the state transition (moved to the Resolved section) and the non-obvious reversibility (auto-reopens as REGRESSIONS if re-found). It omits auth/permission needs and what the call returns, keeping it short of a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tightly packed sentences: action first, then effect/side-effect, then usage trigger. No filler and the most important fact (the id source) is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, and the description adequately explains the resulting state and the regression side effect. It leaves minor gaps—what happens with an unknown id and why/when to pass the optional `session` parameter—but nothing that would cause a mis-call in normal single-session use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema supplies baseline meaning. The description adds provenance for the id ('shown when recorded and in the report'), which tells the agent where to obtain a valid value—more than the schema alone provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Mark a finding as resolved') plus the identifier needed to do it. It also names the observable outcome (moves to the report's green ✅ Resolved section), which distinguishes it from recording tools like scout_finding or scout_recheck_plan.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit triggering conditions: 'when the user says a bug is fixed' or 'when re-testing shows the evidence no longer reproduces.' That is clear usage context, though it never states when not to use it or names alternative tools for the adjacent recording/re-testing workflows.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

scout_run_planA

Execute up to 20 actions in ONE call — use for mechanical sequences (fill a form, walk a wizard) so each step doesn't cost a round-trip. Targets resolve at execution time by semantic locator: 'testid=…', 'text=…', 'label=…' or 'role=button[name=Save]' (never snapshot refs). The same steps, saved to .scenescout/flows/.json with expect-text / expect-url / expect-request steps added, are replayed by scenescout check on every pull request. An upload step attaches a file as scout_upload does (target required — the file input or the control that opens its chooser; value = a fixture kind or a project-relative path). The plan ABORTS at the first NEW oracle violation, policy refusal, or failed step, returning a transcript of how far it got; repeats of already-reported violations do not abort (they stay logged for the report). For a sweep of independent steps (tabs, filters, pages) pass onViolation "continue": a new error status or its console echo is listed on its step's line and the plan goes on; a failed step, a policy refusal or any other violation still stops it. A select step whose value names no option fails at once, listing the options.

NameRequiredDescriptionDefault
taskNoWhat you are DOING right now, in a few words: the action, not the acceptance criteria. "Filtering the documents register by status", "Filling the deviation form with invalid dates", "Signing in as QA_Team" — NOT "§2.4 filtering narrows the set and the filter is reflected in the URL", which is what you are CHECKING, not what you are doing. Naming the item you are on is fine ("§2.4: filtering the documents register"); keep the rest to what a colleague would see over your shoulder. It stays set until you pass a different one, so a batch costs a few words, not one per call. Required on the tools that act unless a journey or an earlier call already set one.
stepsYes
sessionNoTarget this session directly instead of the active one — pass it explicitly when dispatching to MULTIPLE sessions in one turn (e.g. two scout_click calls with different `session`), which then run CONCURRENTLY rather than queueing. Omit for single-session sequential use.
objectiveNoOld name for `task` (2.0). Prefer `task`.
onViolationNostop (default): end the plan at the first new oracle violation, right for a form flow whose steps depend on each other. continue: list a new http_error or console_error on its step's line and run the next step, for a sweep of independent stepsstop

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does so: it states the plan aborts at the first NEW violation, policy refusal or failed step, that repeat violations do not abort, that 'continue' only tolerates new http_error/console_error while failed steps and policy refusals still stop, and that a bad select value fails immediately listing options. It also discloses that targets resolve at execution time and that plans can be replayed by `scenescout check` in CI.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the one-call/20-action hook and the use case, then ordered by importance: locators, CI replay, upload, abort semantics, continue mode. It is dense and long for a description, with some detail (the `scenescout check` PR-replay digression) that is orientation rather than invocation guidance, but almost no sentence is filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, and the description compensates by describing what comes back on failure ('returning a transcript of how far it got') and how errors are surfaced per step. For a 20-step batch tool with no annotations, the failure modes an agent must reason about (abort vs. continue, select-option mismatch, upload target requirement) are all covered.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 80%, so the schema already documents most fields; the description still adds real meaning — execution-time semantic locator resolution and the 'never snapshot refs' prohibition, and that upload's value is a fixture kind or project-relative path with a required target. It adds nothing for `task`, `objective` or `session` beyond what the schema says.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb, scope and batching rationale: 'Execute up to 20 actions in ONE call'. This unambiguously separates it from the single-action siblings (scout_click, scout_type, scout_select, scout_hover) and from scout_guided_plan / scout_recheck_plan.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a clear trigger ('mechanical sequences (fill a form, walk a wizard)') and an explicit alternative condition for the onViolation "continue" mode ('a sweep of independent steps (tabs, filters, pages)'). It does not explicitly say to prefer scout_click for one-off actions or reference the sibling plan tools by name, so routing vs. scout_guided_plan / scout_journey is left implicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

scout_saved_checksThe person's saved checksA

List, save, run or delete the person's saved guided checks. A saved check keeps the choices of a guided plan under a name (the address, what to check, the journey, how they sign in, the care level and how thorough), never a password, code, token or cookie, in the project's .scenescout/guided/ folder, readable by its owner only. "save" takes a name and the planId of a plan built from choices (a re-check is not saved). "run" builds a new plan from a saved check, unaccepted: where its care level needs the person's confirmation, scout_guided_confirm asks them again. Follow that plan as scout_guided_plan's. "delete" removes one saved check's file and nothing else. With no check open in this conversation, pass the site's address so SceneScout finds its folder. Touches no browser.

NameRequiredDescriptionDefault
nameNoThe saved check's name: letters, digits, spaces and dashes
actionYes"list", "save" (name and planId), "run" (name) or "delete" (name)
planIdNoWith "save": the plan whose choices to keep
addressNoThe site, when no check has run in this conversation: its saved checks are in the folder SceneScout keeps for it

Output Schema

NameRequiredDescription
planNo
savedYes
folderYes
refusedYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds substantial context beyond the annotations: on-disk location (.scenescout/guided/), owner-only readability, an explicit guarantee that no password/code/token/cookie is stored, that delete touches one file and nothing else, that run produces an unaccepted plan, and that the tool "touches no browser." This makes the destructiveHint=false annotation coherent. A minor gap remains: nothing says what happens when "save" reuses an existing name, which matters given idempotentHint=false.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the action set and the definition, then action-by-action behavior — no filler sentences. The parenthetical definition of a saved check is long, and the planning-flow sentences (run/confirm) are dense, but each carries distinct information an agent needs.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present and annotations covering the safety profile, the description supplies exactly what structured fields can't: storage/privacy semantics, per-action preconditions, the address fallback for folder resolution, and the handoff to scout_guided_confirm/scout_guided_plan. Nothing needed to invoke it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so every parameter is already documented in the schema, including the action enum and the address fallback. The description adds the cross-parameter coupling (name+planId only for save, address only when no check is open), but repeats rather than extends most per-parameter detail. Baseline 3 applies when the schema carries the load.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States four specific verbs (list, save, run, delete) over a named resource (the person's saved guided checks) and immediately defines what a saved check is — the choices of a guided plan under a name. It also distinguishes this from the re-check path ("a re-check is not saved") and from scout_guided_plan, so an agent can route without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives per-action conditions ("save" needs name+planId, "run"/"delete" take the name), names the alternative tools for the downstream flow (scout_guided_confirm asks for confirmation, then follow as scout_guided_plan), and states the prerequisite for resolving the folder via address when no check is open in the conversation. Explicit when-to-use and cross-tool routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

scout_scanA

Scan a project directory to discover the frontend workspace, framework, routes, dev command, Playwright auth storage states, and testid conventions. Run this first.

NameRequiredDescriptionDefault
projectPathYesAbsolute path to the project root

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are supplied, so the description carries full behavioral burden. It discloses the outputs discovered, which implies a read-only inspection, but never states that it makes no writes, whether results are cached/persisted for later tools, roughly how long it takes, or what happens on a non-frontend project. Adequate but leaves real gaps for a first-step tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, zero filler. The action and discovered artifacts come first and the ordering constraint ('Run this first') is front-loaded at the end where it is most actionable.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description usefully enumerates the categories of information returned, which is what an agent needs to decide to call it. Minor gap: no note on how the results are consumed by downstream tools like scout_playbook or scout_run_plan.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the single parameter projectPath is fully documented in the schema as an absolute path. The description adds no meaning beyond that, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (scan) and resource (project directory) plus an explicit inventory of what the scan discovers: frontend workspace, framework, routes, dev command, Playwright auth storage states, testid conventions. No sibling tool does discovery scanning, so it is easily distinguished in a 46-tool namespace.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Run this first' gives a clear ordering directive relative to all the other scout_* tools, which is strong guidance for a discovery tool. It stops short of naming explicit exclusions or alternatives (e.g. when to use scout_recheck_plan instead of a fresh scan).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

scout_screenshotA

Take a JPEG screenshot of the current viewport. LAST RESORT: geometry issues are in scout_snapshot and style/contrast/spacing issues are in scout_design_audit — images that failed to load are listed in scout_snapshot under BROKEN IMAGES — use a screenshot only for pixel-native content (a canvas, visual gestalt) that computed data cannot capture.

NameRequiredDescriptionDefault
sessionNoTarget this session directly instead of the active one — pass it explicitly when dispatching to MULTIPLE sessions in one turn (e.g. two scout_click calls with different `session`), which then run CONCURRENTLY rather than queueing. Omit for single-session sequential use.

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden. It discloses the output format (JPEG), the scope (current viewport, not full page), and the fact that it should not be used for geometry, broken images, or style issues. It does not mention latency, waiting for load, or whether the screenshot can fail, but the core behavioral profile is well covered.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core action, then immediately states the LAST RESORT constraint and routes to the correct siblings. Every sentence earns its place and zero words are wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given one optional parameter, no output schema, and no annotations, the description is nearly complete. It covers use case, alternatives, and output scope. A small gap remains around operational behavior such as waiting for load or handling screenshot failures, but the essential guidance is present.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the sole optional 'session' parameter is fully documented in the schema. The description adds no parameter-specific semantics beyond what the schema already provides; baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names a specific verb and resource ('Take a JPEG screenshot of the current viewport') and explicitly distinguishes the tool from sibling alternatives. An agent can immediately tell this is for pixel-native content, not DOM or style analysis.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly labels the tool as a LAST RESORT, names scout_snapshot for geometry and broken images, scout_design_audit for style/contrast/spacing, and states the only appropriate use case: pixel-native content such as a canvas or visual gestalt. When-to-use and when-not-to-use are both clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

scout_scrollA

Scroll like a user — real apps hide their bugs below the fold. Reports the resulting position (px and %), and explicitly flags SCROLL LOCKED: scrollable content exists but the page will not move (the classic leaked modal scroll-lock that silently cuts users off from everything below the fold — snapshots also detect this passively as an OVERLAY line). Without target it scrolls the page, falling back to the largest scrollable pane on app-shell layouts. Pass target to scroll ONE region instead (a sidebar nav, a dialog body, a table pane): the page-level pick is the LARGEST scroll port, so a smaller region beside it never moves and its content looks truncated when it is only scrolled away — never call a nav item missing without scrolling its own container first. Use before judging a long page: the design audit measures at the current scroll position, so scroll + re-snapshot/re-audit deep sections; scroll also triggers lazy-loaded content whose failures then surface as oracle violations.

NameRequiredDescriptionDefault
byNoScroll by px instead (positive = down). Default 600 when neither given.
toNoJump to an edge
targetNoScroll ONE region instead of the page: "testid=…", "text=…" or "label=…". Scrolls that element's nearest scrollable ancestor.
sessionNoTarget this session directly instead of the active one — pass it explicitly when dispatching to MULTIPLE sessions in one turn (e.g. two scout_click calls with different `session`), which then run CONCURRENTLY rather than queueing. Omit for single-session sequential use.

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations exist, so the description carries the load and does it well: it discloses the return payload (px and %), the SCROLL LOCKED flag with its cause, the OVERLAY cross-reference, and that scrolling triggers lazy-loaded content whose failures surface as oracle violations. It stops short of stating timing/settle behavior or what happens if the target has no scrollable ancestor.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the purpose and the key failure mode, then target semantics, then the workflow rule. Several long parenthetical digressions about leaked modals and truncated nav content are dense but mostly earn their place; a tighter edit would cut roughly a fifth.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema, and the description nevertheless explains what comes back (px and % plus the scroll-locked flag). For a 4-parameter, zero-required navigation tool, everything needed to call it correctly and interpret the result is present.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so a 3 is the floor, but the description earns more by explaining the consequence of target: it scrolls the element's nearest scrollable ancestor and exists precisely because the page-level pick is the largest scroll port. That semantic linkage (why a smaller region appears truncated) is not in the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names a specific verb and resource ('Scroll like a user') and immediately scopes it against the passive alternative — snapshots detect scroll-lock, this tool actively scrolls. An agent can distinguish it from scout_snapshot and scout_design_audit without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit sequencing rules: use before judging a long page, scroll then re-snapshot/re-audit, and 'never call a nav item missing without scrolling its own container first.' It also states when to omit target (page-level default with app-shell fallback) versus when to pass it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

scout_selectA

Select an option in a by ref. The value is matched against the options before anything is picked: an exact value, an exact label, either ignoring case, then a label it starts with. A value matching no option, or several, is refused at once with the options listed.

NameRequiredDescriptionDefault
refYes
taskNoWhat you are DOING right now, in a few words: the action, not the acceptance criteria. "Filtering the documents register by status", "Filling the deviation form with invalid dates", "Signing in as QA_Team" — NOT "§2.4 filtering narrows the set and the filter is reflected in the URL", which is what you are CHECKING, not what you are doing. Naming the item you are on is fine ("§2.4: filtering the documents register"); keep the rest to what a colleague would see over your shoulder. It stays set until you pass a different one, so a batch costs a few words, not one per call. Required on the tools that act unless a journey or an earlier call already set one.
valueYesOption value or label (or the start of a label, when only one option has it)
sessionNoTarget this session directly instead of the active one — pass it explicitly when dispatching to MULTIPLE sessions in one turn (e.g. two scout_click calls with different `session`), which then run CONCURRENTLY rather than queueing. Omit for single-session sequential use.
objectiveNoOld name for `task` (2.0). Prefer `task`.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does well: it discloses the entire matching precedence (exact value, exact label, case-insensitive variants, label prefix) and the failure mode (refused immediately, with the available options listed back). It stops short of saying whether the call is atomic or what happens if the select is disabled/hidden.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the action, then the matching algorithm, then the error contract. Every clause carries information; nothing is repeated from the schema or title.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-required-parameter action tool with no output schema and no annotations, the description covers the operation, resolution semantics, and failure behavior. It omits any mention of the shared `task`/`session` boilerplate, though the schema documents those at length, so that gap is minor.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 80%, so the baseline is 3. The description goes beyond the schema by spelling out the resolution order for `value`, which the schema only gestures at with '(or the start of a label, when only one option has it)'. The `ref` parameter is left unelaborated.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: 'Select an option in a <select> by ref.' It clearly delineates the domain (native select elements) which separates it from the general-purpose scout_click sibling. An agent can immediately tell what this tool is for.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use it (native <select> elements, addressed by ref) but never names an alternative such as scout_click for custom dropdowns, nor states preconditions like the element needing to be in the snapshot. Usage is inferable rather than explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

scout_sessionA

List live sessions, or set which one is the DEFAULT (used by any tool call that omits session). Prefer passing session directly on each tool call for multi-role work — that's what lets concurrent dispatch happen; scout_session is for sequential convenience (skip repeating session on every call) and for checking what's live. Both browsers stay live and authenticated regardless of which is default — re-snapshot a session after a break to see what changed while it was away.

NameRequiredDescriptionDefault
areaNoIn a guided check: the area this session is working on now, one of its plan's areas, shown to the person following the check. With `name`, that session (the default session is left as it is); without, the default one. Set it as each area starts.
nameNoSession to make the default; omit to list sessions
paceMsNoChange how fast this session acts, mid-run: a floor between actions in milliseconds, for when a person is watching and needs to keep up. 0 restores full speed. With `name`, applies to that session; without, to every live session — which is what 'slow everything down so I can follow' means.
sessionNoAlias for `name`.

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and delivers non-obvious behavioral facts: setting a default has no side effect on liveness or auth state, both browsers stay authenticated regardless of which is default, and a re-snapshot is needed to see what changed while a session was away. It does not say whether the default persists across calls/connections or what the listing returns.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the two primary behaviors in the first clause, then qualifies with the preferred alternative. Dense but mostly earning its words; the parenthetical asides and em-dash clauses make it slightly rambling relative to the core message.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema and no annotations, so the description must hold the whole story — and it leaves out the pacing and guided-area functions entirely, plus any indication of what a listing returns. What it does cover (default-session semantics, liveness guarantees) is complete and correct.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so baseline is 3. The description adds genuine meaning for `name`/`session` by framing them as 'the session every unqualified call falls back to', which is more than the schema states. But `paceMs` and `area` are never mentioned in the description at all, so it contributes nothing for two of the four parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States two specific verbs (list live sessions, set the DEFAULT session) on a named resource, and explains that omitting `session` elsewhere routes through the default. It is clearly distinguishable from siblings like scout_status. However, it covers only two of the tool's four capabilities — nothing signals that this same tool also throttles action pace (`paceMs`) or marks the current guided area (`area`), so the stated purpose under-describes the tool's scope.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly names the preferred alternative (pass `session` directly on each call for multi-role/concurrent work) and characterizes this tool's niche as sequential convenience plus introspection. That is real when/when-not guidance against a concrete alternative. It stops short of when to use the pace-throttling and area-tracking modes.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

scout_snapshotA

Capture the current page state: URL, state fingerprint, a one-line summary of the main area's heading and text, interactable elements with refs (e1, e2, …) and their state (pressed, selected, checked, expanded, current), what the page announces (alert and status regions, by their text), geometry issues, coverage, and oracle violations since the last action. Re-snapshotting a route returns a DIFF against its last snapshot, even after visiting elsewhere, and another tab of the same screen diffs against that screen's last tab; refs stay stable, including across a search or filter that rewrites only the query string. On a dense page, says what past the element cap was cut. Cheap — prefer this over screenshots.

NameRequiredDescriptionDefault
fullNoForce a full element list instead of a diff
sessionNoTarget this session directly instead of the active one — pass it explicitly when dispatching to MULTIPLE sessions in one turn (e.g. two scout_click calls with different `session`), which then run CONCURRENTLY rather than queueing. Omit for single-session sequential use.

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does so well: it discloses diffing semantics, ref stability across query-string rewrites, cross-tab diffing behavior, element-cap truncation messaging, and relative cost. These are meaningful behavioral traits beyond the schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core action and every clause adds substantive detail about return contents or behavior. It is somewhat dense as a single paragraph and could be easier to scan, but there is no empty filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema is provided, so the description must explain return values, and it does so thoroughly: URL, fingerprint, summary, refs and states, announcements, geometry issues, coverage, oracle violations, diff behavior, and truncation. For a two-parameter snapshot tool, an agent has enough to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so both parameters are already fully documented in the schema. The description implies diff-vs-full behavior but does not add syntax, format, or concurrency details beyond what the schema provides, so baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: capture the current page state, with a precise inventory of what the snapshot contains (URL, fingerprint, heading/text summary, interactable elements with refs and state, announcements, geometry issues, coverage, oracle violations). It also distinguishes itself from the obvious sibling: 'Cheap — prefer this over screenshots.'

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Names the key alternative ('prefer this over screenshots') and explains the important diff-on-re-snapshot behavior, which implies repeat snapshots are expected. It does not give explicit exclusions or prerequisites, so it falls short of the top score but gives clear contextual guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

scout_statusRun statusA

Show the person running you how the run stands: each session's objective and current task, open findings by severity, coverage, and the live view's address. In a guided check it also shows the check's progress in plain words: what is happening now, each area's state, pages and time against the plan's limits, problems so far and the newest cards, and the clicking it saved with what that figure is based on. Call it when the user wants to watch or asks how the run is going. A host that renders MCP Apps shows a pane that keeps itself up to date; every other host gets the same as text, and you pass the Live view: address on. Takes no input and touches no browser.

NameRequiredDescriptionDefault

No parameters

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does reasonably well: it discloses that it takes no input and touches no browser (implying a safe, side-effect-free read), and explains host-dependent behavior (MCP Apps pane vs plain text with a `Live view:` address to relay). It does not mention rate limits, caching, or freshness guarantees for the status data.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The core purpose is front-loaded, but the middle stretches into a long, loosely punctuated run-on ('problems so far and the newest cards, and the clicking it saved with what that figure is based on') that is hard to parse. Information density is high but scannability suffers.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema and no annotations, the description does the work of describing the returned content (session objectives, task, findings by severity, coverage, live view address, guided-check progress). This is nearly complete for a no-arg status tool, though output field shapes remain informal rather than structured.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters and the schema is empty, so the baseline is 4. The description correctly confirms no input is required, leaving no ambiguity about arguments.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource (show run status: session objectives, findings by severity, coverage, live view address) and enumerates what is included, which lets an agent distinguish it from most siblings. It does not, however, differentiate itself from the sibling scout_status_poll, whose name suggests near-identical purpose.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives explicit trigger conditions: call it when the user wants to watch or asks how the run is going, and it clarifies the guided-check variant. No exclusions or routing between this and scout_status_poll are given, so the when-not side is missing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

scout_status_pollRun status (for the pane)A

Called by the scout_status pane every few seconds to refresh itself. Not for the agent: call scout_status instead.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations present, the description carries the full burden, and it does disclose real behavioral traits: the invocation cadence (every few seconds) and the intended consumer (a UI pane, not the agent). It stops short of describing the return payload or whether polling is cheap/idempotent, but the caller constraint is the behavior that matters most here.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, zero filler, and the audience constraint is front-loaded immediately after the mechanism. Nothing is padded or buried.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter, output-schema-less UI polling endpoint, the description supplies the one thing an agent needs: do not call this, call scout_status. Return-shape details are absent but legitimately irrelevant to the agent audience the description has already excluded.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so the schema already fully covers its surface and there is nothing for the description to disambiguate. Baseline for a parameterless tool.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names the specific caller (the scout_status pane) and the specific action (refreshing run status), so the resource and operation are identifiable. It is also clearly distinguishable from the sibling scout_status, though it never spells out what payload the poll actually returns.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives an explicit negative use case ('Not for the agent') plus a named alternative ('call scout_status instead'). An agent has everything it needs to route away from this tool with no inference required.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

scout_team_reportMake a team reportA
Idempotent

Write the team report: the plain report made for sharing, as one page that opens in any browser. It has a cover (the site, the date, what was checked, the care level and how thorough), a short summary, each problem this check found as a plain card with its picture, the ones the person marked not a bug listed apart, what the check did not test, and blank sign-off lines. Beside it, an evidence folder holds the pictures, the report as Markdown and manifest.json with every file's SHA-256, the SceneScout version and the check's times. Writes only inside the project's .scenescout/ folder (team-report.html and team-report/), replacing the last team report; sends nothing anywhere and touches no browser. Tell the person where the page is.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
fileYes
pathYes
folderYes
manifestYes
picturesYes
problemsYes
evidenceDirYes
missingPicturesYes

TDQS

A4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With annotations already covering the safety profile, the description still adds substantial behavior: exact write scope (.scenescout/, team-report.html and team-report/), replacement of the prior team report (confirming the idempotentHint), the contents of the adjacent evidence folder including SHA-256 manifest, and explicit 'sends nothing anywhere and touches no browser' (reinforcing openWorldHint=false). This is unusually complete disclosure of side effects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose is front-loaded, but the second and third sentences are long laundry lists enumerating report sections and folder contents. Much of that inventory is plausible detail, yet it slows the agent scanning for the decision-relevant facts (what is written, where, and that nothing is sent).

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values are already documented, and the description still supplies everything the agent needs to explain the artifact to the user: the file path, the folder layout, and the exact side-effect boundary. Nothing material for calling this zero-arg tool is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so there is nothing for the description to clarify and the baseline is 4. No parameter-like inputs are exposed or implied, correctly matching the empty schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource (writes the team report page) and describes the artifact concretely, including that it is 'the plain report made for sharing'. It does not name the sibling it differs from (scout_report, scout_lane_report), so the agent must infer the team-vs-lane distinction, but the purpose itself is unmistakable.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied by 'the plain report made for sharing' and the closing 'Tell the person where the page is'. There is no explicit when-to-use or when-not-to-use statement and no named alternative among the many report-producing siblings (scout_report, scout_lane_report, scout_coverage).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

scout_ticket_fileFile previewed ticketsA

File the tickets a preview from scout_ticket_preview listed. Before anything is sent, this server asks the PERSON in its own form, listing the tickets; it files only on their yes there. You may make this call; you cannot answer the form, and nothing you pass confirms it. It files only the previewed problems, only while the preview is under 10 minutes old and only if those problems have not changed since; otherwise it refuses and a new preview is needed. A preview is used once: after the person goes back, turns the form down or closes it, or this client cannot show forms, nothing is filed: tell them, and never call it again on their behalf. Returns each filed ticket's link. Touches no browser.

NameRequiredDescriptionDefault
previewIdYesThe previewId scout_ticket_preview returned

Output Schema

NameRequiredDescription
filedYes
outcomeYes
ticketsYes
problemsYes
tellPersonYes

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds rich behavior beyond the annotations: a human confirmation form gates the write, nothing the caller passes can confirm it, filing requires a preview under 10 minutes old and unchanged problems, refusals occur otherwise, and previews are single-use. It also scopes side effects ('Touches no browser') and return content, which the readOnly/openWorld annotations alone could not convey.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the action and its dependency, then the consent gate and failure modes. Nearly every sentence carries a distinct constraint, though the middle block is dense enough that an agent must parse several conditions in one clause chain.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a non-idempotent write gated on human consent, the definition covers prerequisites, freshness, refusal behavior, single-use semantics, and return value ('each filed ticket's link'), which complements the existing output schema. Nothing needed to invoke it safely is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the single previewId is documented there, so the schema carries the baseline. The description still adds meaning the schema lacks: that the id must come from scout_ticket_preview, that it is consumed once, and that it expires after 10 minutes.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb and resource ('File the tickets a preview from scout_ticket_preview listed') and explicitly ties itself to the sibling that produces its input, so an agent can distinguish it from scout_ticket_preview, scout_tickets, or scout_ticket_status without reading schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

States exactly when to call (after a preview lists tickets), what the agent may and may not do ('You may make this call; you cannot answer the form'), and the negative cases where it must never be called again ('turns the form down or closes it, or this client cannot show forms'). The alternative path ('a new preview is needed') is named explicitly.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

scout_ticket_previewPreview problems as ticketsA
Read-only

Preview filing the problems the person chose as GitHub or Jira tickets. Reads the tracker to find which are already filed (by the marker scenescout export writes) and sends nothing. Returns each ticket that would be filed, the ones already filed, any over the limit of one filing, and a previewId that lasts 10 minutes. Show the person the list; to file it, call scout_ticket_file with the previewId. to: "github" with target the repository as owner/name, or "jira" with target the project key (the Jira site is JIRA_BASE_URL in the server's settings). The tracker's sign-in comes from the server's environment or the desktop extension's settings only (GH_TOKEN or GITHUB_TOKEN; JIRA_EMAIL and JIRA_API_TOKEN): never ask the person for a token and never pass one. Touches no browser.

NameRequiredDescriptionDefault
toYesWhere the team keeps its tickets
idsYesThe finding ids the person chose, as scout_cards shows them
targetYesGitHub: the repository as owner/name. Jira: the project key, such as "QA"

Output Schema

NameRequiredDescription
toYes
capYes
laterYes
whereYes
toFileYes
leftOutYes
createdAtYes
expiresAtYes
previewIdYes
alreadyFiledYes

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint and openWorldHint, and the description goes well beyond them: it says the tracker is read to detect markers, that nothing is sent, that a previewId expires after 10 minutes, that over-limit items are surfaced, and that no browser is touched. Credential sourcing (GH_TOKEN/GITHUB_TOKEN, JIRA_EMAIL/JIRA_API_TOKEN from env or desktop settings) is disclosed too.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the preview/read-only guarantee and the file-this-later handoff before dipping into parameter and credential detail. Mostly tight, but the mid-sentence splice starting with 'to: "github" with target...' reads as a run-on fragment rather than a clean clause.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, yet the description still summarizes what comes back (tickets that would be filed, ones already filed, over-limit, previewId) so the agent knows the shape of the decision surface without parsing the schema. For a read-only preview with three required params, nothing material is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so 3 is the baseline, but the description adds real meaning: it ties `to` values to the shape of `target` (owner/name for GitHub, project key for Jira) and reveals where the Jira site comes from (JIRA_BASE_URL in server settings). `ids` is only loosely characterized ('the problems the person chose'), leaving the schema to carry the maxItems/format detail.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb+resource: 'Preview filing the problems the person chose as GitHub or Jira tickets.' It is cleanly distinguished from the sibling scout_ticket_file, which is named as the follow-up step, so an agent cannot confuse the dry-run with the write.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

States exactly when to call it ('show the person the list') and the alternative path ('to file it, call scout_ticket_file with the previewId'). It also gives explicit negative guidance about credentials: never ask the person for a token and never pass one.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

scout_ticketsA

Read the tickets or acceptance criteria the person gave this run, pasted (text) or from a file (path), and keep them so the report answers each criterion: passed, failed or not tested. Recognises Given/When/Then scenarios, checklists, numbered and "AC1:" criteria, and lists under an "Acceptance criteria" heading; several tickets may be given at once. A ticket with no recognisable criteria is reported as such, never guessed at. Returns each criterion's id (AC1, AC2, …) to judge it by with scout_criterion. Touches no browser.

NameRequiredDescriptionDefault
pathNoA ticket file to read (.md, .markdown, .txt, .text, .feature), absolute or relative to the project folder, and inside it unless the server's SCENESCOUT_TICKET_DIRS names the folder it is in. Pass this or `text`.
textNoThe tickets as pasted. Pass this or `path`.
sessionNoTarget this session directly instead of the active one — pass it explicitly when dispatching to MULTIPLE sessions in one turn (e.g. two scout_click calls with different `session`), which then run CONCURRENTLY rather than queueing. Omit for single-session sequential use.

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are supplied, so the description carries the full burden and does substantial work: it enumerates the recognised formats (Given/When/Then, checklists, numbered, 'AC1:', headings), declares the no-guess fallback for unrecognisable tickets, and states what is returned (criterion ids). Gaps remain around whether repeated calls replace or accumulate previously loaded tickets and what happens with a path outside the permitted dirs.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose and input sources are front-loaded, and the format-recognition and criterion-id details each carry real decision value. It is a single dense paragraph, though, and the format enumeration could have been compressed without losing information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no annotations and no output schema, the description has to explain both behavior and result, and it does: input sources, parsing rules, the unrecognisable-ticket outcome, and the criterion-id return shape. Only the persistence/replacement semantics of repeated calls are left unstated.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so all three parameters are already documented in the schema, including the text-vs-path exclusivity and the multi-session concurrency semantics for `session`. The description adds only the paraphrase 'pasted (`text`) or from a file (`path`)' and the multi-ticket note, so baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource (read tickets/acceptance criteria) plus the effect (keep them so the report answers each criterion). It distinguishes itself from scout_criterion by naming it as the follow-up consumer and from the ticket_* siblings by scope ('the person gave this run'). An agent can tell what it does without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Clear operating context: use it on the tickets supplied for this run, with either pasted `text` or a file `path`, and multiple tickets may be passed at once. It routes the next step explicitly ('judge it by with scout_criterion') and draws a boundary ('Touches no browser'). It stops short of naming when to prefer scout_ticket_preview/scout_ticket_file instead, so a 4 rather than a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

scout_ticket_statusRead filed tickets' stateA
Read-onlyIdempotent

List the tickets this project filed (with scout_ticket_file or scenescout export) and whether each is still open in GitHub or Jira, with whether its problem is still open in this project. Reads each tracker at most once every 5 minutes per project; a call sooner answers what the last read found (fresh: false, with when the next read is due). Only a tracker the server's settings point at is read, with the sign-in from its environment. Sends nothing but reads; touches no browser. With no check open in this conversation, pass the site's address so SceneScout finds its folder.

NameRequiredDescriptionDefault
addressNoThe site's address, when no check is open in this conversation

Output Schema

NameRequiredDescription
freshYes
readAtYes
ticketsYes
problemsYes
nextReadAtYes

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations, it discloses the 5-minute-per-project read throttle, the stale-response behavior (fresh: false plus next read due), that only the tracker the server settings point at is read, credential sourcing from the environment, and that it sends nothing and touches no browser. This is exactly the operational context annotations alone cannot convey.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The what and the throttling/freshness caveat are front-loaded, and every sentence carries substantive information. It is dense and the parameter guidance is appended after the behavioral notes, which is slightly less efficient but still well organized.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be spelled out, and the description still covers freshness, caching, tracker selection, and auth. Nothing an agent needs to invoke it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With schema coverage at 100% and a single parameter, the schema already documents address. The description restates the same condition ('when no check is open in this conversation, pass the site's address') without adding format or sourcing detail beyond the schema, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (list) and resource (tickets filed by this project) plus what the return contains: tracker open state and whether the problem is still open. It names the sibling that files tickets (scout_ticket_file / export), so an agent can distinguish reading status from creating tickets.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a clear context for use (checking whether filed tickets/problems are still open) and an explicit conditional for the single parameter: pass the site address when no check is open in this conversation. It does not explicitly contrast with scout_tickets or scout_ticket_preview, so alternatives are only implicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

scout_typeA

Type into a text input/textarea/composer by ref, the way a real user does: if the field already holds content (e.g. an @-mention chip a menu click inserted), the text is APPENDED at the end — preserving that content — and the result reports what was already there (a separating space is added only at a word-to-word boundary). Pass replace=true to clear the field first (correcting a previous entry); an empty textValue always clears. Appending fires input events but not keydown, so keydown-driven triggers (slash/mention menus) will not react to appended text. Use for both valid values and boundary/fuzz values (empty, very long, unicode, script tags). A value typed into a secret field (a password, a one-time code, a card number, a field labelled secret or token) is masked in the result and the log, as is what the field held.

NameRequiredDescriptionDefault
refYesElement ref, e.g. e12
taskNoWhat you are DOING right now, in a few words: the action, not the acceptance criteria. "Filtering the documents register by status", "Filling the deviation form with invalid dates", "Signing in as QA_Team" — NOT "§2.4 filtering narrows the set and the filter is reflected in the URL", which is what you are CHECKING, not what you are doing. Naming the item you are on is fine ("§2.4: filtering the documents register"); keep the rest to what a colleague would see over your shoulder. It stays set until you pass a different one, so a batch costs a few words, not one per call. Required on the tools that act unless a journey or an earlier call already set one.
valueNoAlias for `textValue`.
replaceNoClear the field before typing instead of appending to existing content
sessionNoTarget this session directly instead of the active one — pass it explicitly when dispatching to MULTIPLE sessions in one turn (e.g. two scout_click calls with different `session`), which then run CONCURRENTLY rather than queueing. Omit for single-session sequential use.
objectiveNoOld name for `task` (2.0). Prefer `task`.
textValueNoText to type
pressEnterNoPress Enter after typing

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does so: it discloses append-vs-clear semantics, that appending fires input events but not keydown, that the result reports prior content, the word-boundary space rule, and that secret-field values and prior contents are masked in both result and log. Those are non-obvious side effects an agent could not get from the schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Every sentence carries real information and the default (append) behavior is front-loaded before the replace exception. It is a single dense paragraph, though, and the masking sentence runs long enough that splitting it would aid scanning.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, and the description does cover what the result reports (prior content, masking). It is nearly complete for an 8-parameter mutation tool with no annotations, but is silent on failure modes such as an unresolvable ref or an element that is not an editable field, and never states that refs come from a snapshot.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description adds modest meaning for `replace` ('correcting a previous entry') and an implicit empty-value rule for textValue, but says nothing about `pressEnter`, `task`, `session`, or the `value`/`objective` aliases beyond what the schema already documents.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (type) and resource (text input/textarea/composer) plus the addressing mechanism (by ref), and frames it as 'the way a real user does' to distinguish it from scripted value-setting. An agent can separate this from scout_press, scout_select, and scout_click without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives concrete conditions: append by default to preserve existing content, pass replace=true to correct a prior entry, empty textValue clears, and 'use for both valid values and boundary/fuzz values'. It also warns that keydown-driven slash/mention menus will not react to appended text, which implicitly routes that case elsewhere, but it never names scout_press as the alternative, leaving the agent to infer it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

scout_uploadA

Attach a file to an upload control the way a user does. ref is either a visible (snapshots list these with role file) or the button/label/dropzone that opens the file chooser — the chooser is intercepted and answered, which is how the hidden input behind a styled 'Choose file' control is reached. Omit ref to target the page's only file input, hidden or not (snapshots disclose hidden ones on a FILE INPUTS line). Nothing needs to exist on disk: a small VALID fixture (real PDF/PNG structure) is generated in memory, its kind inferred from the input's accept attribute or chosen with fixture; filePath uploads a real file but must live inside the attached project (fenced like navigation is fenced to the origin), and a credential-shaped one (a dotfile or anything in a hidden folder, .env*, an SSH key, *.pem/*.key/*.p8/*.p12/*.pfx/*.ppk/*.jks/*.keystore/*.asc/*.kdbx, anything under .ssh, .aws, .gnupg, .config, .kube or .docker) is refused unless the operator listed it; name overrides the filename for boundary tests (wrong extension vs accept, very long, unicode). The result names the input, how the file reached it, flags a file that violates accept (a mismatch the app then accepts is a validation finding), warns if the app cleared the input after selection, and says whether a state-changing request fired on selection — if none did, click the form's submit, or check the next snapshot for a client-side rejection.

NameRequiredDescriptionDefault
refNoElement ref of the file input OR of the control that opens the file chooser; omit when the page has exactly one file input
nameNoFilename override (default scenescout-fixture.<kind>, or the disk file's own name)
taskNoWhat you are DOING right now, in a few words: the action, not the acceptance criteria. "Filtering the documents register by status", "Filling the deviation form with invalid dates", "Signing in as QA_Team" — NOT "§2.4 filtering narrows the set and the filter is reflected in the URL", which is what you are CHECKING, not what you are doing. Naming the item you are on is fine ("§2.4: filtering the documents register"); keep the rest to what a colleague would see over your shoulder. It stays set until you pass a different one, so a batch costs a few words, not one per call. Required on the tools that act unless a journey or an earlier call already set one.
fixtureNoGenerated fixture kind; default: inferred from the input's accept attribute (pdf when there is none, or none we can generate)
sessionNoTarget this session directly instead of the active one — pass it explicitly when dispatching to MULTIPLE sessions in one turn (e.g. two scout_click calls with different `session`), which then run CONCURRENTLY rather than queueing. Omit for single-session sequential use.
filePathNoA real file to upload — absolute or relative to the project; must be inside the attached project. Exclusive with fixture.
objectiveNoOld name for `task` (2.0). Prefer `task`.

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does: it discloses that fixtures are generated in memory and are structurally valid, that filePath is fenced to the project, that credential-shaped paths (.env, .ssh, *.pem, etc.) are refused unless the operator listed them, and that it warns on accept mismatches and cleared inputs. It also reports whether a state-changing request fired, which is the key behavioral signal for an upload action.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose is front-loaded in the first sentence and every sentence carries distinct information (targeting, fixture generation, path policy, result reporting). The cost is density: several sentences cram three or four clauses each, so an agent must parse long chains to extract the acceptance-mismatch or credential-refusal rules.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 7-parameter, no-output-schema tool, this covers what an agent needs: how to target, how the file is sourced, what gets refused, and explicitly what the result contains (input named, delivery method, accept violation flag, cleared-input warning, request-fired status). Nothing essential is left to guesswork.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3, but the description adds real semantics beyond the schema: fixture kind inference from the accept attribute (with pdf as the no-accept default), the purpose of `name` for boundary tests, and the exclusivity/fencing rules for filePath. It does not add anything about `task`, `session`, or the deprecated `objective`, which is why it falls short of a 5.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb and resource: 'Attach a file to an upload control the way a user does.' It immediately distinguishes itself from scout_click/scout_attach by explaining that the file chooser is intercepted rather than clicked, so an agent knows this is the file-specific path.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Spells out three concrete targeting modes (visible input ref, chooser-opening control, omit ref for the only input) and their preconditions, plus the fixture vs filePath choice and the fallback ('if none did, click the form's submit, or check the next snapshot for a client-side rejection'). Alternatives are named rather than implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

scout_verifyA

Re-test findings earlier runs left open. With no arguments, returns the open findings in the order to re-test them — worst route first, grouped so a route is walked once — each with its evidence and repro steps. Pass ids to narrow it to specific findings. After re-testing one, call again with id and verdict to record what you saw: "gone" resolves it, "present" stamps it confirmed so the report stops calling it unverified, "changed" keeps it open and says the behaviour differs. Use after a fix wave, or at the start of a run against an app this project has tested before.

NameRequiredDescriptionDefault
idNoThe finding being verified. Omit to get the worklist.
idsNoNarrow the worklist to these finding ids.
noteNoWhat you saw, in a sentence. Shown in the report beside the verdict.
sessionNoTarget this session directly instead of the active one — pass it explicitly when dispatching to MULTIPLE sessions in one turn (e.g. two scout_click calls with different `session`), which then run CONCURRENTLY rather than queueing. Omit for single-session sequential use.
verdictNoWhat the re-test found: "gone", "present" or "changed". Requires id.

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the burden and largely succeeds: it discloses the ordering guarantee (worst route first, grouped so a route is walked once) and the exact state effect of each verdict ('gone' resolves, 'present' stamps confirmed, 'changed' keeps open and says behaviour differs). Gaps remain around idempotency/overwriting an existing verdict and any permission requirements.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action, then the no-argument worklist mode, then the verdict-recording mode. It is dense but every clause (ordering, grouping, evidence/repro, per-verdict semantics) carries information an agent needs; nothing is filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema exists, and the description steps in to say what the worklist returns (findings with evidence and repro steps, in re-test order). For a 5-param read/write hybrid tool this is close to complete; the only shortfall is that the `session` parameter's concurrency semantics are never echoed outside the schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description does add meaning for `verdict` (what each value does to the finding's lifecycle) and for `ids` (narrowing), which is above baseline, but `note` and `session` get no treatment in the description – the session concurrency guidance lives only in the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('re-test findings earlier runs left open') and clearly separates its two modes: fetching the worklist vs. recording a verdict. It does not explicitly name any sibling (e.g. scout_resolve, scout_recheck_plan, scout_finding), so the agent must infer differentiation, but the scope is unmistakable.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives concrete timing guidance: 'after a fix wave, or at the start of a run against an app this project has tested before.' It also explains the ids-narrowing branch. What it lacks is an explicit when-not / named alternative (e.g. when to use scout_resolve instead of recording a verdict here).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 44 tool updatesv3.31.0
    • Changedscout_attach2 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • changedInput schema / properties / open / description
        Previous value: -"Open the live view (on this attach) and/or report.html (when scout_report writes it) in the user's default browser: 'live', 'report', 'both' or 'none'. Default: the SCENESCOUT_OPEN environment variable, else 'both' on a local desktop session (headed or headless) and 'none' in CI, over SSH, or with no display. Pass it only when the user asked for something other than the default."New value: +"Open the live view (on this attach) and/or report.html (when scout_report writes it) in the user's default browser: 'live', 'report', 'both' or 'none'. Default: the SCENESCOUT_OPEN environment variable, else 'both' on a local desktop session (headed or headless) and 'none' in CI, over SSH, or with no display. It can ask for less, never more: what SCENESCOUT_OPEN leaves out stays shut (SCENESCOUT_OPEN=none shuts both), and with SCENESCOUT_OPEN unset CI, SSH or no display shuts both; the result says what was not opened and why. Pass it only when the user asked for something other than the default."
    • Changedscout_back1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedscout_capture1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedscout_cards2 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • removedInput schema / properties / filter / additionalProperties
        Removed value: -false
    • Changedscout_click1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedscout_close1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedscout_coverage1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedscout_crawl1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedscout_criterion1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedscout_design_audit1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedscout_feedback1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedscout_finding1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedscout_guided_confirm1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedscout_guided_plan3 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • changedInput schema / properties / choices / additionalProperties
        Previous value: -trueNew value: +{}
      • addedOutput schema / properties / calls / items / properties / args / propertyNames
        Added value: +{
        +  "type": "string"
        +}
    • Changedscout_hover1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedscout_intake1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedscout_journey1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedscout_lane_brief1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedscout_lane_report1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedscout_login1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedscout_navigate1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedscout_network1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedscout_note1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedscout_press1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedscout_recap2 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedOutput schema / properties / rows / items / additionalItems
        Added value: +false
    • Changedscout_recheck_plan2 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedOutput schema / properties / calls / items / properties / args / propertyNames
        Added value: +{
        +  "type": "string"
        +}
    • Changedscout_report1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedscout_request2 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / headers / propertyNames
        Added value: +{
        +  "type": "string"
        +}
    • Changedscout_resolve1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedscout_run_plan2 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • removedInput schema / properties / steps / items / additionalProperties
        Removed value: -false
    • Changedscout_saved_checks7 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedOutput schema / properties / plan / properties / calls / items / properties / args / propertyNames
        Added value: +{
        +  "type": "string"
        +}
      • removedOutput schema / properties / plan / properties / choices / $ref
        Removed value: -"#/properties/saved/items/properties/choices"
      • addedOutput schema / properties / plan / properties / choices / additionalProperties
        Added value: +false
      • addedOutput schema / properties / plan / properties / choices / properties
        Added value: +{
        +  "address": {
        +    "type": "string"
        +  },
        +  "areas": {
        +    "items": {
        +      "enum": [
        +        "sign-in",
        +        "forms",
        +        "broken-pages",
        +        "phone",
        +        "journey",
        +        "tickets"
        +      ],
        +      "type": "string"
        +    },
        +    "type": "array"
        +  },
        +  "care": {
        +    "enum": [
        +      "look-only",
        +      "may-submit-forms",
        +      "may-create-test-data"
        +    ],
        +    "type": "string"
        +  },
        +  "journey": {
        +    "type": "string"
        +  },
        +  "signIn": {
        +    "enum": [
        +      "none",
        +      "sso",
        +      "password",
        +      "one-time-code"
        +    ],
        +    "type": "string"
        +  },
        +  "thoroughness": {
        +    "enum": [
        +      "quick",
        +      "normal",
        +      "thorough"
        +    ],
        +    "type": "string"
        +  },
        +  "tickets": {
        +    "items": {
        +      "type": "string"
        +    },
        +    "type": "array"
        +  }
        +}
      • addedOutput schema / properties / plan / properties / choices / required
        Added value: +[
        +  "address",
        +  "areas",
        +  "signIn",
        +  "care",
        +  "thoroughness"
        +]
      • addedOutput schema / properties / plan / properties / choices / type
        Added value: +"object"
    • Changedscout_scan1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedscout_screenshot1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedscout_scroll1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedscout_select1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedscout_session1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedscout_snapshot1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedscout_ticket_file1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedscout_ticket_preview13 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • removedOutput schema / properties / alreadyFiled / items / properties / id / $ref
        Removed value: -"#/properties/toFile/items/properties/id"
      • addedOutput schema / properties / alreadyFiled / items / properties / id / type
        Added value: +"string"
      • removedOutput schema / properties / alreadyFiled / items / properties / severity / $ref
        Removed value: -"#/properties/toFile/items/properties/severity"
      • addedOutput schema / properties / alreadyFiled / items / properties / severity / enum
        Added value: +[
        +  "high",
        +  "medium",
        +  "low"
        +]
      • addedOutput schema / properties / alreadyFiled / items / properties / severity / type
        Added value: +"string"
      • removedOutput schema / properties / alreadyFiled / items / properties / title / $ref
        Removed value: -"#/properties/toFile/items/properties/title"
      • addedOutput schema / properties / alreadyFiled / items / properties / title / type
        Added value: +"string"
      • removedOutput schema / properties / later / items / $ref
        Removed value: -"#/properties/toFile/items"
      • addedOutput schema / properties / later / items / additionalProperties
        Added value: +false
      • addedOutput schema / properties / later / items / properties
        Added value: +{
        +  "id": {
        +    "type": "string"
        +  },
        +  "severity": {
        +    "enum": [
        +      "high",
        +      "medium",
        +      "low"
        +    ],
        +    "type": "string"
        +  },
        +  "title": {
        +    "type": "string"
        +  }
        +}
      • addedOutput schema / properties / later / items / required
        Added value: +[
        +  "id",
        +  "severity",
        +  "title"
        +]
      • addedOutput schema / properties / later / items / type
        Added value: +"object"
    • Changedscout_ticket_status1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedscout_tickets1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedscout_type1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedscout_upload1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
    • Changedscout_verify1 field changed
      • removedInput schema / additionalProperties
        Removed value: -false
  2. 8 tool updatesv3.28.0
    • Changedscout_guided_plan2 fields changed
      • changedOutput schema / properties / calls / items / properties / tool / enum
        Previous value: -[
        -  "scout_login",
        -  "scout_attach",
        -  "scout_tickets",
        -  "scout_session"
        -]New value: +[
        +  "scout_login",
        +  "scout_attach",
        +  "scout_tickets",
        +  "scout_session",
        +  "scout_verify"
        +]
      • addedOutput schema / properties / recheck
        Added value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "foundIn": {
        +      "enum": [
        +        "look-only",
        +        "may-submit-forms",
        +        "may-create-test-data"
        +      ],
        +      "type": "string"
        +    },
        +    "ids": {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "leftOut": {
        +      "items": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "care": {
        +            "enum": [
        +              "look-only",
        +              "may-submit-forms",
        +              "may-create-test-data"
        +            ],
        +            "type": "string"
        +          },
        +          "id": {
        +            "type": "string"
        +          },
        +          "title": {
        +            "type": "string"
        +          },
        +          "why": {
        +            "enum": [
        +              "looser-care",
        +              "other-site"
        +            ],
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "id",
        +          "title",
        +          "why",
        +          "care"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    }
        +  },
        +  "required": [
        +    "ids",
        +    "foundIn",
        +    "leftOut"
        +  ],
        +  "type": "object"
        +}
    • Addedscout_recap
    • Addedscout_recheck_plan
    • Changedscout_report1 field changed
      • changedInput schema / properties / report / description
        Previous value: -"Which parts the report carries. 'both' (default): a plain-language section first — a short summary, then each problem with numbered steps, what was expected, what happened, its picture and its impact (blocks users, annoying, cosmetic), each with its technical detail folded beneath — followed by the technical report. 'qa': the plain section alone, for a tester or anyone not technical. 'dev': the technical report alone, as before the plain section existed. It applies to the files this call writes; the live view always shows both."New value: +"Which parts the report carries. 'both' (default): the Summary first — what was checked, when, for how long and how carefully, what was found, the problems as a table with their impact (blocks users, annoying, cosmetic), then each problem folded with its numbered steps, what was expected and what happened — then the Evidence (each problem's picture and the frames recorded before it, only when there is one), then the technical details, folded. 'qa': the Summary and the Evidence alone, for a tester or anyone not technical. 'dev': the technical report alone, unfolded. report.html adds the steps every session took, folded, whichever is chosen. It applies to the files this call writes; the live view always shows both."
    • Addedscout_saved_checks
    • Addedscout_ticket_file
    • Addedscout_ticket_preview
    • Addedscout_ticket_status
  3. 10 tool updatesv3.25.0
    • Changedscout_attach5 fields changed
      • changedInput schema / properties / dedup / description
        Previous value: -"How this run tells a filed finding from one already recorded. Default: the SCENESCOUT_DEDUP environment variable, else 'rule', the store's rule alone. 'judge': the rule first, then, for a filing the rule keeps apart from everything recorded, a model is asked whether it is one of the open findings on its page, and merges it when it says so. It needs ANTHROPIC_API_KEY or OPENAI_API_KEY in the server's environment, and sends each pair's titles, categories and evidence, and the page's path, to that provider — ONLY when the user asked for it. Applies to every session of the project until the run ends."New value: +"How this run tells a filed finding from one already recorded. Default: the SCENESCOUT_DEDUP environment variable, else 'rule', the store's rule alone. 'judge': the rule first, then, for a filing the rule keeps apart from everything recorded, a model is asked whether it is one of the open findings on its page, and merges it when it says so. It sends each pair's titles, categories and evidence, and the page's path, to a model provider, so this argument alone does not switch it on: the person running the server does, with SCENESCOUT_DEDUP=judge and ANTHROPIC_API_KEY or OPENAI_API_KEY in the server's environment. Applies to every session of the project until the run ends."
      • removedInput schema / properties / mode / default
        Removed value: -"read-only"
      • changedInput schema / properties / mode / description
        Previous value: -"Write policy (see tool description). Never choose 'destructive' yourself — user opt-in only."New value: +"Write policy (see tool description). Default 'read-only', or the SceneScout config's maxMode when that is stricter; a mode above the config's maxMode is refused. Never choose 'destructive' yourself — user opt-in only."
      • addedInput schema / properties / planId
        Added value: +{
        +  "description": "The guided plan this attach carries out, as its scout_attach call lists it. Once any guided plan is built in this server, an attach above 'observe' without an accepted plan's id is refused, and so is one above the plan's mode or on another site than the plan's, and any attach passing readPosts or trustedEmbeds. A plan's confirmation covers one check: once no session carries the plan, it must be confirmed again. Never leave it out to get round a plan's confirmation.",
        +  "maxLength": 20,
        +  "type": "string"
        +}
      • changedInput schema / properties / readPosts / description
        Previous value: -"POST endpoints that only read, e.g. [\"POST /api/search\", \"POST https://api.example.com/reports/query\"], which observe mode then lets out — ONLY when the user named them. Never add one yourself, even when the gap ledger lists a refused POST: ask the user. Exact paths; * stands for one path segment. Still refused when the path or body looks destructive or the body is a GraphQL mutation. Observe mode only. Default: the SCENESCOUT_READ_POSTS environment variable, else none."New value: +"POST endpoints that only read, e.g. [\"POST /api/search\", \"POST https://api.example.com/reports/query\"], which observe mode then lets out — ONLY when the user named them. Never add one yourself, even when the gap ledger lists a refused POST: ask the user. Exact paths; * stands for one path segment. Still refused when the path or body looks destructive or the body is a GraphQL mutation. Observe mode only. Default: the SCENESCOUT_READ_POSTS environment variable, else none; while a guided plan is open in this server, none, and the variable is not read."
    • Addedscout_cards
    • Addedscout_feedback
    • Addedscout_guided_confirm
    • Addedscout_guided_plan
    • Changedscout_lane_brief2 fields changed
      • addedInput schema / properties / fromRun
        Added value: +{
        +  "description": "Start from an earlier run's record: a ci.json, or a project directory (relative to this project). With fromRunMode continue, the lanes take the routes it never worked on first, then the ones it left work on with what to do first, then the rest; with replay, one lane per session it had, following its routes and steps in order. Default SCENESCOUT_FROM_RUN, else none (the stable split).",
        +  "maxLength": 1024,
        +  "type": "string"
        +}
      • addedInput schema / properties / fromRunMode
        Added value: +{
        +  "description": "With fromRun: continue (default) or replay. Default SCENESCOUT_FROM_RUN_MODE, else continue.",
        +  "enum": [
        +    "continue",
        +    "replay"
        +  ],
        +  "type": "string"
        +}
    • Changedscout_request1 field changed
      • changedInput schema / properties / headers / description
        Previous value: -"Extra headers. One given here wins over the app's own, which is how a session tests a different or absent credential."New value: +"Extra headers. One given here wins over the app's own, which is how a session tests a different or absent credential. A method override (X-HTTP-Method-Override, X-HTTP-Method, X-Method-Override, or _method in the path's query or the body) is judged by the write policy as the method it names."
    • Changedscout_session1 field changed
      • addedInput schema / properties / area
        Added value: +{
        +  "description": "In a guided check: the area this session is working on now, one of its plan's areas, shown to the person following the check. With `name`, that session (the default session is left as it is); without, the default one. Set it as each area starts.",
        +  "enum": [
        +    "sign-in",
        +    "forms",
        +    "broken-pages",
        +    "phone",
        +    "journey",
        +    "tickets"
        +  ],
        +  "type": "string"
        +}
    • Addedscout_team_report
    • Changedscout_tickets1 field changed
      • changedInput schema / properties / path / description
        Previous value: -"A ticket file to read (.md, .markdown, .txt, .text, .feature), absolute or relative to the project folder. Pass this or `text`."New value: +"A ticket file to read (.md, .markdown, .txt, .text, .feature), absolute or relative to the project folder, and inside it unless the server's SCENESCOUT_TICKET_DIRS names the folder it is in. Pass this or `text`."
  4. 1 tool updatev3.18.0
    • Addedscout_intake
  5. 17 tool updatesv3.17.0
    • Changedscout_attach9 fields changed
      • changedInput schema / properties / browser / description
        Previous value: -"Browser to drive. Default: the SCENESCOUT_BROWSER environment variable, else chromium. firefox and webkit must be downloaded first (scenescout install --browser-only --browsers firefox). Use them for a cross-browser pass; stay on chromium otherwise."New value: +"Browser to drive. Default: the SCENESCOUT_BROWSER environment variable, else chromium. A build that is not on disk is downloaded on this attach, once, except in CI or with SCENESCOUT_BROWSER_DOWNLOAD=off, where the attach names the command to run. Use firefox or webkit for a cross-browser pass; stay on chromium otherwise."
      • addedInput schema / properties / dedup
        Added value: +{
        +  "description": "How this run tells a filed finding from one already recorded. Default: the SCENESCOUT_DEDUP environment variable, else 'rule', the store's rule alone. 'judge': the rule first, then, for a filing the rule keeps apart from everything recorded, a model is asked whether it is one of the open findings on its page, and merges it when it says so. It needs ANTHROPIC_API_KEY or OPENAI_API_KEY in the server's environment, and sends each pair's titles, categories and evidence, and the page's path, to that provider — ONLY when the user asked for it. Applies to every session of the project until the run ends.",
        +  "enum": [
        +    "rule",
        +    "judge"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / evidence
        Added value: +{
        +  "description": "What happens to the picture each scout_finding takes of what it is about. 'inline': kept under .scenescout/recordings/, shown in report.html, and returned in the scout_finding result so the conversation shows it. 'file': kept and shown in the report only. 'off': none taken. Default: the SCENESCOUT_EVIDENCE environment variable, else 'inline', or 'file' in a CI job. Pictures are bounded in size and in how many one session returns (see the configuration reference).",
        +  "enum": [
        +    "inline",
        +    "file",
        +    "off"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / open
        Added value: +{
        +  "description": "Open the live view (on this attach) and/or report.html (when scout_report writes it) in the user's default browser: 'live', 'report', 'both' or 'none'. Default: the SCENESCOUT_OPEN environment variable, else 'both' on a local desktop session (headed or headless) and 'none' in CI, over SSH, or with no display. Pass it only when the user asked for something other than the default.",
        +  "enum": [
        +    "live",
        +    "report",
        +    "both",
        +    "none"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / projectPath / description
        Previous value: -"Absolute path to the project (memory + report live in .scenescout/ here)"New value: +"Absolute path to the project (memory + report live in .scenescout/ here). Pass it whenever you have a project or working folder. Omitted: the client's workspace folder, else a folder per tested site under the user's documents folder (Documents/SceneScout/<host>/, or SCENESCOUT_PROJECTS_DIR), which the result names — tell the user where it is."
      • addedInput schema / properties / readPosts
        Added value: +{
        +  "description": "POST endpoints that only read, e.g. [\"POST /api/search\", \"POST https://api.example.com/reports/query\"], which observe mode then lets out — ONLY when the user named them. Never add one yourself, even when the gap ledger lists a refused POST: ask the user. Exact paths; * stands for one path segment. Still refused when the path or body looks destructive or the body is a GraphQL mutation. Observe mode only. Default: the SCENESCOUT_READ_POSTS environment variable, else none.",
        +  "items": {
        +    "maxLength": 300,
        +    "type": "string"
        +  },
        +  "maxItems": 20,
        +  "type": "array"
        +}
      • removedInput schema / properties / record / default
        Removed value: -false
      • changedInput schema / properties / record / description
        Previous value: -"Keep a frame of the page after every action, under .scenescout/recordings/, and show it beside that step in report.html. Off by default: a recording is pictures of the app under test sitting in the project folder. Turn it on for QA work, where the run is evidence and not only a report."New value: +"Keep a frame of the page after every action, under .scenescout/recordings/, and show it beside that step in report.html. Default: the SCENESCOUT_RECORD environment variable (on or off), else off: a recording is pictures of the app under test sitting in the project folder. Turn it on for QA work, where the run is evidence and not only a report."
      • changedInput schema / required
        Previous value: -[
        -  "url",
        -  "projectPath"
        -]New value: +[
        +  "url"
        +]
    • Changedscout_back1 field changed
      • addedInput schema / properties / leave
        Added value: +{
        +  "description": "How to answer if the page asks to confirm leaving (a beforeunload prompt over unsent input): true leaves and discards that input, false stays. Omitted, observe and read-only stay and other modes leave. The result says when the page asked.",
        +  "type": "boolean"
        +}
    • Changedscout_click1 field changed
      • addedInput schema / properties / leave
        Added value: +{
        +  "description": "How to answer if the page asks to confirm leaving (a beforeunload prompt over unsent input): true leaves and discards that input, false stays. Omitted, observe and read-only stay and other modes leave. The result says when the page asked.",
        +  "type": "boolean"
        +}
    • Changedscout_coverage1 field changed
      • addedInput schema / properties / scope
        Added value: +{
        +  "description": "'session': only the routes this session reached this run and the forms it saw. 'project': every route in the memory, across runs and sessions. Default: 'session' when other sessions share this project, else 'project'.",
        +  "enum": [
        +    "session",
        +    "project"
        +  ],
        +  "type": "string"
        +}
    • Changedscout_crawl1 field changed
      • changedInput schema / properties / paths / description
        Previous value: -"Paths to visit, e.g. ['/orders','/settings']. Omit to crawl all unvisited known routes."New value: +"Paths to visit, e.g. ['/orders','/settings'], or full URLs on the attached origin. A path resolves from the origin's root, whatever page the session attached on. Omit to crawl all unvisited known routes."
    • Addedscout_criterion
    • Changedscout_finding1 field changed
      • addedInput schema / properties / ref
        Added value: +{
        +  "description": "The ref, from the latest scout_snapshot, of the element the finding is about. Its picture (the element plus a margin) is kept with the finding and shown in report.html. Omit it and the picture is the viewport.",
        +  "maxLength": 20,
        +  "type": "string"
        +}
    • Addedscout_login
    • Changedscout_navigate1 field changed
      • addedInput schema / properties / leave
        Added value: +{
        +  "description": "How to answer if the page asks to confirm leaving (a beforeunload prompt over unsent input): true leaves and discards that input, false stays. Omitted, observe and read-only stay and other modes leave. The result says when the page asked.",
        +  "type": "boolean"
        +}
    • Addedscout_network
    • Changedscout_report1 field changed
      • addedInput schema / properties / report
        Added value: +{
        +  "default": "both",
        +  "description": "Which parts the report carries. 'both' (default): a plain-language section first — a short summary, then each problem with numbered steps, what was expected, what happened, its picture and its impact (blocks users, annoying, cosmetic), each with its technical detail folded beneath — followed by the technical report. 'qa': the plain section alone, for a tester or anyone not technical. 'dev': the technical report alone, as before the plain section existed. It applies to the files this call writes; the live view always shows both.",
        +  "enum": [
        +    "both",
        +    "qa",
        +    "dev"
        +  ],
        +  "type": "string"
        +}
    • Changedscout_request3 fields changed
      • addedInput schema / properties / limit
        Added value: +{
        +  "description": "How many characters to return with offset or select. Default 2000, or 8000 for a select with no offset.",
        +  "maximum": 8000,
        +  "minimum": 1,
        +  "type": "integer"
        +}
      • addedInput schema / properties / offset
        Added value: +{
        +  "description": "Return the body (or the selected value) from this character on. The body is cut at 2000 characters by default; the result names the next offset.",
        +  "maximum": 1000000,
        +  "minimum": 0,
        +  "type": "integer"
        +}
      • addedInput schema / properties / select
        Added value: +{
        +  "description": "Return one value of a JSON response body by its dotted path, e.g. \"stats.open\" or \"items.0.name\", pretty-printed and up to 8000 characters. A path that is not there says which keys are.",
        +  "maxLength": 500,
        +  "type": "string"
        +}
    • Changedscout_run_plan1 field changed
      • addedInput schema / properties / onViolation
        Added value: +{
        +  "default": "stop",
        +  "description": "stop (default): end the plan at the first new oracle violation, right for a form flow whose steps depend on each other. continue: list a new http_error or console_error on its step's line and run the next step, for a sweep of independent steps",
        +  "enum": [
        +    "stop",
        +    "continue"
        +  ],
        +  "type": "string"
        +}
    • Changedscout_select1 field changed
      • changedInput schema / properties / value / description
        Previous value: -"Option value or label"New value: +"Option value or label (or the start of a label, when only one option has it)"
    • Addedscout_status
    • Addedscout_status_poll
    • Addedscout_tickets
  6. 4 tool updatesv3.14.1
    • Changedscout_attach4 fields changed
      • addedInput schema / properties / actionTimeoutMs
        Added value: +{
        +  "description": "How long one click, keystroke, hover or pick may take, in ms. Default: the SCENESCOUT_ACTION_TIMEOUT_MS environment variable, else 5000. Raise it only when timeouts come from a loaded machine rather than the app.",
        +  "maximum": 120000,
        +  "minimum": 1000,
        +  "type": "integer"
        +}
      • addedInput schema / properties / navTimeoutMs
        Added value: +{
        +  "description": "How long a page may take to load, in ms. Default: the SCENESCOUT_NAV_TIMEOUT_MS environment variable, else 20000 (crawled pages 15000; a value set here applies to them too). Raise it only when timeouts come from a loaded machine rather than the app.",
        +  "maximum": 300000,
        +  "minimum": 1000,
        +  "type": "integer"
        +}
      • addedInput schema / properties / role
        Added value: +{
        +  "description": "Sign in as a role whose login was saved with `scenescout login <url> --role <name>` (kept in the project's .scenescout/auth/). Every session given the same role gets its own browser built from that one login. Not with storageStatePath. No saved login for the role: the attach is refused and names the command to run — ask the user to run it, since it opens a window for them to sign in.",
        +  "maxLength": 40,
        +  "type": "string"
        +}
      • changedInput schema / properties / storageStatePath / description
        Previous value: -"Optional Playwright storage-state JSON path for authenticated exploration"New value: +"Optional Playwright storage-state JSON path for authenticated exploration. Not with `role`."
    • Addedscout_capture
    • Changedscout_finding1 field changed
      • addedInput schema / properties / convention
        Added value: +{
        +  "description": "Only for a WORTH-A-LOOK finding: the observation is real, and it is a defect only under a convention of this project you cannot see. Name that convention, e.g. 'a 4px spacing scale' or 'test ids on every control'. The report lists it under \"Worth a look\", apart from the defects, and does not count it as one. Not for \"I could not tell\": leave that unfiled or look closer. Omit for a defect.",
        +  "maxLength": 160,
        +  "minLength": 1,
        +  "type": "string"
        +}
    • Changedscout_lane_brief2 fields changed
      • addedInput schema / properties / expiryMarginMinutes
        Added value: +{
        +  "description": "How long past the run a saved role's login must still last, in minutes (default 10).",
        +  "maximum": 240,
        +  "minimum": 0,
        +  "type": "integer"
        +}
      • addedInput schema / properties / runMinutes
        Added value: +{
        +  "description": "How long the lanes will run, in minutes (default 60). When they attach by a saved role, the brief is refused if that login will not last this long plus the margin.",
        +  "maximum": 1440,
        +  "minimum": 1,
        +  "type": "integer"
        +}
  7. 1 tool updatev3.11.1
    • Changedscout_run_plan1 field changed
      • changedInput schema / properties / steps / items / properties / target / description
        Previous value: -"testid=…, text=…, label=… (or a path for navigate; 'top'/'bottom'/±px for scroll; for upload: the file input or the control that opens its chooser)"New value: +"testid=…, text=…, label=…, role=<role>[name=\"…\"] (or a path for navigate; 'top'/'bottom'/±px for scroll; for upload: the file input or the control that opens its chooser)"
  8. 1 tool updatev3.10.0
    • Changedscout_close1 field changed
      • addedInput schema / properties / force
        Added value: +{
        +  "default": false,
        +  "description": "Close even a lane whose report has not been folded yet. Its decisions are then lost: nothing is kept for calibration and nothing checks its defects were filed. Prefer folding it with scout_lane_report first.",
        +  "type": "boolean"
        +}
  9. 1 tool updatev3.9.0
    • Changedscout_attach1 field changed
      • addedInput schema / properties / trustedEmbeds
        Added value: +{
        +  "description": "Origins of embedded frames (e.g. \"https://pay.example.com\") whose writes out of the app may go out — ONLY when the user named them, typically a provider in test mode, and only in safe-write mode. Never add one yourself. Hostile input, repeated-click probes and uploads stay refused in them.",
        +  "items": {
        +    "maxLength": 200,
        +    "type": "string"
        +  },
        +  "maxItems": 10,
        +  "type": "array"
        +}
  10. 16 tool updatesv3.4.0
    • Changedscout_attach4 fields changed
      • addedInput schema / properties / objective
        Added value: +{
        +  "description": "This session's objective: the whole remit you were given, in one sentence (\"Admin lane: §2 registers, §7 plan gating\", \"Approve and reject orders as a manager\"). It sits above the task, which is what the session is doing at any moment. Shown to whoever is watching the run; worth setting whenever more than one session is live.",
        +  "maxLength": 300,
        +  "type": "string"
        +}
      • addedInput schema / properties / paceMs
        Added value: +{
        +  "description": "A floor between actions, in milliseconds, for when a person is watching and needs to keep up — following a flow, taking notes, demonstrating. Default 0: as fast as the page allows, which is what a run wants otherwise. Changeable mid-run with scout_session {paceMs}.",
        +  "maximum": 60000,
        +  "minimum": 0,
        +  "type": "integer"
        +}
      • addedInput schema / properties / record
        Added value: +{
        +  "default": false,
        +  "description": "Keep a frame of the page after every action, under .scenescout/recordings/, and show it beside that step in report.html. Off by default: a recording is pictures of the app under test sitting in the project folder. Turn it on for QA work, where the run is evidence and not only a report.",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / task
        Added value: +{
        +  "description": "What this session is doing right now, shown under its objective from the moment it appears, e.g. Signing in and taking stock. Passed alone it is read as the 2.0 spelling of `objective`. Defaults to a placeholder so a fresh card never reads as idle.",
        +  "maxLength": 300,
        +  "type": "string"
        +}
    • Changedscout_back2 fields changed
      • addedInput schema / properties / objective
        Added value: +{
        +  "description": "Old name for `task` (2.0). Prefer `task`.",
        +  "maxLength": 120,
        +  "type": "string"
        +}
      • addedInput schema / properties / task
        Added value: +{
        +  "description": "What you are DOING right now, in a few words: the action, not the acceptance criteria. \"Filtering the documents register by status\", \"Filling the deviation form with invalid dates\", \"Signing in as QA_Team\" — NOT \"§2.4 filtering narrows the set and the filter is reflected in the URL\", which is what you are CHECKING, not what you are doing. Naming the item you are on is fine (\"§2.4: filtering the documents register\"); keep the rest to what a colleague would see over your shoulder. It stays set until you pass a different one, so a batch costs a few words, not one per call. Required on the tools that act unless a journey or an earlier call already set one.",
        +  "maxLength": 120,
        +  "type": "string"
        +}
    • Changedscout_click2 fields changed
      • addedInput schema / properties / objective
        Added value: +{
        +  "description": "Old name for `task` (2.0). Prefer `task`.",
        +  "maxLength": 120,
        +  "type": "string"
        +}
      • addedInput schema / properties / task
        Added value: +{
        +  "description": "What you are DOING right now, in a few words: the action, not the acceptance criteria. \"Filtering the documents register by status\", \"Filling the deviation form with invalid dates\", \"Signing in as QA_Team\" — NOT \"§2.4 filtering narrows the set and the filter is reflected in the URL\", which is what you are CHECKING, not what you are doing. Naming the item you are on is fine (\"§2.4: filtering the documents register\"); keep the rest to what a colleague would see over your shoulder. It stays set until you pass a different one, so a batch costs a few words, not one per call. Required on the tools that act unless a journey or an earlier call already set one.",
        +  "maxLength": 120,
        +  "type": "string"
        +}
    • Addedscout_lane_brief
    • Addedscout_lane_report
    • Changedscout_navigate2 fields changed
      • addedInput schema / properties / objective
        Added value: +{
        +  "description": "Old name for `task` (2.0). Prefer `task`.",
        +  "maxLength": 120,
        +  "type": "string"
        +}
      • addedInput schema / properties / task
        Added value: +{
        +  "description": "What you are DOING right now, in a few words: the action, not the acceptance criteria. \"Filtering the documents register by status\", \"Filling the deviation form with invalid dates\", \"Signing in as QA_Team\" — NOT \"§2.4 filtering narrows the set and the filter is reflected in the URL\", which is what you are CHECKING, not what you are doing. Naming the item you are on is fine (\"§2.4: filtering the documents register\"); keep the rest to what a colleague would see over your shoulder. It stays set until you pass a different one, so a batch costs a few words, not one per call. Required on the tools that act unless a journey or an earlier call already set one.",
        +  "maxLength": 120,
        +  "type": "string"
        +}
    • Changedscout_note1 field changed
      • changedInput schema / properties / section / enum
        Previous value: -[
        -  "app-model",
        -  "roles",
        -  "conventions",
        -  "constraints",
        -  "risks",
        -  "glossary"
        -]New value: +[
        +  "app-model",
        +  "roles",
        +  "conventions",
        +  "constraints",
        +  "risks",
        +  "glossary",
        +  "setup"
        +]
    • Changedscout_press2 fields changed
      • addedInput schema / properties / objective
        Added value: +{
        +  "description": "Old name for `task` (2.0). Prefer `task`.",
        +  "maxLength": 120,
        +  "type": "string"
        +}
      • addedInput schema / properties / task
        Added value: +{
        +  "description": "What you are DOING right now, in a few words: the action, not the acceptance criteria. \"Filtering the documents register by status\", \"Filling the deviation form with invalid dates\", \"Signing in as QA_Team\" — NOT \"§2.4 filtering narrows the set and the filter is reflected in the URL\", which is what you are CHECKING, not what you are doing. Naming the item you are on is fine (\"§2.4: filtering the documents register\"); keep the rest to what a colleague would see over your shoulder. It stays set until you pass a different one, so a batch costs a few words, not one per call. Required on the tools that act unless a journey or an earlier call already set one.",
        +  "maxLength": 120,
        +  "type": "string"
        +}
    • Changedscout_report1 field changed
      • addedInput schema / properties / history
        Added value: +{
        +  "default": "index",
        +  "description": "How much of the history to print. 'index' lists findings from earlier runs, and resolved ones, as a row each: id, severity, age, title. 'full' prints every one in full as before — on one project that was 1.75 MB against 113 KB, nearly half of it findings already fixed. Use 'full' when handing the document to someone who has no access to the memory.",
        +  "enum": [
        +    "index",
        +    "full"
        +  ],
        +  "type": "string"
        +}
    • Addedscout_request
    • Changedscout_run_plan2 fields changed
      • addedInput schema / properties / objective
        Added value: +{
        +  "description": "Old name for `task` (2.0). Prefer `task`.",
        +  "maxLength": 120,
        +  "type": "string"
        +}
      • addedInput schema / properties / task
        Added value: +{
        +  "description": "What you are DOING right now, in a few words: the action, not the acceptance criteria. \"Filtering the documents register by status\", \"Filling the deviation form with invalid dates\", \"Signing in as QA_Team\" — NOT \"§2.4 filtering narrows the set and the filter is reflected in the URL\", which is what you are CHECKING, not what you are doing. Naming the item you are on is fine (\"§2.4: filtering the documents register\"); keep the rest to what a colleague would see over your shoulder. It stays set until you pass a different one, so a batch costs a few words, not one per call. Required on the tools that act unless a journey or an earlier call already set one.",
        +  "maxLength": 120,
        +  "type": "string"
        +}
    • Changedscout_select2 fields changed
      • addedInput schema / properties / objective
        Added value: +{
        +  "description": "Old name for `task` (2.0). Prefer `task`.",
        +  "maxLength": 120,
        +  "type": "string"
        +}
      • addedInput schema / properties / task
        Added value: +{
        +  "description": "What you are DOING right now, in a few words: the action, not the acceptance criteria. \"Filtering the documents register by status\", \"Filling the deviation form with invalid dates\", \"Signing in as QA_Team\" — NOT \"§2.4 filtering narrows the set and the filter is reflected in the URL\", which is what you are CHECKING, not what you are doing. Naming the item you are on is fine (\"§2.4: filtering the documents register\"); keep the rest to what a colleague would see over your shoulder. It stays set until you pass a different one, so a batch costs a few words, not one per call. Required on the tools that act unless a journey or an earlier call already set one.",
        +  "maxLength": 120,
        +  "type": "string"
        +}
    • Changedscout_session1 field changed
      • addedInput schema / properties / paceMs
        Added value: +{
        +  "description": "Change how fast this session acts, mid-run: a floor between actions in milliseconds, for when a person is watching and needs to keep up. 0 restores full speed. With `name`, applies to that session; without, to every live session — which is what 'slow everything down so I can follow' means.",
        +  "maximum": 60000,
        +  "minimum": 0,
        +  "type": "integer"
        +}
    • Changedscout_type2 fields changed
      • addedInput schema / properties / objective
        Added value: +{
        +  "description": "Old name for `task` (2.0). Prefer `task`.",
        +  "maxLength": 120,
        +  "type": "string"
        +}
      • addedInput schema / properties / task
        Added value: +{
        +  "description": "What you are DOING right now, in a few words: the action, not the acceptance criteria. \"Filtering the documents register by status\", \"Filling the deviation form with invalid dates\", \"Signing in as QA_Team\" — NOT \"§2.4 filtering narrows the set and the filter is reflected in the URL\", which is what you are CHECKING, not what you are doing. Naming the item you are on is fine (\"§2.4: filtering the documents register\"); keep the rest to what a colleague would see over your shoulder. It stays set until you pass a different one, so a batch costs a few words, not one per call. Required on the tools that act unless a journey or an earlier call already set one.",
        +  "maxLength": 120,
        +  "type": "string"
        +}
    • Changedscout_upload2 fields changed
      • addedInput schema / properties / objective
        Added value: +{
        +  "description": "Old name for `task` (2.0). Prefer `task`.",
        +  "maxLength": 120,
        +  "type": "string"
        +}
      • addedInput schema / properties / task
        Added value: +{
        +  "description": "What you are DOING right now, in a few words: the action, not the acceptance criteria. \"Filtering the documents register by status\", \"Filling the deviation form with invalid dates\", \"Signing in as QA_Team\" — NOT \"§2.4 filtering narrows the set and the filter is reflected in the URL\", which is what you are CHECKING, not what you are doing. Naming the item you are on is fine (\"§2.4: filtering the documents register\"); keep the rest to what a colleague would see over your shoulder. It stays set until you pass a different one, so a batch costs a few words, not one per call. Required on the tools that act unless a journey or an earlier call already set one.",
        +  "maxLength": 120,
        +  "type": "string"
        +}
    • Addedscout_verify
  11. 2 tool updatesv1.2.0
    • Changedscout_attach1 field changed
      • addedInput schema / properties / browser
        Added value: +{
        +  "description": "Browser to drive. Default: the SCENESCOUT_BROWSER environment variable, else chromium. firefox and webkit must be downloaded first (scenescout install --browser-only --browsers firefox). Use them for a cross-browser pass; stay on chromium otherwise.",
        +  "enum": [
        +    "chromium",
        +    "firefox",
        +    "webkit"
        +  ],
        +  "type": "string"
        +}
    • Addedscout_playbook
  12. 48 tool updatesv1.1.0
    • Removedft_attach
    • Removedft_back
    • Removedft_click
    • Removedft_close
    • Removedft_coverage
    • Removedft_crawl
    • Removedft_design_audit
    • Removedft_finding
    • Removedft_hover
    • Removedft_journey
    • Removedft_navigate
    • Removedft_note
    • Removedft_press
    • Removedft_report
    • Removedft_resolve
    • Removedft_run_plan
    • Removedft_scan
    • Removedft_screenshot
    • Removedft_scroll
    • Removedft_select
    • Removedft_session
    • Removedft_snapshot
    • Removedft_type
    • Removedft_upload
    • Addedscout_attach
    • Addedscout_back
    • Addedscout_click
    • Addedscout_close
    • Addedscout_coverage
    • Addedscout_crawl
    • Addedscout_design_audit
    • Addedscout_finding
    • Addedscout_hover
    • Addedscout_journey
    • Addedscout_navigate
    • Addedscout_note
    • Addedscout_press
    • Addedscout_report
    • Addedscout_resolve
    • Addedscout_run_plan
    • Addedscout_scan
    • Addedscout_screenshot
    • Addedscout_scroll
    • Addedscout_select
    • Addedscout_session
    • Addedscout_snapshot
    • Addedscout_type
    • Addedscout_upload
  13. 24 tool updatesv0.23.3
    • First observedft_attach
    • First observedft_back
    • First observedft_click
    • First observedft_close
    • First observedft_coverage
    • First observedft_crawl
    • First observedft_design_audit
    • First observedft_finding
    • First observedft_hover
    • First observedft_journey
    • First observedft_navigate
    • First observedft_note
    • First observedft_press
    • First observedft_report
    • First observedft_resolve
    • First observedft_run_plan
    • First observedft_scan
    • First observedft_screenshot
    • First observedft_scroll
    • First observedft_select
    • First observedft_session
    • First observedft_snapshot
    • First observedft_type
    • First observedft_upload

TDQS

A3.6/5.0

Scored across 48 tools

Disambiguation3/5

Core interaction tools (click, type, select, press, hover, scroll, navigate, back) are cleanly separated, and the finding-lifecycle tools (finding, cards, feedback, resolve, verify) are distinguishable. But the planning surface — scout_intake, scout_guided_plan, scout_guided_confirm, scout_recheck_plan, scout_saved_checks, scout_lane_brief/report — and the four reporting tools (report, team_report, recap, cards) overlap heavily in intent; only very long descriptions keep them apart. scout_run_plan vs. the single-action tools is another soft overlap an agent could misselect on.

Naming Consistency4/5

Every tool uses the scout_ prefix and snake_case, with a predictable verb_noun or resource_noun shape. Minor deviations (noun-only names like scout_playbook, scout_journey, scout_recap, scout_coverage) break the verb pattern but remain readable and unambiguous within the prefix scheme.

Tool Count2/5

48 tools is well past the 'heavy' band and sits in the too-many range for a single server. Much of the bulk comes from peripheral surfaces (guided plans, saved checks, lanes, ticket filing/status, three report formats) that could be consolidated or split into separate servers.

Completeness4/5

The surface is unusually thorough for browser-based QA: interaction, network, design audit, journeys, coverage, findings with dedup/verification, guided plans, and reporting are all present with lifecycle coverage. Gaps are minor — no explicit console-log retrieval, viewport/device emulation, or waiting/synchronization primitive — which agents can mostly work around.

Maintenance

ActivityActive
ResponsivenessResponsive

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    A
    maintenance
    MCP server that provides AI coding agents with real-time visual access to web apps, enabling them to see screens, run accessibility and layout inspections, and interact with pages through a shared live panel.
    98 npm
    130
    MIT