Prompt suggestions (grey ghost-text, Tab to accept) never appear in GUI app despite promptSuggestionEnabled: true
Summary
"Prompt suggestions" (grey ghost-text pre-filled in the input box, accepted with Tab / Right Arrow) never appear in the graphical application (desktop/web), even though promptSuggestionEnabled is set to true.
Environment
- Claude Code: 2.1.162
- OS: macOS 26.5.2 (arm64)
- Interface: GUI application (desktop/web), not the terminal CLI
- Model: Opus 4.8
Configuration verified
~/.claude/settings.jsoncontains"promptSuggestionEnabled": true(user scope)- No project-level
settings.json/settings.local.jsonoverriding it - No
managed-settings.json(system / enterprise) present on the machine
Expected behavior
A pre-filled prompt suggestion should appear as grey "ghost text" in the input box (based on git history / conversation context), acceptable with Tab or Right Arrow.
Actual behavior
The grey suggestion never appears in the GUI application, including on free-text turns (no multiple-choice question component), and after fully quitting and relaunching the app. The setting is enabled.
Steps to reproduce
- Set
"promptSuggestionEnabled": truein~/.claude/settings.json - Fully quit and relaunch the GUI app
- Have a conversation; on each free-text turn, watch the input box
- Result: no grey pre-filled suggestion appears, so
Tabcannot accept anything
Question / impact
Is the "Prompt suggestions" feature supported in the graphical application, or is it limited to the terminal CLI? If supported in the GUI, what additional setting or condition triggers it? This slows down input because everything must be retyped.
Showing cached comments. Read the full discussion on GitHub ↗
6 Comments
Prompt suggestions (ghost text) no longer appear after update — appears to be a server-side rollout gate
Environment
Symptom
The grey inline "prompt suggestions" (accept via Tab/→) used to appear regularly and stopped appearing entirely. They no longer show under any condition.
What I ruled out locally
~/.claude/settings.jsonhas"promptSuggestionEnabled": trueCLAUDE_CODE_ENABLE_PROMPT_SUGGESTIONdisabling it; I also explicitly set it to1(User env), restarted — no effect/configto toggleRoot cause (reconstructed from the 2.1.217 bundle)
There appear to be two independent gates; the local controls only cover one of them.
promptSuggestionEnabled: vTo():vTo(): envCLAUDE_CODE_ENABLE_PROMPT_SUGGESTION=1/true/yes/on→ force ON;0/false/no/off→ force OFF; otherwise requires Statsig gatetengu_chomp_inflectionto be ON, else falls back to thepromptSuggestionEnabledsetting./configtoggle is only rendered whentengu_chomp_inflectionis ON:Ke("tengu_chomp_inflection", false) ? [{ id:"promptSuggestionEnabled", label:"Prompt suggestions", … }] : []— which is why the toggle is absent for me.d.promptSuggestions && kr.shouldQuery !== false && !dE() && !ku(process.env.CLAUDE_CODE_ENABLE_PROMPT_SUGGESTION)d.promptSuggestionsis populated fromthis.initConfig?.promptSuggestions(session init config; schemapromptSuggestions: boolean().optional()), i.e. delivered by the server per account.The env var / setting only drive
promptSuggestionEnabled(client half). The actual ghost-text query additionally requiresd.promptSuggestions, which comes from the server-providedinitConfigand has no local override. If the server does not sendpromptSuggestions: truefor the account, the query never fires — regardless of local settings, the env var, or the version.Conclusion
This looks like a server-side rollout/experiment (
tengu_chomp_inflection+initConfig.promptSuggestions) from which my account was dropped, not a local misconfiguration. There is no client-side way to force it back on.Ask
CLAUDE_CODE_ENABLE_PROMPT_SUGGESTIONvariable + thepromptSuggestionEnabledsetting to the official settings/env-var reference (currently only mentioned in interactive-mode.md).@HarryMuc your gate-1 reconstruction matches the shipped binary — I checked
2.1.218 and the function is intact, including the reason the
/configtoggle ismissing for you. Two corrections and then a way to tell our cases apart.
Correction 1 —
initConfig.promptSuggestionsis not a server rollout flag.It is the
--prompt-suggestionsCLI flag / Agent SDKOptionsfield:In the schema it sits in the SDK options block next to
forwardSubagentText,supportedDialogKindsandwebSearchIsolationExemptMcpServers(
promptSuggestions: b.boolean().optional()), and the CLI rejects it outrightunless you also pass
--print --output-format=stream-json. It comes from the SDKhost, not from Anthropic's server, and it has no effect on TUI ghost text. So
there is no account-level flag to be dropped from on that path.
Correction 2 — the flag source is GrowthBook, not Statsig. The telemetry
tengu_prompt_suggestion_initemitssource: "growthbook"when the gate is whatdisabled it. Cosmetic, but it matters for the next point.
There is a second, independent gate you did not reach, and it is the one I am
hitting:
mie().statusisallowed | allowed_warning | rejected, andallowed_warningisderived client-side from an ahead-of-pace rule even when the server header says
allowed. Details and a live capture in #72495.One line tells us which gate each of us is on. No proxy, no bundle
digging — the client reports the deciding state directly in stream-json:
Read the
statusfield:"status":"allowed_warning"→ same gate as me (#72495). It clears on its ownonce your utilization falls behind the pace thresholds — no login, no reinstall.
"status":"allowed"→ not this gate; your rollout-drop theory stands for yourcase, and these should stay separate issues.
"status":"rejected"→ you are actually rate-limited, which is a third thing.Important correction to an earlier version of this comment, which asked you to
run a two-turn probe and report whether a
prompt_suggestionevent appeared. Pleasedon't use that — I have since measured it and the absence of a suggestion is not a
reliable signal. Three separate things suppress the event for reasons unrelated to
this bug:
early_conversation(below two assistant messages),cache_cold(
input + cache_creation + output > 10000, which fires on the first turn after anyidle gap), and a content filter that silently drops generated suggestions. I saw four
consecutive headless runs emit nothing while
statuswasallowedand every gate wasclear. Anyone following the old recipe would have concluded "same gate as you" when
nothing of the sort was shown.
The
rate_limit_eventline is emitted on every run and is a direct read of the statevariable in question, so it does not have that problem.
Could you both paste just that one line? If we are on different gates these should be
three separate issues, and if we are on the same one they should be consolidated —
right now nobody triaging can tell, which I suspect is part of why all of these have
been sitting.
(The line contains your utilization percentage — redact it if you would rather not
share that; the
statusfield is the only part that matters.)I think I found the trigger: an expired OAuth credential with no refresh token.
My old ~/.claude/.credentials.json had expiresAt = 2026-07-08 and an empty refreshToken, so it couldn't self-renew. My running session still worked (in-memory token), but prompt suggestions were silently gone. After a fresh /login (new expiresAt in the future and a populated refreshToken), interactive suggestions came back immediately.
Caveat: I couldn't reconstruct the exact outage window — Claude Code doesn't log prompt-suggestion activity locally (zero "type":"prompt_suggestion" events in ~/.claude/projects/, nothing in history.jsonl). So this is a before/after observation tied to a credential rotation, not a log-backed timeline.
Note: a headless -p/--continue probe is not a valid test — it never emits a suggestion event even when the feature works. The only related event there is a rate-limit event (status: allowed, so not rate-limited):
{"type":"rate_limit_event","rate_limit_info":{"status":"allowed","rateLimitType":"five_hour","overageStatus":"rejected","overageDisabledReason":"org_level_disabled","isUsingOverage":false}}
Suggestion for maintainers: check whether the prompt-suggestion path silently no-ops when the access token is expired / has no refresh token, and consider logging suggestion attempts so this is diagnosable client-side.
Data point that may reframe this: the GUI app does support prompt suggestions — they work there. I had ghost text in the desktop app throughout the morning of 2026-07-31 and it stopped mid-afternoon the same day. So this isn't "unsupported in GUI," it's a regression.
Version 2.1.219, desktop app 1.24012.9, macOS Darwin 25.5.0.
Nothing changed locally across the break:
tengu_prompt_suggestion: truein~/.claude.json→cachedGrowthBookFeatures, cache refreshed the same afternoon.promptSuggestionEnabled: trueexplicitly in~/.claude/settings.jsonmade no difference.Since the machine was unchanged either side of the break, this looks server-side rather than a client bug.
Same here, and still present on a newer version.
Environment: Claude Code 2.1.222, desktop app (CLAUDE_CODE_ENTRYPOINT=claude-desktop), macOS 26.6.1 (build 25G76), Apple M1 Max. Reproduced after a full OS update and a restart of both the machine and the app.
Beyond the checks in the original report, I also ruled out:
CLAUDE_CODE_ENABLE_PROMPT_SUGGESTION is not set anywhere — not in the process environment, not in .zshrc / .zprofile / .zshenv / .bash_profile / .bashrc / .profile, and not in launchctl getenv
All four documented skip conditions: not the first turn of the conversation, not plan mode, not print mode, and not a cold prompt cache — suggestions are equally absent on rapid consecutive turns in an active session
Effort level is max, so nothing is being throttled for cost
Replies deliberately ended in a single concrete next step, since the suggestion is generated from how the reply ends
Two observations that may help diagnose it:
Suggestions leave no trace in the session transcript. I searched every ~/.claude/projects/**/*.jsonl on the machine and found no record of a generated suggestion. That makes it impossible for a user to distinguish "no suggestion was generated" from "one was generated but never rendered" — which is probably why this is awkward to report precisely. A log line on generation would make the failure mode observable.
The documented toggle location does not exist on this surface. The Interactive mode page says to toggle the setting in /config, but /config opens an interactive terminal panel that is not available in the desktop app. That is at least consistent with parts of that page applying to the terminal client only.
Seconding the original question, since it is the one that would settle this: is the prompt suggestion feature supported in the GUI app, or is it specific to the terminal CLI? If it is terminal-only, saying so on the Interactive mode page would resolve it for everyone who goes looking.
Update: resolved for me — with no client-side change, which may be the useful data point.
Prompt suggestions started appearing today (2026-08-08) and work exactly as documented: grey ghost-text after a reply, Tab/Right arrow to accept, Enter to submit.
What did NOT change between my last failing test and the first success:
Claude Code version: 2.1.222 both before and after (verified against the installed app bundle and the running process — no app update in between)
Same machine, same desktop app, same settings (promptSuggestionEnabled: true was already set during the failing tests)
A full macOS update (26.6.1) + restart of machine and app had already been tried the day before, and suggestions were still absent after that — so the restart was not the fix either
What did change:
Roughly 24 hours passed
I switched the session model (previously Opus, now a different model) — though the failing tests had been consistent across many sessions before that, so I doubt this is it
Given identical client version and config on both sides of the fix, this looks consistent with a server-side rollout or flag flip rather than anything local. If that matches something on your end, it might explain the reports on this issue — and confirms the feature does work in the desktop app.
Thanks — happy to test anything if it regresses.