TOB stands for Tool Observation Bus. Nova uses TOB to turn agent tool activity into observed evidence that other areas can compare with agent claims.
TOB records what Nova can observe during real execution: a page was read, a selector was touched, text was entered, navigation was attempted, a tool failed, or a gate stopped a call before it ran.
A completion note is a claim. TOB evidence is the observable trail behind that claim. ETM can reject a task completion when checked units do not have enough observed support, and ALP, LCJ, PKS, OK, CLS, and AAG can use the same evidence according to their own rules.
Users rarely operate TOB directly. Agents and integrators see TOB through fields such as evidenceSummary, verificationResults, taskAwareness.completionAllowed, coverageEvidence, and task URL coverage gates.
In short
- TOB records observed tool evidence, not durable memory.
- It separates agent claims from execution signals.
- Evidence becomes useful only when bound to a task, tab, or scope.
- ETM can block premature completion with reason=evidence_gap.
- Coverage Scan provides server-registered coverageEvidence for exhaustive URL tasks.
- TOB evidence never bypasses user approval or action safety gates.
What TOB observes
TOB keeps evidence-relevant signals from agent tool work. It does not turn every event into trusted memory; it preserves the signals other systems need for review.
- Tool dispatch TOB can record which tool ran, whether it succeeded, how long it took, which target it used, and whether it produced a logical success or an error.
- Surface context For browser work, TOB can keep page URL, route, tab, document, selector, input, and before/after context so later checks know what the action touched.
-
Action kind
Observed work is classified as
read,navigate,interact,writeormeta. - Signal flags Read, visual exposure, DOM exposure, selector touch, input supplied, navigation committed, mutation attempted, and mutation committed are examples of signals TOB can preserve.
-
Task evidence
For ETM, TOB compares checked task units with observed evidence and exposes the result in
evidenceSummary. -
Coverage evidence
For exhaustive URL work,
nova.coverage_scanreturnscoverageEvidencefrom registered scans instead of trusting agent-supplied coverage claims.
When this matters
TOB matters when Nova must prove that work actually happened before accepting a result: large URL reviews, compliance or accessibility checks, task runs with many units, selector repair, learning from real outcomes, or any workflow where a plausible completion note is not enough.
Knowledge model for agents
For an agent, TOB answers four questions: which work was claimed, which signals were observed, how strong is the evidence, and what decision should another system make from that evidence?
- Claim
- A reported state from the agent, such as a task unit marked checked or a completion request for an instance.
- Observation
- A tool-execution signal Nova can observe, such as a read, click, input, navigation, failure, blocked call, or structured scan.
- Scope
- The work boundary that binds observations to a task or target. Without scope, evidence may exist but cannot safely prove a task unit.
- Evidence grade
strongmeans observed support is strong enough for the unit;weakmeans some signal exists but is incomplete;nonemeans expected evidence is missing after complete ingestion;unknownmeans Nova cannot judge yet.- Evidence gap
- A difference between
claimedCheckedUnitsand evidence accepted by the active policy. If the gap is too large, completion can returnreason=evidence_gap. - Coverage evidence
coverageEvidenceis a registered-scan result. It becomes trusted only when server checks pass, including URL consistency and claimed-vs-measured extraction sanity.- Verification report
verificationResultssummarizes explicit verification-contract steps submitted throughevidenceReport.
How agents use TOB information
TOB is an evidence route, not a user-facing task list. The agent performs work, reports progress, reads evidence state, and only completes when observed evidence supports the claim.
-
Create a scoped task or claim
The agent works inside a claimed tab or an ETM instance created with
nova.task_instance_create. This gives TOB a boundary for evidence correlation. -
Use normal browser tools
Calls such as
nova.perceive,nova.read_text,nova.navigate,nova.click_selectorornova.type_selectorcreate observable dispatch signals. -
Report what was checked
For task instances, the agent marks units through
nova.task_instance_progress. Those checked units become the claim set that TOB later tests against observations. -
Use Coverage Scan for exhaustive URL work
When an exhaustive URL task needs block-eligible evidence, the agent uses
nova.coverage_scanwith a registeredscanIdinstead of claimingcoverageEvidencethrough arbitrary evaluation. -
Read evidence state before completion
nova.task_instance_getcan returnevidenceSummary,urlCoverageandtaskAwareness.completionAllowedso the agent can see whether completion is likely to pass. -
Complete only when evidence supports it
nova.task_instance_completecan returncompleted=falsewithverification_failed,evidence_gapor task URL coverage guidance when observed evidence is not enough.
When TOB evidence applies
TOB state describes evidence maturity. It can support or reject a claim, but it never grants permission to perform an unsafe website action.
scope missing
- Meaning
- A tool signal exists, but it is not safely bound to the task or target that is making the claim.
- Evidence required
- No matching task, tab, or workflow scope for the observed dispatch.
- Agent behavior
- Do not count it as proof for a task unit. Re-establish context and observe again.
- May accept completion
- No.
tool outcome
- Meaning
- Nova observed a tool call and its basic outcome.
- Evidence required
- Tool name, target, success/failure, duration, action kind, surface, and optional before/after hints.
- Agent behavior
- Use as raw evidence. A single dispatch may still be too weak for task completion.
- May accept completion
- Not by itself.
weak
- Meaning
- Some matching observation exists, but the proof is incomplete.
- Evidence required
- A matching observation without enough read-like support or without a strong visit window.
- Agent behavior
- Gather better evidence, usually by reading or scanning the target again.
- May accept completion
- Depends on policy.
strong
- Meaning
- The checked unit has observed support that TOB can count confidently.
- Evidence required
- A matching read-like observation and a strong visit/read window for the same task unit.
- Agent behavior
- Count toward observed checked units and continue normal completion checks.
- May accept completion
- Yes, if the rest of the policy passes.
none
- Meaning
- TOB expected evidence for a deterministic unit but found no matching observation after ingestion completed.
- Evidence required
- Deterministic locator exists, ingestion/projection is complete, and no matching observation was found.
- Agent behavior
- Return to the missing unit, observe it, exclude it with reason, or keep the task open.
- May accept completion
- No, if the gap exceeds policy.
unknown
- Meaning
- Nova cannot judge the checked unit from current signals.
- Evidence required
- No locator, no deterministic locator, missing scope binding, incomplete ingestion, or incomplete projection.
- Agent behavior
- Prefer more observation or better unit locators. Policy decides whether unknown counts as gap.
- May accept completion
- Depends on policy.
reason=evidence_gap
- Meaning
- The observed support is below the active completion threshold.
- Evidence required
evidenceSummary.gapPercentexceedsevidenceSummary.maxGapPercent.- Agent behavior
- Retry after gathering missing observations. Treat the rejection as repairable.
- May accept completion
- No.
coverageEvidence.trust.trusted=true
- Meaning
- A registered coverage scan passed server trust checks.
- Evidence required
- Registered scan ID, matching effective URL, measured text sanity, and extraction metrics.
- Agent behavior
- Use for URL coverage progress or reconciliation, then complete through the normal task gate.
- May accept completion
- Yes, for coverage evidence only.
Failure and guard conditions
These are the hard edges an agent or integration should expect when using TOB-facing fields.
| Condition | Observed signal | Agent behavior |
|---|---|---|
| Unknown argument | Task instance tools and nova.coverage_scan reject unknown top-level properties. |
Use only the published fields for the selected tool; do not rely on metadata passthrough unless the schema exposes it. |
| Task snapshot missing evidence | evidenceSummary is absent when no checked units exist or correlation cannot produce a useful summary. |
Report progress first or inspect the task state instead of assuming evidence exists. |
| Completion policy not satisfied | nova.task_instance_complete returns completed=false with a task-policy reason and currentState. |
Finish remaining, blocked, failed, or mandatory units before retrying. |
| Verification failed | reason=verification_failed and verificationResults identify required failed fast-gate steps. |
Fix the visible cause or update the verification contract; do not ignore the failed step. |
| Evidence gap | reason=evidence_gap, retryable=true, gapPercent, maxGapPercent and policyMode explain the rejected completion. |
Gather stronger observations, use Coverage Scan when appropriate, or mark unsupported units correctly. |
| Coverage scan missing scan ID | scanId is required for nova.coverage_scan. Unknown scan IDs are rejected and known IDs may be returned. |
Use nova_full_page_text_v1, nova_structured_dom_v1 or nova_i18n_spellcheck_v1 when appropriate. |
| Coverage scan trust failed | coverageEvidence.trust.trusted=false with reasons such as scan_returned_null_or_empty, scan_result_not_json, effective_url_mismatch or claimed_text_exceeds_measured. |
Treat the payload as telemetry, not block-eligible coverage evidence. Re-run from the correct page or use a better scan. |
| Agent-claimed coverage | Agent-supplied coverageEvidence through arbitrary evaluation is not trusted for block-mode coverage. |
Use nova.coverage_scan for server-registered coverage evidence. |
| Task URL coverage gate | _aagGates.taskUrlCoverage may report open URL units and recommend nova.coverage_scan. |
Inspect remaining URLs, exclude legitimate exceptions, run reconcile dry-run, or ask for user force-complete only when allowed. |
Agent interpretation example
The example shows TOB as a completion contract: the agent reads evidence, sees that observed support is incomplete, and gathers more proof before retrying completion.
Task snapshot evidence
{
"tool": "nova.task_instance_get",
"arguments": {
"instanceId": "task_42"
}
}
Relevant response fields
{
"structuredContent": {
"evidenceSummary": {
"claimedCheckedUnits": 12,
"observedCheckedUnits": 9,
"strong": 7,
"weak": 2,
"none": 2,
"unknown": 1,
"ingestionComplete": true
},
"taskAwareness": {
"completionAllowed": false
}
}
}
Agent interpretation
{
"claim": "12 units marked checked",
"observedSupport": "9 units have TOB evidence",
"risk": "completion may be rejected as evidence_gap",
"nextStep": "inspect the none/unknown units before calling task_instance_complete again"
}
MCP contract
This is the deterministic layer under the explanation. TOB does not publish one single tool; agents read its contract through task-instance, verification, and coverage fields.
Execution rule: No TOB field may authorize a website action by itself; TOB evidence can support completion, learning, or state review only after the current task and safety gates agree.
| Variable | Type / values | Default | Effect |
|---|---|---|---|
nova.task_instance_get |
MCP tool; args include instanceId and optional include* limits | instanceId required | Reads current task state and may expose evidenceSummary, urlCoverage and taskAwareness. |
nova.task_instance_create |
MCP tool; args include profileId, adHocContext, targetUrl, currentScope, agentId, unitSource, declaredTaskKind | profileId optional; adHocContext required for ad-hoc runs | Creates the scoped ETM instance that later TOB evidence can be correlated against. |
nova.task_instance_progress |
MCP tool; args include instanceId, expectedInstanceRev, clientEventId, unit updates | task-specific | Writes checked, excluded, blocked, failed, or discovered unit state that later evidence is compared against. |
nova.task_instance_complete |
MCP tool; args: instanceId, expectedInstanceRev, clientEventId, note, completionNote, evidenceReport | instanceId, expectedInstanceRev and clientEventId required | Flushes completion, evaluates policy and TOB evidence, and returns completed plus a reason when rejected. |
nova.task_instance_verify |
MCP tool; args: instanceId | instanceId required | Returns verification contract steps that can later be submitted as evidenceReport[]. |
evidenceSummary |
object returned by task_instance_get and task_instance_complete | only when checked units exist | Summarizes observed evidence against claimed checked units. |
evidenceSummary.claimedCheckedUnits |
integer | computed | Checked task units the agent claimed through progress or completion state. |
evidenceSummary.observedCheckedUnits |
integer | computed | Checked units supported by strong or weak TOB evidence. |
evidenceSummary.strong |
integer | computed | Units with strong observed support. |
evidenceSummary.weak |
integer | computed | Units with matching but incomplete observed support. |
evidenceSummary.none |
integer | computed | Units with deterministic locators but no matching observation after complete ingestion. |
evidenceSummary.unknown |
integer | computed | Units whose evidence cannot be judged because locator, scope, ingestion, or projection is incomplete. |
evidenceSummary.ingestionComplete |
boolean | computed | Shows whether relevant evidence sources finished ingestion for the scope. |
evidenceSummary.gapPercent / maxGapPercent / policyMode |
number; number; string | only on evidence_gap rejection | Explains why completion was rejected by the active evidence policy. |
reason=evidence_gap / retryable=true |
task_instance_complete rejection fields | only when gap exceeds policy | Signals that completion can be retried after gathering stronger evidence. |
taskAwareness.completionAllowed |
boolean | computed in task snapshots | Shows whether task completion policy is currently satisfied before a completion attempt. |
verificationResults |
phase, noRequiredFailed, summary, steps[], duplicateStepIds | only when verification contract/evidence is present | Reports explicit verification evidence submitted or skipped for completion. |
verificationResults.summary |
total, passed, failed, inconclusive, skipped, failedRequired | computed | Aggregates verification-contract step results. |
verificationResults.steps[] |
stepId, state, gate, required, detail | computed | Shows each verification step and whether it passed, failed, was inconclusive, or was skipped. |
evidenceReport[] |
task_instance_complete arg; stepId, state, toolResult, detail | optional | Agent-submitted verification evidence for a task completion attempt. |
evidenceReport[].state |
passed | failed | inconclusive | skipped | required per entry | Agent-assessed verification result. Required failed fast-gate steps can block completion. |
nova.coverage_scan |
MCP tool; args: scanId, targetId, scopeOptions | targetId=active; scanId required | Runs a server-registered coverage scan and returns coverageEvidence. Use the published schema fields for new clients. |
scanId |
nova_full_page_text_v1 | nova_structured_dom_v1 | nova_i18n_spellcheck_v1 | required | Selects the registered scan. Unknown IDs are rejected. |
scopeOptions.includeShadowDom / includeIframes / waitForHydration |
boolean fields | registry-defined | Optional scope options accepted by the coverage scan schema. |
scopeOptions.hydrationTimeoutMs |
integer 0-30000 | registry-defined | Optional hydration wait budget from the published schema. |
coverageEvidence |
version, registeredScanId, scanHash, document, extraction, trust, raw | returned by coverage_scan | Evidence block used by coverage-aware tasks and telemetry. |
coverageEvidence.document.* |
effectiveUrl, visibleTextCharsMeasured, nodeCountMeasured, iframeCount, shadowRootCount | computed | Measured document facts used for trust and coverage interpretation. |
coverageEvidence.extraction.textChars / textCoverageRatio |
integer; number 0.0-1.0 | computed | Shows how much text the scan extracted compared with measured visible text. |
coverageEvidence.trust.trusted / reason |
boolean; string | computed | States whether server trust checks passed and why. |
rawUrlBefore / rawUrlAfter / targetId |
string; string; string | returned by coverage_scan | Shows the resolved target and URL before/after the registered scan. |
urlCoverage |
coverageSchemaVersion, urlUnits*, reportingGroupsTotal, observations*, last* | only for task instances with URL units | Summarizes URL coverage in task_instance_get. |
_aagGates.taskUrlCoverage |
gateId, status, urlUnits, evidence, resolution | only when completion is rejected with remaining URL units | Guides the agent toward coverage scan, exclusion, reconcile dry-run, or user force-complete flow. |
nova.task_instance_reconcile_coverage |
MCP tool; args: instanceId, dryRun, observationCutoff | dryRun=true | Replays stored observations against URL units and proposes or applies coverage upgrades when allowed. |
Agent Tools
MCP tools for agents. These variables and tool names are intended for agents and integrators. They are not normal user controls in the interface.
| Variable | Meaning |
|---|---|
nova.perceive |
Understand the visible page |
nova.read_text |
Read page text |
nova.navigate |
Open a page |
nova.route |
Route inside a web app |
nova.click_selector |
Click an element |
nova.type_selector |
Type into a field |
nova.file_upload |
Upload a file |
nova.dismiss_blockers |
Dismiss visible blockers |
nova.run_sequence |
Run multiple steps safely |
nova.tab_claim |
Reserve a tab for work |
nova.tab_release |
Release a reserved tab |
nova.task_instance_create |
Start a task run |
nova.task_instance_get |
Reads task state and may include evidenceSummary, urlCoverage, and taskAwareness.completionAllowed. |
nova.task_instance_complete |
Attempts completion after TOB correlation and can reject unsupported claims with evidence_gap or verification_failed. |
nova.task_instance_progress |
Reports checked, excluded, blocked, or failed units that TOB evidence can later be compared against. |
nova.task_instance_verify |
Returns verification steps whose results can be submitted as evidenceReport during completion. |
nova.coverage_scan |
Runs a registered scan and returns coverageEvidence for exhaustive URL coverage tasks. |
nova.task_instance_reconcile_coverage |
Replays stored observations against URL units and proposes or applies coverage upgrades. |