[BUG] IS_DEMO silently removes /subtask and reverts /fork, and it is the only remaining way to hide account info

Status Open
Reported on v2.1.224
Maintainer reply ✓ Yes — bcherny
Activity 4 comments · opened Aug 7, 2026
💡 Likely answer: A maintainer (bcherny, collaborator) responded on this thread — see the highlighted reply below.

Preflight Checklist

  • [x] I have searched existing issues and this hasn't been reported yet
  • [x] This is a single bug report
  • [x] I am using the latest version of Claude Code

What's Wrong?

IS_DEMO=1 is currently the only way to keep the account email and organisation name off screen. CLAUDE_CODE_HIDE_ACCOUNT_INFO no longer exists in the shipped binary (0 occurrences in 2.1.224) and was dropped from the env-vars docs.

Setting IS_DEMO=1 also silently changes the slash command surface:

  • /subtask is never registered. Typing it returns an unknown command error.
  • /fork reverts to the older behaviour ("Spawn a background agent that inherits the full conversation") instead of the newer one ("Copy this conversation into a new background session and keep working here").

Nothing warns about this, and no message explains why /subtask is missing.

In the 2.1.224 bundle the command registry reads (identifiers renamed for clarity):

...j1() && !hr(ee.IS_DEMO) ? [forkNew, subtask] : [forkOld]

j1() is the agent-view check, and it already covers whether the host UI is present. The extra IS_DEMO term is what removes /subtask.

Every other IS_DEMO read site in the binary is cosmetic: skip onboarding (2 sites), hide the organisation name in the header, hide organisation and email in /status (2 sites), hide the "Message from <org>" banner. The command registry is the only site that changes functionality.

This is the same class of problem as #37780, where IS_DEMO suppressed the workspace trust prompt and left statusline and hooks broken. People reach for IS_DEMO because it is the only identity-masking switch left, then get unrelated behaviour changes they did not ask for.

What Should Happen?

  1. IS_DEMO should only mask identity in the UI. It should not decide which slash commands exist. Gate the /fork and /subtask split on j1() alone, or on a dedicated flag, the way the fork subagent type already uses CLAUDE_CODE_FORK_SUBAGENT plus its own remote flag.
  2. Restore a supported, documented way to hide the account email and organisation, for example CLAUDE_CODE_HIDE_ACCOUNT_INFO. See also #63024 and #72867. Then people who record screencasts or share a screen do not have to reach for IS_DEMO at all.

Steps to Reproduce

  1. Add "IS_DEMO": "1" to the env block of ~/.claude/settings.json.
  2. Restart Claude Code.
  3. Type /subtask. It reports an unknown command.
  4. Type /fork. It shows the old description, "Spawn a background agent that inherits the full conversation".
  5. Remove IS_DEMO and restart. /subtask now exists, and /fork shows the new description.

Is this a regression?

Not sure. /subtask appears to be new, so this may have shipped with the /fork split.

Claude Code Version

2.1.224

Platform

Claude Code CLI, macOS (Darwin 25.5.0)

Additional Context

CLAUDE_CODE_COORDINATOR_MODE and CLAUDE_CODE_DISABLE_AGENT_VIEW were unset in both cases, and disableAgentView was not present in any settings file, so the agent-view gate was satisfied throughout.

View original on GitHub ↗

3 Comments

bcherny collaborator · 1 month ago

Thanks for the detailed report. Reproduced on 2.1.233: with IS_DEMO=1, /subtask returns "Unknown command" and /fork falls back to the older in-session subagent behaviour; without it, /subtask is registered and /fork copies the session into a new background session.

This is currently deliberate: demo mode makes the session look like the simpler no-agent-view product for recordings, and that includes keeping the older /fork and dropping /subtask (it started with the /fork//subtask split in 2.1.212). But we agree it's confusing — the docs describe IS_DEMO as only hiding your email/organisation and skipping onboarding (https://code.claude.com/docs/en/env-vars), and nothing tells you why /subtask is missing.

We're considering either dropping the demo-mode term from the /fork//subtask gate so IS_DEMO is purely cosmetic, or at least documenting the command changes. On the second point: CLAUDE_CODE_HIDE_ACCOUNT_INFO never shipped in the binary — it appeared in the docs by mistake and was removed — so IS_DEMO is the supported identity-masking switch today.

🤖 Generated with Claude Code

wellczech · 1 month ago

Can this behaviour be perhaps split into two parts?

  • UI_PRIVACY to become new variable to contain only cosmetic behaviour from IS_DEMO. Purely for hiding sensitive (personal) information.
  • IS_DEMO to contain funcitonal changes. Optional: Can automaticaly apply UI_PRIVACY settings.
marcindulak · 19 days ago

For your information: the label reproduced on this issue does not prevent it from becoming stale and eventually auto-closed. See https://github.com/anthropics/claude-code/issues/87647 for details, and consider upvoting that for visibility.

This means this issue needs to acquire at least 10 thumbs up, or get new comments every time before the 14 days stale bot interval expires.

Showing cached comments. Read the full discussion on GitHub ↗