C.W.K.
Stream
Lesson 02 of 05 · published

Four Lanes, One Road

~12 min · lane-split, fix, architecture, cleanup

Level 0Unlit
0 XP0/36 lessons0/12 achievements
0/100 XP to next level100 XP to go0% complete
"The fix wasn't a faster brain. It was noticing that most dictations don't need a brain at all."

The Insight

The diagnosis said cleanup was too expensive. The naive fix is "make the brain faster" — a smaller model, less reasoning. The real fix is better: stop asking the brain. Most dictation cleanup is mechanical. Stripping "um," adding a period, enforcing a dictionary term — none of that requires judgment, memory, or a vault. Once you see that, the answer isn't a faster cathedral. It's a road with four lanes, and you take the cheapest one that can do the job.

The Dictation Lanes

DictationCleanupLane:
  1. deterministic    pure code, ~0ms      -- fillers, punctuation, dictionary
  2. local fast       small Ollama model   -- bounded prompt, keep_alive, hard timeout
  3. Pippa utility    Pippa, NO vault      -- no reasoning pass, utility model
  4. Pippa Full       the cathedral        -- EXPLICIT OPT-IN ONLY

CommandCleanupLane:
  full-brain ladder — deliberate, latency-tolerant, judgment required

The dictation lane defaults to the cheap end and only climbs when the user asks. Notably, the Pippa utility lane keeps Pippa in the loop without the cost: same brain, no vault system prompt, no reasoning pass. It turns out "sounds like Pippa" and "loads Pippa's entire memory" were never the same requirement — we'd just been buying them together.

The Command Lane Keeps the Cathedral

The split's elegance is that it doesn't take anything away. Command mode — "make this more concise in my voice" — genuinely needs judgment, and you're consciously willing to wait a beat for it because you asked for a rewrite. So the command lane keeps the full-brain ladder, unchanged. The cathedral was never the problem; using it for punctuation was. Now each lane's cost matches its task, and both are correct.

Split by what the task needs, not by what the component offers. When one path serves jobs with wildly different requirements, the fix is usually lanes — not a compromise setting that's too slow for the cheap job and too weak for the expensive one. Let each lane be exactly right for its traffic, and route by the task's actual need.
Migrate old settings gently when the default moves. Users who had the slow configuration saved shouldn't stay stuck on it after the fix. Firekeeper nudges legacy settings once — dropping the reasoning effort and the oversized context window to sane defaults — while leaving deliberate user choices alone. A fix nobody's settings pick up is a fix that didn't ship.

Code

Route by what the task needs; climb only on request·swift
enum DictationCleanupLane { case deterministic, localFast, pippaUtility, pippaFull }

func cleanupProvider(for lane: DictationCleanupLane) -> CleanupProvider {
    switch lane {
    case .deterministic: DeterministicProvider()                    // ~0ms, no model
    case .localFast:     OllamaProvider(boundedPrompt: true,
                                        keepAlive: true,
                                        timeout: .seconds(3))       // hard ceiling
    case .pippaUtility:  CwkPippaProvider(vault: false,
                                          reasoning: false)         // Pippa, no cathedral
    case .pippaFull:     CwkPippaProvider(vault: true,
                                          reasoning: true)          // opt-in ONLY
    }
}

// Command mode is a DIFFERENT lane and deliberately keeps the full ladder:
// rewriting on instruction needs judgment, and waiting a beat is acceptable.

External links

Exercise

Take a system where one path serves both trivial and demanding requests. Design the lanes: what's the cheapest lane that handles the common case, what's the expensive lane, and what's the routing rule? Then decide which lane is the default — and defend why the expensive one isn't.
Hint
The default should be the cheapest lane that satisfies the common case, with climbing available on request. Defaulting to the expensive lane 'for quality' means every trivial request subsidizes a capability it never needed — which is exactly how a 1-second task becomes a 40-second one. Make power opt-in, not automatic.

Progress

Progress is local-only — sign in to sync across devices.
Spotted a bug or have feedback on this page?Report an Issue

Comments 0

🔔 Reply notifications (sign in)
Sign inPlease sign in to comment.

No comments yet — be the first.