Fern on Kimi
Fern is the second app in the satchel demo, a weekend and travel planner that never sees your passkey. It plans on Kimi K2.6, and the only things Kimi knows about you are the memories Pip's grant on Monad lets Fern open. Revoke the grant and the next plan is made without them.
What Kimi is allowed to see
Fern rebuilds each grant from its transaction on the registry at 0xd6c895f5c9254dc6eaafc335fff0930fd7012e6d, picks the grant that matches each sealed record's epoch, and opens the record with its own key. Records it can't open stay locked with a reason (NO_GRANT or GRANT_REVOKED) and never reach the model. So the prompt Kimi gets is, exactly, the set of facts the person allowed.
// lib/fern.ts: Fern unseals only what a live grant on Monad opens.
const pick = grantForRecord(mine, parseSealed(bytes).epoch);
if (!pick) rows.push({ state: "locked", code: everGranted ? "GRANT_REVOKED" : "NO_GRANT" });
else rows.push({ state: "open", text: (await fern.reader(pick).unsealJson(bytes)).text });// api/chat.ts: Kimi K2.6 plans from the opened memories and nothing else.
const result = await generateText({
model: openrouter("moonshotai/kimi-k2.6"),
providerOptions: { openrouter: { reasoning: { enabled: false } } },
system: withMemories(FERN_SYSTEM, openedMemories),
messages: input.messages,
});One real plan
Sent to the live deployment on 14 October 2026 with the two facts Pip kept:
Memories opened by the grant: Vegetarian. Flies out of BLR (Bengaluru).
You: Plan me a weekend away.
Fern (moonshotai/kimi-k2.6): "Since you're a vegetarian flying out of BLR, I'd suggest a quick flight to Goa for beachside shacks serving excellent veg thalis and coconut-based curries. You can catch early morning flights from Bengaluru and return Sunday evening, making the most of two relaxed days. I used your vegetarian preference and your Bengaluru home airport to shape this plan."
The last sentence matters. Fern's instructions ask Kimi to name every memory it used, so the person can check the plan against what they granted. With no memories, Kimi says it can't see any and asks, rather than guessing a home airport.
Why Kimi for this job
A planner that reads granted data has to stay inside it. Kimi K2.6 follows the grant boundary as an instruction: it builds the plan out of the opened facts, attributes each one, keeps to three plain sentences, and treats memory text as data rather than as commands, which matters when the memory was written by a different app. With reasoning turned off it answers in 1.3 to 1.9 seconds on the live site (three timed calls on 14 October 2026), fast enough that a revoke on Pip and a fresh question on Fern happen in the same breath.
Try it
In Pip, tell it a fact and allow Fern. Ask Fern for a plan, then revoke on Pip's Sharing page and ask again. Pip on Qwen covers how the facts get chosen.