OK stands for Operational Knowledge. Nova uses operational knowledge for current service state: which service a tab belongs to, which visible facts are fresh enough, and which assumptions need a new observation before they can guide action.
OK is Nova’s live knowledge layer for running web services in browser tabs. It stores observations about the visible service state, then turns accepted observations into current facts with confidence, freshness, and conflict handling.
OK is different from PKS and ETM. PKS stores reusable website behavior. ETM stores task-shaped episodes and completion conditions. OK answers the immediate question: what appears true right now in this tab or service context?
Agents do not use OK as a manual notes store. Normal browser tool calls can refresh target and service state automatically. An agent uses OK observation only when an important visible state would otherwise be missed, such as login state, selected model, plan tier, page type, language, theme, or available service features.
In short
- OK stores current service state, not long-term website playbooks.
- A single observation call can report several structured claims from the same page snapshot.
- Accepted claims become current facts; weak or contradictory claims may stay as observations or produce warnings.
- Freshness matters: facts older than the OK hint window are refreshed before they guide state-sensitive work.
- Unknown canonical core signals are rejected, while custom namespaced signals can extend the observation surface.
- OK can support rule checks and task context, but it does not override current-page confirmation or user approvals.
What OK stores
OK keeps a compact state picture around the current browser target, detected service, and visible service facts.
- Target and service context OK can associate a browser target with a recognized web service, current URL, origin, route, and binding state.
- Observations An observation records what an agent or system signal noticed at a specific moment. Agent observations are submitted as structured claims.
- Facts A fact is the current accepted value for a signal in a target or service binding, such as login state, selected model, plan tier, page type, language, or theme.
- Freshness OK compares observation time with the current page context. Perception can return hints when facts are missing, older than the freshness window, or tied to a changed URL.
- Conflict handling When a new value contradicts the current fact, OK either keeps the existing fact, marks conflict, or supersedes it with stronger evidence.
- Derived capabilities Some service facts can become capabilities, for example whether a service appears authenticated or whether a feature appears available.
When this matters
OK belongs to tasks that depend on live website state: checking whether a user appears signed in, which model or plan is visible, whether a feature is available, whether a route changed after navigation, or whether the current state is too uncertain for a reliable next step.
Operational model for agents
For an agent, OK answers four questions: which service context is active, which visible claims can be reported, which facts are current enough, and which uncertainty must be resolved before acting?
- Target and binding
- The browser target and detected service context where an observation belongs. A fact from one target should not be silently reused for another target.
- Signal key
- A structured key that names a state signal. Canonical public keys use the core namespace; custom service-specific keys must still follow a namespace.path format.
- Claim
- One reported observation inside an OK call. A claim contains the signal key, the observed value, optional evidence, and certainty.
- Fact
- The current accepted value for a signal after OK has processed observations, confidence, supersedence, and conflicts.
- Certainty
- The agent’s confidence level for a claim. Certain claims are strong, likely is the default, and tentative claims are weak orientation.
- Freshness
- The age and page fit of a fact. Perception asks for a new observation when relevant facts are missing, old, or tied to a previous URL.
- Capability
- A usable state derived from facts, such as an authenticated service or visible feature availability.
How agents use OK information
For agents, OK is a live state surface. It tells the agent when to observe, how to report visible state, and when stored state is too old, weak, or conflicted to guide a state-sensitive action.
-
Read the current page
The agent uses
nova.perceiveor another read tool to inspect the visible page. Perception can includeokHintswhen operational state needs attention. -
Check OK hints
If
okHints.shouldObserveis true, the agent readsmissingOrStaleKeys,firstVisit, andurlChangedbefore deciding what to report. -
Report only visible state
The agent calls
nova.ok_observewith claims that are visible on the current page. It should not report passwords, tokens, hidden account data, or guesses. -
Let OK process the claims
OK returns
accepted,rejected,superseded,facts[], and optionalwarnings[]so the agent can see what happened. - Use state as orientation Fresh facts can guide later choices, but current page observation and safety boundaries still decide whether an action is allowed.
- Refresh uncertain state If a fact is stale, tentative, conflicted, or tied to an old URL, the agent should re-observe before relying on it for login, account, model, billing, or feature-sensitive behavior.
When OK state applies
OK state is not permission to click. It is reliable orientation only when the current page still supports the fact and the fact state is strong enough for the next step.
okHints.firstVisit=true
- Meaning
- OK has no current facts yet for the detected service context, or required keys are absent.
- Evidence required
- Perception returns okHints with missing keys or no current facts.
- Agent behavior
- Observe the visible page and submit a scoped
nova.ok_observecall if the state matters. - May guide action
- No.
factState: fresh|confirmed
- Meaning
- A current fact exists and has not been superseded or marked conflicted.
- Evidence required
- Current fact value, certainty level, recent observation timestamp, and matching page context.
- Agent behavior
- Use it as orientation, then confirm the visible page before sensitive or irreversible actions.
- May guide action
- Yes, as orientation.
older than 5 min hint window
- Meaning
- The fact exists but is old enough that perception asks the agent to refresh it.
- Evidence required
- The key appears in
okHints.missingOrStaleKeysorlastObservedAgoMsexceeds the freshness window. - Agent behavior
- Re-read the page and report fresh visible state before using the fact.
- May guide action
- No for state-sensitive action.
okHints.urlChanged=true
- Meaning
- The current page URL differs from the URL stored with the target state.
- Evidence required
- Perception reports a URL change for the same target and service context.
- Agent behavior
- Refresh route-dependent facts. Do not transfer state from the previous route by assumption.
- May guide action
- No until refreshed.
certainty: tentative
- Meaning
- The agent saw a weak signal. Tentative claims are useful evidence but cannot override an existing contradictory fact.
- Evidence required
- Claim certainty is tentative or the visible signal is incomplete.
- Agent behavior
- Record it when useful, then gather stronger evidence before relying on it.
- May guide action
- No by itself.
factState: conflicted
- Meaning
- A new observation contradicted the current fact but did not clearly replace it.
- Evidence required
- Fact state or warnings show contradiction, or the returned fact remains conflicted.
- Agent behavior
- Observe again, prefer current visible evidence, and avoid state-sensitive decisions until resolved.
- May guide action
- No.
superseded > 0
- Meaning
- A stronger fresh observation replaced an older value for the same signal.
- Evidence required
- The observe response increments
supersededand returns the newfacts[].state. - Agent behavior
- Treat the newest fact as current, while still confirming visible page state before acting.
- May guide action
- Yes, after current confirmation.
Failure and guard conditions
These are the hard edges an agent or integration should expect from the OK observation contract.
| Condition | Observed signal | Agent behavior |
|---|---|---|
| Unknown top-level argument | Only targetId, perceptionId, claims, and _meta are accepted. |
Fix the request shape. Extra fields are rejected instead of being ignored. |
| Missing or empty claims | The claims array is missing, not an array, or has no items. |
Submit at least one claim from the current page snapshot. |
| Too many claims | More than 50 items in claims. |
Split the observation into smaller page-scoped batches. |
| Invalid signal key | A key is longer than 128 characters, misses the namespace.path shape, or uses an unknown core.* name. |
Use a canonical core key or a valid custom namespace. Unknown core keys fail fast. |
| Invalid value | The claim has no value or the raw JSON value exceeds 16384 characters. |
Report a compact state value, not a page dump. |
| Invalid certainty | The certainty is not certain, likely, tentative or null. |
Use one of the supported certainty levels. Omit or null means likely. |
| Deprecated or weak signal | The response includes warnings[] or a fact state such as observation_only or conflicted. |
Treat the observation as diagnostic evidence and gather stronger current-page proof. |
| Scope fact cap reached | New facts may return a capped state such as scope_full when a scope has too many active custom facts. |
Stop adding low-value custom keys and keep only compact, task-relevant signals. |
Agent interpretation example
The example shows OK as a current-state contract: perception asks for fresh state, the agent reports visible claims, and the result tells the agent which facts can be used as orientation.
Observation request
{
"tool": "nova.ok_observe",
"arguments": {
"targetId": "active",
"perceptionId": "perceive_7f3a",
"claims": [
{
"signalKey": "core.login_state",
"value": "logged_in",
"certainty": "likely",
"evidence": "Visible user menu is present."
},
{
"signalKey": "core.plan.tier",
"value": "pro",
"certainty": "tentative",
"evidence": "A Pro label is visible near the account menu."
}
]
}
}
Relevant response fields
{
"structuredContent": {
"ok": true,
"accepted": 2,
"rejected": 0,
"superseded": 0,
"facts": [
{
"key": "core.login_state",
"value": "logged_in",
"state": "fresh",
"isNew": true
}
],
"warnings": null
}
}
Agent interpretation
{
"treatAs": "current service-state evidence",
"mayUse": "fresh facts can guide model, login, page-type, or feature-sensitive choices",
"beforeAction": "confirm the visible page still supports the fact",
"onStaleOrConflict": "perceive again and submit a fresh OK observation"
}
MCP contract
This is the deterministic layer below the explanation. It lists OK fields that agents and integrators should treat as contract signals rather than free prose.
Execution rule: No OK fact may guide state-sensitive action without current-page confirmation.
| Variable | Type / values | Default | Effect |
|---|---|---|---|
nova.ok_observe |
MCP tool | available in OK-capable Nova sessions | Pushes structured observations about current page state. One call represents one perception snapshot with one or more claims. |
targetId |
string or null: tab ID, sandbox ID, active | active when omitted or null | Selects the target that receives the observation. |
perceptionId |
string or null | null | Groups claims from the same perception or trace moment. |
claims |
array, min 1, max 50 | required | Contains the structured operational claims submitted by the agent. |
claims[].signalKey |
string, max 128, namespace.path | required | Names the signal. Canonical core keys must exist in the OK signal vocabulary; custom namespaces are accepted when formatted correctly. |
claims[].value |
any JSON value, max 16384 raw chars | required | Stores the observed state value. Keep it compact and state-focused. |
claims[].certainty |
certain | likely | tentative | null | likely | Maps to claim confidence: certain 0.95, likely 0.75, tentative 0.50. Tentative cannot supersede contradictory existing facts. |
claims[].evidence |
string or null | null | Optional evidence note for what the agent visibly observed. |
_meta |
object | optional MCP metadata | Accepted as MCP metadata; it is not a normal OK state claim. |
accepted / rejected / superseded |
integer counters | computed | Shows how many claims were accepted, rejected, and how many older facts were replaced by fresher observations. |
facts[].key / value / state / isNew |
string; JSON; string; boolean | computed | Summarizes accepted facts returned from the observation call. State can include fresh, confirmed, conflicted, observation_only, or scope_full. |
warnings[] |
array or null | null | Warns about invalid format, deprecated signals, or uncertainty that should change agent behavior. |
okHints |
object or null on perception responses | null when no refresh is needed | Prompts the agent to observe current operational state when facts are missing, stale, first-visit, or URL-changed. |
okHints.shouldObserve |
boolean | computed | True when first visit, URL change, or missing/stale keys require fresh observation. |
okHints.missingOrStaleKeys |
string[] | [] | Lists canonical signals that need a current observation. |
okHints.lastObservedAgoMs |
integer milliseconds or null | null when no previous observation exists | Shows the age of the oldest relevant current fact. |
okHints.serviceKey |
string or null | detected from current URL | Identifies the current service context for OK hints. |
okHints.currentFacts.* |
valueJson, factState, certaintyLevel, lastObservedAt | null when no facts exist | Shows the fact summaries that OK already has for the service context. |
okHints.firstVisit / urlChanged |
boolean flags | computed | Explain why the hint was returned even if some facts already exist. |
core.* signal vocabulary |
core.login_state, core.model.active, core.model.family, core.model.routing_mode, core.models.available, core.plan.label, core.plan.tier, core.account.display_name, core.account.email, core.session.state, core.page.type, core.ui.language, core.ui.theme, core.subscription.active, core.feature.available | canonical public keys | These are the known core signals that agents can report as OK claims when the current page visibly supports them. |
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.ok_observe |
Report operational state |
nova.memory_stats |
Review learning-memory statistics |