pi-observers

2026-08-07 · source · source ↗ · raw capture · wiki page

File-defined observer agents for the pi coding agent — a TypeScript extension that lets users declare background observers as Markdown files with YAML frontmatter. Observers watch one axis of quality each (memory, skills, goals, verification), propose short advisories, and a central reconciler decides what reaches the main agent. They are read-only, fire-and-forget, and never answer on the agent's behalf. Published as pi-observers on npm; requires pi >= 0.83.


Architecture

Observers are defined in .pi/observers/*.md files with frontmatter fields for trigger (on:), visibility (sees:), tools (tools:), capabilities (can: advise/veto), delivery queue (deliver:), model, priority, and more. Three layers of precedence — project (trusted only) > user > builtin — all keyed on the name: field.

Each observer gets its own hermetically sealed AgentSession: no extensions, skills, prompt templates, or project settings leak in. Proposals arrive through pi's message queues the moment the observer's model call completes (arrival-driven delivery). A veto holds the run open; at most one veto per window.

The Reconciler arbitrates: deduplication by fingerprint, priority ranking, per-turn advisory budget (maxAdvisoriesPerTurn, capped at 10). Vetoes are governed by budget — per (observer, fingerprint) key, per-observer ceiling (2× vetoBudget), and session-wide ceiling (4× vetoBudget) — not by dedupe. Fingerprint encoding uses length-prefixed keys to prevent collision-based budget refunds. Deferred advisories queue (bounded at 100, oldest evicted first) for proposals over budget.

Key Design Decisions

Bundled Observers

Observer Trigger Capability Default
memory-recall turn_end advise on
skill-recall before_agent_start advise on
goal-tracker turn_end advise, veto on
verification agent_settled advise off

Source


Fetched: 2026-08-07