What are review agents?
Build review agents for your product. Point an agent at a URL, and it reviews the content and posts findings as comment annotations. Review agents can review anything you can surface:- Web pages and sites: text, screenshots, HTML, CSS, links, accessibility tree, Lighthouse.
- Your data: pull any REST endpoint into the review with the
rest-apistrategy. - Charts, dashboards, and more: anything you can expose via an API or MCP server.
What you get
- Built-in and custom agents. Ready-made agents (Proofreader, Link Checker, Image Inspector, Mobile Inspector, Consistency Checker, PII, Lighthouse, accessibility, and more), or your own from a prompt.
-
Plain-English agent builder. Let your users describe a review in simple English; prompt tools (enhance, validate, refine) check it, expand it into a full agent config, and iterate on feedback.
userContextFieldsrender typed inputs in your setup UI. - Pluggable context gathering. Stack strategies: page text, screenshots, HTML, CSS, links, accessibility tree, computed styles, robots.txt, sitemap, Lighthouse, live REST API data.
-
Live REST API context. The
rest-apistrategy fetches your endpoints at execution time and injects the responses into the prompt. Secrets are encrypted at rest and redacted on read. -
MCP tool use. The
mcp-toolsstrategy runs a multi-turn tool loop against your remote MCP servers. Works with Claude and Gemini. - Versioned configurations. Every behavioral edit creates a new version; one-click restore rolls back.
-
Async execution.
Run Executionreturns anexecutionIdimmediately; pollGet Executionuntilstatus !== "running". -
Cross-page execution. Set
crossPageExecute: trueto crawl the seed URL and review up tomaxUrlsToProcesspages. -
Page lists. Send
urlsto review exactly those pages, with no crawl. Built for sites whose pages differ only by a query string. -
Several agents, one request. Send
agentIdsto run up to 10 agents together, on one page or on a list of pages. Each agent still gets its own execution, and each page is loaded once for all of them. -
Focused rechecks. Set
userContext.focusIssueTypesto recheck only some issue types, for example only blurry images. - Per-run options. Switch individual checks of a built-in agent off, or tune its thresholds, for one run. See Per-run options.
-
Device emulation. Run each execution as
"mobile"or"desktop". - Re-run deduplication. Re-running an agent replaces the prior run’s suggestions instead of piling up duplicates. A focused recheck replaces only the suggestions of the issue types it rechecks.
- Token usage analytics. Per-agent, per-model, per-month token usage via the Analytics endpoint.
- Agent groups. Bundle related agents (e.g. “Brand QA”) and filter lists by group.
Use cases
Brand consistency
Verify brand colors, typography, and logo placement across your marketing pages. Re-run on every deploy.
Pre-launch QA
Run the Proofreader, Link Checker, and accessibility agents before a release. Findings land on the staging document.
Content moderation
Flag PII and profanity on user-generated pages. Pair with Review Workflow Builder for human review.
Cross-page audit
Set
crossPageExecute: true and the crawler discovers internal links, then reviews each page.Data-enriched checks
Pull live business data into the prompt with
rest-api, e.g. validate on-page pricing against your billing API.Workflow integration
Trigger an agent from a Review Workflow Builder workflow node and park the workflow on its findings.
User-built agents
Let your users create review agents in plain English from your UI. Ship built-in agents as defaults; prompt tools turn user instructions into custom ones.
Docs accuracy
Use
mcp-tools to verify on-page code snippets live against your documentation MCP server.How it works
- Define the agent. Call Create Agent with a name, instructions, and config (context gathering, execution strategy, post-processing).
- Run an execution. Call Run Execution with
agentIdandurl, or withagentIdsto run several agents on the same pages. Returns anexecutionIdper agent immediately. - Poll for results. Call Get Execution until
status !== "running". SetincludeResults: truefor per-URL findings. - Findings appear as annotations. Each finding becomes a comment annotation on the document referenced by
organizationId/documentId(on by default).
Mental model
Execution lifecycle:
Pipeline phases
Each agent run executes sequential phases:Execution statuses
Terminal status precedence:
error > partial > failed > passed. A run that produced findings but had a single failing page surfaces as partial (not error). For partial/error, per-page failure detail is in resultsSummary.urlsErrored and resultsSummary.erroredUrls.
Built-in agents
Built-in agents are pre-registered for every workspace. Run one by its ID.
When a finding comes with an exact correction, such as a corrected spelling or link, the agent puts it in
suggestedFix. The comment annotation carries it as agent.reason.suggestedFix.
Display names can change between releases. Identify agents by their ID.
Issue types
These built-in agents tag every finding with one of a fixed set ofissueType values. Use them to filter findings, or pass some of them in userContext.focusIssueTypes on Run Execution to recheck only those issues.
A focused run also skips work that cannot produce the listed issue types. A Mobile Inspector run focused on
small-tap-target taps neither the menu nor same-page links, and a Consistency Checker run focused only on cross-page-casing or the visual issue types (style-mismatch, missing-hover, hover-invisible) makes no model call.
Per-run options
Seven built-in agents read options from theuserContext of Run Execution. Use them to switch a check off or tune a threshold for one run. Leave a key out to keep its default: the defaults are the agent’s normal behavior. A value of the wrong type is ignored, and the default applies.
Each agent reads only its own keys, so a run with agentIds can carry options for several agents in one userContext:
Link Checker
Options forbroken-links.
The three staging word lists take single host words of 2 to 30 letters or digits, at most 50 per list.
ignoreOverlaySelectors and skipClickLabels take at most 20 entries, of at most 200 and 60 characters. Other entries are ignored.
During the click test, a click that opens a new tab, starts a download, or hands off to an app counts as working. A page that builds its content from data queries the test refuses, such as GraphQL, is not judged for dead controls.
Proofreader
Options forspell-check. The Proofreader finds candidates with a dictionary and rules, then asks a verification model to confirm the ones the rules are not certain of. If the model cannot answer, the run still reports the findings the rules are certain of, and its summary says what could not be checked.
acceptedWords and brandNames take single words. The first 500 entries are read, and an entry longer than 64 characters is ignored.
The verification model checks at most 20,000 candidates per API key per UTC day. Past that, the Proofreader reports only the findings its rules are certain of, and the run summary says The daily spelling check limit was reached.
Consistency Checker
Options forconsistency-checker. Its keys start with consistency because a run with agentIds shares one userContext across every agent.
A visual finding names the elements it groups in
metadata.labels. A style-mismatch finding also lists what differs in metadata.differences, one entry per property: { property, value, dominant, dominantCount, css }, where css is the declaration the rest of the site uses, such as border-radius: 8px. Its suggestion names the first declaration and counts the others. Read metadata on the findings of Get Execution with includeResults: true.
Image Inspector
Options forimage-inspector. A value outside its range is ignored, and the default applies.
Images without alt text are reported as one finding: pinned on the image when there is one, and page-level when there are several. The bad-crop check is the Image Inspector’s only model call, and it is off unless turned on. A run focused on other issue types never runs it. When the model gives no usable answer, the run summary says
Photo crops could not be checked.
Mobile Inspector
Options formobile-inspector. A value outside its range is ignored, and the default applies.
The phone checks for sideways scrolling, overflow, cut-off content, and small tap targets always run. With
menu skipped, the menu is not judged, and links that sit in a hidden phone menu are never reported as missing on phones.
Migration Parity
Options formigration-parity. liveSiteUrl is required.
A run without a usable
liveSiteUrl, or whose live site is the site of the run’s url, returns INVALID_ARGUMENT before any execution is created, with Migration Parity needs the live site to compare against: send userContext.liveSiteUrl (a full address or a bare domain) or Migration Parity needs a live site other than the project site: userContext.liveSiteUrl names the same site as the run's url. In a run with agentIds, Migration Parity is listed in data.failed and the other agents still start.
For each page, the agent finds the same page on the live site and reports what the live page has that the new one lost. Names, numbers, and addresses are compared exactly; a phone number counts as kept in any written form. Contact details the live site shows only in its header or footer are compared once per run, on the run’s first page.
Live pages are read without your site access credentials, and only on public addresses. A page that was not compared gets no findings, keeps its earlier suggestions, and says why in the run summary: no matching live page, a live site that could not be read, a live page that timed out or refused the visit, too little text on either page, or a sign-in wall in front of either page. A page skipped for a sign-in wall is not billed.
Each finding carries livePageUrl and missing (the missing items, at most 20) in agent.reason. Each page’s result on Get Execution with includeResults: true carries agentResult.report: livePageUrl, match ("same-path", "sitemap", or "none"), compared (how many bios, reviews, FAQs, phone numbers, emails, addresses, and list items were compared), and skipped ("gated" or "live-gated" when a sign-in wall stood in front of the page or its live page).
Content Request List
Options forcontent-request-list. All are optional.
The agent posts one page-level finding per page, with issue type
content-requests. The whole checklist is on the finding’s agent.reason.contentRequests and on each page’s agentResult.report.contentRequests in Get Execution results: items { kind, label, section?, text?, annotationId?, count? }, where kind is empty-section, placeholder-text, coming-soon, placeholder-image, thin-bio, or open-question.
It reads the run document’s open comment threads and quotes one only when the run’s audience can already see it: a public thread always, an organization-private thread only on a "private" run of that same organization, and a thread restricted to named users never. Threads an agent opened, and threads whose last human reply looks like the answer, are left out. It reads up to 2,000 annotations past the agents’ own suggestions, and the summary says when older threads were not read.
A page title alone in a banner, a “Coming soon” badge among real content, and stand-in lines in the header, navigation, or footer are not listed. A page behind a sign-in wall is skipped (report.skipped: "gated"), is not billed, and keeps its earlier checklist.
Context gathering strategies
Stack one or more strategies in the order you want them to run.
Per-strategy overrides are supplied under
contextGathering.strategyOptions["<strategy>"]. See Create Agent for the rest-api endpoint configuration schema.
Execution strategies
Knowledge (Memory-RAG)
Agents can pull workspace knowledge from Velt Memory into the prompt viaexecution.knowledge:
The
knowledge block is strictly validated: only the four fields above are accepted. The legacy sourceIds field has been removed, and maxChunks is now capped at 20 (previously 50). Knowledge retrieval never fails an execution: if Memory is unavailable, the run continues in a degraded mode without knowledge context.Scope
organizationId and documentId are required on Run Execution and control where annotations land. The document must already exist before you run an agent against it.
Get started
Setup
Create an agent, run it against a URL, and read the findings end-to-end.
API Reference
All endpoints organized into Agents, Execution, Versioning, Prompt Tools, Analytics, and Groups.

