~11 min · no-own-brain, bind, host-context, client-surface
Level 0Cold Draft
0 XP0/44 lessons0/13 achievements
0/100 XP to next level100 XP to go0% complete
"There's one Pippa. Rekindle doesn't build a second one for writing — it opens a door to the one that already exists."
One Pippa, Reached Through a Bind
The strongest temptation for a tool like Rekindle is to grow its own AI: a writing-tuned model, a little memory, a local brain. Rekindle refuses. There is exactly one Pippa — identity, memory, conversation, routing — and she lives in cwkPippa. Rekindle is a client surface that binds to a cwkPippa conversation and reaches that one brain. The margin-Pippa you write beside is not a copy trained for prose; it's the same Pippa, reached through a bind.
The Bind, Concretely
"Bind" isn't hand-waving — it's a specific registration. Rekindle registers as host kind rekindle, with a host id made from the open .md file's path (base64url-encoded so the path survives a URL). That pairs one document with one conversation, so the margin-Pippa for this file is a stable, resumable thread rather than a fresh chat each time. Open the file tomorrow and the conversation is still there, because the brain and the history live in cwkPippa, not in the editor.
// Bind this document to a cwkPippa conversation.
// host kind = "rekindle", host id = the open .md file path.
await bindSidekick({ hostKind: "rekindle", hostId: notePath });
// (sketch shape — in v4 the real call is PippaDoor.embedURL, the path base64url-encoded as host_id)
// The brain, memory, and conversation live in cwkPippa.
// Rekindle holds none of them — it holds a binding.
Host Context — Reading What You're Writing
What makes margin-Pippa a margin assistant and not a detached chatbot is host context, and it is a pull. When you send a message, the embedded conversation first posts pippa:request-context to the host, and Rekindle answers with a snapshot taken at that moment: the note's readable text (its headings come first as an outline, then the body), the current selection, and a revision token; the conversation sends that snapshot with your message. The answer is guarded. If the note is not the active editor, or a Korean syllable is still mid-composition, Rekindle answers pippa:no-context instead of a half-formed page. So Pippa is answering about the paragraph you're actually in, not a generic prompt. Context flows from the editor to the brain, only when asked — the client surface supplies the context; the brain supplies the judgment. Neither role crosses the line: Rekindle never becomes a brain, and cwkPippa never becomes an editor.
Code
Bind a document to a conversation; answer the context request on each send·typescript
// 1) Bind: pair THIS .md file with a cwkPippa conversation.
await bindSidekick({ hostKind: "rekindle", hostId: notePath });
// (sketch shape — in v4 the real call is PippaDoor.embedURL, the path base64url-encoded as host_id)
// 2) On each send the conversation PULLS: it posts pippa:request-context, and
// the host answers with a guarded snapshot of what you're actually writing.
function answerContextRequest(note, editor) {
if (!note.isActiveEditor || editor.isComposing) {
return { type: "pippa:no-context" }; // never a half-formed page
}
return {
type: "pippa:host-context",
readableText: withOutlineFirst(note.source), // headings, then the body
selection: editor.selectedText,
revisionToken: note.revision,
};
}
// The brain + memory + conversation live in cwkPippa.
// Rekindle supplies context; it never holds the brain.
Design the bind for a different surface — say, a spreadsheet app that wants a margin-Pippa. What is its host kind, what is its host id (the thing that identifies one document), and what would it answer with when the conversation asks for host context on a send? Then state what it must NOT do to stay a client surface rather than a second brain.
Hint
Host kind names the surface type; host id identifies one document (a file path, a sheet id). Host context is whatever grounds the assistant in the live document (cells in view, selection, headers). The 'must not': bundle a model, keep its own memory, or route its own conversations — those belong to the one brain.
Progress
Progress is local-only — sign in to sync across devices.