ETM stands for Episodic Task Memory. Nova uses episodic task memory for task-shaped episodes: what the goal was, which context applied, what was checked, what remained open, and when the task was truly complete.
ETM is Nova’s task memory. It lets agents recognize recurring task types, start concrete task runs, keep progress visible, and resume work without pretending that an unfinished job is done.
ETM is different from PKS. PKS stores reusable website knowledge; ETM stores task-shaped knowledge. PKS can say how a known website pattern behaves. ETM can say which task is running, which units belong to it, and what evidence is still needed before completion.
ETM tools are mostly agent-facing. Users see the effect in resumable work, clearer automation, and fewer premature completions, while agents and integrators use the task-memory tools directly.
In short
- ETM stores task knowledge, not general website behavior.
- Task profiles describe reusable task types; task instances describe concrete runs.
- Work units make large tasks measurable instead of relying on a narrative “done”.
- Completion can require all units, a threshold, or an exploratory minimum.
- Task URL Coverage belongs to ETM and checks URL coverage when a task claims exhaustive completion.
- ETM can turn repeated successful runs into stronger guidance for later work.
What ETM stores
ETM stores the information an agent needs to understand work as a task, not just as a series of browser actions.
- Task profiles A profile describes a recurring task type: goal, domain or platform context, stable guidance, required checks, known exceptions, and a completion rule.
- Task instances An instance is one concrete run. It may start from a profile or from an ad-hoc task, then freezes the effective context so later profile changes do not rewrite the current run.
- Work units Work units are bounded items that need attention, such as pages, URLs, findings, records, checks, or other parts of the task.
- Progress and resume state ETM can keep checked, remaining, blocked, and failed work visible so an agent can resume instead of guessing what happened earlier.
- Completion conditions A completion rule says what “done” means for this task: all units processed, a threshold reached, or enough exploratory evidence collected.
- Guidance and learning Repeated runs can leave guidance behind. Useful guidance can later become part of a profile when enough evidence supports it.
When this matters
ETM belongs to tasks that are larger than one quick interaction or likely to return later. Typical examples are website reviews, repeated quality checks, scheduled automation, platform mapping, research across multiple sources, or any run where an agent must prove what was covered before it can stop.
Task model for agents
For an agent, ETM answers four questions: which reusable task is this, which concrete run is active, what work remains, and what evidence is required before completion?
- Profile and match
- A profile gives the agent a known task shape. Matching uses task description, task type, domain, platform, target URL, and current scope to find likely profiles.
- Instance and context
- An instance is the current run. It carries a frozen effective context, profile revision, target URL, current scope, progress, and resume state.
- Task awareness
- A compact agent-facing payload that can show a profile match, active instance, progress, completion rule, pending checks, and resume context.
- Work units
- Units move through discovered, checked, excluded, blocked, or failed states. Checked and excluded units count as done; blocked and failed units reject exhaustive completion and should be repaired before a final claim.
- Discovery state
- Discovery starts unknown, can become partial, and can be frozen when the agent believes the task frontier is complete. Exhaustive completion requires a frozen frontier.
- Mandatory checks
- Required checks must be satisfied, waived, or marked not applicable before completion should be accepted. Pending or failed checks block completion.
- Completion condition
- The rule that defines done. ETM supports exhaustive, threshold, and exploratory task shapes with explicit stop metrics.
- Guidance logs
- Agents can log task guidance, inspect repeated hints, and promote useful guidance into the reusable profile when it proves useful.
How agents use ETM information
For agents, ETM is a structured task surface: discovery hints, profile matches, active instances, progress counters, completion rules, revision guards, verification contracts, and coverage warnings tell the agent how to proceed.
- Search or match the task Before starting task-shaped work, the agent should search or match existing profiles. A match can return task awareness and reusable guidance.
- Start the right instance The agent creates a task instance from a profile or ad-hoc context. This instance becomes the stable anchor for progress, current scope, and later completion.
- Report progress with revision guards Progress updates use the current instance revision and an idempotency key. The agent reports discovered units, unit status changes, findings, mandatory-check updates, and resume-state deltas.
- Freeze discovery for exhaustive work For exhaustive tasks, the agent freezes discovery only after it has found the relevant frontier. A frozen empty frontier or open units can still reject completion.
- Check completion before claiming done ETM evaluates mandatory checks, unit state, completion mode, revision conflicts, verification evidence, and coverage state. A failed check means the task remains unfinished.
- Resume from task awareness When a run continues later, the agent reads the active instance, recent events, pending units, and resume state instead of reconstructing the task from memory.
- Promote useful guidance After repeated runs, guidance logs and match telemetry can show which instructions should become stable profile guidance.
When ETM state applies
ETM state is about the current task run, not permission to click on a page. An agent may only claim completion when the active instance and the current evidence satisfy the task contract.
taskAwareness.profileMatch
- Meaning
- A reusable task type may fit the current work.
- Evidence required
- Task description, target URL or current scope, and a ranked profile match.
- Agent behavior
- Use it as orientation. Start an instance from the profile only if it fits the current user goal.
- May complete
- No.
status: pending|active|blocked
- Meaning
- A concrete task run exists and can collect progress unless it has already reached a terminal state.
- Evidence required
- Instance ID, instance revision, effective context hash, progress counters, and current scope.
- Agent behavior
- Report progress with
expectedInstanceRevandclientEventId; read the instance before continuing old work. - May complete
- Only when
completionAllowedis true.
discoveryState: partial
- Meaning
- The task frontier is still open; more units may appear.
- Evidence required
- Discovered units, remaining units, recent events, or resume state show unfinished exploration.
- Agent behavior
- Continue discovery or explicitly freeze only after the relevant frontier is known.
- May complete
- No for exhaustive tasks.
discoveryState: frozen
- Meaning
- The agent has declared the task frontier stable.
- Evidence required
- A valid transition to frozen and a non-empty set of units for exhaustive work.
- Agent behavior
- Finish checking or excluding remaining units; do not unfreeze by assumption.
- May complete
- Yes, if all completion gates pass.
unit status
- Meaning
- At least one unit needs repair, retry, or exclusion. Exhaustive completion rejects blocked or failed units.
- Evidence required
- Blocked units, failed units, pending mandatory checks, failed verification, or an evidence gap.
- Agent behavior
- Resolve, retry, exclude with a valid reason, waive or mark checks not applicable when appropriate.
- May complete
- No for exhaustive completion.
completed|aborted|failed
- Meaning
- The task run is no longer a normal progress surface.
- Evidence required
- Terminal status, completion timestamp, or terminal completion response.
- Agent behavior
- Use it as history or profile-learning evidence. Start a new run for new work.
- May complete
- No further progress writes.
Completion and failure conditions
These are the contract checks that decide whether ETM accepts a task as complete. They are intentionally stricter than an agent saying that work feels done.
| Condition | Observed signal | Agent behavior |
|---|---|---|
| Mandatory checks pending | mandatoryChecks exist and one is pending or failed. |
Satisfy the check, provide evidence, waive it, or mark it not applicable through progress. |
| Exhaustive frontier not frozen | coverageMode=exhaustive while discoveryState is not frozen. |
Finish discovery and freeze the frontier before attempting completion. |
| No units discovered | The frontier is frozen but the task has zero known units. | Add real units or use a different task shape. |
| Units remaining | Known units are still discovered/open. | Check or exclude units. For URL work, use coverage scan or reconciliation where needed. |
| Blocked or failed units | coverageMode=exhaustive and one or more units are blocked or failed. |
Resolve, retry, exclude, or keep the exhaustive task unfinished. Threshold and exploratory modes use their own stop metrics. |
| Threshold not met | checked_units, distinct_findings, or all_units_processed is below stopValue. |
Continue work until the threshold is satisfied. |
| Exploratory minimum not met | Exploratory work has fewer checked units than required. | Collect the minimum evidence before stopping. |
| Revision or duplicate event | expectedInstanceRev is stale or clientEventId repeats. |
Read the current instance, then retry with the current revision or treat duplicate retries as already handled. |
| Verification or evidence gap | A required verification step failed or claimed checked work lacks enough observed evidence. | Run the verification contract, submit evidence, or gather more observations before retrying completion. |
Task URL Coverage
TUC stands for Task URL Coverage. It belongs inside ETM and is used for tasks with an exhaustive completion claim. Agents can create URL units with nova.task_instance_create, gather server-trusted coverage evidence with nova.coverage_scan, and reconcile open coverage with nova.task_instance_reconcile_coverage. These are agent-facing tool identifiers, not normal UI controls for people.
- checked trusted scan
- excluded valid reason
- open still missing
- unit Create units Relevant URLs become task units.
- scan Scan Coverage evidence is server-trusted.
- review Reconcile Open URLs are matched or excluded.
- gate Gate Completion waits for coverage.
Agent interpretation example
The example shows ETM as a task contract: the agent creates a run, reports progress, and may only complete when the completion checks allow it.
Task match
{
"tool": "nova.task_match",
"arguments": {
"taskDescription": "Review all product pages for broken prices",
"targetUrl": "https://example.com/products",
"currentScope": {
"route": "/products",
"locale": "de-DE"
}
}
}
Progress update
{
"tool": "nova.task_instance_progress",
"arguments": {
"instanceId": "task_123",
"expectedInstanceRev": 4,
"clientEventId": "price-check-page-18",
"unitUpdates": [
{ "unitKey": "product-18", "status": "checked" }
],
"mandatoryCheckUpdates": [
{ "checkId": "price-visible", "state": "satisfied", "evidenceRef": "product-18" }
]
}
}
Agent interpretation
{
"treatAs": "active task contract",
"beforeCompletion": "read the instance, check remainingUnits and pendingMandatoryChecks",
"mayComplete": "only when completionAllowed is true and revision is current",
"onRejection": "use currentState.reason to continue, repair, exclude, or gather evidence"
}
MCP contract
This is the deterministic layer below the explanation. It lists ETM fields that agents and integrators should treat as contract signals rather than free prose.
Completion rule: No ETM completion may be claimed without current task state, revision, required checks, and evidence satisfying the active completion condition.
| Variable | Type / values | Default | Effect |
|---|---|---|---|
taskDescription |
string, max 2000 chars | required for matching | Natural-language task description used by nova.task_match to find reusable profiles. |
query / limit / includeArchived |
string; integer; boolean | query required for search; limit tool-specific; includeArchived false | Search and list controls for profile discovery. They narrow candidates without starting or changing a task instance. |
taskType / displayName / goal / domain / platform |
strings | taskType, displayName, and goal required for profile writes and ad-hoc context | Defines the reusable task identity and optional scope used by matching, profile creation, and ad-hoc runs. |
targetUrl |
string URL or null | derived from currentScope when possible | Canonical URL context for task matching and instance creation. |
currentScope |
object | {} | Structured route, locale, auth, language, or task variables used for matching and effective context. |
taskAwareness |
object | computed | Compact agent-facing profile or instance context with progress, completion condition, guidance, and resume hints. |
profileId |
string or null | null for ad-hoc runs | Starts a task instance from a reusable profile when present. |
instanceId / agentId / guidanceLogId |
strings | context-specific | Identifies the current task run, the reporting agent, or a guidance entry that should be read, updated, completed, verified, or promoted. |
adHocContext |
object | required when profileId is absent | One-off task context with taskType, displayName, goal, and completionCondition. |
stableGuidance[] / mandatoryChecks[] / knownExceptions[] |
arrays | [] | Reusable profile or ad-hoc context fields. Guidance travels with the task, checks define completion obligations, and exceptions describe accepted caveats. |
overrides |
object | {} | Controlled instance-time changes. Mandatory checks cannot be removed through overrides. |
profileRevApplied |
integer or null | current profile revision | Freezes which profile revision shaped a concrete instance. |
effectiveContextHash |
string | computed | Identifies the frozen effective context used by the task instance. |
instanceRev |
integer | 0 on create | Revision of a concrete task instance. Progress and completion use it for conflict protection and return the next revision after successful writes. |
expectedInstanceRev |
integer | required for writes | Compare-and-set guard for progress and completion updates. Stale values return a revision conflict. |
clientEventId |
string | required for progress and completion | Idempotency key so retries do not double-apply progress or completion events. |
note / completionNote |
string | optional | Optional event note on progress or completion. completionNote is a compatibility alias for note; both must match when supplied together. |
completionCondition.coverageMode |
exhaustive | threshold | exploratory | exploratory | Defines which completion policy ETM evaluates. |
completionCondition.unitKind |
page | url | selector | file | item | page in the default profile condition | Names the kind of work unit the completion condition is counting. Supplied completionCondition objects must include a valid unitKind. |
completionCondition.stopMetric |
all_units_processed | checked_units | distinct_findings | checked_units | Metric used by threshold and exploratory completion checks. |
completionCondition.stopValue |
integer or null | mode-specific | Required value for thresholds; exploratory uses it as the minimum checked-unit count. |
completionCondition.evidencePolicy |
object: mode, maxGapPercent, treatUnknownAs | mode=none; maxGapPercent=10; treatUnknownAs=pass | Optional TOB evidence-gap policy. When active, completion can reject unsupported checked work with reason=evidence_gap. |
discoveryState |
unknown | partial | frozen | unknown | Shows whether the task frontier is still open. Exhaustive completion requires frozen discovery. |
setDiscoveryState |
unknown | partial | frozen | absent | Progress request field that transitions discovery state. Runtime rejects backwards transitions such as frozen back to partial or unknown. |
discoveredUnits[] |
array: unitKey required; unitKind and unitRef optional | optional | Adds newly discovered work units to the instance. Missing unitKind defaults to page; missing unitRef defaults to the unit key. |
unitUpdates[].status / findingCount |
checked | excluded | blocked | failed; integer findingCount | status required per update | Changes known work-unit status and can attach finding counts. Checked and excluded are terminal done states; blocked and failed reject exhaustive completion. |
findings[] |
array | optional | Appends structured findings to the progress event and contributes to distinct-findings completion policies. |
mandatoryCheckUpdates[].state |
pending | satisfied | failed | waived | not_applicable | pending | Updates required checks. Pending or failed required checks block completion. |
resumeStateDelta |
object | optional | Merges resume hints such as cursor, lastProcessedUrl, lastAction, or checkpoint into the task instance. |
progress.*Units |
integer counters | computed | Shows total, checked, remaining, blocked, and failed units for the task run. |
includePendingUnits / includeDiscoveredUnitsPreview / includeRecentEvents |
boolean flags with pendingUnitsLimit, discoveredUnitsPreviewLimit, recentEventLimit | false; default limits 20 or 10 | Read options on nova.task_instance_get for resumable context: still-discovered units and recent normalized events. |
completionAllowed |
boolean | computed | Returned after progress or in task awareness to show whether the current task state satisfies the completion policy. |
unitSource |
object: kind site_urls | crawler | explicit; scopeDomain; explicitUrls[]; freezeAfterPopulate | absent | Creates URL work units for Task URL Coverage when explicitUrls are supplied. kind labels the source, and freezeAfterPopulate can set discoveryState to frozen after population. |
declaredTaskKind |
content_audit | compliance | ui_smoke | exploratory | accessibility | legal | security_review | route_inventory | absent | Optional TUC hint that describes the task kind for coverage policy reasoning. |
scanId / targetId / scopeOptions / dryRun / observationCutoff |
string; string; object; boolean; ISO timestamp | scanId required for coverage scan; dryRun true for reconcile | Task URL Coverage tool arguments. They run registered coverage scans or reconcile existing observations without treating agent claims as trusted coverage. |
urlCoverage |
object or null | null without URL units | Summarizes URL units, trusted observations, reconcile state, and remaining coverage work. |
verificationContract |
object or null | absent | Defines verification steps an agent can execute and report before completion. |
evidenceReport[] |
array: state passed | failed | inconclusive | skipped | optional | Agent-submitted evidence for verification steps. Required fast-gate failures can reject completion. |
contentRev / expectedContentRev |
integer | profile-specific | Protects reusable profile updates from overwriting a newer profile revision. |
sourceInstanceId / confidence |
string; float 0.0-1.0 | absent; 0.5 | Can seed a profile from a completed or inspected instance and records the profile confidence score. |
payload / sourceRef / occurrenceCount / threshold |
object; string; integer; integer | payload required for guidance logs; threshold default 3 | Records guidance details, optional source references, repeated occurrence counts, and the minimum count used for promotion candidates. |
guidanceKind / sourceKind / status |
guidanceKind style | terminology | scope_rule | workflow | quality | match_telemetry | custom; sourceKind user | agent | reviewer | migration | system; status logged | proposed | accepted | rejected | promoted | status is computed by scope and promotion state | Classifies task guidance logs, records their source, and shows whether guidance is ready to promote into a profile. |
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.get_instructions |
Read Learn Mode instructions |
nova.goal_register |
Record a work goal |
nova.task_search |
Search task memory |
nova.task_match |
Recognize a recurring task |
nova.task_profiles |
List task profiles |
nova.task_profile_get |
Read a task profile |
nova.task_profile_upsert |
Create or update a task profile |
nova.task_instance_create |
Start a task run |
nova.task_instance_get |
Read a task run |
nova.task_instance_progress |
Report task progress |
nova.task_instance_complete |
Check whether task completion is allowed |
nova.task_instance_verify |
Read completion checks |
nova.site_urls |
Read the site URL index |
nova.coverage_scan |
Check URL coverage |
nova.task_instance_reconcile_coverage |
Reconcile task coverage |
nova.task_guidance_log_add |
Record task guidance |
nova.task_guidance_logs |
Review task guidance |
nova.task_promotion_candidates |
Find promotable guidance |
nova.task_promote_guidance |
Promote useful guidance |