Understanding the phase sequence that makes Noēsis episodes observable and auditable.
The cognitive loop is the core abstraction that makes agent reasoning explicit and auditable. Every Noēsis episode emits a sequence of observable phases.
The governance phase acts as a critical gate—if policies veto the plan, execution jumps to a blocked state. Each phase has a specific purpose and produces structured events that form the episode timeline.
In minimal mode, Direction, Governance, and Insight may emit no events for faster execution. In meta mode (default), all faculties are active and the full phase sequence is observable.
The observe phase captures the raw input at the moment an episode starts.Purpose: Record exactly what the agent was asked to do, with all context.What gets recorded:
The interpret phase extracts signals and intent from the observed input.Purpose: Summarize what the policy or intuition layer noticed before any plan is locked in.What gets recorded:
When governance/action-candidate flow is active, act events are causally linked to governance through caused_by, and state action timestamps align with the act event timestamp.Why it matters: You get a measurable execution history instead of guesswork about what happened.
The insight phase computes KPIs and metrics from the episode.Purpose: Generate structured metrics for dashboards, alerts, and analysis.What gets computed:
Plan adherence (how closely execution matched the plan)
The direction phase applies policy-driven plan mutations (meta mode only).Purpose: Allow policies to modify the plan before execution based on intuition signals.What gets recorded:
The governance phase is a critical gate that audits actions before execution (meta mode only).Purpose: Enforce pre-action policies and provide audit trails for compliance.What gets recorded:
# All eventsnoesis events ep_abc123# Filter by phasenoesis events ep_abc123 --phase plan# As JSON for scriptingnoesis events ep_abc123 -j | jq '.[] | select(.phase == "act")'
Or in Python:
Copy
import noesis as nsevents = list(ns.events.read(episode_id))# Filter phasesplan_events = [e for e in events if e["phase"] == "plan"]act_events = [e for e in events if e["phase"] == "act"]# Reconstruct causal chaindef get_causal_chain(events, event_id): chain = [] current = next((e for e in events if e["id"] == event_id), None) while current: chain.append(current) current = next((e for e in events if e["id"] == current.get("caused_by")), None) return chain