Reado
Most IDEs are built for writing code. Reado is built for reading it.
Your agent writes more code than you do now. The job that's left is reading it and deciding — and that deserves a tool of its own. In Reado you read, and you leave comments anchored to the exact lines that matter; your agent (Claude Code, Codex, Copilot, Gemini, OpenCode or Cursor) resolves them, and you review what changed.
Inverted code review: you are the reviewer, the AI is the committer.
Related MCP server: fix-my-comments-mcp
A guided review, with an AI pair
Pick what to review — your working changes, a branch, a pull request — and a focus: bug risk, security, performance, test coverage. The agent plans a route through the change, reviews it file by file and proposes; nothing is final until you approve it.
Comments that stay where you left them
A Reado comment is not a sticky note. It is anchored to a line range, typed
(bug, refactor, performance, question, note), threaded, and either a task for
the agent or a note for the next reader. Comments live next to your code as
plain Markdown in .reado/, and they survive edits: when the code moves, they
re-anchor with it — and one whose code is gone becomes an orphan instead of
quietly pointing at the wrong line.
Your agent does the work — you watch it happen
Send review hands your open tasks to the agent running in Reado's terminal.
It works through the reado CLI and MCP server — reading your comments, consulting
the project's docs and specs, resolving each task — and Reado reflects every step
live: the reasoning, the files it touches, the task closing. When it's done, a
Δ on the file tree takes you straight to what changed since you last read it.
An IDE that reads like a book
Built for reading: a calm CodeMirror 6 viewer with comfortable line length, sticky scope headers, an outline, go-to-definition and code intelligence.
Reading coverage: Reado knows what you have actually read, and what changed underneath you since.
Project tours: ship a
tour.jsonwith your repository and anyone who opens it in Reado can walk the code you'd explain to a newcomer, the exact lines lit up and explained step by step. The format is open — any tool can read and write it.A knowledge base that grows as you read: the project's docs, specs (OpenSpec, Spec Kit) and your notes in one searchable place, plus a graph linking comments, files, specs and docs.
A browser your agent can drive: preview your app inside Reado, comment on the page itself, and let the agent inspect the DOM, console and network.
Reado Anywhere: pair your phone to follow a review, comment from it, and get pinged when the agent is done.
Four research-grounded themes — dark, light, high contrast, sepia — and a UI in English, Italian, Spanish, French and German.
Local-first, open source
Reado is MIT and runs on macOS, Linux and Windows. Your code and your comments stay on your machine as plain files; an account is optional and never gates the app.
Download
Grab the latest signed build from
Releases — macOS
(.dmg, signed & notarized), Linux (.AppImage / .deb / .rpm) and Windows
(.exe / .msi). Reado updates itself from signed releases after that.
The AI loop
Reado's core loop is read → annotate → AI-resolve:
You read code and leave comments. Comments flagged as tasks are the work list; notes stay out of the agent's way.
Open the terminal (
Cmd/Ctrl+J), launch Claude, Codex or Copilot, then click Send review. Reado injects a prompt pointing the agent at your open tasks.The agent reads your tasks and comments — from the
reado://tasksandreado://commentsMCP resources, orreado task list— makes the changes, and marks each done withreado task done <id>(orreado task fail <id> "<reason>"). Reado's watcher reflects the result live, and resolved comments move to history.
The reado binary is the stable contract — the on-disk format can evolve without
breaking the agents. It serves both the MCP server (reado mcp, auto-wired
into each agent's config on project open) and the CLI the agent calls, so it
must be on the agent's PATH for the AI loop to work. The packaged app bundles
it: install from Settings → Command-line tool (links reado into
~/.local/bin, VS Code style). From a source checkout, build and link it
directly:
scripts/install-cli.sh # builds release + links into ~/.local/bin
reado --helpActions (CLI): reado task list|show|done|fail|link,
reado comment add|reply|search, and reado kb list|show|search (to consult
the docs and specs before resolving). Context (MCP): the reado://tasks,
reado://comments, reado://reading-progress and reado://bookmarks resources,
plus browser_* tools for the in-app preview. Agent identity comes from
$READO_AGENT (Reado sets it when launching an agent).
An agent plugin in plugin/ teaches Claude Code (and Codex, via
AGENTS.md) this contract so the agent resolves tasks correctly. See
plugin/README.md to install it. Other agents (e.g. Copilot)
still get the contract from the Send review prompt Reado injects, as long as
the reado CLI is installed.
Keyboard shortcuts
Shortcut | Action |
| Go to file (fuzzy) |
| Command palette |
| Search & replace in project |
| Settings |
Contributing
Reado aims to be a friendly open-source project, and contributions are welcome. Everything you need to build, test and send a change — prerequisites, the dev loop, the checks CI runs, conventions — is in CONTRIBUTING.md. Please read our Code of Conduct; security issues go through SECURITY.md.
License
MIT © Reado contributors
Available Tools
27 toolsbrowser_animationARead-onlyIdempotent
Read the animations running on one element of the preview, as JSON: for each, its name, keyframes and computed timing (duration, delay, easing, progress). Answers an empty list when it has none, null when nothing matches. Needs Reado's browser preview open with agent access on: without it the call fails after about 6 s with "no preview pane running". On a page holding a credential it is refused until the user grants access.
| Name | Required | Description | Default |
|---|---|---|---|
| selector | Yes | CSS selector; the first matching element is used (document.querySelector). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive, closed-world), and the description adds traits they cannot express: an empty list vs null distinction for no-animations vs no-match, a ~6 s failure timeout with its error message, and an auth gate that blocks credential pages until user consent. These are exactly the operational behaviors an agent needs before calling.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences ordered by importance: purpose and return payload first, empty/null semantics second, prerequisites and failure modes last. No filler; every clause carries distinct information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 correctly compensates by enumerating the returned fields and the two empty-result variants. Combined with the documented failure and permission paths, an agent has everything needed to call this correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single selector parameter is fully documented there, including the 'first matching element / document.querySelector' semantics. The description adds the phrase 'one element of the preview' but no further syntax or matching detail, so this is the baseline case where the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Read the animations running on one element of the preview') plus the exact return shape (name, keyframes, computed timing), which clearly separates it from siblings like browser_dom or browser_eval. An agent can identify both what it does and what it returns 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete preconditions: Reado's browser preview must be open with agent access, otherwise the call fails after ~6 s with a specific error string, and credential-bearing pages are refused pending user grant. It does not, however, name an alternative (e.g., that browser_eval could inspect animations differently) or state explicit when-not-to-use cases beyond the environment prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_clickA
Click an element in the preview: scrolls it to the middle of the viewport, then fires a DOM click(). Answers clicked, or not found when nothing matches. It does not wait for what the click sets off — check the outcome with browser_dom, browser_errors or browser_frame. Needs Reado's browser preview open with agent access on: without it the call fails after about 6 s with "no preview pane running". On a page holding a credential it is refused until the user grants access.
| Name | Required | Description | Default |
|---|---|---|---|
| selector | Yes | CSS selector; the first matching element is used (document.querySelector). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond annotations by disclosing return values ('clicked' / 'not found'), the no-wait semantics, the ~6s failure mode with the exact error string, and a credential-based authorization gate. Annotations only cover the non-readOnly, non-idempotent, non-destructive profile; the description adds the operational detail an agent needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the action and mechanics, then return values, then the alternative tools, then the failure/auth caveats. Every sentence carries distinct, non-redundant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description correctly supplies return values and failure behavior, and it covers prerequisites and the no-wait contract. Nothing essential for correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the schema already documents that selector is a CSS selector using document.querySelector with the first match. The description adds only a light implicit note ('nothing matches') without new syntax or format guidance, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (click) on a specific resource (an element in the preview) and describes the mechanics: scroll to viewport center then fire a DOM click(). This clearly distinguishes it from siblings like browser_hover, browser_type, and browser_eval.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says it does not wait for the click's effects and routes the agent to browser_dom, browser_errors, or browser_frame to check outcomes. It also names prerequisites: preview must be open with agent access, and credential pages require user consent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_consoleARead-onlyIdempotent
Read everything the preview page logged, as JSON: each entry's level (log/info/warn/error), message, source and stack. Use it to follow what the app is doing; for only what broke, browser_errors is shorter. Reads what Reado captured without touching the page; when no preview is open it answers that none is running.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, so the safety burden is covered. The description adds genuinely useful behavior beyond that: it reads captured data 'without touching the page' and returns a 'none is running' answer when no preview is open, covering a key edge case. It stops short of covering volume/pagination or truncation behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences, front-loaded with the core action and immediately followed by the routing rule and edge-case behavior. Every clause earns its place with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a no-param, read-only diagnostic tool with no output schema, the description supplies the return format, the sibling routing rule, the no-side-effect guarantee, and the no-preview edge case. Nothing an agent needs to invoke it is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is no parameter semantics to document; baseline 4 applies. The description appropriately focuses on output shape instead of inventing param detail.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Read everything the preview page logged') and describes the return shape (level, message, source, stack). It explicitly distinguishes itself from the sibling browser_errors, so an agent can route correctly 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Names the alternative and the condition that selects it: 'Use it to follow what the app is doing; for only what broke, browser_errors is shorter.' This is an explicit when-to-use-this vs when-to-use-other rule.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_domARead-onlyIdempotent
Inspect one element of the preview: its tag, outerHTML (first 2000 characters), box (x, y, width, height in CSS px, relative to the viewport) and key computed styles (display, color, background, font), as JSON; null when nothing matches. Use it to check structure and layout; for a picture use browser_frame, for anything else browser_eval. Needs Reado's browser preview open with agent access on: without it the call fails after about 6 s with "no preview pane running". On a page holding a credential it is refused until the user grants access.
| Name | Required | Description | Default |
|---|---|---|---|
| selector | Yes | CSS selector; the first matching element is used (document.querySelector). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive and non-open-world, yet the description still adds real value: a null result when nothing matches, a ~6 s timeout failure when no preview pane runs, and a refusal-plus-user-grant flow on credential pages. It does not state whether the DOM snapshot is a point-in-time copy or whether the 2000-character truncation is signalled in the payload, so it stops just short of 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the return payload, then usage routing, then prerequisites and failure modes, all in three tight sentences with no filler. Every clause carries information an agent needs before calling.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 carries the full burden of describing return values — and it does: field list, truncation limit, coordinate space (CSS px, viewport-relative), and the null case. Combined with the auth and failure-mode notes, an agent has everything required to call this correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single 'selector' parameter is fully documented as a CSS selector resolved via document.querySelector with first-match semantics. The description restates the same first-match behaviour and adds nothing parameter-specific, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Inspect one element of the preview') and enumerates exactly what is returned: tag, outerHTML, box, computed styles, as JSON. It also names the sibling boundaries (browser_frame for pictures, browser_eval for anything else), so an agent can distinguish it 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit routing: use this to check structure and layout, use browser_frame for a picture, browser_eval for anything else. It also states the prerequisite (preview open with agent access), the failure symptom and timing ('fails after about 6 s with no preview pane running'), and the credential-gated refusal path.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_errorsARead-onlyIdempotent
Read only the preview's error-level console entries — errors and unhandled rejections — as JSON: the part of browser_console that answers "what broke?". Answers No errors captured. when there are none. Reads what Reado captured without touching the page; when no preview is open it answers that none is running.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover the safety profile (readOnly, idempotent, non-destructive), but the description adds real behavior: the exact empty-result sentinel ('No errors captured.'), that it never touches the page, and the no-preview-open case. That is useful state disclosure beyond the structured fields, though return shape/pagination detail is absent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core scope and three tight sentences that each carry information. It loses a point for the awkward, opaque 'Reads what Reado captured' clause, which adds syllables without adding meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, read-only tool with no output schema, the description covers everything an agent needs: what subset is returned, the format, the empty case, and the no-preview case. Nothing material is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Zero parameters, so the baseline of 4 applies. The description correctly implies the tool takes no filtering input — scoping is baked in — and nothing about parameters is misstated.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Read only ... error-level console entries — errors and unhandled rejections — as JSON') and explicitly positions itself as 'the part of browser_console that answers "what broke?"', which distinguishes it from its closest sibling 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The framing as a filtered subset of browser_console implies the selection rule: use this for error triage, use browser_console for the full log. No explicit 'when not to use' or named alternative is spelled out, so it stops short of 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_evalADestructive
Run a JavaScript expression in the preview page and answer its value, JSON-serialized. The escape hatch for what the other browser_* tools don't cover — reading app state, calling page functions, scrolling a nested container; prefer them when they fit. Evaluated synchronously (a Promise is not awaited), and it can change the page. Needs Reado's browser preview open with agent access on: without it the call fails after about 6 s with "no preview pane running". On a page holding a credential it is refused until the user grants access.
| Name | Required | Description | Default |
|---|---|---|---|
| js | Yes | A JavaScript expression; wrap statements in an IIFE, e.g. `(() => { …; return x })()`. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations: it discloses synchronous evaluation (Promises are not awaited), that it can mutate the page, that a missing preview pane fails after ~6 s with the literal error 'no preview pane running', and that credential-holding pages are refused until the user grants access. The destructiveHint=true annotation is consistent with 'it can change 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core action and return format, then usage guidance, then behavioral caveats and prerequisites. Every sentence carries distinct, non-redundant information with no padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers the action, the return format, prerequisite/auth gating, failure timing and error message, and execution semantics for a single-parameter tool with no output schema. Nothing an agent needs to call it correctly appears to be missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the js parameter and the IIFE-wrapping convention are already documented in the schema. The description adds the JSON-serialization of the return value but no further syntax detail, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Run a JavaScript expression in the preview page') and immediately names its scope against siblings ('the escape hatch for what the other browser_* tools don't cover'). An agent can distinguish it from browser_console/browser_dom 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly gives when-to-use examples (reading app state, calling page functions, scrolling a nested container) and a when-not-to-use rule ('prefer them when they fit'). It also states the prerequisite: a Reado browser preview must be open with agent access on.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_frameARead-onlyIdempotent
Screenshot the preview as it renders right now, answered as a PNG image. Use it to see layout and visual bugs, or the result of a click; for exact sizes and styles use browser_dom. Not available on Linux. Needs Reado's browser preview open with agent access on: without it the call fails after about 6 s with "no preview pane running". On a page holding a credential it is refused until the user grants access.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, but the description adds substantial behavior the annotations cannot express: the Linux unavailability, the prerequisite of an open browser preview with agent access, the ~6 s failure with the specific "no preview pane running" error, and the credential-page refusal pending user consent. This is exactly the preconditions-and-failure-mode context an agent needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each load-bearing: what it returns, when to use it versus the sibling, and the environment/auth preconditions. The core action is front-loaded and there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter screenshot tool with no output schema, the description covers the return type (PNG image), the visual-vs-DOM tradeoff, platform limits, and the auth/failure conditions. 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.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the schema has nothing to document and the baseline of 4 applies. There is no parameter semantics for the description to add or omit.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Screenshot the preview as it renders right now") plus the returned artifact (PNG image). It explicitly differentiates itself from the sibling browser_dom, so an agent can choose 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete when-to-use cases (layout and visual bugs, result of a click) and names the alternative tool with the condition that selects it ("for exact sizes and styles use browser_dom"). It also states an availability exclusion ("Not available on Linux"), so the agent knows when not to call it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_hoverAIdempotent
Hover an element in the preview by dispatching mouseover and mouseenter — to open a menu or tooltip before inspecting it. Answers hovered or not found. These are synthetic events, so CSS :hover styles do not apply. Needs Reado's browser preview open with agent access on: without it the call fails after about 6 s with "no preview pane running". On a page holding a credential it is refused until the user grants access.
| Name | Required | Description | Default |
|---|---|---|---|
| selector | Yes | CSS selector; the first matching element is used (document.querySelector). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses far more than the annotations: the synthetic-event caveat that CSS :hover styles do not apply, the ~6 s timeout failure message when no preview pane runs, and the credential-page access refusal. These are exactly the behavioral traits an agent needs and cannot derive from 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the action and its purpose, then the return values, caveat, and prerequisites. Every sentence carries distinct, load-bearing information with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description still communicates return values (hovered / not found), prerequisites (preview open with agent access), the failure mode, and the credential-access constraint. 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.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents the selector parameter and its first-match semantics. The description adds no additional parameter detail beyond what the schema provides, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (hover) and resource (an element in the preview) and explains the intent — open a menu or tooltip before inspecting it. This clearly separates it from browser_click and browser_dom without needing to open a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a concrete when-to-use condition: to reveal a menu or tooltip ahead of inspection. It does not explicitly name a sibling alternative (e.g. when to prefer browser_click), so it stops short of full routing guidance, but the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_networkARead-onlyIdempotent
Read the preview page's network activity, as JSON: method, URL, status and timing per request, with failures flagged. Use it to check API calls, failed fetches and slow responses. Reads what Reado captured without touching the page; when no preview is open it answers that none is running.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only/idempotent/non-destructive, so the bar is lower. The description still adds real value by explaining that it reads Reado's captured data without touching the live page and that it reports when no preview is running, both beyond the 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences, front-loaded with what is returned, then usage, then the passive-read caveat. No sentence is redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-param read tool with annotations covering the safety profile and no output schema, the description fully covers return fields, use case, and the empty-state behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Zero parameters, so the baseline is 4. The description instead documents the response shape it yields, which is useful given no output schema exists.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Read) and resource (preview page's network activity) and enumerates the returned payload (method, URL, status, timing, failures flagged). This cleanly differentiates it from network-adjacent siblings like browser_console and browser_errors.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear when-to-use context: checking API calls, failed fetches, and slow responses. It does not explicitly name a sibling alternative (e.g., browser_console for logs), but the intent is unambiguous enough to select the right tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_scrollAIdempotent
Scroll the preview's window to an absolute position (window.scrollTo) — to bring content into view before browser_frame. Answers scrolled. browser_click already scrolls its target; a nested scroll container needs browser_eval. Needs Reado's browser preview open with agent access on: without it the call fails after about 6 s with "no preview pane running". On a page holding a credential it is refused until the user grants access.
| Name | Required | Description | Default |
|---|---|---|---|
| x | No | CSS pixels from the document's left edge. Defaults to 0. | |
| y | No | CSS pixels from the document's top. Defaults to 0. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare idempotency and non-destructiveness, but the description goes well beyond them: it discloses the return token ('scrolled'), the prerequisite (browser preview open with agent access), the concrete failure mode and timing (~6 s, 'no preview pane running'), and an auth gate on credential-bearing pages. Rich behavioral context that annotations do not carry.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the verb and resource, then the mechanism, then alternatives, then prerequisites and failure behavior. Dense but every clause earns its place; no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter scroll tool with no output schema, the description covers the action, return value, prerequisites, failure timing, and access restrictions. 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.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so both x and y are already fully documented with units, defaults, and minimums. The description only reinforces that the position is absolute rather than relative, adding marginal value over the schema. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (scroll the preview's window), names the underlying mechanism (window.scrollTo), and specifies absolute positioning. It is immediately distinguishable from browser_click, browser_frame, and browser_eval, all of which it references.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes the agent: use this before browser_frame, browser_click already scrolls its own target, and a nested scroll container requires browser_eval. This is exactly the when-to-use/when-not-to-use guidance that selects among siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
browser_typeAIdempotent
Fill a form field in the preview: focuses it, replaces its whole value with text, then fires input and change. Answers typed or not found. No key events are sent, so keydown handlers and Enter-to-submit don't fire — click the submit button instead. Needs Reado's browser preview open with agent access on: without it the call fails after about 6 s with "no preview pane running". On a page holding a credential it is refused until the user grants access.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | The field's new value. It replaces the old one; an empty string clears it. | |
| selector | Yes | CSS selector of an input, textarea or select; the first match is used. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover safety (readOnlyHint=false, idempotentHint=true, destructiveHint=false), and the description goes well beyond them: no key events are dispatched, Enter-to-submit won't trigger, failure mode and timing (~6 s, 'no preview pane running'), and a credential-page refusal requiring user consent. That is unusually rich behavioral disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four tight sentences, front-loaded with the action and its input/change behavior, then caveats, then prerequisites. Every sentence carries actionable information; nothing is padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description still covers the return values ('typed' or 'not found'), the failure mode and latency, the prerequisites, and the auth gate for credential pages. Nothing an agent needs to invoke this correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both `selector` and `text` are already documented in the schema, including the replace-not-append and empty-string-clears semantics. The description restates the replacement behavior but adds no new parameter-level syntax or formatting detail, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Fill a form field in the preview') and enumerates the exact mechanics: focuses the field, replaces its whole value with `text`, fires input and change. This is clearly separable from siblings like browser_click (which sends real input) and browser_eval (which runs arbitrary code).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when this tool is the wrong choice ('No key events are sent, so keydown handlers and Enter-to-submit don't fire — click the submit button instead'), routing the agent to browser_click for submission. It also names the prerequisite (browser preview open with agent access) and the refusing condition for credential pages.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
comment_addA
Anchor a new comment to a line range, signed by the agent. A task (the default) joins the user's task queue as work to do; a note explains something to the next reader without asking for action. Answers the new comment's id and state as JSON. To answer an existing comment use comment_reply; during a guided review use review_propose_comment, which the human approves first.
| Name | Required | Description | Default |
|---|---|---|---|
| end | No | Last line of the range, inclusive. Defaults to `line`. | |
| body | Yes | The comment, in Markdown. | |
| file | Yes | Project-relative path, e.g. `src/lib/api.ts`. | |
| kind | No | `task` asks for work (default); `note` only informs. | |
| line | Yes | First line of the range, 1-based. | |
| type | No | What the comment is about. Defaults to note. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the write/non-idempotent profile (readOnlyHint=false, idempotentHint=false), and the description adds real behavior beyond them: the comment is agent-signed, a `task` joins the user's task queue as actionable work, and the call returns the comment's id and state as JSON. It omits auth/permission requirements and whether the anchor must lie within the file's existing line count, so it is strong but not exhaustive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences, front-loaded with the action and anchor semantics, then mode semantics, then routing. No filler and nothing repeated from the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Although there is no output schema, the description states the return payload (id and state as JSON) and provides sibling routing, which covers most of what an agent needs. The remaining gap is disambiguating the two enums (kind vs. type) that both accept "note".
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so a 3 is the baseline; the description goes further by explaining the consequence of `kind`: `task` (default) enters the user's queue as work, `note` only informs. It does not clarify the overlap between the `kind` and `type` enums, both of which include "note".
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Anchor a new comment") plus the anchoring scope (a line range) and the authorship attribute ("signed by the agent"). It also draws a clear boundary against two sibling tools (comment_reply, review_propose_comment), so an agent can select it 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes: existing comment -> comment_reply, in-review flow -> review_propose_comment (with the note that a human approves first). It also gives the selection criterion between the two modes of this tool itself (task = work to do, note = informs only).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
comment_replyA
Reply in an existing comment's thread, signed by the agent — to answer a question the user asked, or to explain what you changed. It does not change the comment's state: use task_done, task_fail or task_block for that. Answers the comment's id and state as JSON.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The comment's id, from `reado://comments` or `reado://tasks`. | |
| body | Yes | The reply, in Markdown. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false and idempotentHint=false, so safety is partly covered. The description adds value beyond that by clarifying the write is attributed to the agent ('signed by the agent'), that it does not mutate comment state, and that the response returns the comment's id and state as JSON — important since no output schema exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tightly packed clauses: purpose, negative scoping against siblings, and return shape. Front-loaded and every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 2-parameter tool with full schema coverage and no output schema, the description supplies the missing pieces: usage triggers, exclusions, and the return value. Nothing an agent needs to invoke it correctly is absent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both parameters (id source, Markdown body) are already documented in the schema. The description adds no syntax or format detail beyond that, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (reply in an existing comment's thread) and immediately delimits its scope against the state-changing siblings task_done, task_fail and task_block. An agent can tell what this does and what it does not do 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives both positive triggers (to answer a question the user asked, or to explain what you changed) and an explicit when-not with named alternatives for the state-change case. Nothing is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mascot_sayA
Say one line through Reado's mascot — the small companion in the corner of the user's screen. For the moment the user must know about while they are away from the desk: what you need from them, or what just landed. Not narration, not progress, not a running commentary: it interrupts a human, and a companion that chatters gets turned off. Use ask only when you are actually waiting for them. Text over 280 characters is refused, not truncated. Answers said: <text>.
| Name | Required | Description | Default |
|---|---|---|---|
| mood | No | The mascot's expression. Defaults to talk. | |
| text | Yes | One line, at most 280 characters. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare only the generic profile (not read-only, not idempotent, not destructive, not open-world). The description adds genuinely non-derivable behavior: it interrupts a human and misuse gets the companion disabled, and over-280-character text is refused rather than truncated — a hard failure mode, not a silent clamp.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action, then restraint rules, then a hard limit, then the return shape — every sentence carries information. It is slightly prose-heavy (the chattering-companion rationale could be tightened) and restates the 280-character cap already in the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description still closes the loop by naming the return value (`said: <text>`), and it covers the failure mode and the restraint policy for a tool whose only real risk is overuse. Nothing needed 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.
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 goes further by giving the `mood` enum semantic weight — `ask` means the agent is actually blocked and waiting on the user, which the schema's 'expression' text does not convey. The 280-character limit is repeated from the schema, which is mild redundancy rather than added meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb (say one line) and a specific channel (through Reado's mascot, described for an agent that has never seen it), and it implicitly distinguishes itself from the notification-oriented siblings by framing itself as a human-facing interrupt rather than browser instrumentation. An agent can select it correctly 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives an explicit positive trigger (the moment the user must know about while away: what you need, or what just landed) and an explicit negative list (not narration, not progress, not running commentary), plus a routing rule for the `ask` mood: use it only when actually waiting. This is about as unambiguous as usage guidance gets.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
review_contextARead-onlyIdempotent
Read one file's context in a guided review before reviewing it, as JSON: the session objective, the file's route entry (why it was ranked, related files), its state, its running summary and the proposals already on it. For the whole session use session_show.
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | Project-relative path, e.g. `src/lib/api.ts`. | |
| sessionId | No | The session id from the READO GUIDED REVIEW prompt. Omit it to use the newest session still open. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent and non-destructive, so safety is covered. With no output schema, the description usefully discloses the read is and what it contains, which is real added value beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with verb and scope, then the field inventory, and the sibling redirect is held to the end. The field list is a touch long but each item earns its place since no output schema exists.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter read tool with no output schema, the description carries the return-shape burden well by enumerating the JSON payload. Nothing an agent needs to invoke it correctly appears to be missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both 'file' and 'sessionId' (including the newest-session default) are already documented in the schema. The description adds no syntax or format detail beyond that, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Read') and resource ('one file's context'), enumerates the returned fields (objective, route entry, state, summary, proposals), and explicitly distinguishes itself from the session_show sibling. An agent can identify the scope as single-file versus session-wide 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives timing ('before reviewing it') and names the alternative for whole-session needs ('For the whole session use session_show'), which routes the agent correctly. It offers clear context but no explicit when-not-to-use beyond the sibling redirect.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
review_planA
Set a guided review's ranked route — the planning pass, once per session, before you review any file. Answers how many files you routed and the uncovered ones: files the scope contains that your route left out. Route each with review_propose_route_change, or declare it out of scope with reado session set-file <id> --file <path> --state out-of-scope. Refused if the session already has a route; propose a change instead.
| Name | Required | Description | Default |
|---|---|---|---|
| route | Yes | Every file to review, riskiest first. | |
| sessionId | No | The session id from the READO GUIDED REVIEW prompt. Omit it to use the newest session still open. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover the mutation profile (readOnlyHint=false, idempotentHint=false), and the description adds genuinely new behavior: the tool is single-shot per session and will be refused if a route exists, and it returns a routed-file count plus the 'uncovered' files the scope contains but the route left out. That post-condition and refusal semantics go beyond the 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action and timing, then alternatives, then the refusal rule. Dense but every sentence carries information; the inline CLI invocation for the out-of-scope path is the only slightly heavy element.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 shape (routed count and uncovered files), the prerequisites, the single-use constraint, and the remedy when refused. An agent has everything needed to decide whether to call it and what to expect back.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so 'route' and 'sessionId' are already fully documented (including priority ordering, relatedFiles, and suggestedReviewMode). The description contextualizes the route via the uncovered-files concept but adds no parameter-level format or syntax 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.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Set a guided review's ranked route') and immediately scopes it as 'the planning pass, once per session, before you review any file.' That framing separates it from the sibling review_propose_route_change, which it explicitly names as the change path.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives the timing ('once per session, before you review any file'), the downstream routing alternatives (review_propose_route_change for files in the route, an out-of-scope declaration for files not), and an explicit exclusion ('Refused if the session already has a route; propose a change instead'). When-to-use, when-not-to-use, and the alternative are all stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
review_proposeA
Propose a guided-review item that is not a finding on the code: a question for the human, a follow-up to do after the review, or needs-context when you cannot judge the code without information you don't have — prefer it to guessing. The human accepts or discards it. Answers the proposal's id. For a finding on specific lines use review_propose_comment.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | The question, follow-up or missing context, in Markdown. | |
| file | No | Project-relative path it concerns, if any. | |
| kind | Yes | What you are raising. | |
| line | No | Line it concerns, if any, 1-based. | |
| sessionId | No | The session id from the READO GUIDED REVIEW prompt. Omit it to use the newest session still open. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the safety profile (readOnly hint false, destructive false, idempotent false, non-open-world). The description adds behavioral context beyond that: the proposal is adjudicated by a human who 'accepts or discards it,' and the call returns the proposal's id. It does not mention auth requirements, but the workflow outcome is disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose and the kind taxonomy are front-loaded, and the sibling-routing sentence comes last where it is most useful. Slightly dense with em-dash asides, but every clause carries information and none is redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 5-param, non-destructive write with no output schema, the description covers the required kind/body semantics, the optional file/line scoping, and what the call returns ('answers the proposal's id'). The sessionId inheritance behavior is left to the schema, which is acceptable given the high schema coverage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 meaning to the `kind` enum by explaining what each value signifies (a question for the human, a follow-up after review, needs-context when the agent cannot judge). That is genuine semantic value beyond the schema's short enum labels.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (propose a guided-review item) and enumerates the three allowed kinds, immediately delimiting it as 'not a finding on the code.' It explicitly names and defers to review_propose_comment for line-level findings, so an agent can distinguish it from siblings 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives when-to-use for each of the three kinds, including the decision rule 'prefer it to guessing' for needs-context, and routes line-specific findings to review_propose_comment. Both the selection condition and the alternative are stated explicitly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
review_propose_commentA
Propose a finding on the code during a guided review — a bug, a refactor, a performance issue — anchored to a line range. Only a proposal: the human accepts, edits or discards it, and only an accepted one becomes a comment. Answers the proposal's id. For a question or missing context rather than a finding use review_propose; outside a guided review, comment_add.
| Name | Required | Description | Default |
|---|---|---|---|
| end | No | Last line of the range, inclusive. Defaults to `line`. | |
| body | Yes | The finding: what is wrong and why, in Markdown. | |
| file | Yes | Project-relative path, e.g. `src/lib/api.ts`. | |
| line | Yes | First line of the range, 1-based. | |
| type | No | What the comment is about. Defaults to note. | |
| sessionId | No | The session id from the READO GUIDED REVIEW prompt. Omit it to use the newest session still open. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint=false, destructiveHint=false, idempotentHint=false), the description discloses the key behavioral trait: this only creates a proposal that the human accepts, edits, or discards, and only an accepted one becomes a comment. It also states the return value ('Answers the proposal's id'), which no structured field provides.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action, then the proposal lifecycle, then routing guidance. Every sentence carries distinct information with no restatement of the name or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 covers the return ('proposal's id') and the essential lifecycle (non-final until accepted). With 100% schema coverage and clear alternatives, 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.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so parameters like line/end/file/type are already documented. The description's mention of line-range anchoring and the bug/refactor/performance examples only partially overlaps the enum values; it adds little syntax or format 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.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Propose a finding') and the anchoring mechanism (line range), with concrete examples of finding types. It names the sibling it is not for (review_propose) and the outside-context alternative (comment_add), so an agent can distinguish it 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit routing: 'For a question or missing context rather than a finding use review_propose; outside a guided review, comment_add.' Both the when-to-use and when-to-use-something-else paths are stated with the condition that selects them.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
review_propose_route_changeAIdempotent
Propose a new route for a guided review already under way — a file you found that must be reviewed, a reorder, a file to drop. Nothing changes until the human accepts it in Reado: the current route keeps running, so carry on with the file you were on. A new proposal replaces one still pending. Answers a confirmation; refused without a reason.
| Name | Required | Description | Default |
|---|---|---|---|
| route | Yes | The whole proposed route, not just what changes. | |
| reason | Yes | Why the route should change — what the human reads to decide. | |
| sessionId | No | The session id from the READO GUIDED REVIEW prompt. Omit it to use the newest session still open. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well past the annotations: nothing takes effect until the human accepts in Reado, the running route is unaffected, a newer proposal replaces a pending one, the call resolves as a confirmation, and it is refused when no reason is supplied. These are exactly the mutation/authority semantics an agent needs and annotations cannot express.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the purpose, then adds behavioral constraints in tight clauses that each carry information (replacement rule, non-blocking behavior, confirmation/refusal). Dense but not padded; only the em-dash example list borders on redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description covers return behavior ('answers a confirmation'), the human-gated mutation model, and the sessionId fallback via the schema. For a 3-parameter, non-destructive proposal tool this is close to complete, though it never states what a rejection looks like.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 route, reason, sessionId (including the omit-to-use-newest fallback). The description reinforces that a reason is mandatory ('refused without a reason'), but adds little on the route payload beyond what is structured. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Propose) plus a specific resource (a new route for a guided review already under way) and enumerates the kinds of changes it covers: adding a found file, reordering, dropping a file. The 'already under way' qualifier implicitly separates it from the sibling review_propose for initial planning.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear usage context — it applies to a review in progress, and the agent is told to keep working the current file rather than wait. It also notes that a new proposal supersedes a still-pending one. It stops short of explicitly naming alternatives (review_propose, review_plan) or stating when NOT to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
review_summarize_fileAIdempotent
Record a file's mini-summary when you finish reviewing it in a guided review: what you checked, the risks you see, what comes next. It replaces the file's earlier summary, and marks a file with no state yet as reviewed. Answers a confirmation. For the whole review use session_summarize.
| Name | Required | Description | Default |
|---|---|---|---|
| file | Yes | Project-relative path, e.g. `src/lib/api.ts`. | |
| text | Yes | The summary, a few lines, in Markdown. | |
| sessionId | No | The session id from the READO GUIDED REVIEW prompt. Omit it to use the newest session still open. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only cover write/idempotent/non-open-world. The description adds real behavioral facts beyond that: it overwrites the file's earlier summary, it transitions a file with no state to reviewed, and it returns a confirmation. It stops short of permissions or size/rate constraints, hence a 4 rather than 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action and four short sentences with no filler; the alternatives clause is deliberately last. 'Answers a confirmation' is slightly awkward phrasing, which keeps it from a 5.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 2-required-param mutation tool with no output schema, the description covers the trigger, the overwrite semantics, the state change, and a minimal return statement. Return details are thin ('Answers a confirmation') but sufficient for this interaction pattern.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 goes slightly beyond by specifying what the 'text' parameter should contain ('what you checked, the risks you see, what comes next'), which is content guidance the schema's 'a few lines, in Markdown' does not provide.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb+resource (record a file's mini-summary) inside a clearly scoped context (guided review of a single file). It explicitly distinguishes itself from the sibling session_summarize, and separates a per-file action from the whole-review action.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
States the trigger condition plainly: 'when you finish reviewing it in a guided review,' and names the alternative for the other case ('For the whole review use session_summarize'). An agent has an explicit routing rule and does not need to infer it from sibling names.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
session_doneA
Call this when your next act is to wait for the user — the request is finished, you are blocked, or you need an answer. NOT after a command returns or a step completes: if you will do anything else before stopping, it is too early. Reado alerts a user who has walked away, so a premature call fetches them back for nothing. Answers an acknowledgement.
| Name | Required | Description | Default |
|---|---|---|---|
| status | No | How the request ended. Defaults to done. | |
| summary | No | One line on what happened; it becomes the notification's text. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations establish this is a non-read-only, non-idempotent action, and the description adds a real behavioral consequence not in the annotations: Reado alerts a user who has walked away, so a premature call 'fetches them back for nothing.' That side effect is the key operational trait. It does not, however, describe any result/confirmation behavior, and the trailing 'Answers an acknowledgement.' is opaque.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The critical trigger and its exclusion are front-loaded and the sentence count is small. Minor waste and confusion come from the garbled 'Reado' reference and the unfinished 'Answers an acknowledgement.' fragment.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and zero required parameters, the description's main job is to nail the invocation trigger, which it does thoroughly, including the anti-pattern case. It is nearly complete; only the vague closing fragment leaves a small gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%: both parameters (status enum, summary line) are fully documented in the schema, including the enum values and what the summary becomes. The description adds nothing beyond that, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool signals the end of the turn ('your next act is to wait for the user'). It distinguishes the session-level trigger from intermediate steps, but never names or differentiates itself from the closely related task_done/task_fail/task_block siblings, which an agent will have to disambiguate on its own.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit when-to-call conditions (finished, blocked, need an answer) and an explicit when-NOT ('NOT after a command returns or a step completes... if you will do anything else before stopping, it is too early'), plus the rationale that a premature call needlessly summons the user. This is about as complete as usage guidance gets.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
session_showARead-onlyIdempotent
Read a guided-review session in full, as JSON: scope, objective, route, per-file state and summaries, proposals and their decisions, the files the scope is expected to contain, and any pending route change. Call it first on a READO GUIDED REVIEW prompt, or to find your place after losing context; for a single file, review_context is smaller.
| Name | Required | Description | Default |
|---|---|---|---|
| sessionId | No | The session id from the READO GUIDED REVIEW prompt. Omit it to use the newest session still open. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description goes beyond that by itemizing the return payload, which matters because there is no output schema, and by noting any pending route change is surfaced. It stops short of describing size, pagination, or failure behavior when no open session exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, both front-loaded: the return contract first, then the usage routing. The long middle enumeration is dense but earns its place given the absence of an output schema, and there is no filler or restatement of the name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the burden of describing returns and does so thoroughly across scope, objective, route, per-file state, proposals, and pending changes. Combined with annotations that cover the safety profile, an agent has everything needed to call this correctly on the first try.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single sessionId parameter already documents both its origin and the omit-to-use-newest-session fallback, so the schema does the heavy lifting. The description adds no syntax or format detail about the parameter beyond that. Baseline 3 is correct for a fully documented single-parameter schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Read') and resource ('a guided-review session in full, as JSON') and then enumerates exactly what the payload covers: scope, objective, route, per-file state, proposals, and pending route change. It also draws the boundary against the sibling review_context ('for a single file, review_context is smaller'), so an agent can distinguish it 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives two explicit invocation conditions ('call it first on a READO GUIDED REVIEW prompt' and 'to find your place after losing context') plus the negative case that routes the agent to a smaller alternative for a single file. Nothing about when to prefer this over siblings is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
session_summarizeAIdempotent
Record a guided review's overall recap once the routed files are done: what the review found, the risks that matter most, what is left. It replaces any earlier recap. Answers a confirmation. For one file's notes use review_summarize_file.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | The recap, in Markdown. | |
| sessionId | No | The session id from the READO GUIDED REVIEW prompt. Omit it to use the newest session still open. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover mutation and idempotency, and the description adds the important replacement semantic ('It replaces any earlier recap') plus the fact that the call yields a confirmation — neither of which is in the annotations or an output schema. It doesn't state permissions or authoring constraints, 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, the core action and scope front-loaded, with the sibling pointer last. 'Answers a confirmation' is slightly stilted, but nothing is padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 2-parameter write tool with no output schema, the description covers what is recorded, the replacement behavior, and that a confirmation is returned, which is enough to call it correctly. It omits any error or permission caveats, so not a full 5.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 earns extra by specifying what belongs in the required 'text' payload (findings, prioritized risks, remaining work), which the schema's terse 'The recap, in Markdown' does not convey. It adds little about sessionId beyond what the schema already explains.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Record a guided review's overall recap') plus the scope of that recap (findings, top risks, what's left). It also explicitly distinguishes itself from review_summarize_file, so an agent can pick the right tool 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear timing condition ('once the routed files are done') and names the sibling to use for per-file notes. It lacks an explicit when-not case, but the overall-vs-per-file split effectively covers the main routing decision.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
task_blockAIdempotent
Block a task you cannot finish without the human — a decision, a credential or context you don't have. It stays blocked with your reason until they answer in Reado, which reopens it with a fresh attempt count. Blocking again replaces the reason. Answers the task's id, state and reason as JSON.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The task's id, from `reado://tasks`. | |
| reason | Yes | The question or missing piece, written for the human who has to answer it. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations (non-readOnly, idempotent, non-destructive) by disclosing the full lifecycle: the block persists until the human answers in Reado, answering reopens the task with a fresh attempt count, and blocking again replaces the reason. It also names the returned fields (id, state, reason) where no output schema exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with purpose then lifecycle then return shape, with no filler. Every clause carries distinct information: trigger, persistence/reopen semantics, reason-replacement behavior, and response fields.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description supplies the return contract (id, state, reason) and the state-transition semantics an agent needs before invoking. Annotations already cover the safety/idempotency profile, so nothing material is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so both parameters are fully documented in the schema itself, including that 'reason' is written for the human answering. The description restates 'your reason' without adding format, length, or content guidance 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.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Block a task') and pins the exact triggering condition ('you cannot finish without the human — a decision, a credential or context you don't have'). That condition implicitly separates it from task_done and task_fail, though neither sibling is named outright.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear when-to-use context via three concrete triggers (decision, credential, missing context). It stops short of explicit when-not guidance, e.g. when blocking is inappropriate versus failing the task with task_fail, leaving that boundary to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
task_doneA
Mark a task resolved once your change addresses it, recording how. With verify, Reado runs that command in the project root: exit 0 marks the task done and archives it; a failure — or no verify at all — leaves it resolved-but-unverified, visible for the human to check. Answers the task's id, state and resolution as JSON. If the attempt didn't work use task_fail; if you need the human, task_block.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The task's id, from `reado://tasks`. | |
| model | No | The model that made the change, for provenance. Defaults to $READO_MODEL. | |
| verify | No | A shell command that proves the fix, e.g. `pnpm test src/lib/api.test.ts`. | |
| diffRef | No | The commit or ref holding the change, e.g. a SHA, shown to the reviewer. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations by disclosing what `verify` actually does — runs the command in the project root, exit 0 archives the task, failure or omission leaves it resolved-but-unverified and visible to the human. It also describes the return shape (id, state, resolution as JSON). This is exactly the kind of side-effect context annotations (readOnlyHint/destructiveHint false) 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences, front-loaded with the primary action and consequence before the fallback routes. No filler; every clause carries either behavior, routing, or return-value information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, but the description explicitly states what is returned (id, state, resolution as JSON), and it covers the mutation's side effects, the verify lifecycle, and escalation paths. 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.
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 the schema does not: the behavioral consequence of `verify` (archival on exit 0 vs. unverified state on failure) and that `diffRef` is surfaced to the reviewer. `id` and `model` are left to the schema, hence not a 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb+resource ('mark a task resolved ... recording how') and it explicitly names the sibling tools it is not (task_fail, task_block), so an agent can route without opening a schema. Clearly differentiated from the browser_* and review_* siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
States the trigger (once your change addresses it), the alternatives by name, and the selecting condition for each: task_fail if the attempt didn't work, task_block if you need the human. When/when-not is fully spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
task_failA
Record a failed attempt at a task. The task goes back to open for another try; the third failed attempt blocks it until the human answers. Answers the task's id, state and attempt count as JSON. When you already know you need the human, use task_block instead.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | The task's id, from `reado://tasks`. | |
| note | No | What you tried and why it didn't work; posted as a reply in the task's thread, in Markdown. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no output schema, the description carries return-value burden and does so: 'Answers the task's id, state and attempt count as JSON.' It also discloses non-obvious state machine behavior (returns the task to open; third failure blocks until a human answers), which annotations cannot convey beyond readOnlyHint=false/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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four short sentences, front-loaded with the action, then state consequences, then return format, then routing. Every sentence earns its place with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers action, state transition, retry/blocking threshold, return payload, and the alternative tool. Nothing an agent needs to call this correctly (including the non-idempotent attempt increment) is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and both parameters (id, note) are fully documented inline, so the schema does the heavy lifting. The description adds no syntax or format detail beyond what the schema supplies; baseline 3 is correct.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Record a failed attempt at a task') and immediately distinguishes it from the sibling task_block and, implicitly, task_done. An agent can tell exactly what operation this is 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly names the alternative and the condition selecting it: 'When you already know you need the human, use task_block instead.' The 'if it just didn't work, fail it' path is implied by the whole framing, giving clear when/when-not guidance.
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.
23 tool updates
v1.32.1- Changed
browser_animation1 field changed- added
Input schema / properties / selector / descriptionAdded value: +"CSS selector; the first matching element is used (document.querySelector)."
- Changed
browser_click1 field changed- added
Input schema / properties / selector / descriptionAdded value: +"CSS selector; the first matching element is used (document.querySelector)."
- Changed
browser_dom1 field changed- added
Input schema / properties / selector / descriptionAdded value: +"CSS selector; the first matching element is used (document.querySelector)."
- Changed
browser_eval1 field changed- added
Input schema / properties / js / descriptionAdded value: +"A JavaScript expression; wrap statements in an IIFE, e.g. `(() => { …; return x })()`."
- Changed
browser_hover1 field changed- added
Input schema / properties / selector / descriptionAdded value: +"CSS selector; the first matching element is used (document.querySelector)."
- Changed
browser_navigate1 field changed- added
Input schema / properties / url / descriptionAdded value: +"Absolute (`http://localhost:5173/settings`) or relative to the current page (`/settings`)."
- Changed
browser_scroll4 fields changed- added
Input schema / properties / x / descriptionAdded value: +"CSS pixels from the document's left edge. Defaults to 0." - added
Input schema / properties / x / minimumAdded value: +0 - added
Input schema / properties / y / descriptionAdded value: +"CSS pixels from the document's top. Defaults to 0." - added
Input schema / properties / y / minimumAdded value: +0
- Changed
browser_type2 fields changed- added
Input schema / properties / selector / descriptionAdded value: +"CSS selector of an input, textarea or select; the first match is used." - added
Input schema / properties / text / descriptionAdded value: +"The field's new value. It replaces the old one; an empty string clears it."
- Changed
comment_add12 fields changed- added
Input schema / properties / body / descriptionAdded value: +"The comment, in Markdown." - added
Input schema / properties / end / descriptionAdded value: +"Last line of the range, inclusive. Defaults to `line`." - added
Input schema / properties / end / minimumAdded value: +1 - changed
Input schema / properties / end / typePrevious value: -"number"New value: +"integer" - added
Input schema / properties / file / descriptionAdded value: +"Project-relative path, e.g. `src/lib/api.ts`." - added
Input schema / properties / kind / descriptionAdded value: +"`task` asks for work (default); `note` only informs." - added
Input schema / properties / kind / enumAdded value: +[ + "task", + "note" +] - added
Input schema / properties / line / descriptionAdded value: +"First line of the range, 1-based." - added
Input schema / properties / line / minimumAdded value: +1 - changed
Input schema / properties / line / typePrevious value: -"number"New value: +"integer" - added
Input schema / properties / type / descriptionAdded value: +"What the comment is about. Defaults to note." - added
Input schema / properties / type / enumAdded value: +[ + "bug", + "refactor", + "performance", + "question", + "note" +]
- Changed
comment_reply2 fields changed- added
Input schema / properties / body / descriptionAdded value: +"The reply, in Markdown." - added
Input schema / properties / id / descriptionAdded value: +"The comment's id, from `reado://comments` or `reado://tasks`."
- Changed
mascot_say4 fields changed- added
Input schema / properties / mood / descriptionAdded value: +"The mascot's expression. Defaults to talk." - added
Input schema / properties / mood / enumAdded value: +[ + "done", + "ask", + "think", + "talk" +] - added
Input schema / properties / text / descriptionAdded value: +"One line, at most 280 characters." - added
Input schema / properties / text / maxLengthAdded value: +280
- Changed
review_context2 fields changed- added
Input schema / properties / file / descriptionAdded value: +"Project-relative path, e.g. `src/lib/api.ts`." - added
Input schema / properties / sessionId / descriptionAdded value: +"The session id from the READO GUIDED REVIEW prompt. Omit it to use the newest session still open."
- Changed
review_plan4 fields changed- added
Input schema / properties / route / descriptionAdded value: +"Every file to review, riskiest first." - added
Input schema / properties / route / items / properties / relatedFiles / descriptionAdded value: +"Project-relative paths worth reading alongside it." - added
Input schema / properties / route / items / properties / suggestedReviewMode / descriptionAdded value: +"How closely the file deserves reading." - added
Input schema / properties / sessionId / descriptionAdded value: +"The session id from the READO GUIDED REVIEW prompt. Omit it to use the newest session still open."
- Changed
review_propose7 fields changed- added
Input schema / properties / body / descriptionAdded value: +"The question, follow-up or missing context, in Markdown." - added
Input schema / properties / file / descriptionAdded value: +"Project-relative path it concerns, if any." - added
Input schema / properties / kind / descriptionAdded value: +"What you are raising." - added
Input schema / properties / line / descriptionAdded value: +"Line it concerns, if any, 1-based." - added
Input schema / properties / line / minimumAdded value: +1 - changed
Input schema / properties / line / typePrevious value: -"number"New value: +"integer" - added
Input schema / properties / sessionId / descriptionAdded value: +"The session id from the READO GUIDED REVIEW prompt. Omit it to use the newest session still open."
- Changed
review_propose_comment10 fields changed- added
Input schema / properties / body / descriptionAdded value: +"The finding: what is wrong and why, in Markdown." - added
Input schema / properties / end / descriptionAdded value: +"Last line of the range, inclusive. Defaults to `line`." - added
Input schema / properties / end / minimumAdded value: +1 - changed
Input schema / properties / end / typePrevious value: -"number"New value: +"integer" - added
Input schema / properties / file / descriptionAdded value: +"Project-relative path, e.g. `src/lib/api.ts`." - added
Input schema / properties / line / descriptionAdded value: +"First line of the range, 1-based." - added
Input schema / properties / line / minimumAdded value: +1 - changed
Input schema / properties / line / typePrevious value: -"number"New value: +"integer" - added
Input schema / properties / sessionId / descriptionAdded value: +"The session id from the READO GUIDED REVIEW prompt. Omit it to use the newest session still open." - added
Input schema / properties / type / descriptionAdded value: +"What the comment is about. Defaults to note."
- Changed
review_propose_route_change4 fields changed- added
Input schema / properties / reason / descriptionAdded value: +"Why the route should change — what the human reads to decide." - added
Input schema / properties / route / items / properties / relatedFiles / descriptionAdded value: +"Project-relative paths worth reading alongside it." - added
Input schema / properties / route / items / properties / suggestedReviewMode / descriptionAdded value: +"How closely the file deserves reading." - added
Input schema / properties / sessionId / descriptionAdded value: +"The session id from the READO GUIDED REVIEW prompt. Omit it to use the newest session still open."
- Changed
review_summarize_file3 fields changed- added
Input schema / properties / file / descriptionAdded value: +"Project-relative path, e.g. `src/lib/api.ts`." - added
Input schema / properties / sessionId / descriptionAdded value: +"The session id from the READO GUIDED REVIEW prompt. Omit it to use the newest session still open." - added
Input schema / properties / text / descriptionAdded value: +"The summary, a few lines, in Markdown."
- Changed
session_done3 fields changed- added
Input schema / properties / status / descriptionAdded value: +"How the request ended. Defaults to done." - added
Input schema / properties / status / enumAdded value: +[ + "done", + "blocked", + "failed" +] - added
Input schema / properties / summary / descriptionAdded value: +"One line on what happened; it becomes the notification's text."
- Changed
session_show1 field changed- added
Input schema / properties / sessionId / descriptionAdded value: +"The session id from the READO GUIDED REVIEW prompt. Omit it to use the newest session still open."
- Changed
session_summarize2 fields changed- added
Input schema / properties / sessionId / descriptionAdded value: +"The session id from the READO GUIDED REVIEW prompt. Omit it to use the newest session still open." - added
Input schema / properties / text / descriptionAdded value: +"The recap, in Markdown."
- Changed
task_block2 fields changed- added
Input schema / properties / id / descriptionAdded value: +"The task's id, from `reado://tasks`." - added
Input schema / properties / reason / descriptionAdded value: +"The question or missing piece, written for the human who has to answer it."
- Changed
task_done4 fields changed- added
Input schema / properties / diffRef / descriptionAdded value: +"The commit or ref holding the change, e.g. a SHA, shown to the reviewer." - added
Input schema / properties / id / descriptionAdded value: +"The task's id, from `reado://tasks`." - added
Input schema / properties / model / descriptionAdded value: +"The model that made the change, for provenance. Defaults to $READO_MODEL." - added
Input schema / properties / verify / descriptionAdded value: +"A shell command that proves the fix, e.g. `pnpm test src/lib/api.test.ts`."
- Changed
task_fail2 fields changed- added
Input schema / properties / id / descriptionAdded value: +"The task's id, from `reado://tasks`." - added
Input schema / properties / note / descriptionAdded value: +"What you tried and why it didn't work; posted as a reply in the task's thread, in Markdown."
27 tool updates
v1.32.0- First observed
browser_animation - First observed
browser_click - First observed
browser_console - First observed
browser_dom - First observed
browser_errors - First observed
browser_eval - First observed
browser_frame - First observed
browser_hover - First observed
browser_navigate - First observed
browser_network - First observed
browser_scroll - First observed
browser_type - First observed
comment_add - First observed
comment_reply - First observed
mascot_say - First observed
review_context - First observed
review_plan - First observed
review_propose - First observed
review_propose_comment - First observed
review_propose_route_change - First observed
review_summarize_file - First observed
session_done - First observed
session_show - First observed
session_summarize - First observed
task_block - First observed
task_done - First observed
task_fail
TDQS
Scored across 27 tools
Most tools target a distinct resource+action, and the descriptions explicitly disambiguate the tricky pairs (browser_errors as a subset of browser_console, review_propose_comment vs review_propose, comment_add vs comment_reply vs review_propose_comment). The only real overlaps are browser_console/browser_errors and the read-only session_show vs review_context, both of which the descriptions diff explicitly. No tool pair appears interchangeable.
Consistent snake_case verb_noun throughout, with clear domain prefixes (browser_*, task_*, comment_*, review_*, session_*). Minor deviations exist: comment_add/comment_reply use different verbs than the task_* lifecycle, and the summarize action is split across review_summarize_file and session_summarize rather than following one prefix scheme. Still highly predictable overall.
27 tools is on the heavy side and just past the threshold where a set starts to feel bloated. However, the surface spans three genuinely distinct sub-domains (browser automation/inspection, guided-code-review lifecycle, task/comment/notification handling), so most tools earn their place rather than being redundant variants.
Browser control, task state transitions, comment creation, review routing, proposal and summarization are all covered with no obvious dead ends for the stated review-oriented purpose. The main gap is read/enumeration: there is no way to list or fetch tasks or existing comments (only add/reply/transition), so an agent depends on work arriving via the prompt.
Maintenance
Related MCP Connectors
Roadmap, tasks, releases and user feedback your coding agent reads and writes over MCP.
AI-native git hosting — repos, PRs, issues, CI gates, and AI code review over MCP (60 tools).
Read-only MCP server: let AI agents read your ORANO saved-video library, tasks, and memory.
Live PR/MR code reviews via review_url_code. OAuth or portal Bearer auth.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceExposes CodeRabbit IDE review comments as MCP tools and resources, allowing scanning, listing, and managing comments from clients like Cursor.5 npm1MIT
- AlicenseAqualityDmaintenanceMCP server that exposes code review tasks from the Fix My Comments VS Code extension to AI agents, enabling them to list, retrieve, reply to, and update task statuses.411 npmMIT
- FlicenseNot gradedqualityBmaintenanceMCP server for AI DevTool workflow, exposing tools and resources for code review, repository chat, and repository operations.1-

Nolane Habitatofficial
FlicenseNot gradedqualityBmaintenanceProvides coding agents with a durable, revision-aware project workspace for semantic context, governed source changes, verification, task checkpoints, and observability through an MCP interface.1-