Uninstall Overplus

Three ways to remove Overplus. None of them touch your code or prompts.

Method 1 (the app) and method 2 (the install script, with the app present) put every Claude Code setting back to what it was before Overplus. Method 2 with the app already gone, and method 3, only fix ANTHROPIC_BASE_URL. Each section says what that does and does not restore.

1. From the app

/Applications/Overplus.app/Contents/MacOS/Overplus --uninstall          # settings + launch job only
/Applications/Overplus.app/Contents/MacOS/Overplus --uninstall --purge  # also removes the support folder

--restore still works. It is the same as --uninstall with no --purge, for older scripts.

This restores every setting Overplus ever wrote in ~/.claude/settings.json and ~/.codex/config.toml, from Overplus's own ledger. It removes the launch agent (~/Library/LaunchAgents/dev.overplus.app.agent.plist).

With --purge, it also deletes ~/Library/Application Support/Overplus, but only once Claude Code's own ANTHROPIC_BASE_URL no longer points at Overplus's local proxy. If it still points there (for example, a setting the ledger does not know), the support folder and its ledger stay on purpose. The command prints why and exits non-zero, so a later run can still finish the restore.

2. The install script

curl -fsSL https://www.overplus.dev/uninstall.sh | bash

When the app is present, this runs Overplus --restore. That puts back every setting from the ledger, the same as method 1.

When the app is not present (deleted by hand, moved, or already gone), the script cannot read the ledger. It removes the launch agent and edits ~/.claude/settings.json directly. It removes ANTHROPIC_BASE_URL only when it is still Overplus's own http://127.0.0.1:8788, and only when the file parses as JSON. A file that does not parse stays untouched, and the script says so.

Any model, tool-diet or cap setting Overplus wrote stays as it was. The support folder and its ledger stay too, so a later reinstall and uninstall can still finish the job.

3. One-line fallback, no app or script needed

Use this when the app is gone and you cannot reach the network for the uninstall script. It removes the launch agent and repairs ~/.claude/settings.json in place. It uses only tools already on macOS (launchctl, osascript).

launchctl bootout gui/$(id -u)/dev.overplus.app.agent 2>/dev/null; rm -f ~/Library/LaunchAgents/dev.overplus.app.agent.plist; osascript -l JavaScript -e 'ObjC.import("Foundation"); function run(a){var h=a[0];var p=h+"/.claude/settings.json";var real=$.NSString.alloc.initWithString(p).stringByResolvingSymlinksInPath;if(!$.NSFileManager.defaultManager.fileExistsAtPath(real))return "no settings file";var data=$.NSData.dataWithContentsOfFile(real);var err=Ref();var obj=$.NSJSONSerialization.JSONObjectWithDataOptionsError(data,0,err);if(!obj||!obj.isKindOfClass||!obj.isKindOfClass($.NSDictionary))throw "unreadable settings.json; left unchanged";var s=ObjC.deepUnwrap(obj);if(typeof s!=="object"||s===null||Array.isArray(s))throw "settings.json is not a JSON object; left unchanged";var env=s.env;if(!env||env.ANTHROPIC_BASE_URL!=="http://127.0.0.1:8788")return "ANTHROPIC_BASE_URL was not set to Overplus; left unchanged";delete env.ANTHROPIC_BASE_URL;if(Object.keys(env).length===0)delete s.env;else s.env=env;var out=$.NSString.alloc.initWithString(JSON.stringify(s,null,2)+"\n");return out.writeToFileAtomicallyEncodingError(real,true,$.NSUTF8StringEncoding,null)?"removed ANTHROPIC_BASE_URL":"write failed"}' "$HOME"

What it does, in order:

  1. launchctl bootout stops and unloads the launch agent. 2>/dev/null only hides “no such job” when the job is already gone. It does not hide a write failure.
  2. rm -f removes the launch agent's plist, so nothing starts it again.
  3. The osascript -l JavaScript part reads ~/.claude/settings.json. It resolves symlinks first.
    • If the file does not exist, it does nothing. There is nothing to undo.
    • If the file does not parse as a JSON object, it changes nothing and the command exits non-zero.
    • If env.ANTHROPIC_BASE_URL is not exactly http://127.0.0.1:8788 (Overplus's own proxy address), it leaves the file untouched. A gateway URL you set yourself is never touched.
    • Otherwise it removes only that one key and writes the file back atomically. This is the only setting it touches. A model value Overplus wrote (for example sonnet) is Overplus's own write, not your original choice. This one-liner does not restore it, because that needs the ledger, and only the app has it.

This does not remove ~/Library/Application Support/Overplus (Overplus's own logs and ledger). Keep it if you might reinstall Overplus later and want a full --uninstall to finish restoring your other settings. Delete it by hand only if you are sure you will not need it:

rm -rf ~/Library/Application\ Support/Overplus /Applications/Overplus.app