> [!WARNING] Quarantined Project > This post documents a technical experiment. Upon review, I realized that modifying client requests likely violates Perplexity's Terms of Service. As such, I am not releasing the code, nor do I recommend replicating this approach. I found myself stuck in a loop with Perplexity. I would search for something, get a lackluster or hallucinated answer from the default model, and then have to hit "Rewrite with [ Primo Model ]" to get the right answer. This happened a lot. I’d forget to select the model beforehand, waste time waiting for the default response, and then waste Perplexity's compute generating an answer I was just going to discard. The problem is that Perplexity's interface resets your model selection on every new search or page refresh. It assumes you want the default, even if you *always* want something else. I wanted a "set and forget" switch, where I choose my model once and have it stick until I decided to change it. Since Perplexity doesn't offer this natively, I built a tool to do it myself—before realizing why that was a bad idea. ## The Experiment: Perplexity Model Lock My solution was a userscript that added a persistent model selector to the Perplexity interface. ![[perplexity_model_lock_demo_dark.gif]] It worked by injecting a small dropdown menu into the top right of the page. When I performed a search, the script intercepted the request before it left the browser, checked the selected model in the dropdown, and overrode the `model` parameter in the payload. The result was seamless. I set "Gemini 3" once, and every subsequent search used it automatically. It persisted across tab refreshes and new windows. It included a few quality-of-life features: * **Visual Feedback**: A lock icon showed when the model was locked, and an unlocked icon when it was letting Perplexity choose. * **Dark Mode Support**: Matched the Perplexity theme automatically. * **Usage Limits**: For limited models (like Claude Opus), it displayed remaining daily requests right in the selector. * **Auto Mode**: A setting that disabled the lock when I wanted to use Perplexity's default behavior, useful for specialized modes like DeepResearch. ## How It Worked (Technical Details) The script relied on reverse-engineering Perplexity's internal API and page structure. This made it inherently brittle. When Perplexity updates their site or adds new models, the script would break. To update it, the process was: 1. Open the browser's developer console. 2. Manually generate a response from Perplexity with a new model using the built-in "Rewrite with" feature. 3. Inspect the network request payload to find the new `model_id`. 4. Add that ID to a configuration list at the top of the script. ## Why I'm Not Using It While the project was a success technically—it solved my immediate pain point—it failed the "good citizen" test. Modifying the payload of requests sent to a service usually falls under "reverse engineering" or "unauthorized modification" clauses in Terms of Service. Perplexity has reasonable limits on how their service is used, and bypassing their interface's default behavior, even for convenience, steps over the line. It was a fun exercise in DOM manipulation and request interception, but I've shelved the code. It serves now only as a reminder that sometimes the feature you want isn't missing because they forgot it, but because they designed it that way.