Free userscript for ChatGPT v1.0.0

ChatGPT reasoning, always on.

A small userscript that keeps ChatGPT reasoning enabled. It restores the toggle after messages, chat changes, and reloads, then resends your prompt when needed so it goes through with reasoning on.

  • Tested on ChatGPT GO
  • No network requests
  • MIT licensed

The setting resets at the exact moment you need it.

Reasoning gives ChatGPT more time to work through a problem, and the switch returns to its default position after every message, every chat change, and every reload. The interface still looks ready, so the reset is easy to miss until an answer arrives without the depth you asked for.

reset

After you press Enter

The next question starts with reasoning off, even when the last answer used it.

reset

After you open another chat

A new conversation inherits the default, not the choice you made a minute ago.

reset

After the tab reloads

The page comes back with the setting already gone and no hint that it changed.

180ms

resend delay when the toggle has to change first

1.2s

watchdog interval that catches a silent reset

20+

interface languages the button is recognized in

0

network requests made from the page

Four mechanisms, running without a sound.

The script has one job, and it does that job in the four places where ChatGPT can lose the setting. There is no panel to configure and no habit to build, because the work happens between the moment the interface changes and the moment your prompt reaches OpenAI.

Watches the page, not just the tab.

ChatGPT runs as a single-page application, so a new conversation can appear without a page load. A MutationObserver catches those changes, while a check every 1.2 seconds covers the updates that arrive without a mutation the script can hear.

Recognizes the toggle in twenty languages.

The button is identified by its pressed state, the brain icon, and the local word for reasoning across more than twenty interface languages. When the control hides behind the plus menu instead of the composer, the script opens that menu and looks there.

Saves the message before it leaves.

Pressing Enter with reasoning off usually costs you the prompt. The script stops that submission, flips the switch, and sends the same text 180 milliseconds later, so the message never leaves without the mode it needs.

Stays inside the tab.

The manifest asks for no permissions and makes no network calls. The script reads only the interface elements it needs, never the text of your conversations, and it stores nothing outside the page where it is running.

From download to a toggle that behaves, in about three minutes.

You need one userscript manager and one visit to GreasyFork. The script updates itself after that, so the version you install today will not be the version you keep forever.

  1. 01

    Install a userscript manager.

    Tampermonkey and Violentmonkey both work on Chrome, Edge, Firefox, and Safari. Install one from its official store page and keep it enabled while you browse.

  2. 02

    Install the script.

    Open the GreasyFork listing and press Install. Your manager shows a confirmation screen with the permissions, and this script asks for none beyond running on chatgpt.com.

  3. 03

    Reload ChatGPT and check.

    Reload the ChatGPT tab, then run the command below in the browser console. The answer is true when reasoning is on, and false when the interface has no toggle for the script to read.

    browser console
    › __autoReasoning.isOn()
    true

    The script also exposes __autoReasoning.now() for a manual check.

Built for the interfaces ChatGPT actually ships.

The script is small on purpose, and that keeps it close to the parts of the page that change least. When a layout moves the reasoning control somewhere new, the fallback path is there to find it.

Plan
ChatGPT GO, tested. Other plans work while the reasoning control is present.
Domains
chatgpt.com and chat.openai.com
Managers
Tampermonkey and Violentmonkey
Permissions
None. The manifest uses @grant none.
Updates
Automatic through GreasyFork and @updateURL.

It reads the switch. It never reads the conversation.

No network requests leave the tab, no conversation text is collected, and nothing is written to storage. The script looks for a single control in the composer, flips it when the mode is off, and then gets out of the way. Prompts, files, and chat history stay between you and OpenAI.

What people ask before installing.

The short answer is that the script only touches the toggle. The long answers are below, and the source is open if you want to check them line by line.

Read the source on GitHub

The script only touches the reasoning toggle in the message composer. When the mode is off, it clicks the control to turn it on. If you press Enter before that happens, it cancels the send and replays it after the switch has changed, so the prompt reaches ChatGPT with reasoning enabled.

ChatGPT returns the toggle to its default after a message is sent, after you move to a different conversation, and after the page reloads. That behavior belongs to the interface, so a userscript cannot prevent the reset at the source. It can only notice the new state and restore your preference before the next message is sent.

No. The only message the script ever replays is the text already sitting in the composer when you pressed Enter. It does not compose prompts, open chats, or run while you are typing.

The script reads a small set of interface attributes on buttons and menu items, such as aria-pressed and visible labels. It does not read message text, attachments, or the content of your chats, and it makes no network requests of its own.

The script was tested on ChatGPT GO. On other plans it works whenever the reasoning control appears in the composer or the plus menu. When a model does not expose that control, the script waits and does nothing, which is why unsupported models do not produce errors or stray clicks.

Open chatgpt.com, then run __autoReasoning.isOn() in the browser console. The command returns true when the toggle is on. You can also run __autoReasoning.now() to trigger a manual check without waiting for the next page event.

Any userscript manager that supports the metadata block can run it. Tampermonkey and Violentmonkey cover Chrome, Edge, Firefox, and Safari, and the script itself uses standard DOM APIs. The project is tested on Chromium with ChatGPT GO.

Some layouts keep the reasoning control inside the attachment menu instead of the composer. When the toggle is not visible, the script opens that menu, looks for the reasoning row, and closes the menu again. The fallback runs at most once every thirty seconds, so an unsupported interface is not clicked in a loop.

The manifest points at GreasyFork with @updateURL, and your userscript manager checks that address on its own schedule. When a new version is published, the manager offers the update or installs it automatically, depending on your settings.

No. ChatGPT Auto Reasoning is an independent open source project under the MIT license, and ChatGPT is a trademark of OpenAI. The script interacts only with elements that are already part of the ChatGPT interface.