"Ordinary requests log hashes and lengths, not the private text. The one exception — Studio text — is authored on purpose."
Debuggable Without Being Nosy
An engine that speaks private words has to be careful what it writes down. Bellows logs enough to identify and debug a request — a hash of the text, its length, the model, the language — but never the full private text itself. You can answer "which request was this, and did it change?" from a fingerprint. You don't need the actual words in a log file to do it, and once they're in a log file, they leak wherever logs go.
The Named Exception
There's exactly one place Bellows records text as content: Studio. Studio text is explicit, authored project data — you wrote it into a project on purpose, the way you'd type into a document. Recording it is the point, not a privacy hole. The discipline isn't "never store text," it's "private text is a fingerprint by default, and the exception is named and deliberate."
Keys Live Even Further Down
Provider API keys get the strictest rule of all: they never enter source, SQLite, a plist, a UI response, or a log line — anywhere. A key is read from the environment at the edge and used; it is never persisted into the engine's own state or echoed back in an error. The general shape is a gradient of secrecy: keys never anywhere, private text as a fingerprint, and only deliberately-authored content stored in full.