Monitor โ€” sparring notes & build plan.

What we've argued out so far, and what to build first.

session 2 · 2026-04-14 · sparring mode ON · "make it so" not yet said

This is the state of the framework after sparring. 14 signals parsed from Pierre, integrated into personas / pipeline invariants / revised build sequence. Three pushbacks still on the table. First sprint proposed โ€” one block only.

๐ŸŽง
Listen on the drive
~7 minute read ยท Edge TTS Ryan (en-GB)
download mp3 (2.7 MB)

The 14 signals I heard

  1. Tailscale check first. Safety before talk. Safe โ†’ can work.
  2. Skills in prime: 50 words each, not one-liners. 20 skills ร— 50w โ‰ˆ 1k tokens. Affordable.
  3. Disk/memory per-process. Dockers and containers tracked individually, not just global.
  4. Personas as ownership layer. Emoji-tagged. Know who to "blame" or consult when something breaks.
  5. Pipeline invariants = outcomes, not schedules. Groceries isn't "plan by Sunday", it's "need โ†’ bought โ†’ eaten."
  6. Health checks sparse. Daily or event-driven. Not every 20 seconds. Two users. Wouldn't notice 3 days down.
  7. Session close via "done" / "shut down" / "go to sleep". Do the work first, then clear.
  8. Log every turn raw + classified. Librarian runs background classification.
  9. Auditor persona for close. Performance review: errors, assumptions, gaps, proposals.
  10. Invariants not absolute. Human judgement adjusts. "It'll be what it'll be."
  11. Time/date hook. Sessions have no clue. Plus: prediction vs actual for calibration.
  12. Narration ratio is variable. Not a fixed rule. Context-dependent.
  13. GitHub push + rollback. System-level undo. "Seed of it."
  14. Drift as persona. Little cop ๐Ÿ‘ฎ emoji.

Personas โ€” starter set (5, not 20)

Don't proliferate on day one. Grow the company as use cases arrive. Every skill/hook declares its persona. Status bar shows active ones.

emojipersonaowns
๐Ÿ•ด๏ธSession BossSession invariant, prime, budget, mode
๐Ÿ“šLibrarianPer-turn logging, classification, brain writes
๐Ÿง‘โ€โš–๏ธAuditorSession close review, rating, repeated-mistake detection
๐Ÿ‘ฎCopDrift detection (AI + user), enforcement
๐Ÿ’พArchivistGitHub push, commits, rollback

Later additions as use cases demand

๐Ÿ’ฐAccountantResource tracking when pipelines grow
โฐTimekeeperIf predictions become a thing
๐Ÿ”ฌWorkbench BossWhen data-workbench pipeline comes in
๐Ÿ›’GrocerWhen grocery pipeline comes in
๐Ÿ“งPostmasterWhen email pipeline comes in

Pipeline invariants, reframed as outcome chains

Your correction: invariants are outcomes, not schedules. Each link is checked at runtime. If it breaks, ntfy the pipeline's persona.

๐Ÿ›’ Groceries

need identifiedโ†’ capturedโ†’ buy listโ†’ dispatchedโ†’ food arrivesโ†’ consumed

๐Ÿ”ฌ Research

questionโ†’ query formedโ†’ answeredโ†’ learnings extractedโ†’ stored in brain

๐Ÿ“ง Email

email arrivesโ†’ triagedโ†’ digest producedโ†’ deliveredโ†’ decisions executed

๐Ÿ”ฌ Workbench

dataโ†’ cleanedโ†’ analyzedโ†’ reportedโ†’ acted on

Three pushbacks on looseness

1. "Log raw + classified every turn" is expensive at scale

Classification = extra LLM call. Per turn ร— 20 turns ร— 10 sessions/day = 200 extra calls daily. At Haiku cost tolerable (~$0.50/day); at Opus, ugly.

My call: raw always (cheap), classification async in batches at session close by the Librarian. Same output, no inline cost.

2. "GitHub push all the time" โ€” define all-the-time

Per-turn push = 200/day. GitHub rate limits will bite. Options: per-commit-push (clean history but noisy); per-session-close-push (clean, batched); per-N-commits (middle).

My call: commit per turn (local) โ†’ push at session close. Turn-level rollback via git reset. GitHub stays clean. Override flag available.

3. "Invariants are what they'll be" โ€” careful here

Fine at pipeline level (grocery flow can evolve). NOT fine at session level. If session purpose can "drift" into whatever, the anchor for drift detection disappears.

My call: session invariants hard (purpose stated, mode locked). Pipeline invariants soft (outcomes can be renegotiated as the company grows).

Revised build sequence โ€” four blocks

BLOCK 1The spine nothing else works without this

  1. Tailscale pre-flight check (10 min) โ€” hook verifies tunnel before any brain operation. Fails loud.
  2. Session start hook โ€” declares ๐Ÿ•ด๏ธ Session Boss. Loads prime. Inits budget tracker. Opens HANDOFF.md for append. Verifies brain DB reachable.
  3. Stop hook โ€” runs after every turn. ๐Ÿ“š Librarian writes turn row to brain (raw only, classification deferred). Appends summary to HANDOFF.md. Updates budget. Flags write failure.

BLOCK 2The compounding without this, sessions are isolated

  1. Auditor skill /done โ€” invoked on session close. Fires classification of turns in batch. Pierre rates + AI rates. ๐Ÿง‘โ€โš–๏ธ Auditor finds repeated mistakes in brain DB. Proposes changes. Writes final handoff.
  2. ๐Ÿ‘ฎ Cop drift detector โ€” background check per turn. AI drift + user drift logged separately as drift_events. 3+ events triggers checkpoint.

BLOCK 3The safety without this, mistakes are permanent

  1. ๐Ÿ’พ Archivist โ€” commit per turn, push at session close. /undo skill for turn-level rollback.

BLOCK 4The cosmetics nice, not blocking

  1. Time hook โ€” wall clock in statusLine. Claude says "I predict X minutes", logged, compared next time. Calibration loop.
  2. Status bar control board โ€” budget, turn count, active personas, brain write status, time.

First sprint โ€” Block 1 only

Three files. All bash. All short. All read/write brain via existing ssh + docker exec pattern.

~/.claude/hooks/session-start.sh
~/.claude/hooks/stop.sh
~/.claude/hooks/pre-brain-write.sh

Budget: ~1 day of focused work.

Rationale: you can't build Auditor without turn logs existing. Can't build drift detection without session state. Can't build rollback without commits. The spine is the only thing with no dependency โ€” everything else depends on it.

The question back to you

Build Block 1 first, or revise block membership? Still sparring. Say "make it so" to exit sparring and commit to Block 1.