"What is Tau and what is its primary purpose?" A Python reimplementation of Pi's minimalist coding-agent architecture, hosted by HuggingFace (github.com/huggingface/tau). Its purpose is pedagogical: a harness designed to be READ LIKE A TEXTBOOK. ~300-line core loop, fully typed, three-layer separation. Not competing on capability — competing on legibility. t = 2pi. Pi redone in Python. harness-engineering::dd21::recall "Explain Tau's three-layer architecture and the hard boundary." tau_ai (provider streaming) → tau_agent (reusable brain: loop, harness, events, sessions) → tau_coding (application: CLI, TUI, tools). The boundary: tau_agent MUST NOT import Textual, Rich, CLI, or config paths. Enforced by rule in README, AGENTS.md, CONTRIBUTING.md, and an ADR. harness-engineering::dd21::recall "Why is Tau's loop described as 'stateless'?" The loop function takes the messages list as an argument and appends to it — it owns no instance state. The harness (stateful wrapper) owns the transcript. This makes the loop trivially testable with a FakeProvider for deterministic tests. harness-engineering::dd21::analysis "What is Tau's event system and why does it matter?" 14 frozen Pydantic models forming a closed union with extra='forbid'. AgentStart/End, TurnStart/End, MessageStart/Delta/End, ThinkingDelta, ToolExecutionStart/Update/End, Retry, QueueUpdate, Error. No frontend receives unknown events. Adding an event is a type-checked breaking change. Events ARE the observability layer — Module 10's reference. harness-engineering::dd21::recall "Explain Tau's steering vs follow-up queue design." Two distinct message queues. STEERING: inject after the current turn/tool batch — interrupts the agent mid-task. FOLLOW-UP: inject only when the run would otherwise stop — continues after task completion. queue_mode controls one-at-a-time vs all. Cleanest model of user-interrupts-agent in any harness studied. harness-engineering::dd21::analysis "How does Tau's non-destructive compaction work?" Sessions are append-only JSONL — entries never rewritten. CompactionEntry carries replaces_entry_ids. During replay (SessionState.from_entries), those messages are swapped for a summary. The on-disk record stays intact. You can re-derive fuller history later. This is event-sourcing applied to agent sessions. harness-engineering::dd21::recall "What is transcript repair and why is it necessary?" When a run is cancelled mid-tool-call, the transcript has an assistant tool_call with no matching tool_result. OpenAI-compatible providers reject this with a 400. Tau synthesizes ToolResultMessage(ok=False, error='interrupted') for orphaned calls before the next request. Real production edge case most teaching agents skip. harness-engineering::dd21::analysis "Why is Tau the ideal lab target for Course 2B?" Tau has ZERO defenses: no sandbox, no permissions, no approval gates, no SECURITY.md. Bash runs whatever. This makes it the perfect 'before' picture — every 2B attack (injection, memory poisoning, tool abuse, cascading failures) works against an unguarded harness. Study NemoClaw for defense, attack Tau for practice. harness-engineering::dd21::analysis "How does Tau's phase-by-phase build journal serve Course 1?" dev-notes/architecture/phase-1 through phase-25 document how the system was assembled step by step. Each phase explains what was added, why, and how it maps to Pi. This is Module 12 (Capstone) as a documented walkthrough — students can read how someone else built a harness, not just the final product. harness-engineering::dd21::recall