Type _ with no LLM API key configured and, instead of nothing happening, the blank fills with a message telling you exactly what's missing and where to fix it. That's the missing key hint: a tiny source whose whole job is turning the most common setup gap from a silent dead extension into a visible, actionable line.
What you actually see
On native hosts (Claude Code, OpenCode, Gemini CLI, the shell app):
[OpenCues: no API key — set CEREBRAS_API_KEY (or another provider's key) in ~/.cues/.env or your shell env]
In the Chrome extension: [OpenCues: no API key — open the extension popup], since keys live in the popup there. The message is a normal substitution: cycling on it restores your bare _, and it never overwrites anything else you typed.
Why it exists
Before it shipped, a keyless install looked exactly like a broken one: you typed weather london _, nothing happened, and there was no way to tell missing key from crashed runtime. That violated the project's no-silent-failure principle (the same one behind visible _ failure and in-place error strings like NVDA: HTTP 429), so the gap got its own source with the lowest priority in the system: it claims a _ only when a build-time check confirms no LLM-backed blank source could be wired at all.
Fixing what it's telling you
| Host | Fix |
|---|---|
| Any native host | opencues set-key cerebras <key> (or another provider); keys land in ~/.cues/.env with owner-only permissions |
| Chrome | Open the extension popup and paste a key; it applies mid-session without a tab reload |
Cerebras is named in the hint because it's the recommended default with a free tier; any supported provider's key works. opencues doctor lists missing keys as named findings, and opencues check-keys verifies a key actually works.
One honest limitation
The check is any-key coarse: if you have one provider key set but your config points at a different provider, the hint stays quiet (a key exists) while requests fail at dispatch time with their own error strings. The repo documents this coarseness; the request-time errors carry the detail in that case.
Related: opencues set-key · OpenCues not working? · Why is my blank not firing? · GitHub repo