Skip to main content
Noēsis separates faculties (capabilities/subsystems in the runtime) from phases (observable events emitted into the episode trace).
  • Faculties describe what kind of cognition runs: Intuition, Direction, Governance, Insight (other runtime faculties like Memory can participate too).
  • Phases describe what gets recorded: observe → intuition → interpret → plan → direction → governance → act → reflect → learn → terminate → insight → memory
Faculties exist even when they emit nothing; a faculty can be active and still produce no events for a given episode.
Most users configure faculties via noesis.set() and noesis.run(), then observe results in artifacts (events.jsonl, summary.json). Python imports are only needed for writing custom policies—see Advanced: Writing policies.

Cognitive loop hook order

The runtime emits phases in a canonical order:
Hook ordering is enforced by validate_hook_sequence(). Any violation raises an error.

Veto semantics (canonical)

A veto is a fail-closed stop before action execution:
  • Governance emits the veto decision event; runtime outcome depends on configuration:
  • default (governance_pause_on_veto=false): a terminate event with status="vetoed" is emitted.
  • pause mode (governance_pause_on_veto=true): run.interrupt and run.checkpoint are emitted instead of terminate/finalization.
  • No act events are emitted on veto paths.
  • Failure policy decides how governance exceptions resolve (e.g., enforce-veto).
  • veto_count is computed from governance decisions where decision="veto" (not from terminate status) to avoid double-counting.

Overview


Intuition

Intuition provides policy-driven guidance during the interpret phase. It observes episode state and emits events that can hint, intervene, or veto.

Configuration

IntuitionEvent (artifact schema)

Intuition events appear in events.jsonl with phase="intuition":

Structured steering contract (runtime handoff)

Before planning, runtime converts IntuitionEvent into a typed IntuitionAssessment via derive_intuition_assessment(). This guarantees Direction receives a canonical steering shape even when an intuition policy omits optional fields. Defaulting rules in derive_intuition_assessment():
  • risk_level: critical for veto/blocking, moderate for intervention, otherwise low
  • scrutiny_level: strict for veto/blocking, elevated for intervention, otherwise normal
  • salience_signals: policy_hint for hint/intervention, safety_boundary for veto/blocking
  • strategy_hints: conservative + verify_first for veto/blocking, verify_first for intervention
  • tool_constraints: no_side_effects + require_double_check for veto/blocking
The event lineage is preserved into Direction through:
  • payload.intuition_event_id on phase="direction" events
  • top-level evidence_ids on the direction event record

Intuition modes


Direction

Direction handles plan mutations through versioned directives. It runs after plan, before governance, and does not perform vetoes—fail-closed gates live in Governance.

PlannerDirective (artifact schema)

Direction events appear in events.jsonl with phase="direction":

DirectiveStatus

DirectiveKind

Deterministic IDs

Directive IDs are computed from content for reproducible lineage.

How Direction consumes intuition

In meta mode, MetaPlanner.propose(..., intuition=IntuitionAssessment) applies explicit mutations:
  • high/critical risk_level appends risk review language to the first step
  • retrieve_more appends supporting-evidence retrieval on the first step
  • narrow_scope, read_only, no_side_effects constrain the second step description
  • elevated/strict scrutiny_level and verify_first tighten the verify step description
Direction does not enforce vetoes; enforcement happens in Governance.

Governance

Governance is the pre-action audit layer that evaluates proposed actions before execution. It operates in the governance phase.

Governed side effects (pre-act gating)

ns.governed_act(...) is the operating-system boundary for side effects. It uses the same canonical episode runtime boundary as ns.run(...) / ns.solve(...).
  • allow/audit: action_candidate → governance → act
  • enforce veto (governance_pause_on_veto=False): action_candidate → governance → terminate (no act)
  • enforce veto with pause enabled (governance_pause_on_veto=True): action_candidate → governance → run.interrupt → run.checkpoint (no act, no terminate)
Internal runtime seam constraint: graph execution (using=...) and explicit actuation bindings are mutually exclusive and fail fast if mixed.

Configuration

GovernanceResult (artifact schema)

Governance events appear in events.jsonl with phase="governance":
Event stream convention: governance events keep phase="governance"; sub-hooks (e.g., pre_act) are carried inside the payload. This keeps the phase enum stable.

GovernanceDecision

Terminate on veto (default)

When a veto is issued and governance_pause_on_veto is disabled, the runtime emits a terminate event:
With governance_pause_on_veto=true, runtime emits interrupt/checkpoint events instead:
See events.v1 for canonical payload shapes.

Pause on veto (optional)

When governance_pause_on_veto=true, enforce-mode vetoes emit lifecycle events and keep the run unsealed:
On this paused path there is no act, no terminate, and no final.json / manifest.json yet.

Built-in rules


Insight

Insight computes metrics from episode traces during the insight emission.

InsightMetrics (artifact schema)

Metrics appear in summary.json:

InsightMetrics fields

Computed roll-ups

When computing analytics from events, the insight faculty produces these roll-ups:

Faculty boundaries

Each faculty has clear responsibilities:
Intuition observes and advises—it should never execute actions directly.
Direction handles plan mutations—it should never evaluate outcomes.
Governance audits pre-action—it should never modify plans.
Insight computes metrics—it should never modify state or plans.

Advanced: Writing policies

This section is for users writing custom intuition policies or custom governors. Most users can skip this.

DirectedIntuition

To write a custom policy, extend DirectedIntuition:
Then pass it to noesis.run():

DirectedIntuition methods

Parsing artifact payloads

If you need to parse artifact payloads programmatically:

Next steps

Write policies

Implement Intuition with custom policies.

Configure governance

Control Direction and Governance behavior.

Export metrics

Use Insight metrics in dashboards.

Cognitive loop

Understanding the full execution flow.