"Every heavy app was once a thin one that kept saying yes to reasonable additions."
Thin Clients Drift Heavy
A thin client does not stay thin on its own. It drifts heavy, one sensible feature at a time, because every step toward a second brain sounds like an improvement in the moment. The discipline of Flint is not that these temptations never appear — they always do — but that the app is built to keep refusing them. Staying thin is an active practice, not a starting condition you can coast on.
The Reasonable-Sounding Ways In
Watch how the drift argues for itself. 'The model call is slow; let's cache the result here.' Now Flint holds state it has to invalidate. 'Let's remember the last few transformations for context.' Now Flint has a conversation history. 'Let's give Flint its own little persona so it feels consistent.' Now Flint has an identity. 'Let's bundle a tiny local model so it works when the brain is down.' Now Flint has a model runtime. Each is reasonable; together they are the exact machinery the remake deleted, rebuilt one yes at a time.
THE NON-GOALS (each one a 'no' Flint keeps saying)
--------------------------------------------------
no model runtime no conversation history
no web UI no vault reader of its own
no HTTP server / port no parallel Pippa identity
no model caching no shared macro CRUD with the brain
Every item is a thing that would have made Flint heavier and
a thing the brain already owns. The list is the spine.
The Non-Goals Are the Spine
This is why Flint keeps an explicit list of things it will not become. A non-goal list isn't negativity; it's structure. When a change request arrives — 'can Flint just cache this?' — you don't re-litigate the whole philosophy, you check the list: caching a model result means holding and invalidating state, which is the model-runtime drift, which is a non-goal. The list turns a hundred future arguments into one lookup. It's the load-bearing wall you don't move.