Users have been trained by dishonest UX. Progress bars that jump. “99% complete” that parks. Shimmer that loops while nothing is reserved on the server. AI products inherit that skepticism on day one.
Rules for non-fake thinking UI
- Bind to real events. Thinking starts when the request starts — not on keypress speculation.
- Never invent percentages unless you truly know remaining work (you usually do not).
- Prefer phases over progress. “Retrieving” → “Writing” beats “68%”.
- Allow escape. Stop / cancel must be visible while thinking.
- End cleanly. On error, do not freeze mid-shimmer; return to idle and say what failed.
Motion that reads as cognition
Useful cues: tighter orbits, higher energy, cooler→violet mood shifts, soft captions like “thinking…”. Useless cues: random glitch, seizure-grade flicker, faux terminal dumps of unrelated tokens.
Copy that helps
- Good: “Reading your doc…”, “Drafting options…”, “Checking the schema…”
- Bad: “Magic in progress”, “AI go brr”, endless witty filler
If you do not know the substep, a quiet thinking presence is better than improvisational comedy.
Where Glim fits
Glim’s thinking state and say() captions give you honest phase UI without rolling your own animation graph. Pair it with real tool labels in the transcript for power users; keep the companion legible for everyone else.
p.setState('thinking');
p.say('scanning the repo…'); // optional, hold a real phase line
Try Glim free. Offline starter + MIT creatures. No fake checkout.