Desktop app: no user-level way to disable the "How is Claude doing this session?" survey
Summary
The Claude desktop app's Code tab shows an inline session survey — *"How is
Claude doing this session? Bad / Fine / Good ×"* — above the composer. There
appears to be no user-level setting that turns it off, and the existing
Claude Code feedback switches do not apply to it, because the banner is
rendered by the desktop app rather than by the CLI.
I would like a supported way to opt out.
Environment
- Claude desktop app (Code tab), macOS 15 (Darwin 25.5.0), Apple silicon
@anthropic-ai/claude-code2.1.160- Personal plan (not an org/Team deployment)
What I tried
~/.claude/settings.json already contains:
"env": {
"DISABLE_FEEDBACK_COMMAND": "1",
"CLAUDE_CODE_DISABLE_FEEDBACK_SURVEY": "1",
"DISABLE_ERROR_REPORTING": "1"
}
The banner still appears. As far as I can tell these govern the CLI's own
feedback surfaces (/feedback, per-message thumbs in the TUI) and are not read
by the desktop renderer.
Why it looks unreachable from the user side
From the shipped app bundle
(/Applications/Claude.app/Contents/Resources/ion-dist/assets/v1/), the
component is gated on:
I = gate("claudeai_epitaxy_feedback_survey") && !o && !disabled && !cliDisabled && …
with pacing from claudeai_epitaxy_feedback_survey_config, whose defaults are:
{ minTimeBeforeFeedbackMs: 600000, // 10 min into the session
minTimeBetweenFeedbackMs: 3600000,
minTimeBetweenGlobalFeedbackMs: 100000000, // ~27.8 h
minUserTurnsBeforeFeedback: 5,
minUserTurnsBetweenFeedback: 10,
probability: 0.005 }
cliDisabled is derived from the CLI's system/init message:
cliDisabled = init.analytics_disabled !== false || init.product_feedback_disabled !== false
and in the CLI those two are:
analytics_disabled: UC()— true for non-first-party providers, a gateway
auth, or a 3P backend;
product_feedback_disabled: !policy("allow_product_feedback")— the org's
ZDR/HIPAA policy.
So the only ways the banner is suppressed are "you are on Bedrock/Vertex/a
gateway" or "your organization has custom data retention". A personal
first-party user has no path at all. The remaining lever is theepitaxy-feedback-survey-last-shown localStorage key, which is app-internal
and resets on update.
Why this matters to me
I use Claude Code for long, sustained sessions that are not only coding, where
the thread has a deliberate shape and continuity matters. A rating widget
appearing inline in the middle of that is a real interruption — it changes what
the surface is asking of me mid-thought. The ~28 h global cooldown after a
dismissal keeps the cost low in aggregate, but it lands unpredictably and it is
precisely the sessions I care most about that it disturbs.
To be clear, I am not asking you to stop collecting feedback. I am asking for
the same courtesy the CLI already offers: a switch.
What I'd like
Any one of these would resolve it:
- Have the desktop app honour
CLAUDE_CODE_DISABLE_FEEDBACK_SURVEY(or
DISABLE_TELEMETRY / DO_NOT_TRACK) from ~/.claude/settings.json — this
is the least surprising fix, since users who set that flag have already
expressed the intent.
- A settings key of its own, e.g.
"sessionFeedbackSurvey": "off", alongside
the existing feedbackDrafts key the app already reads.
- A toggle in the app's Settings → Privacy, next to the existing feedback
controls.
A per-session "don't ask again" on the × button would also be a large
improvement over the current dismiss.
Note
Everything above is read out of the shipped bundle and the local CLI binary;
minified identifiers are quoted as they appear. I may have misread a gate, in
which case the short version of the report still stands: I cannot find a way to
turn this off and I would like one.
This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗