ALP stands for Agent Learning Pipeline. Nova uses ALP to move from observed website work to reviewed, explainable, and revalidatable knowledge.
ALP sits between live observations and PKS. It looks for repeated evidence, proposes learning opportunities, writes candidates, checks promotion gates, records feedback, and revalidates stored knowledge against a current page.
The important boundary is simple: repeated behavior is not automatically reliable knowledge. ALP separates a useful signal from an executable orientation by making the evidence state explicit.
ALP also supports Learn Mode. When an agent maps a platform, Nova can require a structured playbook and coverage floors before the learning task is treated as complete.
In short
- ALP is Nova’s quality path for learning from repeated website work.
- Suggestions and proposals are evidence, not permission to act.
- Generated candidates can start as review knowledge and only become active after promotion gates pass.
- Active PKS knowledge still needs current-page confirmation before it can guide action.
- Revalidation checks whether stored signals still fit without executing the stored playbook.
- Learn Mode adds coverage floors and a fixed platform-playbook deliverable for exploration tasks.
What ALP decides
ALP is a review loop. It decides whether observed work is only noise, a learning opportunity, a candidate, active guidance, or stale knowledge that needs repair.
- Pattern Is the same website situation, selector behavior, blocker, or successful action recurring often enough to deserve attention?
- Proposal Can the evidence become a structured PKS candidate, domain hint, or patch without guessing unsupported selectors or outcomes?
- Promotion Does the candidate have enough support, success evidence, confidence, and low drift to move from candidate to shadow or active knowledge?
- Regression Has active knowledge started failing, drifting, or disappearing often enough to be demoted, deprecated, or revalidated before use?
- Coverage Has a Learn Mode task explored enough surfaces and interactions to produce a useful platform playbook instead of a shallow tour?
When this matters
ALP matters when Nova should leave useful knowledge behind: platform mapping, repeated automation work, consent or login friction, selector repair, recurring blockers, or any task where future agents should understand why a pattern is reliable instead of rediscovering it from scratch.
Knowledge model for agents
For an agent, ALP answers four questions: what evidence exists, what maturity state it has, what gate is blocking or approving it, and what feedback must be written after use or rejection?
- Observation cluster
- A repeated pattern of website events, such as successful dismissals, selector failures, drift signals, or action outcomes grouped by domain context.
- Learning opportunity
- A ranked signal returned in
opportunities[]when ALP sees a pattern worth reviewing. - Proposal
- A generated candidate item returned in
proposals[]. It can describe a new phenomenon, a domain hint, or a patch to existing knowledge. - Stable ID
- A durable identifier such as
stableIdused for promotion, explanation, feedback, and revalidation. - Learning level
- The maturity state of PKS knowledge: candidate, shadow, active, demoted, deprecated, or revived into review.
- Gate
- A deterministic check behind
nova.learn_promoteornova.explain. Gates compare support, success, failure, drift, sessions, and confidence. - Semantic opportunity
- A runtime prompt in
pksSemanticLearningfor richer patterns such as consent dialogs, login walls, or risky repeats. - Learn Mode coverage
- The exploration counters in
learnMode.progressthat prevent a platform-learning task from ending too early.
How agents use ALP information
ALP gives agents a learning route, not a shortcut. The agent reads evidence, generates or reviews candidates, promotes only through gates, and treats active knowledge as orientation that still needs current-page proof.
-
Start Learn Mode when mapping a platform
For exploration tasks, the agent calls
nova.get_instructionswithmode="learn". The expected final artifact isPLATFORM_PLAYBOOK, andlearnMode.progresstells whether coverage floors are met. -
Read learning opportunities
The agent calls
nova.learn_suggestwith optionalscopeandlimit. The response ranks patterns by support, success, failure, recency, and drift signals. -
Generate candidates only for an open scope
When an opportunity is worth preserving,
nova.learn_generateturns evidence intoproposals[]and staged PKS candidates. A write needs a concrete domain scope that is open in a current tab or sandbox. -
Explain before promotion
Before relying on a candidate, the agent can call
nova.explainwithstableIdand optionalobservedSignalsto see gate status and match confidence. -
Promote, demote, or deprecate through gates
The agent uses
nova.learn_promote.dryRun=trueevaluates without writing; a non-dry-run call applies only approved transitions and reportsapproved,rejected,appliedandwriteFailed. -
Resolve semantic prompts explicitly
When a tool response includes
pksSemanticLearning, the agent either writes the suggested PKS entry or callsnova.learn_resolve_opportunitywith a clearverdict. -
Revalidate before trusting stale knowledge
The agent calls
nova.revalidatewithtargetIdto check stale fingerprints without executing playbooks. The response reportsresults[], telemetry status, remaining budget, and denial reasons. -
Read feedback after changes
The agent uses
nova.learn_feedbackto inspect recent learning events and understand what changed, when, and why.
When ALP state applies
ALP state is about knowledge maturity. It can explain whether a pattern is promising, usable, blocked, stale, or retired, but it does not replace current-page observation or safety approval.
count=0
- Meaning
- ALP found no repeated pattern worth proposing for the requested scope or time window.
- Evidence required
- No
opportunities[]orproposals[]are returned. - Agent behavior
- Keep working normally. Do not invent a candidate without repeated evidence.
- May guide action
- No learning guidance.
opportunities[]
- Meaning
- A pattern is visible enough to review, but no PKS candidate has been written yet.
- Evidence required
- Ranked fields such as
supportCount,successCount,failureCount,distinctSessionsandscoreBreakdown. - Agent behavior
- Inspect the pattern and generate only if it represents reusable website behavior.
- May guide action
- No.
generated candidate
- Meaning
- A PKS candidate or domain hint exists, but it is still review knowledge.
- Evidence required
- Generated
proposals[]with confidence, reason, candidate key, and stable ID. - Agent behavior
- Review, explain, and gather more evidence before promoting.
- May guide action
- No.
l0_to_l1
- Meaning
- A candidate passed the first promotion gate and can be evaluated as shadow knowledge.
- Evidence required
- Support at least 2, success support at least 1, confidence at least 0.70, and evidence score at least 0.55.
- Agent behavior
- Use for review and matching context; keep current-page confirmation mandatory.
- May guide action
- Not by itself.
l1_to_l2
- Meaning
- Knowledge passed active promotion and can help orient future matching.
- Evidence required
- At least 3 successes, at least 2 distinct success sessions, at most 1 failure, and no drift in the last 7 days.
- Agent behavior
- Use as orientation, then confirm the visible page before acting.
- May guide action
- Yes, after visible confirmation.
demotion
- Meaning
- Previously active knowledge showed drift or repeated failure and was moved back to review.
- Evidence required
- Hard drift within 24 hours or at least 2 consecutive failures.
- Agent behavior
- Do not treat it as active guidance; repair or revalidate before use.
- May guide action
- No.
deprecation
- Meaning
- Knowledge is retired because failure evidence crossed the deprecation threshold.
- Evidence required
- At least 3 consecutive failures for shadow knowledge or 5 consecutive failures for active knowledge.
- Agent behavior
- Avoid matching or applying it. Replace only with fresh evidence.
- May guide action
- No.
revive
- Meaning
- A deprecated pattern became promising again and can return to shadow review.
- Evidence required
- At least 2 successes in 30 days, at least 2 distinct success sessions, and no drift in the last 7 days.
- Agent behavior
- Treat it as review knowledge until active promotion passes again.
- May guide action
- No, until promoted.
Failure and guard conditions
These are the hard edges an agent or integration should expect from ALP tools.
| Condition | Observed signal | Agent behavior |
|---|---|---|
| Unknown argument | Most learning tools reject unknown top-level properties. nova.learn_resolve_opportunity validates the required fields and may tolerate unrelated extras for compatibility. |
Use only the documented arguments for the selected tool. |
| Missing required scope | nova.learn_generate and nova.learn_promote require a domain scope. |
Pass a concrete domain scope, not an empty string or broad wildcard. |
| Write scope is not open | Generated candidates and non-dry-run promotions can be rejected when the domain is not open in a current tab or sandbox. | Open or select the relevant page, or run promotion with dryRun for review only. |
| Limit outside bounds | learn_suggest and learn_generate accept 1-20; learn_feedback accepts 1-100; revalidate accepts 1-5. |
Lower the requested batch size and retry. |
| Invalid stable ID filter | stableIds must be an array of strings. Empty arrays are rejected; ["all"] evaluates the full scope. |
Omit stableIds for all entries, pass ["all"], or pass concrete stable IDs. |
| Invalid transition | transition must be l0_to_l1, l1_to_l2, demotion, deprecation or revive. |
Use a supported transition or omit it to evaluate all applicable transitions. |
| Dry-run typed as string | dryRun must be JSON boolean true or false. |
Send a real boolean, not "true" or "false" as text. |
| Explain alias mismatch | stableId and stable_id must match when both are provided. observedSignals and observed_signals must also match. |
Prefer the camelCase names and do not send conflicting aliases. |
| Revalidation without target | nova.revalidate requires targetId. If scope is omitted, the scope is derived from that target. |
Provide the tab or sandbox target that should be checked. |
| Revalidation budget or selector denial | ok=false, budgetRemaining and denied[] explain budget exhaustion or missing fingerprint selectors. |
Do not retry in a tight loop. Wait, reduce the batch, or repair the stored fingerprint. |
| Opportunity resolution invalid | opportunityId and verdict are required. reason is optional and capped at 500 characters. |
Use one of upsert, not_applicable, unsafe, already_known or defer. |
| Learn coverage floors not met | learnMode.progress.allFloorsMet=false or a release error with required and current coverage counters. |
Continue exploration, or set coverageExhausted=true with coverageExhaustedReason when further coverage is genuinely blocked. |
Agent interpretation example
The example shows ALP as a promotion contract: the agent asks for a dry-run promotion, reads the gate decision, and only writes later if the review is correct.
Promotion dry-run request
{
"tool": "nova.learn_promote",
"arguments": {
"scope": "example.com",
"stableIds": ["lcj_8c1a2f9d44ab"],
"transition": "l1_to_l2",
"dryRun": true
}
}
Relevant response fields
{
"structuredContent": {
"ok": true,
"scope": "example.com",
"dryRun": true,
"approved": 1,
"rejected": 0,
"applied": 0,
"writeFailed": 0,
"total": 1,
"decisions": [
{
"stableId": "lcj_8c1a2f9d44ab",
"approved": true,
"applied": false,
"skippedBecause": "dry_run",
"reasonKind": "l1_to_l2",
"fromLevel": 1,
"toLevel": 2
}
]
}
}
Agent interpretation
{
"treatAs": "gate-approved review signal",
"writeStatus": "not applied because dryRun=true",
"beforeUse": "confirm the current page still matches the phenomenon",
"nextStep": "run non-dry-run only if the scope is open and the promotion is intended"
}
MCP contract
This is the deterministic layer below the explanation. It lists ALP fields that agents and integrators should treat as contract signals rather than free prose.
Execution rule: No ALP field may trigger action by itself; learned guidance needs current-page confirmation and the normal safety gates.
| Variable | Type / values | Default | Effect |
|---|---|---|---|
nova.learn_suggest |
MCP tool; args: scope, limit | scope=*; limit=5 | Returns ranked opportunities[] from observation clusters and stale PKS candidates. limit must be 1-20. |
opportunities[] |
contextHost, candidateKey, dominantKind, supportCount, successCount, failureCount, distinctSessions, score, suggestion, scoreBreakdown | computed | Shows why a pattern may deserve learning attention. |
nova.learn_generate |
MCP tool; args: scope, limit | scope required; limit=5 | Generates candidates or patches and returns generated, proposed and proposals[]. Write requires an open scope. |
proposals[] |
kind, contextHost, candidateKey, confidence, reason, phenomenonType, targetStableId, hintKind | computed | Describes generated learning candidates before promotion. |
nova.learn_promote |
MCP tool; args: scope, stableIds, transition, dryRun | scope required; evaluates all if stableIds omitted; dryRun=false | Evaluates promotion, demotion, deprecation, or revive transitions and optionally writes approved changes. |
stableIds |
string[]; concrete IDs or ["all"] | omitted means all entries in scope | Narrows promotion evaluation to selected stable IDs. Empty arrays are invalid. |
transition |
l0_to_l1 | l1_to_l2 | demotion | deprecation | revive | null | null; evaluate all applicable transitions | Filters the promotion evaluation to one transition type. |
dryRun |
boolean | false | When true, evaluates gates without writing transitions. |
approved / rejected / applied / writeFailed / total |
integer counters | computed | Top-level promotion outcome counts. A clean write has writeFailed=0. |
decisions[] |
stableId, approved, applied, skippedBecause, writeError, reasonKind, fromLevel, toLevel, rejectionReason | computed | Per-entry promotion decision and write status. |
nova.learn_feedback |
MCP tool; args: scope, since, limit | since=last 7 days; limit=20 | Returns recent learning event history in events[]. limit must be 1-100. |
events[] |
stableId, contextHost, fromLevel, toLevel, reasonKind, reason, createdAtMs, createdAtUtc | computed | Shows what changed in learning state and why. |
nova.explain |
MCP tool; args: scope, stableId, observedSignals / observed_signals; runtime alias stable_id | scope and schema-canonical stableId required | Explains gate status, remediation, and optional fingerprint match confidence for one phenomenon. Prefer stableId because the published schema requires it. |
observedSignals / observed_signals |
string[] aliases | optional | Optional current-page signals used to compute match breakdown. Aliases must match when both are provided. |
explain.gates[] / match |
gate list; optional match object | computed | Lists required vs observed gate values and optional signal-level match scores. |
nova.revalidate |
MCP tool; args: targetId, scope, limit | targetId required; scope from target if omitted; limit=3 | Checks stale PKS fingerprints without executing playbooks. limit must be 1-5. |
results[] |
scope, stableId, verdict, selectorExists, fingerprintMatchRatio, signalsChecked, signalsMatched, error, telemetry* | computed | Per-phenomenon revalidation result against the current target. |
telemetryRecorded / telemetryFailed / budgetRemaining / denied[] |
integer; integer; integer; string[] | computed | Summarizes revalidation writeback, clean-success blockers, remaining budget, and denial reasons. |
pksSemanticLearning |
runtime prompt object: gateId, status, opportunityId, kind, origin, fingerprint, confidence, reason, whyAutoUpsertIsInsufficient, resolutionTools, evidenceJson, skeleton | only when a semantic opportunity is prompted | Asks the agent to resolve richer learning opportunities such as consent dialogs, login walls, or risky repeats. |
pksSemanticLearningBatchSummary |
status=batch_summary, origin, reason, entries[] | only when unresolved semantic opportunities are summarized on domain exit | Separates a domain-exit summary from the active prompt object, so agents can handle unresolved learning context deliberately. |
nova.learn_resolve_opportunity |
MCP tool; args: opportunityId, verdict, reason | opportunityId and verdict required; reason optional max 500 chars | Closes or defers a semantic learning prompt and returns resolution state. |
nova.learn_resolve_opportunity response |
ok, opportunityId, verdict, reason, priorState, resolvedState, resolvedAtUtc, fr1CandidatesSuperseded | returned by explicit resolver calls | Reports explicit semantic prompt feedback. This is separate from the auto-resolution field injected into matching PKS upsert results. |
verdict |
upsert | not_applicable | unsafe | already_known | defer | required for opportunity resolution | Explains whether the agent wrote knowledge, rejected the prompt, recognized existing coverage, or deferred handling. |
pksSemanticLearningResolution |
status, opportunityId, verdict, reason, matchSource | only after auto-resolution through nova.pks_upsert | Confirms that a semantic opportunity was auto-resolved by a matching PKS upsert. |
nova.get_instructions(mode="learn") |
MCP guidance request; args: mode task|learn, scope target|allOwnerClaims, targetId, agentId, detail, domain/scopeDomain/domainScope, taskKeywords | mode defaults to task; detail can be full or compact | Returns Learn Mode v3 with PLATFORM_PLAYBOOK deliverable and optional learnMode.progress. |
learnMode.progress.tasks[] |
taskId, learnModeActive, visitedSurfaces, meaningfulInteractions, floorsMet | null when no tracked learn tasks apply | Shows per-task exploration coverage. |
learnMode.progress.minVisitedSurfaces / minMeaningfulInteractions / allFloorsMet |
integer; integer; boolean | server policy values; computed boolean | Defines and summarizes the coverage floor for Learn Mode completion. |
coverageExhausted / coverageExhaustedReason |
boolean; string | false; required reason only when overriding unmet learn floors | Allows a blocked Learn Mode release only when further coverage is genuinely exhausted and explained. |
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.learn_suggest |
Ranks learning opportunities from accumulated observations and stale PKS candidates. |
nova.learn_generate |
Generates PKS candidate proposals or safe content patches from repeated evidence. |
nova.learn_promote |
Evaluates promotion, demotion, deprecation, and revive transitions for PKS knowledge. |
nova.learn_feedback |
Reads recent promotion and learning feedback events. |
nova.learn_resolve_opportunity |
Resolves a semantic learning prompt with a verdict such as upsert, unsafe, already_known, or defer. |
nova.explain |
Explains why a PKS phenomenon is at its current learning level and which gates pass or fail. |
nova.revalidate |
Runs a current-page, non-executing check against stale PKS fingerprints. |
nova.get_instructions |
Returns Learn Mode v3 guidance and progress when called with mode=learn. |