Uninstall contract
Uninstall contract
Section titled “Uninstall contract”Worthless asks you to read its installer before you run it. The uninstaller earns the same trust: everything Worthless puts on your machine is listed here, with exactly how worthless uninstall removes or restores it. Hand this page to your AI alongside the source and ask it to confirm the two match.
The ordering guarantee
Section titled “The ordering guarantee”Uninstall always runs in this order:
- Restore all — reconstruct the real key for every locked
.envand write it back. - Verify — confirm every recoverable key was actually restored.
- Wipe all — only now delete the local state and keychain entry.
If step 2 finds a recoverable key that didn’t restore, uninstall stops before any deletion (override with --force, which accepts the loss). A wipe can never run ahead of a successful restore, so uninstall cannot shred a key it was able to recover.
What gets installed, and how it’s removed
Section titled “What gets installed, and how it’s removed”| Artifact | Created by | Removed / restored by uninstall |
|---|---|---|
Real API key in your project .env | worthless lock replaces it with shard A (which looks like a real key) | Restored — the real key is written back and the .env is returned to its pre-lock state (the proxy BASE_URL line is removed) |
| Shard B + enrollment rows + spend log | worthless lock, stored in ~/.worthless/worthless.db | Deleted — the entire ~/.worthless/ directory is removed |
| Encryption (Fernet) key in your OS keychain | First worthless lock | Deleted — removed from the keychain |
~/.worthless/fernet.key (legacy file, pre-keyring installs only) | Older installs | Deleted — removed with ~/.worthless/ |
~/.worthless/.bootstrapped marker | First run | Deleted — removed with ~/.worthless/ |
OpenClaw provider entries in openclaw.json | worthless lock rewrites them to route through the proxy | Restored — put back to point at the real provider with the real key |
Running proxy daemon (default port 8787) | worthless up / worthless wrap | Stopped before the wipe |
| launchd / systemd service unit (auto-start on boot/login) | worthless service install | Removed (best-effort, before the wipe) so it can’t relaunch the proxy and recreate ~/.worthless |
What uninstall does NOT do
Section titled “What uninstall does NOT do”Honesty matters as much as the removal itself:
- It does not back up your
.env. Restore happens during uninstall, but Worthless keeps no separate copy. If your.envwas already corrupted or deleted, see Recovery. - It cannot recover keys from a broken install. If the encryption key or database is already gone, the keys are unreconstructable.
--forcewipes the remains so the machine is clean, but those keys are lost — rotate them at the provider. - It does not touch anything it didn’t install. Providers you manage yourself, unrelated files, and other tools’ config are left untouched. Uninstall only reverses what
worthless lockdid. - It does not remove the
worthlessprogram itself.worthless uninstallclears Worthless’s state; the installed binary stays so you can reinstall or re-lock without re-downloading. Remove it separately withuv tool uninstall worthless(orpipx uninstall worthless). Thecurl worthless.sh/uninstall | shone-liner does both — state and binary — in one shot, since a website-channel user shouldn’t need to know about uv. - It does not remove the Worthless MCP server from your editor. The
worthlessentry in your editor’s MCP config is yours to remove — uninstall never edits editor configs, since they hold your other MCP servers. It does name the file when it finds one: it scans your Claude Code (.mcp.json,~/.claude.json) and Cursor (~/.cursor/mcp.json) configs — parsing only theirmcpServersblocks, so nothing else in those files is read. (Windsurf and other editors aren’t auto-scanned — check those yourself.) Running the server vianpx worthless-mcpalso leaves auv-cached Python env;uvis a shared tool, so uninstall doesn’t touch it — reclaim the space withuv cache cleanif you want it back.
Exit codes
Section titled “Exit codes”| Code | Meaning |
|---|---|
0 | Uninstall completed. |
1 | Refused — confirmation declined, a non-interactive shell without --yes, or a broken install without --force. |
73 | Uninstall completed, but reverting the OpenClaw config partially failed — check openclaw.json. |
Verify it yourself
Section titled “Verify it yourself”worthless uninstall --helpThe command is implemented in src/worthless/cli/commands/uninstall.py — read it against this table.