"Flint renders the whole prompt itself and sends the finished text. It never asks the brain to look something up."
Render Locally, Send Finished
The contract is named 'apply-free' because Flint applies a free-form prompt: it does the template rendering on its own side, drops the captured selection into the {input} slot, and produces a finished prompt string. Only then does it call across the boundary. The brain receives complete text to transform, not a template to fill in and not a name to resolve. Rendering is Flint's job; thinking is the brain's.
What Crosses the Wire
The request carries three things: the rendered prompt, the vault-context choice, and — for the local model tiers — which tier and model to use. That's the entire contract. The prompt is the content; the vault choice and tier are the execution parameters that tell the brain how to run it. There is no session, no history, no reference to anything stored elsewhere. Each call is self-contained: everything the brain needs to answer is in that one request.
Never a Macro ID
The most important field in the request is the one that isn't there: a macro id. Flint never says 'run macro number 7 that you have stored.' It sends the actual prompt. This is deliberate — the moment Flint referenced a brain-side macro by id, the two systems would be coupled through that id, and the independence the next lesson is about would be gone. Send data, not a pointer to someone else's data.