Summary
Add a voice extraction pipeline that runs alongside the existing reflect/learn pipeline during distillation. The goal is to capture how the owner's language encodes their priorities — not shallow stylistic mimicry, but the judgment-laden communication patterns that distinguish their voice.
Motivation
The current pipeline already captures voice indirectly through observations like "compression over completeness" or "terse, directive bursts once direction is set." But these emerge incidentally. A dedicated pipeline can be more systematic about extracting:
- Register shifts — when does the owner go terse vs. long-form, and what triggers the switch? Terse = direction is set, executing. Long-form = working through something or persuading.
- Absence patterns — what the owner refuses to say. No hedging, no corporate euphemism, no softening bad news. The gaps are as distinctive as what's present.
- Audience-aware modulation — how communication changes by context (engineer vs. strategy doc vs. commit message). These are different voices serving different functions.
- Taste as word choice — e.g. "muse" over "soul" because it's less dramatic. Aesthetic principles that manifest as vocabulary decisions.
Design
Parallel pipeline in distillation
The voice pipeline should run as a parallel track during distill.Run(), similar to how reflections already run concurrently:
-
Voice Reflect (MAP): For each session, analyze human turns for communication patterns — how language encodes priorities, not surface-level style metrics. The prompting should connect what is being said to how it's being said (e.g., "drop the entire concept" = deletion-as-first-response expressed as direct rhetorical question).
-
Voice Learn (REDUCE): Synthesize voice observations into a dedicated section within muse.md, not a separate artifact. Voice isn't independent of judgment — it's judgment expressed through language. Separating them implies they vary independently, and they don't.
Output: a section in muse.md
The voice analysis should produce a section in the existing muse.md, not a separate file. The muse is a single coherent projection. Splitting voice out creates derived-state-maintained-separately, which contradicts the muse's own design philosophy.
Anti-goals
- No shallow style metrics — sentence length distributions, punctuation frequency, vocabulary counts. This produces uncanny valley imitation. Mimicry without understanding.
- No "sounding like" optimization — the muse should think like the owner, not impersonate them. Voice is an output of getting the thinking right, not an input.
- No single flattened "style profile" — the owner uses different registers for different contexts. Flattening that loses the signal.
Open questions
- Should voice reflections share the same storage path as thinking reflections, or use a parallel
voice-reflections/ path?
- How much overlap is acceptable with existing observations? The learn prompt may need guidance on deduplication.
- Should the voice reflect prompt have access to assistant messages for context, or only human turns?
Summary
Add a voice extraction pipeline that runs alongside the existing reflect/learn pipeline during distillation. The goal is to capture how the owner's language encodes their priorities — not shallow stylistic mimicry, but the judgment-laden communication patterns that distinguish their voice.
Motivation
The current pipeline already captures voice indirectly through observations like "compression over completeness" or "terse, directive bursts once direction is set." But these emerge incidentally. A dedicated pipeline can be more systematic about extracting:
Design
Parallel pipeline in distillation
The voice pipeline should run as a parallel track during
distill.Run(), similar to how reflections already run concurrently:Voice Reflect (MAP): For each session, analyze human turns for communication patterns — how language encodes priorities, not surface-level style metrics. The prompting should connect what is being said to how it's being said (e.g., "drop the entire concept" = deletion-as-first-response expressed as direct rhetorical question).
Voice Learn (REDUCE): Synthesize voice observations into a dedicated section within
muse.md, not a separate artifact. Voice isn't independent of judgment — it's judgment expressed through language. Separating them implies they vary independently, and they don't.Output: a section in muse.md
The voice analysis should produce a section in the existing
muse.md, not a separate file. The muse is a single coherent projection. Splitting voice out creates derived-state-maintained-separately, which contradicts the muse's own design philosophy.Anti-goals
Open questions
voice-reflections/path?