System 2
System 2 is Buffaly's Level 2 watcher: a hidden parallel session that does not do the work. It watches the working session after each completed turn and queues labeled supervisory guidance when the primary agent drifts, stalls, skips verification, or forgets the plan.
What it is
A normal Buffaly session is a fast worker. It reads the latest context, calls tools, updates Plan, and keeps moving. That is useful, and it is also why long tasks fail in predictable ways: wrong target, motion without action, premature victory, and unfinished accounting.
System 2 is the slower supervisor. It is attached as a companion session, usually keyed {sourceSessionKey}-level-two, with AgentName set to level-2. It is not a child contractor and not a second copy of the primary agent.
| Companion | Session suffix | Event | Handler |
|---|---|---|---|
| System 2 / Level 2 watcher | -level-two | turn.completed | ToDispatchSupervisoryEvent |
Why it exists
Prompt rules do not keep a long-running agent honest. After compaction, after a large tool dump, or after a plausible-looking partial success, the worker is too close to the latest output to notice that the original obligation is unfinished.
System 2 exists so the runtime can check the work from outside the work. It reads Plan, Scratch, and task artifacts. It decides whether to stay silent or to nudge. Silence is a valid outcome. Intervention is reserved for drift, blockers, skipped validation, and unfinished loops.
Lifecycle
- The primary session completes a turn.
- The runtime delivers a
turn.completedcallback to the watcher. ToDispatchSupervisoryEventdigests the callback into the watcher timeline.- The watcher inspects the source Plan, Scratch, and task artifacts through its restricted tool surface.
- If intervention is warranted, it queues labeled guidance back to the observed session and returns. It does not take over the deliverable.
The watcher tool surface is intentionally small. Typical actions include ToGetObservedSessionKey, Plan/Scratch/task readers, and the send-and-return / send-and-wait queue tools. It cannot use ordinary file, shell, or coding tools.
What it can and cannot do
Can
- Subscribe to the source session's completed turns.
- Read Plan, Scratch, and task markdown from the observed session.
- Queue supervisory guidance labeled
[label: Level 2]. - Stay silent when the worker is on track.
Cannot
- Edit source files, run CLI, or own the final deliverable.
- Replace the primary agent's Plan or Tasks.
- Learn ontology objects or reusable actions. Those are separate critics.
- Review git commits. That is Global Code Review.
Queued guidance
When System 2 intervenes, the primary timeline should show a labeled instruction, not an unlabeled user message. The point of the label is so the worker treats it as supervisory input: nudge, correct, or request verification. It should not silently execute a different task.
Typical interventions are unglamorous: update Plan, inspect the actual file, verify the claimed test, close a leftover acceptance criterion, or stop declaring victory after a partial step.
Measured behavior
The architecture essay Why I Gave My AI a Conscience reports analysis of roughly 1.3 million local timeline messages. In that corpus, Level 2 intervened in about one out of five watcher digest turns, and strict interventions were followed by real corrective tool work most of the time. Longer and compacted sessions benefit more than short ones.
How to verify
- Watcher key ends in
-level-two. - Agent name is
level-2. - Subscription includes
turn.completed. - Handler is
tool:ToDispatchSupervisoryEvent. - Guidance in the primary timeline is labeled
[Level 2].
Ask Buffaly: “Check whether this session has a Level 2 watcher. Verify the watcher key, parent, observed session key, event subscription, and handler.”