Visual for LCJ Candidate Journal LCJ The Lightweight Candidate Journal records learning evidence from real agent work before ALP turns it into reviewed candidates. Overview Records Agent model Agent flow State flow Failure rules MCP contract Agent Tools

LCJ

LCJ stands for Lightweight Candidate Journal. Nova uses it as a compact journal for learning-relevant events and candidates: evidence that may become useful, but is not trusted long-term knowledge yet.

LCJ records what happened during real agent work on websites: tool outcomes, observations, repeated blockers, selector drift, navigation patterns, and short learning claims that can be reviewed later.

LCJ feeds ALP. ALP can only suggest, generate, promote, or reject learning when enough real evidence exists. PKS stays reserved for reviewed website knowledge that has passed the learning gates.

Most LCJ evidence appears automatically while normal Nova tools run. Agents and integrators use LCJ directly only when they need memory statistics or want to add an explicit candidate inside a claimed work context.

In short

  • LCJ stores learning evidence, not executable guidance.
  • Normal tool work creates most LCJ observations automatically.
  • Manual candidates require a claimed target context.
  • Candidates use the states unverified, verified, or disproven.
  • Verified candidates can become promotable only after enough evidence.
  • LCJ never replaces current-page confirmation or safety gates.

What LCJ records

LCJ keeps the raw material that later learning decisions need. It records evidence before that evidence becomes handbook-like guidance.

  1. Tool events LCJ can keep whether a tool succeeded, failed, how long it took, and which website context mattered. This lets later review distinguish a real success from a guessed claim.
  2. Observations Observations describe meaningful signals such as action_success, action_failure, blocker_dismissed, selector_drift, perceive_signature or telemetry_confirmed.
  3. Candidates A candidate combines component, claim, status and confidence. It says what might be worth learning without making it active knowledge.
  4. Evidence strength Finalize review separates weak, medium, and strong evidence. A verified candidate becomes promotable only when its evidence score reaches the promotion threshold.
  5. Statistics Memory statistics expose LCJ counts, verification rates, curation rates, finalize/outbox health, and rollout-readiness signals through nova.memory_stats.
  6. Learning history Promotion and feedback events keep the decision path visible, so later agents can understand why a candidate moved forward, stalled, or was rejected.

When this matters

Use LCJ when repeated website work should leave evidence behind: recurring consent dialogs, selectors that fail and recover, repeated form patterns, fragile navigation paths, action outcomes that should be reviewed, or task evidence that may become reusable guidance later.

Knowledge model for agents

For an agent, LCJ answers four questions: where did the evidence happen, what claim is being made, how mature is that claim, and what must be reviewed before it can affect future work?

Work context
Manual candidates are tied to a claimed target. Without a current nova.tab_claim context, an agent cannot add LCJ candidates safely.
Observation
A normalized learning signal from real work, such as a successful action, failure, blocker, drift signal, or page signature.
Candidate
A short reusable claim that may become useful after evidence and review. It is still a candidate, not trusted knowledge.
Component
The category key in component. It groups related candidates such as a blocker, navigation pattern, automation lock, or UI behavior.
Status
unverified is the default state, verified means supporting evidence exists, and disproven records evidence against the claim.
Confidence
A score from 0.0 to 1.0. It helps rank the candidate, but it does not make the candidate executable.
Finalize stats
finalizeStats reports how many LCJ candidates were considered, verified, promotable, or prepared for curated knowledge writes when a work context is finalized.
Memory statistics
nova.memory_stats reads LCJ, finalize, outbox, and runtime learning metrics for a chosen time window.

How agents use LCJ information

LCJ is a journal, not a shortcut. The agent first creates or uses real evidence, then reads or writes small candidate signals, and lets ALP decide what should become durable knowledge.

  1. Claim the work context An agent claims the relevant tab with nova.tab_claim. This binds manual LCJ candidates to the right target and owner.
  2. Let normal work create evidence Browser tools such as nova.perceive, nova.click_selector or nova.type_selector produce outcomes that can become LCJ observations.
  3. Add explicit candidates sparingly When a reusable pattern is clear, an agent or integration can call nova.memory_add_candidate with a concrete component and short claim.
  4. Inspect memory health nova.memory_stats returns windowed LCJ counts, verification rates, curation rates, finalize decisions, outbox status, and selected runtime learning health signals.
  5. Let ALP review the evidence ALP tools such as nova.learn_suggest, nova.learn_generate and nova.learn_feedback turn LCJ evidence into reviewed learning decisions.
  6. Finalize without turning evidence into action finalizeStats can summarize LCJ candidates when a claim context is released. The summary can prepare review or promotion, but it does not execute website actions.

When LCJ evidence applies

LCJ state describes evidence maturity. It can make a pattern visible, but only promoted PKS knowledge may guide future work, and even then only after the current page confirms the situation.

No LCJ context context_missing
Meaning
The target is not claimed for the current agent, so manual candidate writes cannot be attributed safely.
Evidence required
No active nova.tab_claim context for the target.
Agent behavior
Claim the tab first, or keep working without adding manual candidates.
May guide action
No.
Observation tool event
Meaning
A real tool outcome or page signal has been recorded as learning evidence.
Evidence required
Tool outcome, context, kind, outcome, severity, and optional selector or candidate key.
Agent behavior
Treat as raw evidence. Look for repetition before proposing knowledge.
May guide action
No.
Candidate unverified
Meaning
A reusable claim exists, but it has not been confirmed strongly enough for promotion.
Evidence required
Required fields: targetId, component and claim. Default confidence=0.65.
Agent behavior
Gather more evidence or wait for ALP review.
May guide action
No.
Verified candidate verified
Meaning
Supporting evidence exists for the claim. The candidate can be considered in finalize and ALP review.
Evidence required
Status verified plus supporting tool or resolution evidence.
Agent behavior
Review the evidence and allow ALP to decide whether promotion is appropriate.
May guide action
No.
Disproven candidate disproven
Meaning
Evidence speaks against the claim, so it should not be promoted as useful knowledge.
Evidence required
Status disproven or contradicting outcomes.
Agent behavior
Avoid promotion. Replace only with fresh evidence and a new review path.
May guide action
No.
Promotable candidate evidenceScore >= 1.45
Meaning
A verified candidate has enough combined evidence to be proposed for promotion review.
Evidence required
Source evidence, resolution evidence, verification timestamp, high-signal success, recovery from errors, and confidence can raise the score.
Agent behavior
Pass through ALP/PKS promotion. Do not apply it directly from LCJ.
May guide action
No.
Curated knowledge after promotion
Meaning
Knowledge has moved beyond LCJ and can appear as reviewed PKS orientation.
Evidence required
Promotion or curated write after review, not merely a candidate row.
Agent behavior
Use as orientation and confirm the current page before acting.
May guide action
Yes, after visible confirmation and normal safety gates.

Failure and guard conditions

These are the hard edges an agent or integration should expect from LCJ-facing MCP tools.

Condition Observed signal Agent behavior
Unknown argument nova.memory_add_candidate and nova.memory_stats reject unknown top-level properties. Send only the documented fields for the selected tool.
No claimed work context nova.memory_add_candidate returns lcj.context_missing when the target tab is not claimed. Claim the tab with nova.tab_claim before adding manual candidates.
Missing required candidate fields targetId, component and claim are required by the published schema. Empty component or claim is rejected. Use a concrete target, a compact category key, and a one-line learning claim.
Candidate field too long component is capped at 64 characters; claim is capped at 280 characters. Shorten the category or split the claim into a clearer candidate.
Invalid candidate status status must be unverified, verified or disproven. Use the closest supported evidence state; do not invent intermediate states.
Confidence outside range confidence must be finite and between 0.0 and 1.0. Clamp in the caller before sending, and keep weak claims near the default.
Confidence compatibility Schema-conformant clients should send confidence as a JSON number. Runtime may tolerate numeric strings for agent compatibility. Prefer typed JSON values and do not rely on string coercion for new integrations.
Memory stats integer outside bounds windowHours must be 1-720; topComponents, maxSkipReasons, topRoutes, topHosts and topSelectors must be 1-20. Lower the requested window or result counts and retry.
Memory stats wrong type Statistics limit fields must be JSON integers. Component filters must be strings or null. Send typed JSON values, not stringified integers.
Finalize stats malformed finalizeStats must be an object when provided during release/finalize. Provide known metric fields as numbers, or omit the object.

Agent interpretation example

The example shows LCJ as an evidence contract: the agent writes a short candidate, reads the returned identifiers, and still waits for review before treating it as guidance.

Candidate request

{
  "tool": "nova.memory_add_candidate",
  "arguments": {
    "targetId": "active",
    "agentId": "default",
    "component": "consent-dialog",
    "claim": "Consent banner disappears after clicking the footer reject link.",
    "status": "unverified",
    "confidence": 0.65
  }
}

Relevant response fields

{
  "structuredContent": {
    "ok": true,
    "targetId": "tab_12",
    "taskId": "claim_4f9d",
    "ownerAgentId": "default",
    "candidateId": 42,
    "created": true,
    "status": "unverified",
    "confidence": 0.65,
    "updatedAtUtc": "2026-05-07T10:30:00.0000000Z"
  }
}

Agent interpretation

{
  "treatAs": "learning evidence candidate",
  "mayExecute": false,
  "beforePromotion": "gather repeated evidence and review through ALP",
  "beforeUse": "only promoted PKS knowledge may guide action, and only after current-page confirmation"
}

MCP contract

This is the deterministic layer under the explanation. It describes LCJ fields that agents and integrators should read as contract signals, not as free-form documentation prose.

Execution rule: No LCJ field may trigger a website action; LCJ evidence must pass ALP/PKS review and current-page confirmation before it can guide behavior.

Variable Type / values Default Effect
nova.tab_claim MCP tool; Args: targetId, agentId, agentRole, ttlMs, debugLabel, reclaimReason targetId active; agentId default; ttlMs bounded by claim policy Claims a tab for the current agent context and returns claim state including finalizationToken, leaseMs, ttlMs, and ownership data.
nova.tab_release MCP tool; Args: targetId, agentId, finalizationToken, finalizeDecision, finalizeReasonCode, finalizeReasonText, coverageExhausted, coverageExhaustedReason, finalizeOutboxJobType, finalizeOutboxPayload, finalizeStats finalizationToken required for finalizeDecision override Releases or finalizes the claimed context and returns releaseState, releaseAuthorization, hadActiveClaim, released, finalized, and learning/finalize summary fields.
nova.memory_add_candidate MCP tool; Args: targetId, agentId, component, claim, status, confidence requires claimed target context Adds or updates a lightweight LCJ candidate for a claimed task/tab.
targetId string; tab id, sandbox id, active required by schema Selects the claimed target context for the candidate.
agentId string default Identifies the calling agent and must match the claim owner.
component string; max 64 chars required Groups the candidate under a compact category key; stored normalized to lowercase.
claim string; max 280 chars required One-line reusable learning claim.
status unverified | verified | disproven unverified Defines whether the candidate is fresh evidence, supported, or contradicted.
confidence number 0.0-1.0 0.65 Ranks candidate strength without granting execution permission.
candidateId / created / updatedAtUtc integer; boolean; ISO timestamp returned Identifies whether the candidate was created or updated and when it changed.
taskId / ownerAgentId string; string returned Shows the LCJ work context and owning agent that received the candidate.
nova.memory_stats MCP tool; Args: windowHours, topComponents, maxSkipReasons, topRoutes, topHosts, topSelectors, componentFilter 24h window; top values 8 Reads LCJ, finalize, outbox, and runtime learning metrics.
windowHours integer 1-720 24 Lookback window for windowed memory statistics.
topComponents integer 1-20 8 Limits returned LCJ component groups.
maxSkipReasons integer 1-20 8 Limits finalize skip-reason buckets.
topRoutes integer 1-20 8 Limits route groups in runtime learning statistics.
topHosts integer 1-20 8 Limits host groups in runtime learning statistics.
topSelectors integer 1-20 8 Limits selector groups in runtime learning statistics.
componentFilter string | null null Filters LCJ candidate and curation aggregates to one normalized component key.
structuredContent.kpis rates and health counters computed Summarizes commit, verification, curation, outbox, and runtime readiness rates.
structuredContent.lcj toolEvents*, candidates*, curated*, topComponentsWindow computed Reports LCJ event, candidate, verification, disproven, and curation counts.
structuredContent.finalize decisions*, outbox*, skipReasonsWindow computed Reports finalize decisions, commit/skip counts, outbox health, and skipped-promotion reasons.
scrollSmart / clickNavigation / dismissBlockers / screenshotCapture / rolloutDecision runtime statistics objects computed Shows selected runtime learning health signals that memory statistics expose beside LCJ.
finalizeStats object optional during release/finalize Carries LCJ candidate metrics when a claimed context is finalized. Must be an object when provided.
finalizeStats.candidatesTotal / candidates_total integer optional Total LCJ candidates considered during finalize planning.
finalizeStats.candidatesVerified / candidates_verified integer optional Verified LCJ candidates at finalize time.
finalizeStats.candidatesPromotable / candidates_promotable integer optional Verified candidates that looked promotable into long-term memory.
finalizeStats.curatedUpserts / curated_upserts integer optional Curated knowledge writes prepared or emitted from verified candidates.
finalizeStats.evidenceMinScore / evidence_min_score number optional Lowest evidence score among considered candidates.
finalizeStats.evidenceAvgScore / evidence_avg_score number optional Average evidence score across considered candidates.
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.tab_release Releases a claimed tab and can carry finalize statistics for the LCJ work context.
nova.memory_stats Review learning-memory statistics
nova.memory_add_candidate Record an explicit learning candidate
nova.learn_suggest Reads accumulated LCJ observations and ranks learning opportunities for ALP review.
nova.learn_generate Turns reviewed LCJ opportunities into candidate proposals for PKS or domain hints.
nova.learn_promote Move reviewed knowledge toward active use
nova.learn_feedback Shows recent learning and promotion events that came out of LCJ/ALP review.
nova.tab_claim Claims a target tab so manual LCJ candidates can be attributed to the right work context.