Unable to set thinking level or context for Opus 4.7

Describe the Bug

Since the latest update, I’m unable to switch thinking level or context window for model Opus 4.7 (Clicking the button does nothing)This bug happens specifically only for 4.7, other models are working fine.

Steps to Reproduce

Unable to switch thinking level or context. Clicking the button on the UI does not work. See video recording.

Screenshots / Screen Recordings

Operating System

MacOS

Version Information

Version: 3.3.30 (Universal)
VSCode Version: 1.105.1
Commit: 3dc559280adc5f931ade8e25c7b85393842acf30
Date: 2026-05-09T18:28:42.332Z
Layout: glass
Build Type: Stable
Release Track: Default
Electron: 39.8.1
Chromium: 142.0.7444.265
Node.js: 22.22.1
V8: 14.2.231.22-electron.0
OS: Darwin arm64 25.4.0

Does this stop you from using Cursor

No - Cursor works, but with this issue

Facing the same issue on my end

I was about to post about this issue when I read this post.
If I use the Edit link on the model list to change the reasoning level, the levels menu opens but clicking on any item has no effect.
If I use the keyboard shortcut, it has no effect either.
I only happens with Opus.

Same issue - i’m stuck on Opus 4.7 Extra High and can’t switch down to High:

Version: 3.3.30 (user setup)
VSCode Version: 1.105.1
Commit: 3dc559280adc5f931ade8e25c7b85393842acf30
Date: 2026-05-09T18:28:42.332Z
Layout: editor
Build Type: Stable
Release Track: Default
Electron: 39.8.1
Chromium: 142.0.7444.265
Node.js: 22.22.1
V8: 14.2.231.22-electron.0
OS: Windows_NT x64 10.0.26200

Same issue here!: Where does the bug appear (feature/product)?

:check_box_with_check: Cursor IDE

Describe the Bug

When using the Opus 4.7 model in Cursor IDE, the “Thinking” mode cannot be disabled and the reasoning effort selector (Low / Medium / High / Extra High) becomes stuck on “Extra High”.

The UI appears frozen/non-responsive:

  • Clicking the Thinking toggle does nothing

  • Clicking different effort levels does nothing

  • The selected state remains forced on “Extra High”

  • The issue persists across chats

This seems specific to Opus 4.7. Other models behave normally.

Steps to Reproduce

  1. Open Cursor IDE

  2. Start a new chat/composer session

  3. Select the model “Opus 4.7”

  4. Open the reasoning/thinking settings

  5. Attempt to:

    • disable Thinking

    • change effort from “Extra High” to another level

  6. Observe that:

    • the toggle does not respond

    • effort selection does not change

    • “Extra High” remains forced

Expected Behavior

Users should be able to:

  • toggle Thinking mode on/off

  • switch reasoning effort between Low / Medium / High / Extra High

The UI should reflect the selected state correctly and respond to user input.

Screenshots / Screen Recordings

Attached screenshots showing:

  • Cursor version information

  • macOS system information

Operating System

:check_box_with_check: MacOS

Version Information

IDE:
Version: 3.3.22
VSCode Version: 1.105.1
Commit: 38a27120cfc7419a5efa38420665eaeeed1e7b30

Electron: 39.8.1
Chromium: 142.0.7444.265
Node.js: 22.22.1
OS: Darwin arm64 24.6.0

Device:
MacBook Air M1 (2020)
16 GB RAM
macOS Sequoia 15.6

For AI issues: which model did you use?

Model: Opus 4.7

For AI issues: add Request ID with privacy disabled

Request ID: (paste request ID here)

Additional Information

  • Restarting Cursor does not consistently fix the issue

  • Creating a new chat sometimes does not help

  • The issue appears only with Opus 4.7

  • Other models do not appear affected

  • This may be related to the new adaptive thinking implementation introduced for Opus 4.7

  • Several users appear to report related issues involving stuck reasoning controls or missing effort selectors in recent Cursor builds

  • Issue observed on stable build track

Does this stop you from using Cursor?

:check_box_with_check: Sometimes - I can sometimes use Cursor

also stuck on Opus 4.7 Extra High

Have been able to confirm this happens on 3.3.30 but not on 3.3.16. Only seems to affect Opus 4.7 and not others.

I was about to post the exact same thing, this is very frustrating: we are forced to use another model or be charged the higher price (I’m also stuck on Extra High for Opus 4.7).

I was thinking about start using Claude Code to try out given the inconsistency and bugs in Cursor releases, these events only enforces the plan.


Version: 3.3.30
VSCode Version: 1.105.1
Commit: 3dc559280adc5f931ade8e25c7b85393842acf30
Date: 2026-05-09T18:28:42.332Z (1 day ago)
Layout: glass
Build Type: Stable
Release Track: Default
Electron: 39.8.1
Chromium: 142.0.7444.265
Node.js: 22.22.1
V8: 14.2.231.22-electron.0
OS: Darwin arm64 24.6.0

The same is here

A temporary fix:

pkill -f /usr/share/cursor/cursor
sleep 2
sudo python3 /tmp/patch_cursor_js.py
python3 /tmp/fix_cursor_model.py
/usr/share/cursor/cursor &

Patch, /tmp/fix_cursor_model.py:

import shutil
import os
from datetime import datetime

JS_PATH = "/usr/share/cursor/resources/app/out/vs/workbench/workbench.desktop.main.js"
BACKUP_SUFFIX = f".bak.{datetime.now().strftime('%Y%m%d_%H%M%S')}"
BACKUP_PATH = JS_PATH + BACKUP_SUFFIX

# Only back up if no backup exists yet today (avoid multiple large backups)
existing = [f for f in os.listdir(os.path.dirname(JS_PATH)) if f.startswith('workbench.desktop.main.js.bak')]
if not existing:
    print(f"Backing up -> {BACKUP_PATH}")
    shutil.copy2(JS_PATH, BACKUP_PATH)
else:
    print(f"Backup already exists: {existing[0]}, skipping")

with open(JS_PATH, 'r', encoding='utf-8', errors='replace') as f:
    content = f.read()

patches = []

# Patch 1: getter - intercept reads of claude-opus-4-7 preference and force effort=medium
OLD1 = 'getModelParameterPreferences(e){return this.reactiveStorageService.applicationUserPersistentStorage.aiSettings.modelParameterPreferences?.[e]}'
NEW1 = ('getModelParameterPreferences(e){'
        'const _p=this.reactiveStorageService.applicationUserPersistentStorage.aiSettings.modelParameterPreferences?.[e];'
        'return e==="claude-opus-4-7"&&_p?{..._p,parameters:_p.parameters.map(p=>p.id==="effort"&&p.value==="xhigh"?{...p,value:"medium"}:p)}:_p;'
        '}')
patches.append(('getter', OLD1, NEW1))

# Patch 2: default variant writer - already applied, verify it's still there
OLD2 = 'yk(()=>{this._reactiveStorageService.setApplicationUserPersistentStorage("availableDefaultModels2",o),'
if OLD2 not in content:
    # Patch was already applied from previous run, use the patched version as OLD
    OLD2_PATCHED = ('o=o.map(function(m){if(m.name==="claude-opus-4-7"){return Object.assign({},m,{variants:m.variants.map(function(v){if(v.isDefaultNonMaxConfig||v.isDefaultMaxConfig){return Object.assign({},v,{parameterValues:v.parameterValues.map(function(p){return p.id==="effort"?Object.assign({},p,{value:"medium"}):p;})});}return v;})});}return m;});'
                    'yk(()=>{this._reactiveStorageService.setApplicationUserPersistentStorage("availableDefaultModels2",o),')
    if OLD2_PATCHED in content:
        print("Patch 2 (default variant writer) already applied, skipping")
        patches.append(('default-variant-writer', None, None))
    else:
        print("WARNING: Could not find patch 2 target (old or patched form)")
        patches.append(('default-variant-writer', None, None))
else:
    NEW2 = ('o=o.map(function(m){if(m.name==="claude-opus-4-7"){return Object.assign({},m,{variants:m.variants.map(function(v){if(v.isDefaultNonMaxConfig||v.isDefaultMaxConfig){return Object.assign({},v,{parameterValues:v.parameterValues.map(function(p){return p.id==="effort"?Object.assign({},p,{value:"medium"}):p;})});}return v;})});}return m;});'
            'yk(()=>{this._reactiveStorageService.setApplicationUserPersistentStorage("availableDefaultModels2",o),')
    patches.append(('default-variant-writer', OLD2, NEW2))

for name, old, new in patches:
    if old is None:
        continue
    count = content.count(old)
    if count == 0:
        print(f"SKIP {name}: target not found")
        continue
    if count > 1:
        print(f"WARNING {name}: {count} occurrences found, replacing all")
    content = content.replace(old, new)
    print(f"OK {name}: replaced {count} occurrence(s)")

with open(JS_PATH, 'w', encoding='utf-8', errors='replace') as f:
    f.write(content)

print("Done. Restart Cursor to apply.")

I confirm the issue - it happens to me as well

Same issue on macOS. It was working fine until I reloaded the window to open another project.

Could it be that Cursor and Anthropic didn’t hit their token targets, so they’re trying to boost the numbers this way? :grinning_face_with_smiling_eyes:

Same issue for both Cursor IDE and Agents Window in Windows 11.
When using the Opus 4.7 model, the “Thinking” mode cannot be disabled and the reasoning effort selector (low / medium / high / extra high / Max) becomes stuck on “extra high”.

IDE:
Version: 3.3.30 (user setup)
VSCode Version: 1.105.1
Commit: 3dc559280adc5f931ade8e25c7b85393842acf30

Release Track: Default
Electron: 39.8.1
Chromium: 142.0.7444.265
Node.js: 22.22.1
V8: 14.2.231.22-electron.0
OS: Windows_NT x64 10.0.26200

Same issue here, dead in the water.

Hi all! Thanks for reporting. We are working to resolve this now, and we should have an update soon.

Hi all!
The issue with Opus 4.7’s effort and thinking controls not responding has been resolved on our end (via a backend server-side change), so no app update is needed on your side. Everything should be working as expected now. Please let me know if you have any questions or concerns, or you are continuing to see the same unexpected behavior.

@here

I still cannot change from Opus 4.7 Extra High to High.

Version: 3.3.30 (user setup)
VSCode Version: 1.105.1
Commit: 3dc559280adc5f931ade8e25c7b85393842acf30
Date: 2026-05-09T18:28:42.332Z
Layout: editor
Build Type: Stable
Release Track: Default
Electron: 39.8.1
Chromium: 142.0.7444.265
Node.js: 22.22.1
V8: 14.2.231.22-electron.0
OS: Windows_NT x64 10.0.26200

Working now for me, after another Cursor restart.

The only thing I did different this time was:

  • Open terminal area
  • Select Main
  • Select theHighoption again to see if there were any errors displayed there

There were no errors, and this time selecting High worked.

Thanks for confirming @litecode