[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 None cached
Activity 2 comments · opened Aug 7, 2026

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 ↗

This issue has 2 comments on GitHub. Read the full discussion on GitHub ↗