For AI agents: the complete documentation index is available at https://a3s-lab.github.io/Test/v1.0.0/en/llms.txt, the full documentation bundle is available at https://a3s-lab.github.io/Test/v1.0.0/en/llms-full.txt, and this page is available as Markdown at https://a3s-lab.github.io/Test/v1.0.0/en/reference/capabilities.md.

Capability reference

This page lists capabilities that the current version exposes and can verify. Each entry identifies its invocation, required context, observable output, and fail-closed condition. Deployment-provided models, browsers, and remote workers affect runtime availability, so the presence of a type in source does not prove that the current machine has its backend.

Read the installed contracts first

a3s-test --version
a3s-test agent schema
a3s-test provider schema contract-generation
a3s-test provider schema design-audit
a3s-test provider schema visual-grounding
a3s-test worker inventory

agent schema returns the external-planner protocol, action revision, JSON Schema, and session invariants without starting a browser. capabilities --json probes the actual Web adapter and returns a test.driver.web.* error when that adapter is incompatible, missing, or unable to start. Callers must handle this result instead of substituting static documentation for machine discovery.

Capabilities have three delivery states.

StateMeaningCaller responsibility
Built into CoreA3S Test implements types, admission, state, and resultsSupply admitted input and handle structured failures
Supplied by a driverCore defines the contract while a Web, GUI, or TUI driver actsDiscover capabilities and respect platform verification
Deployment providerA3S Test validates requests, responses, provenance, and budgetsSupply endpoint, identity, credentials, license, capacity, deadline, and cost limits

Use these guides when you need procedure and implementation detail beyond the tables.

TopicIn-depth guide
Every action, wait, network control, and artifactActions, waits, and evidence
Basic and advanced assertionsAssertions and stability
Web, GUI, TUI, and MCP lifecycleWeb, GUI, TUI, and MCP
LLM, contract, grounding, and design modelsLLM, grounding, and design providers
Inventory, workers, shards, and quarantineWorkers and distributed execution

Core sessions

CapabilityEntry pointRequired inputOutput and failure boundary
Start a persistent Web sessionagent startURL, session, goal, and at least one success conditionRetains session, origin, and policy. Driver startup failure creates no actionable session
Read a fresh observationagent observeActive sessionNew observation_id, page state, and refs. A failed observation leaves old refs unusable
Inspect Page Contextagent inspectSession plus page, node, component, or region scopeBounded detail and cursor. A stale private node ID fails closed
Execute a typed actionagent act or a compact action commandAction JSON and latest observation for ref targetsSchema, capability, target, policy, and revision validation precede driver dispatch
Request visual groundingagent groundLatest observation, ACL provider config, and queryScreenshot-bound candidates with no click and no verdict
Request a design auditagent auditLatest observation, ACL provider config, and optional dimensionsAdvisory report with no action or repair authority
Inspect persisted stateagent show, agent listWorkspace-local sessionReads metadata, events, and terminal state without taking over another live session
Finish normallyagent finishEvidence-backed passed or failed status and summaryWrites the terminal report and cleans up the owned surface
Abort an unsafe sessionagent abortExact sessionCancels that session and cleans up its surface without killing browsers by process name

The persistent-session loop is start -> observe -> act -> observe -> finish. An action can change the DOM, focus, route, viewport, or browser context. Observe again after the change and never reuse an old @eN or @cN.

Surface execution

Page and interaction actions

ActionTarget or context requirementResult and constraint
navigateAbsolute URLURL must belong to an admitted origin; a successful navigation expires the observation
snapshotCurrent surfaceCreates a semantic snapshot and new refs; interactive can limit the result
click, hover, focusLatest ref, semantic target, or explicit CSSTarget must exist, be usable, and fit the action capability
double_click, context_clickLatest ref or CSSContext-click is page-scoped and does not expose the browser's native menu
fill, typeEditable targetfill replaces the value while type appends
insert_textEstablished focus, caret, or selectionAccepts no target and grants no additional targeting authority
check, uncheck, selectMatching checkbox, radio, or select controlAn incompatible control type is rejected before driver dispatch
dragSource and target from the current observationBoth endpoints pass targeting and revision checks
pressCurrent keyboard contextSupports keys and chords; re-observe after a page change
wheelDeltas, optional modifiers, and optional current targetProduces a real wheel gesture and does not replace viewport configuration
viewportWidth, height, and optional scaleAdvances the observation revision for responsive validation
tab, frameTab operation or accessible frame targetRe-observe after changing context; browser policy still limits cross-origin content
dialogCurrent dialog plus accept or dismiss operationA missing dialog cannot be treated as success
uploadFile control and manifest-admitted input pathsFiles must fit root, count, and size limits
downloadDownload trigger plus relative artifact pathWrites only under the current run's artifact root

Synchronization, network, and evidence actions

ActionInputOutput and constraint
waitLoad, text, URL, or visibility conditionRuns under a deadline and returns a structured timeout
Hidden waitStable semantic or CSS targetPolls read-only visibility every 50 ms; deadline/cancellation and 1,201 probes bound it
assertAdmitted text, URL, visibility, or other expectationLocal evidence decides pass or fail; providers cannot override it
Hidden assertStable semantic or CSS targetPasses when no visible match exists; visible counter-evidence is test.assert.hidden
Stable assertExpectation plus stable_for_ms and optional intervalRepeats only the read-only assertion; a later false sample is test.assert.unstable
network_route, network_unrouteAdmitted pattern and static routeAdds or removes a rule only inside network policy
har, trace, videoStart or stop plus a bounded relative pathRecords an explicit window and produces session-owned artifacts
screenshotRelative PNG pathSaves under the artifact root and can bind a later provider request
accessibilityRelative JSON path and interactive selectionRetains an interactive or complete semantic tree
console, page_errorsRelative JSON path and clear selectionRetains browser-error baselines; clear affects only the current driver buffer
terminal_pasteBounded textLegal only on a TUI surface
terminal_resizeColumns and rowsResizes the owned PTY or ConPTY and updates terminal semantics
terminal_recordingRelative artifact pathRetains a bounded terminal recording outside arbitrary workspace paths

The action protocol revision is 15. Generate the complete schema with a3s-test agent schema. Unknown fields, missing required fields, invalid enums, and actions unsupported by the selected surface are rejected before execution.

Live control-state assertions

CapabilityACL formObserved evidenceFailure boundary
Exact control valuetarget plus valueCurrent DOM or driver value, returned as expected and actualMissing, ambiguous, invalid, or unreadable targets stay test.driver.*; an observed mismatch is test.assert.value
Boolean control stateenabled/disabled, checked/unchecked, or selected/unselectedLive boolean state and the normalized state nameA missing target never proves a negative state; only a resolved mismatch becomes the matching test.assert.* code
Exact selected settarget plus selected_valuesDuplicate-free, sorted expected and actual arraysExpected duplicates fail admission, invalid driver output fails closed, and a different exact set is test.assert.selected_values
Stable control stateAny form above plus stable_for_ms and optional intervalFirst and last assertion output, bounded sample count, and elapsed windowA later counterexample is test.assert.unstable and retains both the initial evidence and transient mismatch

Web assertions read live DOM properties. Native checkbox and radio checked values take priority over contradictory ARIA, while custom controls can expose boolean state through valid ARIA. selected_values = [] is a valid exact empty-set assertion. GUI can compare an exact value only when CUA supplies one and otherwise fails closed; boolean and multi-selection state are currently unsupported there. TUI control-state assertions are unsupported. Page Context refs resolve to their current semantic target before dispatch, while a standalone ref that cannot expose the requested property returns a driver error rather than guessing.

Live semantic-state assertions

CapabilityACL formAuthoritative Web evidenceFailure boundary
Disclosure stateexpanded or collapsed<details>.open, otherwise valid aria-expandedMissing state is unsupported; a mismatch uses test.assert.expanded or .collapsed
Toggle statepressed or unpressedExact boolean aria-pressedmixed is unsupported; a mismatch uses test.assert.pressed or .unpressed
Read-only statereadonly or writableNative readOnly where applicable, otherwise valid aria-readonlyWritable does not imply enabled; a mismatch uses test.assert.readonly or .writable
Requirement staterequired or optionalNative required where applicable, otherwise valid aria-requiredUnsupported controls stay driver-owned; a mismatch uses test.assert.required or .optional
Validity stateinvalid or validConstraint Validation when willValidate, otherwise defined aria-invalidUnknown state never proves valid; a mismatch uses test.assert.invalid or .valid

Native state takes priority over contradictory ARIA. Boolean ARIA accepts exactly true and false; aria-invalid additionally accepts grammar and spelling as invalid. The five dimensions are orthogonal, and every negative form requires one resolved target plus authoritative boolean evidence.

ACL rejects browser refs and visual points as test.spec.semantic_state_target_unstable; a current Page Context ref may resolve to a stable locator first. Semantic locators traverse open Shadow DOM and exclude accessibility-hidden ancestry, while CSS retains current-document semantics. Unsupported state returns test.driver.web.state_unsupported. GUI and TUI fail closed. Every form supports bounded stability; checked-in evidence covers 1,000/1,000 deterministic Web classifications, 100/100 sustained and 100/100 transient windows, plus 27 positive assertions and 17 negative or driver-error classifications in standalone Chromium.

Focus-ownership assertions

CapabilityACL formObserved evidenceFailure boundary
Exact focus ownershipfocused or unfocused with one targetTarget compared with the deepest observable active elementMissing targets never prove unfocused; resolved mismatches use test.assert.focused or test.assert.unfocused
Component-scoped focus ownershipfocus_within or focus_outsideExact focus plus rendered flat-tree ancestry, including assignmentsMissing targets never prove focus_outside; resolved mismatches use test.assert.focus_within or test.assert.focus_outside
Stable focus ownershipEither pair plus stable_for_ms and intervalFirst and last boolean state plus bounded stability metricsA later valid mismatch is test.assert.unstable; target or driver failures keep their original ownership

Web resolves one stable target and reads the deepest activeElement through nested open shadow roots in one page evaluation. Flat-tree containment follows assigned slots, DOM parents, and shadow hosts. Semantic locators traverse open Shadow DOM and exclude accessibility-hidden composed ancestry, including hidden slot wrappers. CSS retains current-document query semantics.

ACL rejects browser refs and visual points as test.spec.focus_target_unstable; a current Page Context ref may first resolve to a stable locator. A programmatic standalone browser ref returns test.driver.web.state_unsupported. GUI and TUI fail closed because their current protocols do not expose equivalent focus ownership. Checked-in evidence covers 600/600 deterministic Web classifications, 200/200 sustained and 200/200 transient windows, plus 17 positive assertions and 11 negative or driver-error classifications in standalone Chromium with forward/reverse Tab, open Shadow DOM, assigned slots, timed focus movement, and exact cleanup.

Rendered-output assertions

CapabilityACL formObserved evidenceFailure boundary
Target-bound rendered copytarget plus rendered_textExactly one visible target, normalized expected and actual textMissing or ambiguous targets stay driver errors; different observed copy is test.assert.rendered_text
Visible locator cardinalitystable target plus non-negative visible_countComplete visible match-set size, including zeroRefs/visual points fail admission, invalid selectors stay driver errors, and a different count is test.assert.visible_count
Ordered rendered collectionstable target plus rendered_textsComplete normalized text vector, preserving order, duplicates, and empty setsRefs/visual points fail admission; invalid/oversized collections stay driver errors; a different vector is test.assert.rendered_texts
Stable rendered outputAny form above plus stable_for_ms and optional intervalFirst/last scalar text, vector, or count plus the bounded windowA later observed mismatch is test.assert.unstable; later driver failure keeps driver ownership

CSS collection probes use visual rendered geometry and do not treat aria-hidden alone as invisible. Semantic locators additionally exclude accessibility-hidden ancestry and traverse open Shadow DOM. Both exclude hidden, display-none, visibility-hidden, fully transparent, and zero-geometry targets. rendered_texts is bounded to 256 expected and observed items. GUI and TUI fail closed for all revision-9/revision-10 forms.

Rendered-layout assertions

CapabilityACL formObserved evidenceFailure boundary
Two-target layout relationtarget, relative_to, and one of 17 layout relation namesBoth freshly resolved rectangles, relation, tolerance, and match stateMissing/ambiguous/invalid/malformed geometry stays a driver error; two valid rectangles that differ become test.assert.layout
Bounded toleranceOptional integer tolerance_px from 0 through 1,024Exact CSS-pixel tolerance used by CoreNegative, fractional, or excessive values fail ACL admission; typed callers above the bound fail before page dispatch
Stable layout relationLayout form plus stable_for_ms and optional intervalFirst and last complete dual-rectangle payloads plus bounded metricsA later relation mismatch is test.assert.unstable; later target resolution or geometry failure keeps driver ownership

The 17 relations cover four directions, containment/inside, overlap/non-overlap, six edge or center alignments, and width/height/size equality. Both targets must be stable semantic or CSS locators; browser refs and visual points fail admission, while current Page Context refs can resolve to stable locators before dispatch.

Web resolves both targets and reads both rectangles in one page evaluation. CSS keeps visually rendered aria-hidden elements, while semantic locators exclude accessibility-hidden ancestry and traverse open Shadow DOM. GUI requires both frames in one fresh CUA snapshot. TUI fails closed because terminal cells are not equivalent rendered-page geometry. Checked-in evidence covers 3,400/3,400 deterministic cases, 100/100 sustained and 100/100 transient windows, all 17 relations, and 15 negative/error classifications in standalone Chromium.

Viewport coverage and pointer-hit assertions

CapabilityACL formObserved evidenceFailure boundary
Visual-viewport intersectionin_viewport = <stable target>Target rectangle, visual-viewport rectangle, and independently recomputed ratioZero-area intersection is test.assert.in_viewport; target resolution and malformed evidence remain driver errors
Minimum viewport coverageStable target plus viewport_coverage_at_least = 1..=100The same rectangles, ratio, actual percent, comparison, and thresholdValid geometry below the threshold is test.assert.viewport_coverage_at_least; the trivial zero threshold fails admission
Maximum viewport coverageStable target plus viewport_coverage_at_most = 0..=99The same independently recomputed coverage evidenceValid geometry above the threshold is test.assert.viewport_coverage_at_most; the trivial 100 threshold fails admission
Pointer hit reachabilitypointer_reachable = <stable target>The same geometry plus an ordered 3 by 3 deep-hit grid and reachable-sample countNine valid misses are test.assert.pointer_reachable; this does not imply enabled state, keyboard access, or business clickability
Stable interaction prerequisiteAny form plus stable_for_ms and intervalFirst and last complete geometry or hit payloads plus bounded stability metricsA later valid mismatch is test.assert.unstable; a later resolution or evidence failure keeps driver ownership

All forms require a repeatable semantic or CSS locator. Browser refs and visual points fail admission, while a current Page Context ref may resolve to a stable locator before dispatch. Coverage is intersection area divided by complete target area, so it proves geometry without claiming occlusion or pointer reachability. Web captures the target, visual viewport, and optional nine-point hit grid atomically. Semantic targets and deep hit testing traverse open Shadow DOM. Native hit testing treats a pointer-receiving transparent overlay as a blocker and skips pointer-events: none overlays. GUI and TUI fail closed because their current protocols do not expose equivalent evidence.

Checked-in evidence covers 1,000/1,000 base Core geometry cases plus 2,000/2,000 threshold cases, 4,000/4,000 Web protocol classifications, 300/300 sustained and 300/300 transient windows, plus 37 passing assertions and 25 negative or driver-error classifications in standalone Chromium with exact cleanup.

Page perception and Test Kit

CapabilityEntry point or fieldOutputKey boundary
Automatic DOM contextA3STestKit or installTestKitLight DOM, open Shadow DOM, semantics, state, locators, and geometryTest Kit is optional; Web accessibility snapshots work without it
Component ownershipA3STestBoundaryID, name, parent, ready, facts, source, and multi-root boxesSource is a locator hint and grants no file authority
Ranked source mappingregisterSource, registerSourceMapConfidence-ranked exact or ancestor spans on selected nodesExplicit declarations only; no framework-private state or source text
Three geometry spacesgeometry.viewport, document, normalizedCSS pixels, document position, and visual-viewport normalizationGeometry is evidence and a last resort after semantics
Stable locator chainlocatorsRole, label, test ID, placeholder, text, and CSS candidatesA candidate must still resolve in the latest revision
Layout graphui.layoutFlex, Grid, normal flow, box model, overflow, and relation edgesMissing endpoints, cyclic containment, and budget drift are rejected
Visual systemui.styleColors, typography, spacing, radii, shadows, z-index, and responsive conditionsClass names alone never establish a component
State differencesui.stateDiffsInteraction-state changes that the page actually producedTest Kit does not trigger hover, focus, or click to sample
Motion profileui.motionTransitions, animations, timelines, ranges, and reduced motionAn unresolved named timeline is not guessed as scroll or view
Scoped snapshotsnapshot({ detail, scope })Page, node, component, or region contextPrivate node IDs are never public or caller-persisted
Exact revision diffwaitForDiff, sinceRevision, deltaChanged/removed nodes and components plus page, facts, and UI invalidationMissing history or oversized metadata returns reset_required
Bound paginationcursor, nextCursorThe next page against one unchanged request and baselineAny request or revision mismatch fails instead of restarting
BudgetsProvider ceilings and per-request limitsNode, string, encoding, UI node, state, and duration useA request can only reduce installation ceilings
Redactionredact plus built-in sensitive-field rulesFiltered text, attributes, form state, and factsCookies, storage, passwords, headers, and secrets stay out

Public ref authority remains fixed. @eN comes from browser accessibility, and @cN represents a uniquely actionable Page Context node. Both are actionable only in the latest observation. Within that observation, a Rust-validated complete delta may retain the stable locator behind an unaffected @cN; changed, removed, reset, legacy, or uncertain bindings fail closed. @uN connects style, layout, state, and motion evidence and is always read-only.

Human review and repair

CapabilityEntry pointOutput or stateFailure boundary
Element and text markingOverlay element, text, and multi toolsNode, text, or ordered multi targetTarget must still belong to the latest revision at send time
Region and freehandArea and draw toolsViewport rectangle or bounded point sequenceDrawings remain subject to point, region, and encoding budgets
Layout ModePlacement or rearrangeComponent type, canvas, purpose, and destinationRecords intent only and never moves DOM or writes styles
Draft recoveryrepairStorageMemory, session, or local draftSaving a draft does not enter the Repair Ledger
Single and batch sendOverlay send or bridge queueOrdered a3s.test.repair/1 findings and batchExplicit send authorizes only the listed scope
Same-origin adapterrepairEndpointBounded POST plus browser-side retry queueReceives no workspace, shell, Git, MCP, or model credentials
Recovery discoveryrepair-inbox, test_repair_inboxPrioritized active or closed durable loops with typed next actionsBrowserless projection; expired leases require reconciliation
Pickup and claimrepair-watch, repair-claimQueued finding, lease, and attempt IDOnly one potential workspace mutation runs at a time
Report editing phaserepair-progress, repair-reply, repair-completeRepairing, needs-input, or verifying stateAttempt or lease mismatch leaves state unchanged
A3S Test verificationrepair-verifyBefore/after evidence, focused checks, optional ACL candidate, and review-readyRequires a newer ready revision; failure never auto-resolves
End an attemptrepair-fail, repair-cancelAppend-only failure or cancellation eventRetains old attempts, replies, and evidence
Human acceptanceAccept, dismiss, or reopen actionResolved, dismissed, or queued againHuman review is default; automatic mode still persists review-ready first

Expectations, contracts, and models

CapabilityEntry pointOutputAuthority boundary
PRD candidate generationcontract generate plus a PRD sourceExact byte ranges, digests, confidence, conflicts, and open questionsProduces a draft and never a runner expectation
Design candidate generationcontract generate plus a design sourceImage digest, regions, hierarchy, and geometry candidatesDoes not claim browser accessibility observation
Human contract reviewcontract reviewCanonical Surface Contract and review auditUnresolved conflicts, changed sources, or invalid citations block publication
Page contract verificationACL verify_contractDeterministic matches, findings, outcome, and provenanceLegal only inside a closed ACL suite
Visual-grounding provideragent groundObservation and PNG-digest-bound point or box candidatesAdvice does not click, set verdicts, or authorize repair
Design-audit provideragent auditBounded advice across nine design dimensionsHigh-priority advice maps to at most important
Embedded planning provideragent run or SDK-injected LlmProviderOne typed action proposal or finish requestSuccess still requires a local expect

Every provider is deployment-supplied. A3S Test downloads no weights, selects no inference backend, and stores no provider's long-lived credentials. Requests bind provider and model identity, deadline, bytes, candidate count, cost, and usage limits.

Evidence, regression, and scheduling

CapabilityEntry pointOutput or constraint
ACL static admissiona3s-test checkRejects unknown blocks, invalid targets, escaped paths, and ambiguous conditions before surface startup
Deterministic runa3s-test runActions, waits, assertions, artifacts, terminal report, and bounded cleanup
Negative visibilityACL expect with hiddenHidden/absent evidence, visible counterexample, and preserved driver-error ownership
Sampled stabilityACL expect stability fieldsFirst/last assertion data, bounded sample count, elapsed window, and stable transient-failure code
Failure classificationJSON result and stable error codeSeparates test.spec.*, test.driver.*, test.assert.*, and test.run.*
Worker inventoryworker inventoryPlatform, surface, driver, protocol, capacity, and health
Distributed plandistributed planAssigns admitted scenarios only to compatible workers
Distributed executiondistributed runAuthenticated shards, aggregated results, and remote-artifact references
Remote artifactsa3s.test.remote-artifacts/1Bounded listing, chunked reads, digest verification, and local archival

A remote request cannot select a worker executable, application, backend, credential, or network policy. Deployment startup fixes those values. GUI workers also use exclusive pools so concurrent sessions cannot compete for one physical desktop.

Current support scope

SurfaceCurrent status
WebPersistent agent sessions and ACL through A3S Browser or a compatible standalone adapter
GUImacOS CUA verified on a real arm64 host; Windows and Linux remain under separate review
TUIACL suites run in an owned PTY or ConPTY process tree

Outside built-in authority

  • Test Kit does not edit the host DOM, source, or workspace.
  • A model provider owns no browser observation, test verdict, or repair authorization.
  • Submitting a finding grants no commit, push, release, or deployment permission.
  • PRDs and designs do not become a fabricated browser accessibility tree.
  • An unverified GUI backend is not presented as release-grade support.

To run a real flow, continue with From page exploration to stable regression. To expose rendered context, use Web Test Kit. When a run fails, use Troubleshooting to separate product, specification, driver, and infrastructure faults.