Skip to content
C.W.K.
Stream
Lesson 01 of 05 · published

Pippa Owns the Brains

~11 min · cwkpippa, brain-routing, soul, ownership

Level 0Dry Nib
0 XP0/36 lessons0/12 achievements
0/100 XP to next level100 XP to go0% complete
"Own the writing request; borrow the brain that fulfills it."

Separate need from ownership

Inkwell needs original authorship, translation authorship, blind review, and revision. Needing intelligence does not make the writing app the owner of model routing, souls, credentials, or conversation memory.

Shape the crossing

Send typed work requests to the canonical brain service and store route-level provenance in the job. Inkwell owns why the work exists and how its output may land; cwkPippa owns how a brain is selected and invoked.

Expanded Inkwell draw controls on desktop, with separate choices for language, length, author brain, soul, review brain, and translation languages.
The writing request names each role explicitly while brain and soul routing remain distinct choices at the cwkPippa boundary.

The duplication temptation

Embedding provider keys or a private model registry in Inkwell creates a second control plane. Copying a soul prompt creates identity drift. A direct shortcut is architectural debt even when its first call succeeds.

Family invariant. Own the writing request; borrow the brain that fulfills it.

Let requests and references cross

Audit “Pippa Owns the Brains” beyond code imports. Trace which request reaches which owner, whether the result is a value or managed reference, and who explains failure and retry. Credentials, canonical history, or a voice catalog copied into Inkwell are a second system, not a convenient integration.

Write the boundary table

Split a brain request into fields owned by Inkwell and fields owned by the routing service. Include timeout, stale output, sibling unavailability, and schema mismatch. Any blank where both sides assume the other will act is the owner of the next incident.

Owning less makes the product more itself

Inkwell's identity is not another brain or voice engine. It composes original-first flow, penless review, handwriting UX, and late-result landing into one experience. Boundaries are features that make that composition possible.

Code

A typed brain boundary·typescript
type BrainWork = {
  role: "original-author" | "translation-author" | "blind-reviewer" | "revising-author";
  entryId: string;
  inputFingerprint: string;
  payload: unknown;
};

type BrainResult = {
  routeId: string;
  promptVersion: string;
  output: unknown;
};

async function requestBrain(work: BrainWork): Promise<BrainResult> {
  const response = await fetch("/family-brain/work", {
    method: "POST",
    headers: { "content-type": "application/json" },
    body: JSON.stringify(work),
  });
  if (!response.ok) throw new Error(`brain work failed: ${response.status}`);
  return response.json();
}

External links

Exercise

Split a brain request into fields owned by Inkwell and fields owned by the routing service.
Hint
Put owner, request, result, and retry on one row.

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.