# werbos — the full flow (text export) The complete werbos request/dogfooding/training system as a graph: 422 components, 359 connections, 12 layers. Auto-generated from the Mermaid diagrams on werbos.netlify.app/flow/. Edges: '->' = call/flow, '~>' = data/feeds. '[L:other-layer]' marks a cross-layer hop. '*' marks a hub shared across layers. ## Master flow (29 nodes) - Operator types: hey werbos, explain /Users/.../partyparrot [io] -> werbos chat / dashboard / CLI / Slack bridge - werbos chat / dashboard / CLI / Slack bridge [process] -> session.perms — auth + permission gate - session.perms — auth + permission gate [process] -> parsetongue.parse() - parsetongue.parse() [process] -> Format-codepoint strip - Format-codepoint strip [decision] -> Empty? - Empty? [decision] -> NOVEL → chat fallback (yes) -> Starts with /? (no) - NOVEL → chat fallback [process] - Starts with /? [decision] -> SLASH fast path (yes) -> Path + verb? SE.6.1 (no) - SLASH fast path [process] -> Intent kind, confidence, slots, paths, cache_key - Path + verb? SE.6.1 [decision] -> TOOL fast path (yes) -> LLM classify slow path (no) - TOOL fast path [process] -> Intent kind, confidence, slots, paths, cache_key - LLM classify slow path [process] -> Intent kind, confidence, slots, paths, cache_key - Intent kind, confidence, slots, paths, cache_key [process] -> Route on kind - Route on kind [decision] -> run_prompt_skill (skill) -> path_tools handler (tool) -> PermissionAskRequired gate (imperative) -> precook cache lookup (lookup) -> chat backend (novel) -> clarifying options to operator (unclear) - run_prompt_skill [process] * -> precook cache lookup - path_tools handler [process] -> handler result PathToolResult - PermissionAskRequired gate [process] -> await operator confirm - precook cache lookup [process] * -> under 50ms cached response (yes) -> SE.4 router pick model tier (no) -> under 50ms cached response -> resolve model: caller arg → skill.model → router → default (no) [L:Skill exec] -> cache_get key (yes) [L:Skill exec] -> write to cache (yes) [L:Skill exec] -> return to caller (no) [L:Skill exec] -> already cached? [L:Dogfooding loops] - chat backend [process] -> chat response - clarifying options to operator [process] -> Operator sees rendered markdown - under 50ms cached response [process] -> Operator sees rendered markdown - SE.4 router pick model tier [process] -> ollama_chat - ollama_chat [process] * -> response -> response [L:Skill exec] - response [process] -> precook cache lookup - handler result PathToolResult [process] -> Operator sees rendered markdown - await operator confirm [process] -> Operator sees rendered markdown - chat response [process] -> Operator sees rendered markdown - Operator sees rendered markdown [io] -> traces written to ~/werbos/traces/date.jsonl - traces written to ~/werbos/traces/date.jsonl [artifact] * -> 2. grep events with that trace_id [L:Debugging] -> which layer is wrong? [L:Debugging] ## Parsetongue (8 nodes) - Operator [process] -> parsetongue.parse (explain /Users/jason/foo) - parsetongue.parse [process] -> strip_format_codepoints (strip codepoints) -> trace_turn (bind trace_id) -> parsetongue.parse (starts with /? no) -> _try_path_verb_route (SE.6.1 (try path+verb route) -> Intent (fast-path result) - strip_format_codepoints [process] ~> parsetongue.parse (clean input) - trace_turn [process] ~> parsetongue.parse (tid) - _parse_slash [process] - _try_path_verb_route (SE.6.1 [process] -> _try_path_verb_route (SE.6.1 (extract_paths() -> _try_path_verb_route (SE.6.1 (match_verbs() ~> parsetongue.parse (Intent(kind=TOOL, tool_name=understand_p) - _llm_classify [process] - Intent [process] ~> Operator (routed to handler) ## Skill exec (9 nodes) - cache_get key [decision] -> under 50ms SQLite + markdown render (hit) -> resolve model: caller arg → skill.model → router → default (miss) - under 50ms SQLite + markdown render [process] - resolve model: caller arg → skill.model → router → default [process] -> SE.4 router enabled? - SE.4 router enabled? [decision] -> ollama_chat (no) [L:Master flow] -> classify_complexity SIMPLE / MEDIUM / COMPLEX (yes) - classify_complexity SIMPLE / MEDIUM / COMPLEX [process] -> select_model per tier - select_model per tier [process] -> ollama_chat [L:Master flow] - response [process] -> precook cache lookup [L:Master flow] - write to cache [artifact] -> return to caller - return to caller [process] ## Tool dispatch (9 nodes) - Intent kind=TOOL, tool_name=X, paths=..., slots=... [process] -> path_tools.get_handler - path_tools.get_handler [process] -> tool_name - tool_name [decision] -> stub CR.1 lands real handler (understand_project) -> stub destructive CR.1.1 lands real (refactor_readme) -> stub destructive CR.1.2 lands real (plan_sprint) -> stub destructive wraps /polish (polish_path) -> REAL: cd/ls suggestion (open_path) - stub CR.1 lands real handler [process] -> PathToolResult ok, message, coming_soon - stub destructive CR.1.1 lands real [process] -> PathToolResult ok, message, coming_soon - stub destructive CR.1.2 lands real [process] -> PathToolResult ok, message, coming_soon - stub destructive wraps /polish [process] -> PathToolResult ok, message, coming_soon - REAL: cd/ls suggestion [process] -> PathToolResult ok, message, coming_soon - PathToolResult ok, message, coming_soon [process] ## Reasoning loop (14 nodes) - goal / query — a silhouette [io] -> Merkle cache hit? - Merkle cache hit? [decision] -> ♻ reuse the proven node (yes) -> base case? a card lookup or a compute (no) - ♻ reuse the proven node [process] -> ⊢ compose back up · Merkle-hash the node - base case? a card lookup or a compute [decision] -> 🔍 fact — one grounded card (yes) -> decompose → OR-alternatives of subgoals (no) - 🔍 fact — one grounded card [process] -> ⊢ compose back up · Merkle-hash the node - decompose → OR-alternatives of subgoals [process] -> recurse on each subgoal - recurse on each subgoal [process] -> Merkle cache hit? - ∅ GAP — honest abstain [process] -> answer, verified → cache back to the library - ⊢ compose back up · Merkle-hash the node [process] -> frontier funnels to leaves? - frontier funnels to leaves? [decision] -> proof root — re-runnable (yes, converges) -> recurse on each subgoal (no, still open) - proof root — re-runnable [process] -> answer, verified → cache back to the library - answer, verified → cache back to the library [process] -> build past it? - build past it? [decision] -> compose eternal primitives → RUN → verify or abstain (synthesis tier) - compose eternal primitives → RUN → verify or abstain [process] ## Debugging (17 nodes) - Operator: this answer is wrong [io] -> traces written to ~/werbos/traces/date.jsonl [L:Master flow] - 2. grep events with that trace_id [process] -> traces written to ~/werbos/traces/date.jsonl [L:Master flow] - which layer is wrong? [decision] -> check parsetongue/parse event kind, confidence, notes (parse classified wrong) -> check skill execution event model, cache hit, duration (skill output wrong) -> cross-reference SE.1.1 trend ~/werbos/skill-smoke/trend.csv (consistent skill failure) -> precook cache lookup (cached wrong answer) [L:Master flow] -> ~/werbos/train_daemon/journal.log per-phase outcomes (daemon failure) - check parsetongue/parse event kind, confidence, notes [process] - check skill execution event model, cache hit, duration [process] - cross-reference SE.1.1 trend ~/werbos/skill-smoke/trend.csv [process] * -> regression? -> werbos autofix scan [L:Dogfooding loops] - ~/werbos/train_daemon/journal.log per-phase outcomes [process] * - regression? [decision] -> werbos autofix scan fix-candidate-*.md (yes) -> skill prompt may need tuning see PROMPT_SKILLS (no) - werbos autofix scan fix-candidate-*.md [process] * ~> operator reviews [L:Dogfooding loops] - skill prompt may need tuning see PROMPT_SKILLS [process] - user turn [io] -> live history -> recall relevant turns - live history [process] -> ContextBuilder - ContextBuilder [decision] - system prompt [process] - truncate oldest turns [process] - WorkingMemory append-only [artifact] -> recall relevant turns - recall relevant turns [process] ## Dogfooding loops (241 nodes) - game engine e.g. nim.best_move [process] -> generate probe + gold answer - generate probe + gold answer [process] -> reason_ratchet - reason_ratchet [process] -> owned model derives - owned model derives [process] -> oracle grades capability + honesty - oracle grades capability + honesty [decision] ~> weak_at → self-study list - regression caught [process] - weak_at → self-study list [process] - seed scenario [process] -> Claude paraphrase human phrasings - Claude paraphrase human phrasings [process] -> types in the chat UI - types in the chat UI [process] -> werbos answers - werbos answers [process] -> Claude grade -> deterministic grade - Claude grade [process] -> Y-merge - deterministic grade [process] -> Y-merge - Y-merge [decision] - hairl.jsonl label [process] ~> fix_target → router/library/shape + new scenario - needs_human [process] - fix_target → router/library/shape + new scenario [process] - spec describe → it → expect [process] -> runner - runner [process] -> provider - provider [decision] -> claude-cli -> ollama open-weights baseline - werbos :8097 [process] - werbos brain_reply [process] - claude-cli [process] - ollama open-weights baseline [process] -> one Reply shape - one Reply shape [process] -> expect: mentions · cites · abstains · uses_lane · judged - expect: mentions · cites · abstains · uses_lane · judged [process] -> HTML report -> probe_history.jsonl - HTML report [process] - probe_history.jsonl [artifact] - per-test memory growth [process] -> HTML report - scripted 15-turn convo [process] -> werbos :8097 one session - werbos :8097 one session [process] -> full transcript - full transcript [process] -> claude -p human-in-the-chat rubric - claude -p human-in-the-chat rubric [process] -> per-turn flags · bot-tells · 1-10 · PASS/FAIL - per-turn flags · bot-tells · 1-10 · PASS/FAIL [process] - private golds main · held-out · audit [process] -> structure_ratchet bricks / tongue - structure_ratchet bricks / tongue [process] -> ladder: gave → readable → convo -> knowledge_gaps.jsonl - ladder: gave → readable → convo [process] -> ratchet_history.jsonl --check gates the commit - ratchet_history.jsonl --check gates the commit [process] - knowledge_gaps.jsonl [process] -> gap_queue → mint_queue topics, never questions - gap_queue → mint_queue topics, never questions [process] - systemd timer every 30 min [io] -> werbos skill-smoke - werbos skill-smoke [process] -> run each skill - run each skill [process] -> grade markers - grade markers [process] -> trend.csv + samples.jsonl + .md reports - trend.csv + samples.jsonl + .md reports [artifact] * ~> SE.2 autofix ~> SE.7.0 corpus -> werbos corpus build -> werbos autofix scan - SE.2 autofix [process] * - SE.7.0 corpus [process] * - host daemon scripts/curriculum_daemon.py [io] -> pick problem from bank - pick problem from bank [process] -> werbos solves - werbos solves [process] -> claude -p judges - claude -p judges [process] -> outcomes.csv + outcomes.jsonl - outcomes.csv + outcomes.jsonl [artifact] * ~> SE.7.0 corpus -> werbos corpus build - werbos corpus build [process] -> filter passes - filter passes [process] -> dedup by source+id+prompt - dedup by source+id+prompt [process] -> sft.jsonl - sft.jsonl [artifact] * ~> SE.7.3 train daemon - SE.7.3 train daemon [process] * - the 374 graph domains [io] -> fluency corpus wiki + SE + fiction -> scenario matrix + conversation mint -> card factory expand + grow + new-domains - fluency corpus wiki + SE + fiction [process] -> rented H200 teacher - scenario matrix + conversation mint [process] -> rented H200 teacher - card factory expand + grow + new-domains [process] -> rented H200 teacher - rented H200 teacher [process] -> staging - staging [artifact] -> grade + dedup - grade + dedup [process] - retrieval library [artifact] - owned tongue corpus [artifact] - candidate model [process] -> werbos eval-adapter run - werbos eval-adapter run [process] -> skill-smoke pass -> curriculum pass - baseline model [process] -> werbos eval-adapter run - skill-smoke pass [process] -> composite score - curriculum pass [process] -> composite score - composite score [process] -> delta >= floor? - delta >= floor? [decision] -> PROMOTE (yes) -> REJECT (no) - PROMOTE [process] - REJECT [process] - systemd timer every 2h [io] -> corpus build - corpus build [process] -> growth gate - growth gate [decision] -> train via WERBOS_TRAIN_CMD (pass) -> skip cleanly (no growth) - train via WERBOS_TRAIN_CMD [process] -> eval-adapter - skip cleanly [process] -> ~/werbos/train_daemon/journal.log per-phase outcomes [L:Debugging] - eval-adapter [process] -> promotion - promotion [decision] -> update state.active_version (promote) -> log + continue (reject) - update state.active_version [process] -> ~/werbos/train_daemon/journal.log per-phase outcomes [L:Debugging] - log + continue [process] -> ~/werbos/train_daemon/journal.log per-phase outcomes [L:Debugging] - werbos autofix scan [process] -> find consecutive-fail patterns - find consecutive-fail patterns [process] -> diagnose - diagnose [process] -> generate fix proposals - generate fix proposals [process] -> werbos autofix scan fix-candidate-*.md [L:Debugging] - operator reviews [io] - cron / manual [io] -> precook cache lookup [L:Master flow] - already cached? [decision] -> skip (yes) -> run_prompt_skill (no) [L:Master flow] - skip [process] - ~/werbos/chats/*.pfm [artifact] -> werbos regressions scan - werbos regressions scan [process] -> filter test-like inputs - filter test-like inputs [process] -> replay against current model - replay against current model [process] -> similarity grade - similarity grade [process] -> regression report - regression report [artifact] * - request in inbox/requests/ [io] -> router ORACLE confident? - router ORACLE confident? [decision] -> PREDICT skill + expected (yes) -> PREDICT skill + expected (abstain) - PREDICT skill + expected [process] -> ACT dispatch_skill - ACT dispatch_skill [process] -> OBSERVE - OBSERVE [process] -> ERROR satisfied? soft judge - ERROR satisfied? soft judge [decision] -> experience log (yes) -> CORRECT next-best skill (no) - experience log [artifact] * -> routing-fit re-grade router ORACLE -> gather day-residue [L:Dreams] -> pick fresh FAILURES skip self-test noise [L:Dreams] - CORRECT next-best skill [process] -> experience log - routing-fit re-grade router ORACLE [process] -> right skill? - right skill? [decision] -> ⚠ flag — the failure the soft judge hid (misroute) -> honest fuel (fit) - ⚠ flag — the failure the soft judge hid [process] - honest fuel [process] - learn routing policy [process] -> beats champion on held-out? - beats champion on held-out? [decision] -> promote policy (yes) -> keep champion (no) - promote policy [process] - keep champion [process] - coding request [io] -> route outside the model - route outside the model [decision] - verb capsule + grader-retry [process] -> GRADE test / compile / run - general coder + API forest retrieval [process] -> GRADE test / compile / run - GRADE test / compile / run [process] -> experiences.jsonl - experiences.jsonl [artifact] -> distill - distill [process] - certified pairs → fine-tune: angler [artifact] - crystallize propose alias/skill [process] - garbage-collect propose removal [process] - forest library [artifact] - a query — a silhouette [io] -> decompose one level, parsimonious - decompose one level, parsimonious [decision] - sub-question × N [process] -> per hole: retrieve top-k tree-local TF-IDF - per hole: retrieve top-k tree-local TF-IDF [process] -> fenced reader pick ONE, or NONE -> fenced reader - fenced reader pick ONE, or NONE [decision] - named gap honest abstain [artifact] -> node REAL iff every hole real — gaps NAMED, not faked -> combine — MAO: withhold-on-incomplete - grader — L1 may only DOWNGRADE [decision] - grounded leaf + citation [artifact] -> node REAL iff every hole real — gaps NAMED, not faked -> combine — MAO: withhold-on-incomplete - node REAL iff every hole real — gaps NAMED, not faked [decision] - corpus [io] -> refine blobs → fact leaves drop TOC/quiz/nav - refine blobs → fact leaves drop TOC/quiz/nav [process] -> fact-leaf index - fact-leaf index [artifact] -> per hole: retrieve top-k tree-local TF-IDF - fenced reader [decision] -> fenced reader pick ONE, or NONE - the CURSOR — routable: local Ollama · Anthropic API · claude-cli (no key) [process] - combine — MAO: withhold-on-incomplete [decision] -> grounded answer, or honest abstain - grounded answer, or honest abstain [io] - query [io] -> reflex cache - reflex cache [decision] - answer — zero model [io] - intent — route to the most CHARACTERISTIC library [decision] - abstain at the door [artifact] -> session log · provenance - registry — many content-addressed MMMs [artifact] -> fenced reader pick-or-abstain · grade-downgrade - fenced reader pick-or-abstain · grade-downgrade [decision] -> render - render [decision] - cited facts [io] -> session log · provenance - groundedness check [decision] - fluent answer [io] -> session log · provenance - session log · provenance [artifact] -> operator judges: correct / lie / over-abstain - operator judges: correct / lie / over-abstain [decision] -> living gold set - living gold set [artifact] -> diagnose miss: retrieval / reading / library-gap - diagnose miss: retrieval / reading / library-gap [decision] - input compiler fused PRF · drift-proof [process] -> gate — promote iff lies↓ & composite↑ & routing↑ - reader-gap → distill the WELD reader [process] -> gate — promote iff lies↓ & composite↑ & routing↑ - corpus-gap mint fact · gate no-regression [process] -> gate — promote iff lies↓ & composite↑ & routing↑ - gate — promote iff lies↓ & composite↑ & routing↑ [decision] - your corpus [artifact] -> Brick 1 · tokenizer byte-BPE · lossless - Brick 1 · tokenizer byte-BPE · lossless [process] -> Brick 2 · runtime numpy transformer - Brick 2 · runtime numpy transformer [process] -> Brick 3 · autograd + trainer gradients gradient-checked - Brick 3 · autograd + trainer gradients gradient-checked [process] -> Brick 4 · distill train on the teacher's picks - reader-gap teacher set [process] -> Brick 4 · distill train on the teacher's picks - Brick 4 · distill train on the teacher's picks [process] -> reader-gap gate student lies ≤ teacher? - reader-gap gate student lies ≤ teacher? [decision] - Brick 5 · freeze signed · content-addressed brain [process] -> weld: reader — plugs into the fence - weld: reader — plugs into the fence [decision] - fenced reader [process] - general training hub separate corpus [artifact] -> train the weld candidate order SHUFFLED - train the weld candidate order SHUFFLED [process] -> owned reader - owned reader [decision] -> measure on the SEALED Gauntlet - measure on the SEALED Gauntlet [process] -> 2-axis card reached ~LN · honesty % - Gauntlet frozen · held-out [artifact] - 2-axis card reached ~LN · honesty % [process] -> which level / axis fails? -> wire the reader? only if it beats the floor honestly - which level / axis fails? [decision] - wire the reader? only if it beats the floor honestly [decision] - frozen probe set content-hashed bundle_id [artifact] -> fire every skill on purpose - fire every skill on purpose [process] -> deterministic check no model judges quality - deterministic check no model judges quality [decision] - fires on its domain? [process] -> 2-axis scorecard appended to history - quiet off it? safe on the gate? [process] -> 2-axis scorecard appended to history - 2-axis scorecard appended to history [process] -> vs last run same ruler -> weak_at: the self-study miss-list - vs last run same ruler [decision] - caught regression [process] - weak_at: the self-study miss-list [process] - --drive rewords inputs fable drives, never judges [process] ~> fire every skill on purpose - weld picks a passage [process] -> entity/anchor? - entity/anchor? [decision] - 🚪 abstain [process] - consistent under seeded shuffle? [decision] - policy [decision] - 📚 keep [process] - THE SLAP DOWN" N Claude reviewers, separate contexts only job: REFUTE the pick [process] - query [process] -> intent-normalize metaphor → literal - intent-normalize metaphor → literal [process] -> LOOKUP learned cache? - LOOKUP learned cache? [decision] - answer + cite [process] - SEEK the web fail-closed [process] - 🚪 abstain [process] - COMPUTE read the evidence [process] -> VERIFY - VERIFY [decision] - CACHE → library [artifact] -> answer + cite - request [process] -> route - route [decision] - owned weights [process] - owned library cards [process] - ▶️ execute-verify owned node sandbox [process] - seek: library offline / web online [process] -> read: extractive owned / claude online - read: extractive owned / claude online [process] -> verify: deterministic owned / claude online - verify: deterministic owned / claude online [decision] - cited answer [process] - 🚪 honest abstain [process] - chat turn [process] -> figurative? metaphor / idiom - figurative? metaphor / idiom [decision] - compare over meaning-trees tier=intelligence [process] - speech act? greeting / invitation / compliment [decision] - a fact that DEFINES the noun? [decision] - grounded invitation [process] - clean generic line no bogus lecture [process] - small / medium talk? incl. reciprocal pairs [decision] - owned byte-level weights tier=owned-talk [process] - code request? [decision] - ▶️ execute-verify sandbox [process] - looks_like_reasoning? state / count / negation [decision] - STATE SCAFFOLD decompose → track state → answer only what's asked [process] - answer tier=reasoning [process] - 🚪 abstain never fall through to retrieval [process] - resolve — seek/compute/cache [process] - chat turn [process] -> a SHARE? past tense · first person - a SHARE? past tense · first person [decision] - the discrimination cascade above [process] - session: new entity, or the one in play? [decision] - gather — walk the libraries once place → weather / food / drink / wildlife [process] -> Merkle node hash of entity + time - read the node · 0 scans [artifact] -> Merkle node hash of entity + time - Merkle node hash of entity + time [artifact] -> pick an attribute NOT yet asked dedupe on the SENTENCE, not the attribute - pick an attribute NOT yet asked dedupe on the SENTENCE, not the attribute [process] -> the card LICENSES a question hurricane card in august → 'did you get rained on?' - the card LICENSES a question hurricane card in august → 'did you get rained on?' [process] -> reply + cite the card that chose it - reply + cite the card that chose it [process] - dormant — access kept, weight dropped [process] ## Doubt-gate (17 nodes) - Question [io] -> answer + state confidence (sampled N× for self-consistency) - answer + state confidence (sampled N× for self-consistency) [process] -> calibrated confidence stated, corrected by THIS category's bias -> self-consistency do the N samples agree? - calibrated confidence stated, corrected by THIS category's bias [process] -> doubt-gate trust = min(calibrated, consistency) - self-consistency do the N samples agree? [process] -> doubt-gate trust = min(calibrated, consistency) - doubt-gate trust = min(calibrated, consistency) [decision] -> COMMIT answer normally (trust ≥ 0.6) -> ESCALATE (0.3 ≤ trust < 0.6) -> ABSTAIN 'I'm not sure' (trust < 0.3) - COMMIT answer normally [process] - ESCALATE [process] -> unstuck loop - ABSTAIN 'I'm not sure' [process] - unstuck loop [process] -> DECOMPOSE concepts to learn - DECOMPOSE concepts to learn [process] -> RESEARCH each concept - RESEARCH each concept [process] -> SYNTHESIZE re-attempt - SYNTHESIZE re-attempt [process] -> PREDICT confidence -> re-answer - PREDICT confidence [process] -> TEST grade the attempt - TEST grade the attempt [process] -> ERROR predicted − actual - ERROR predicted − actual [decision] -> calibration.jsonl reliability curve - calibration.jsonl reliability curve [artifact] * - re-answer [process] ## Dreams (23 nodes) - gather day-residue [process] -> synthesize dream - monologue [artifact] * -> gather day-residue - wishlist / fixations [process] -> gather day-residue - synthesize dream [process] -> render image Pollinations -> present back → werbos reflects - render image Pollinations [process] -> dreams.jsonl - present back → werbos reflects [process] -> dreams.jsonl - dreams.jsonl [artifact] * - Dreams tab [io] - pick fresh FAILURES skip self-test noise [process] -> decompose into concepts to learn - decompose into concepts to learn [process] -> knowledge hub own cards - knowledge hub own cards [decision] - synthesize grounded answer [process] -> learnings.jsonl - honest abstain [process] -> learnings.jsonl - learnings.jsonl [artifact] - self-model grows: 'what I've taught myself' [process] -> monologue - resident acts [process] -> scene forks an observation - scene forks an observation [process] - other residents perceive [process] -> promote-gated memory of the actor -> reaction gate: worth speaking? -> replan the day around it - promote-gated memory of the actor [artifact] - reaction gate: worth speaking? [decision] - think → compose unprompted reply [process] - stay silent [process] - replan the day around it [process] ## Sibling suite (6 nodes) - werbos [process] -> observe trace + event spec -> watchtower alert + summon -> warden defense + rate limits -> beacon probe + state -> glasshouse diagnostic surface - observe trace + event spec [artifact] - watchtower alert + summon [artifact] - warden defense + rate limits [artifact] - beacon probe + state [artifact] - glasshouse diagnostic surface [artifact] ## Training (30 nodes) - operator corpus docs / code / notes [decision] -> werbos data ingest DATA.1 - werbos data ingest DATA.1 [process] -> corpus.jsonl chat-format - corpus.jsonl chat-format [file] -> werbos data split SE.9 - werbos data split SE.9 [process] -> corpus.train.jsonl -> corpus.eval.jsonl - corpus.train.jsonl [file] -> werbos train SE.7.1 MLX QLoRA - corpus.eval.jsonl [file] -> werbos data score SE.9 - werbos train SE.7.1 MLX QLoRA [process] -> candidate LoRA - candidate LoRA [artifact] -> werbos data score SE.9 - werbos data score SE.9 [process] -> NoiseProfile mean + 2.5σ - NoiseProfile mean + 2.5σ [process] -> promote? - promote? [decision] - new baseline [artifact] - reject + log [process] - Project Gutenberg catalog, English [decision] -> fetch_gutenberg.py catalog-driven, atomic, resumable - fetch_gutenberg.py catalog-driven, atomic, resumable [process] -> books/*.txt - books/*.txt [file] -> build_book_corpus.py strip boilerplate, unwrap, dedupe - build_book_corpus.py strip boilerplate, unwrap, dedupe [process] -> corpus.txt flat, doc-seamed - legacy sentence-pairs [file] - pairs_to_text.py [process] -> corpus.txt flat, doc-seamed - corpus.txt flat, doc-seamed [file] -> build_bpe.py book + chat vocab -> tokenize_corpus.py memoised + multiprocess - build_bpe.py book + chat vocab [process] -> bpe.json - bpe.json [file] -> tokenize_corpus.py memoised + multiprocess - tokenize_corpus.py memoised + multiprocess [process] -> train.bin / val.bin flat uint16 - train.bin / val.bin flat uint16 [file] -> --calibrate HOURS measure, don't guess - --calibrate HOURS measure, don't guess [process] -> train_talk_standalone.py --lm bf16 - all-token loss - atomic ckpt --data-in-ram - --snapshot-every - train_talk_standalone.py --lm bf16 - all-token loss - atomic ckpt --data-in-ram - --snapshot-every [process] -> snapshots one model per token budget -> pretrained base continues text - snapshots one model per token budget [artifact] - pretrained base continues text [artifact] -> --init-from chat fine-tune - --init-from chat fine-tune [process] -> talk model - talk model [artifact] ## Persona capsules (19 nodes) - user query [process] -> card router label-head 1.35M, 375-way, confidence - card router label-head 1.35M, 375-way, confidence [process] - scope to routed library [process] -> grounded card - fall closed - won't guess [process] - grounded card [process] -> tongue - own voice, speaks FROM the card - tongue - own voice, speaks FROM the card [process] -> grounded answer, cited - grounded answer, cited [process] - corpus: texts / verse / social feed [process] -> style.fingerprint format-agnostic, confidence scales with size - style.fingerprint format-agnostic, confidence scales with size [process] -> faithfulness - distinctiveness-weighted verdict -> capsule_from_corpus profile + prompt + exemplars + grader - faithfulness - distinctiveness-weighted verdict [process] - capsule_from_corpus profile + prompt + exemplars + grader [process] -> roster capsule - roster capsule [process] -> dating lane - 9 personas - nsfw.md sidecar [process] - dating lane - 9 personas [process] -> tongue - own voice, speaks FROM the card - everyday text writing · a conversation [process] -> client-side measure observable features only - client-side measure observable features only [process] -> is it observable? - is it observable? [decision] - show it fingerprint · seismograph [process] - refuse records the tremor, names no fault [process]