1. 为什么 OpenClaw 卸载后还会“阴魂不散”
很多人以为把 OpenClaw 的目录一删、进程一杀就算完事了,结果过几天发现端口还被占着、终端启动时莫名报错、甚至旧 Key 还在某个配置文件里躺着。我试过在一台开发机上反复装删 OpenClaw,最后用find全盘扫了一遍,才发现残留远比想象中多。
OpenClaw 这类本地 AI 编排工具,本质上是一个“网关 + 插件 + 配置”的组合体。它为了让你少填几次参数,会把 API Key、模型地址、代理端口、日志路径分散写在好几个地方:用户主目录下的隐藏文件夹、系统级的 AppData、npm 全局目录、VS Code 扩展目录,甚至环境变量里。你只删主程序,等于只拆了门面,地基还在。
这篇指南面向的是曾经用 OpenClaw 做本地 AI 编排、现在想彻底清干净的开发者。核心目标有三个:第一,用可复制的命令把残留配置、缓存、鉴权文件全部找出来删掉;第二,逐项验证确认没有残留进程和端口占用;第三,把清理后仍然需要的模型调用能力,统一收口到 TaoToken 的一套 Key 配置上,避免以后再被某个工具的私有配置绑死。
先说清楚“彻底清除”的判断标准,不然你删到一半会心虚。判断标准是:全盘搜索不到 openclaw 相关文件、没有相关进程在跑、默认端口 18789 没有被监听、环境变量里没有它的路径、IDE 扩展列表里没有它。这五条全过,才算收尾完成。下面按顺序来,每一步都给命令和预期结果。
需要提醒的是,清理前先确认你不再需要 OpenClaw 里的任何本地数据。配置文件里可能存着历史对话、自定义工作流、以及明文 API Key。如果你还想保留某些编排逻辑,先把关键配置复制出来再删,否则删完就找不回来了。这一步没有后悔药。
2. 清理前的准备:停进程、备份、确认部署方式
动手删文件之前,必须先停掉所有相关进程。文件被占用时删除会失败,或者删了目录但进程还在内存里跑,端口照样占着。这是整个流程里最容易翻车的一步。
Windows 下先看进程再杀,别上来就taskkill /f /im node.exe,那会把你其他 Node 项目一起干掉。正确做法是先定位:
# Windows PowerShell:查找 OpenClaw 相关进程 Get-Process | Where-Object { $_.ProcessName -match "node|python" } | Select-Object Id, ProcessName, Path # 找到对应 PID 后精准终止 taskkill /f /pid <PID>Linux / macOS 下用模式匹配更安全:
# 查找并终止 OpenClaw 相关进程 pkill -f openclaw pkill -f "openclaw-gateway" # 确认是否还有残留 ps aux | grep -i openclaw | grep -v grep如果输出为空,说明进程清干净了。如果还有,记下 PID 用kill -9 <PID>补刀。
接下来确认你的部署方式,因为不同方式的清除路径完全不同。用下面这张表对照:
| 部署方式 | 主程序位置 | 卸载命令 |
|---|---|---|
| npm 全局安装 | 全局 node_modules | npm uninstall -g openclaw |
| Git 源码克隆 | 克隆的仓库目录 | 直接删仓库目录 |
| Docker 容器 | 容器 + 镜像 | docker rm -f+docker rmi |
| VS Code 扩展 | 扩展目录 | code --uninstall-extension |
确认完部署方式,再花两分钟做备份。把~/.openclaw(Linux/macOS)或%USERPROFILE%\.openclaw(Windows)整个目录复制到别处。里面通常有config.json、credentials.json、logs/这几样。备份完再删,心里踏实。
注意:备份文件里如果含明文 API Key,别随手丢在桌面或同步盘里。要么加密压缩,要么确认不再需要后连同备份一起删掉。
准备工作做完,下面进入正式清理。顺序是:先删主程序,再删配置和数据,最后清环境变量和扩展。这个顺序能避免“程序还在但配置没了”导致的报错干扰判断。
3. 可复制的残留清理清单:目录、配置、环境变量
这一节是全文的核心操作区,命令都可以直接复制。我按“主程序 → 配置数据 → 环境变量 → 扩展 → 端口”的顺序排,你照着走一遍基本能清干净。
3.1 删除主程序
# npm 全局安装的情况 npm uninstall -g openclaw # 确认全局目录里没有残留 npm ls -g --depth=0 | grep -i openclaw # Git 源码部署:删掉克隆目录 rm -rf ~/openclaw rm -rf /path/to/your/openclaw-repo # Docker 部署:容器和镜像都要删 docker stop openclaw-container docker rm openclaw-container docker rmi openclaw-image docker images | grep -i openclaw最后一条docker images如果没输出,说明镜像也清掉了。
3.2 删除配置和数据目录
这是残留最多的地方,Windows 和 Linux/macOS 路径不同,分开列:
# Linux / macOS rm -rf ~/.openclaw rm -rf ~/.config/OpenClaw rm -rf ~/.cache/openclaw rm -rf /tmp/openclaw-* # Windows(PowerShell) Remove-Item -Recurse -Force "$env:USERPROFILE\.openclaw" Remove-Item -Recurse -Force "$env:APPDATA\OpenClaw" Remove-Item -Recurse -Force "$env:LOCALAPPDATA\OpenClaw"删完做一次全盘搜索,确认没有漏网:
# Linux / macOS 全盘搜索 find / -iname "*openclaw*" 2>/dev/null find / -iname "*claw*" -type d 2>/dev/null # Windows PowerShell 搜索用户目录 Get-ChildItem -Path $env:USERPROFILE -Recurse -Filter "*openclaw*" -ErrorAction SilentlyContinue搜索时注意排除你备份的目录,否则会误报。如果搜出来的都是备份文件,说明系统里已经干净了。
3.3 清理环境变量
OpenClaw 可能往 PATH 或自定义变量里写过东西。检查一下:
# Linux / macOS echo $PATH | tr ':' '\n' | grep -i openclaw grep -i openclaw ~/.bashrc ~/.zshrc ~/.profile 2>/dev/null # Windows PowerShell $env:Path -split ';' | Select-String -Pattern "openclaw" [Environment]::GetEnvironmentVariable("OPENCLAW_HOME", "User")如果grep或Select-String有输出,手动编辑对应文件把那行删掉。Windows 用户变量在“系统属性 → 环境变量”里改,改完重启终端生效。
3.4 清理 IDE 扩展
# VS Code 卸载扩展 code --uninstall-extension openclaw.vscode-openclaw # 手动清理扩展残留目录 rm -rf ~/.vscode/extensions/openclaw* rm -rf ~/.vscode/extensions/*.openclaw-*卸载完在 VS Code 里按Ctrl+Shift+X打开扩展面板,搜 openclaw,确认列表为空。
3.5 释放端口占用
OpenClaw 默认用 18789 端口,检查是否还被占:
# Windows netstat -ano | findstr :18789 # Linux / macOS lsof -i :18789如果有输出,记下 PID 回到 3.1 的进程终止步骤处理。端口释放后,防火墙规则也顺手清一下:
# Windows 删除防火墙规则 netsh advfirewall firewall delete rule name="OpenClaw" # Linux sudo ufw delete deny 18789到这里,文件系统和系统配置层面的清理就完成了。下一节做逐项验证,确认真的没有残留。
4. 逐项验证:确认无残留、无报错
清理完不验证,等于没清。这一节给一套可复制的验证脚本,跑完看到全绿才算收工。
4.1 文件残留验证
#!/bin/bash echo "=== 检查主程序 ===" ls -la ~/.openclaw 2>/dev/null && echo "残留:配置目录还在" || echo "OK:配置目录已删除" echo "=== 检查全局 npm 包 ===" npm ls -g --depth=0 2>/dev/null | grep -i openclaw && echo "残留:npm 包还在" || echo "OK:npm 包已删除" echo "=== 全盘搜索 ===" find ~ -iname "*openclaw*" 2>/dev/null | grep -v backup && echo "残留:发现文件" || echo "OK:无残留文件"Windows 用户把对应命令换成 PowerShell 版本即可,逻辑一样。
4.2 进程和端口验证
echo "=== 检查进程 ===" ps aux | grep -i openclaw | grep -v grep && echo "残留:进程还在" || echo "OK:无相关进程" echo "=== 检查端口 ===" lsof -i :18789 2>/dev/null && echo "残留:端口被占" || echo "OK:端口已释放"4.3 环境变量验证
echo "=== 检查环境变量 ===" env | grep -i openclaw && echo "残留:环境变量还在" || echo "OK:无相关环境变量"4.4 验证结果对照表
| 检查项 | 通过标准 | 不通过怎么办 |
|---|---|---|
| 配置目录 | 不存在 | 回到 3.2 重删 |
| npm 全局包 | 列表无 openclaw | 重新npm uninstall -g |
| 进程 | ps无输出 | 回到 3.1 杀进程 |
| 端口 18789 | 无监听 | 查 PID 后终止 |
| 环境变量 | env无匹配 | 编辑 shell 配置文件 |
全部通过后,重启一次终端,再跑一遍ps aux | grep -i openclaw,确认重启后也没有自启进程。有些工具会写 systemd 服务或 launchd plist,顺手检查一下:
# Linux systemctl list-units | grep -i openclaw # macOS launchctl list | grep -i openclaw有输出就systemctl disable或launchctl unload掉。
5. 常见报错排查:401、local proxy failed、OAuth 残留
清理过程中或清理后,你可能会撞上几个典型报错。这一节按真实报错逐个拆。
5.1 401 Unauthorized
这个报错通常出现在你清理完 OpenClaw、但某个残留客户端还在用旧 Key 发请求时。旧 Key 可能已经被你在服务端吊销,或者配置文件删了但进程缓存还在。
排查步骤:先确认请求是从哪个进程发出的,用lsof -i看连接;再检查是否还有残留的credentials.json或环境变量里的OPENCLAW_API_KEY。删掉后重启终端。
如果你打算把模型调用统一收口到 TaoToken,401 的根治办法是换一套干净的 Key。到 TaoToken 控制台重新生成一个,别复用旧的。
5.2 local proxy failed
这个报错说明有客户端还在尝试连本地代理端口(通常是 18789 或类似),但 OpenClaw 已经被你删了,代理自然起不来。
解决办法是找到那个还在配本地代理的客户端,把它的 Base URL 改成直连。比如你之前配的是http://127.0.0.1:18789/v1,现在要改成 TaoToken 的 API 地址https://taotoken.net/api。改完重启客户端。
5.3 OAuth 相关报错
OpenClaw 如果接过 OAuth 登录,会在本地留 token 缓存。删了主程序但缓存还在,客户端启动时会尝试刷新 token 然后失败。
清理 OAuth 缓存的位置:
# 常见 OAuth token 缓存位置 rm -rf ~/.openclaw/oauth* rm -rf ~/.config/openclaw/tokens* rm -rf ~/.cache/openclaw/auth*清完在客户端里重新走一次授权,或者直接改用 API Key 方式,省掉 OAuth 这一层。
5.4 报错对照速查
| 报错 | 根因 | 处理 |
|---|---|---|
| 401 Unauthorized | 旧 Key 残留 | 删配置 + 换新 Key |
| local proxy failed | 本地代理已删但客户端还配着 | 改 Base URL 为直连 |
| OAuth token invalid | token 缓存残留 | 清 oauth 缓存目录 |
| port already in use | 进程没杀干净 | 查 PID 后终止 |
排查时记住一个原则:报错信息里的路径和端口,就是你下一步要检查的地方。别急着搜通用答案,先看它指向哪个文件。
6. 收口到 TaoToken:一套 Key 管住所有模型调用
清理完 OpenClaw,你手里可能还有好几个客户端要调模型:VS Code 里的编码插件、命令行工具、自己写的小脚本。与其每个都配一遍 Key,不如统一收口到 TaoToken 的一套配置。
6.1 获取 Key 和 Base URL
先到 TaoToken 控制台生成 API Key。地址是https://taotoken.net/console,登录后在 API Keys 页面创建。生成后复制保存,页面关了就看不到了。
Base URL 统一用https://taotoken.net/api,注意不要加 UTM 参数,那是给官网链接用的,API 地址保持干净。
6.2 统一配置示例
不同客户端的配置格式不一样,但核心三件套是一样的:Base URL、API Key、Model ID。下面给几个常见格式。
通用 JSON 配置(很多工具都吃这套):
{ "base_url": "https://taotoken.net/api", "api_key": "sk-你的TaoToken密钥", "model": "claude-sonnet-4-5", "timeout": 60 }如果你用 Claude Code 这类工具,配置写在 settings 里:
{ "env": { "ANTHROPIC_BASE_URL": "https://taotoken.net/api", "ANTHROPIC_API_KEY": "sk-你的TaoToken密钥", "ANTHROPIC_MODEL": "claude-sonnet-4-5" } }Codex 的auth.json格式:
{ "base_url": "https://taotoken.net/api", "api_key": "sk-你的TaoToken密钥", "model": "gpt-5" }Cline / MCP 类工具在设置里填三项:API Provider 选 OpenAI Compatible,Base URL 填https://taotoken.net/api,API Key 填你的 Key,Model ID 填具体模型名。
6.3 验证配置是否生效
配完别急着用,先发一个最小请求验证:
curl https://taotoken.net/api/v1/chat/completions \ -H "Authorization: Bearer sk-你的TaoToken密钥" \ -H "Content-Type: application/json" \ -d '{ "model": "claude-sonnet-4-5", "messages": [{"role": "user", "content": "回复 OK 两个字母"}] }'返回里能看到choices字段和内容,说明 Key 和 Base URL 都对。如果返回 401,检查 Key 有没有复制全;如果返回 model not found,检查 Model ID 拼写。
6.4 为什么建议收口
收口到一套 Key 的好处很直接:以后换工具不用重新配,删工具也不用担心 Key 散落各处。OpenClaw 这次清理之所以麻烦,就是因为它的配置分散在五六个位置。统一用 TaoToken 之后,你只需要管一个 Key、一个 Base URL,清理时也只需要删一处。
如果你长期做编码或 Agent 类任务,可以考虑 TaoToken 的 Coding Plan,额度更划算。只是偶尔验证模型效果,用模型对话页面就够了。接入文档在https://taotoken.net/doc,里面有各客户端的详细配置步骤。
6.5 收尾检查
最后确认三件事:第一,OpenClaw 的残留已经按第 4 节验证全过;第二,新配的 TaoToken Key 能正常发请求;第三,旧 Key 如果还在任何地方,去服务端吊销掉。这三件做完,这次清理才算真正收尾。
以后再装任何本地 AI 工具,建议一开始就把模型调用指向统一的 Base URL,别让每个工具自己存一份 Key。这样下次卸载时,你只需要删工具本身,不用再满盘找配置。