1. 为什么 OpenClaw 卸载不干净会拖慢你的开发环境OpenClaw 这类本地 Agent 工具在安装时会往系统里塞进不少东西后台服务、开机自启项、用户级配置目录、Docker 容器和卷还有写进 PATH 的可执行文件。很多人以为在控制面板点一下「卸载」就完事了结果过几天发现端口还被占着、clawctl命令还能跑、日志目录还在偷偷写文件。这就是典型的卸载残留。我见过最离谱的情况是一个朋友换了新项目想彻底清掉 OpenClaw 重新装结果旧的服务还在后台跑新装的版本读到了旧的配置文件行为诡异到怀疑人生。所以「一键卸载」的核心不是删得快而是删得全——服务、进程、目录、注册表、环境变量、容器、卷一个都不能漏。这篇文章面向三类人一是用 PowerShell 在 Windows 上装过 OpenClaw 的二是用 Docker 跑过 OpenClaw 容器的三是用 curl 脚本在 Linux 或 macOS 上装过的。不管你当初怎么装的下面都会给出对应的清理命令并且每一步都配了验证动作确保你删完之后能确认「真的干净了」。另外如果你在用 TaoToken 统一 Key 通道给 OpenClaw 提供模型能力卸载 OpenClaw 之后本地还会残留 TaoToken 相关的环境变量和配置文件。这部分我也会一并讲清楚怎么清理避免你的 Key 通道配置变成孤儿文件。先说清楚一个原则卸载前一定要备份你还需要的数据。OpenClaw 的配置目录里可能有你的任务定义、Agent 配置、日志。一键脚本删起来是不留情的rm -rf和Remove-Item -Recurse -Force执行完就找不回来了。所以动手之前先把~/.openclaw或者C:\ProgramData\OpenClaw里你还需要的东西复制出来。下面按安装方式分场景讲你可以直接跳到对应你情况的那一节。但建议至少把「验证」部分看完因为很多人删完不验证过段时间又出问题。2. TaoToken 环境同步清理卸载 OpenClaw 后别留下孤儿 Key 配置在讲具体卸载命令之前先处理 TaoToken 这一块因为很多人是在配置 OpenClaw 的过程中顺手把 TaoToken 的 Key 写进了环境变量或配置文件。OpenClaw 删了这些配置如果不清下次你排查环境问题时会被误导。TaoToken 的定位是统一 Key 通道让你用一个 Key 对接多种模型服务。官网在 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content API 入口是 https://taotoken.net/api 。如果你之前是通过环境变量方式给 OpenClaw 注入 Key 的常见的有这几个TAOTOKEN_API_KEYOPENAI_API_KEY有些教程会让你把 TaoToken 的 Key 写进这个变量ANTHROPIC_API_KEYTAOTOKEN_BASE_URL在 Windows 上这些变量可能写在用户级或系统级环境变量里。用 PowerShell 检查# 查看当前会话中的相关变量 Get-ChildItem Env: | Where-Object { $_.Name -match TAOTOKEN|OPENCLAW|CLAW|OPENAI|ANTHROPIC } # 查看用户级持久化变量 [Environment]::GetEnvironmentVariables(User).GetEnumerator() | Where-Object { $_.Key -match TAOTOKEN|OPENCLAW|CLAW|OPENAI|ANTHROPIC } # 查看系统级持久化变量需要管理员权限 [Environment]::GetEnvironmentVariables(Machine).GetEnumerator() | Where-Object { $_.Key -match TAOTOKEN|OPENCLAW|CLAW|OPENAI|ANTHROPIC }确认哪些是你不再需要的然后删除。注意如果你还有其他工具在用OPENAI_API_KEY不要无脑删先确认这个 Key 是不是只给 OpenClaw 用的。# 删除用户级变量示例按需替换变量名 [Environment]::SetEnvironmentVariable(TAOTOKEN_API_KEY, $null, User) [Environment]::SetEnvironmentVariable(TAOTOKEN_BASE_URL, $null, User) # 删除系统级变量需要管理员权限 [Environment]::SetEnvironmentVariable(TAOTOKEN_API_KEY, $null, Machine)在 Linux 或 macOS 上这些变量通常写在~/.bashrc、~/.zshrc、~/.profile或者~/.config/environment.d/下的文件里。用 grep 找出来grep -rn TAOTOKEN\|OPENCLAW\|CLAW ~/.bashrc ~/.zshrc ~/.profile ~/.config/environment.d/ 2/dev/null找到之后用编辑器删掉对应行或者用 sed 批量清理建议先备份# 备份 cp ~/.bashrc ~/.bashrc.bak # 删除包含 TAOTOKEN 的行 sed -i /TAOTOKEN/d ~/.bashrc sed -i /OPENCLAW/d ~/.bashrcTaoToken 的配置文件一般放在~/.taotoken/或~/.config/taotoken/。如果你确定不再需要可以一并删除rm -rf ~/.taotoken ~/.config/taotokenWindows 上对应的是%USERPROFILE%\.taotoken和%APPDATA%\TaoTokenRemove-Item $env:USERPROFILE\.taotoken -Recurse -Force -ErrorAction SilentlyContinue Remove-Item $env:APPDATA\TaoToken -Recurse -Force -ErrorAction SilentlyContinue这里要提醒一句如果你还在用 TaoToken 给其他工具比如 Cline、Codex、Claude Code提供 Key 通道那就不要删全局配置只删 OpenClaw 专属的那份。判断方法很简单——看配置文件里是不是只有 OpenClaw 相关的模型映射。如果你不确定先重命名而不是直接删观察几天没问题再彻底清掉。清理完 TaoToken 残留后可以顺手验证一下环境变量是否真的没了# Windows 验证 Get-ChildItem Env: | Where-Object { $_.Name -match TAOTOKEN }# Linux/macOS 验证 env | grep -i taotoken没有输出就说明当前会话干净了。持久化的变量需要新开一个终端才能确认。3. 可复制配置PowerShell、Docker、curl 三种安装方式的卸载清单这一节是核心操作区按你当初的安装方式对号入座。每条命令都可以直接复制但建议先读一遍注释再执行。3.1 Windows PowerShell 安装的完整卸载如果你当初是用irm https://uninstall.openclaw.dev/win | iex或者手动跑 PowerShell 脚本装的用下面这段。以管理员身份打开 PowerShell# 停止并删除 OpenClaw 相关服务 (OpenClaw,OpenClawAgent,ClawScheduler) | ForEach-Object { net stop $_ 2$null sc.exe delete $_ 2$null } # 结束所有含 claw 的进程 Get-Process | Where-Object { $_.Name -like *claw* } | Stop-Process -Force -ErrorAction SilentlyContinue # 删除安装目录和配置目录 ( C:\Program Files\OpenClaw, C:\ProgramData\OpenClaw, $env:USERPROFILE\.openclaw, $env:LOCALAPPDATA\OpenClaw, $env:APPDATA\OpenClaw ) | ForEach-Object { Remove-Item $_ -Recurse -Force -ErrorAction SilentlyContinue } # 清理注册表 ( HKLM:\SOFTWARE\OpenClaw, HKLM:\SOFTWARE\WOW6432Node\OpenClaw, HKCU:\SOFTWARE\OpenClaw ) | ForEach-Object { Remove-Item $_ -Recurse -Force -ErrorAction SilentlyContinue } # 从 PATH 中移除 OpenClaw 相关路径 $machinePath [Environment]::GetEnvironmentVariable(Path, Machine) $userPath [Environment]::GetEnvironmentVariable(Path, User) $newMachinePath ($machinePath -split ; | Where-Object { $_ -notlike *OpenClaw* -and $_ -notlike *claw* }) -join ; $newUserPath ($userPath -split ; | Where-Object { $_ -notlike *OpenClaw* -and $_ -notlike *claw* }) -join ; [Environment]::SetEnvironmentVariable(Path, $newMachinePath, Machine) [Environment]::SetEnvironmentVariable(Path, $newUserPath, User) Write-Host OpenClaw 已完全卸载 -ForegroundColor Green如果你想要一个更精简的单行版本可以用这个(OpenClaw,OpenClawAgent)|%{net stop $_ 2$null;sc.exe delete $_ 2$null};gps|?{$_.Name -like *claw*}|spps -Force;C:\Program Files\OpenClaw,C:\ProgramData\OpenClaw,$env:USERPROFILE\.openclaw|%{ri $_ -Recurse -Force -ea SilentlyContinue};Write-Host Done -ForegroundColor Green注意修改 PATH 后需要重启终端或者重新登录才能生效。如果你在删除 PATH 条目时手滑删错了可以用[Environment]::GetEnvironmentVariable(Path, Machine)先打印出来检查。3.2 Docker 安装的容器与卷清理Docker 方式相对干净但卷和网络容易漏。先列出所有相关资源# 查看容器 docker ps -a --filter nameopenclaw # 查看镜像 docker images | grep -i openclaw # 查看卷 docker volume ls | grep -i openclaw # 查看网络 docker network ls | grep -i openclaw确认后执行清理# 停止并删除容器 docker stop openclaw 2/dev/null docker rm openclaw 2/dev/null # 删除镜像 docker rmi openclaw/openclaw:latest 2/dev/null # 删除卷 docker volume rm openclaw_data 2/dev/null # 删除自定义网络如果有 docker network rm openclaw_net 2/dev/null echo OpenClaw Docker 资源已清理如果你用的是 docker-compose先进入 compose 文件所在目录docker compose down -v --rmi all-v会删除卷--rmi all会删除镜像。这两个参数要确认清楚再用因为卷里可能有你的数据。清理完验证一下docker ps -a | grep -i openclaw docker images | grep -i openclaw docker volume ls | grep -i openclaw三条命令都没有输出说明 Docker 层面干净了。3.3 Linux/macOS curl 脚本安装的卸载curl 方式安装的 OpenClaw 通常会把二进制放到/usr/local/bin配置放到/etc/openclaw或/opt/openclaw用户配置在~/.openclaw。用下面这段sudo bash -c # 停止 systemd 服务 systemctl stop openclaw* 2/dev/null systemctl disable openclaw* 2/dev/null # 结束进程 pkill -9 -f openclaw 2/dev/null # 删除系统目录 rm -rf /opt/openclaw rm -rf /etc/openclaw rm -rf /usr/share/openclaw rm -rf /var/log/openclaw rm -rf /var/lib/openclaw # 删除可执行文件 rm -f /usr/local/bin/openclaw rm -f /usr/local/bin/clawctl # 删除 systemd 单元文件 rm -f /etc/systemd/system/openclaw* # 删除所有用户的家目录配置 for h in /home/*; do rm -rf $h/.openclaw 2/dev/null rm -rf $h/.config/openclaw 2/dev/null rm -rf $h/.cache/openclaw 2/dev/null done # 重载 systemd systemctl daemon-reload 2/dev/null echo OpenClaw 已完全卸载 macOS 上略有不同launchd 的 plist 文件要单独处理sudo bash -c pkill -9 -f openclaw 2/dev/null launchctl unload /Library/LaunchDaemons/com.openclaw.* 2/dev/null launchctl unload /Library/LaunchAgents/com.openclaw.* 2/dev/null rm -rf /Applications/OpenClaw.app rm -rf /opt/openclaw /etc/openclaw rm -f /usr/local/bin/openclaw /usr/local/bin/clawctl rm -f /Library/LaunchDaemons/com.openclaw.* rm -f /Library/LaunchAgents/com.openclaw.* for d in /Users/*; do rm -rf $d/.openclaw 2/dev/null rm -rf $d/Library/Application Support/OpenClaw 2/dev/null rm -rf $d/Library/Caches/com.openclaw 2/dev/null rm -f $d/Library/Preferences/com.openclaw.plist 2/dev/null done echo OpenClaw 已完全卸载 如果你当初是用包管理器装的apt、yum、dnf、pacman先走包管理器卸载再补上面的目录清理# Debian/Ubuntu sudo apt-get remove --purge -y openclaw 2/dev/null sudo apt-get autoremove -y # RHEL/CentOS/Fedora sudo yum remove -y openclaw 2/dev/null || sudo dnf remove -y openclaw 2/dev/null # Arch sudo pacman -Rns --noconfirm openclaw 2/dev/null包管理器卸载后/etc/openclaw和~/.openclaw往往还会残留所以上面的rm -rf不能省。4. 验证请求与成功结果确认服务、进程、目录、端口全部清空删完不验证等于没删。这一节给你一套逐项检查的方法覆盖服务、进程、目录、端口、环境变量五个维度。4.1 Windows 验证# 检查服务 $svc Get-Service | Where-Object { $_.Name -like *claw* } if ($svc) { Write-Host 残留服务: $($svc.Name) -ForegroundColor Red } else { Write-Host 服务: 干净 -ForegroundColor Green } # 检查进程 $proc Get-Process | Where-Object { $_.Name -like *claw* } if ($proc) { Write-Host 残留进程: $($proc.Name) -ForegroundColor Red } else { Write-Host 进程: 干净 -ForegroundColor Green } # 检查目录 (C:\Program Files\OpenClaw,C:\ProgramData\OpenClaw,$env:USERPROFILE\.openclaw) | ForEach-Object { if (Test-Path $_) { Write-Host 残留目录: $_ -ForegroundColor Red } else { Write-Host 目录 $_: 干净 -ForegroundColor Green } } # 检查端口OpenClaw 默认常用 8080、3000按你实际配置改 Get-NetTCPConnection -LocalPort 8080,3000 -ErrorAction SilentlyContinue | ForEach-Object { Write-Host 端口 $($_.LocalPort) 仍被 PID $($_.OwningProcess) 占用 -ForegroundColor Red } # 检查 PATH $env:Path -split ; | Where-Object { $_ -like *claw* }4.2 Linux/macOS 验证# 检查进程 if pgrep -f openclaw /dev/null; then echo 残留进程: pgrep -af openclaw else echo 进程: 干净 fi # 检查 systemd 服务 systemctl list-units --all 2/dev/null | grep -i openclaw # 检查目录 for d in /opt/openclaw /etc/openclaw /usr/local/bin/openclaw ~/.openclaw; do if [ -e $d ]; then echo 残留: $d else echo 干净: $d fi done # 检查端口 ss -tlnp 2/dev/null | grep -E 8080|3000 || echo 端口: 干净 # 检查环境变量 env | grep -i openclaw\|taotoken || echo 环境变量: 干净4.3 Docker 验证docker ps -a --filter nameopenclaw --format {{.Names}} | grep -q . echo 残留容器 || echo 容器: 干净 docker images --format {{.Repository}} | grep -i openclaw echo 残留镜像 || echo 镜像: 干净 docker volume ls --format {{.Name}} | grep -i openclaw echo 残留卷 || echo 卷: 干净全部输出「干净」之后建议重启一次系统。因为有些服务是开机自启的重启后如果没再冒出来才算真正清干净。重启后再跑一遍上面的验证命令确认没有死灰复燃。如果你在验证时发现端口还被占用但进程列表里找不到 claw 相关的名字可以用 PID 反查# Windows Get-Process -Id (Get-NetTCPConnection -LocalPort 8080).OwningProcess# Linux lsof -i :8080有时候是子进程或者被其他服务拉起来的顺着 PID 查下去就能找到根源。5. 本篇常见错排查401、local proxy failed、CC Switch、Cline MCP、Codex auth.json卸载过程中或者卸载后重新配置时容易碰到几类报错。这里逐个说清楚原因和修法。5.1 401 Unauthorized这个报错通常出现在你卸载 OpenClaw 后其他工具还在用旧的 Key 配置去请求。比如你之前把 TaoToken 的 Key 写进了OPENAI_API_KEY卸载时只删了 OpenClaw 的配置没清环境变量结果 Cline 或 Codex 读到了这个变量但 Key 已经失效或者被你在 TaoToken 后台轮换了于是 401。修法是三件套对齐Base URL、Key、Model ID 必须来自同一个通道。如果你用 TaoToken 统一 Key 通道配置应该是{ base_url: https://taotoken.net/api, api_key: 你的 TaoToken Key, model: 你实际要用的模型 ID }检查你本地所有可能存 Key 的地方# Linux/macOS grep -rn api_key\|API_KEY ~/.config ~/.codex ~/.cline 2/dev/null | grep -v Binary# Windows Get-ChildItem $env:USERPROFILE\.codex,$env:USERPROFILE\.cline -Recurse -ErrorAction SilentlyContinue | Select-String -Pattern api_key发现旧 Key 就替换或删除。如果你不确定当前 Key 是否有效可以去 TaoToken 的模型对话页面发一条测试消息验证https://taotoken.net/models?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 。能正常返回就说明 Key 没问题问题出在本地配置。5.2 local proxy failed这个报错一般出现在你用了本地代理转发工具的场景。OpenClaw 卸载后代理配置还指向一个已经不存在的本地端口于是连接失败。排查步骤# 检查本地监听端口 ss -tlnp | grep -E 8080|3000|1080|7890# Windows netstat -ano | findstr LISTENING | findstr 8080 3000 1080 7890如果代理配置指向的端口没有进程监听说明代理服务没起来或者已经被卸载。去你的代理工具配置里把指向 OpenClaw 的规则删掉或者把 Base URL 直接改成 TaoToken 的 API 地址绕过本地代理。5.3 CC Switch 配置残留CC Switch 是用来切换不同模型通道的工具。如果你之前在里面配过 OpenClaw 专用的通道卸载 OpenClaw 后这个通道配置就成了死配置切换过去就会报错。打开 CC Switch 的配置文件通常在~/.cc-switch/或%APPDATA%\cc-switch\找到 OpenClaw 相关的条目删掉。配置格式一般是 JSON{ providers: [ { name: openclaw-local, base_url: http://localhost:8080/v1, api_key: sk-xxx } ] }把openclaw-local这个对象整个删掉保存后重启 CC Switch。5.4 Cline MCP 配置残留Cline 的 MCP 配置里如果引用了 OpenClaw 提供的 MCP 服务卸载后会连接失败。打开 Cline 的 MCP 配置文件通常在 VS Code 的 settings.json 或者~/.cline/mcp.json找到类似这样的条目{ mcpServers: { openclaw: { command: clawctl, args: [mcp, serve] } } }clawctl已经被删了这个配置留着只会报错。把openclaw这个键删掉保存后重载 VS Code。5.5 Codex auth.json 残留Codex 的认证信息存在~/.codex/auth.json。如果你之前把 TaoToken 的 Key 写进了这个文件卸载 OpenClaw 后如果 Key 还有效Codex 还能用但如果 Key 失效了就会报认证错误。检查文件内容cat ~/.codex/auth.json如果里面的 Key 是你不再使用的替换成新的或者直接删除这个文件让 Codex 重新走认证流程。注意删除 auth.json 后你需要重新登录或重新配置 Key。rm ~/.codex/auth.json然后重新配置 Codex 使用 TaoToken 通道Base URL 填https://taotoken.net/apiKey 填你当前的 TaoToken KeyModel ID 填你要用的模型。配置文档可以参考https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 。6. 语义一致卸载后重新接入 TaoToken 的配置对齐卸载 OpenClaw 之后如果你还要继续用其他编码工具Cline、Codex、Claude Code 等需要确保它们接入 TaoToken 的配置是语义一致的——也就是说Base URL、Key、Model ID 三者必须匹配不能混用不同通道的配置。TaoToken 的 API 入口统一是https://taotoken.net/api。如果你用的是 Claude Code 这类工具需要走 Anthropic 兼容格式配置方式略有不同。Claude Code 的接入文档在这里https://taotoken.net/claude-code-anthropic?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 。一个常见的坑是你在 TaoToken 后台创建了多个 Key分别给不同工具用但配置时把 A 工具的 Key 填到了 B 工具的配置里。这样虽然 Base URL 对但 Key 和通道不匹配请求会被拒绝。解决办法是给每个 Key 起一个明确的名字比如cline-key、codex-key配置时对号入座。如果你需要长期跑编码任务或者 Agent 工作流可以考虑用 Coding Plan 来管理额度https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 。这样比按量计费更可控也方便你追踪每个工具的消耗。配置完成后用一条简单的请求验证通道是否打通。以 curl 为例curl -X POST https://taotoken.net/api/v1/chat/completions \ -H Authorization: Bearer 你的Key \ -H Content-Type: application/json \ -d { model: 你的模型ID, messages: [{role: user, content: ping}] }如果返回正常的 JSON 响应说明 Base URL、Key、Model ID 三件套对齐了。如果返回 401检查 Key如果返回 404检查 Base URL 和 Model ID如果返回 403检查你的账号额度或权限。最后提醒一点卸载 OpenClaw 时清理的 TaoToken 配置和你重新接入其他工具时的配置是两回事。前者是清理孤儿文件后者是建立新的有效连接。不要因为卸载时删了配置就以为 TaoToken 本身不能用了。TaoToken 作为统一 Key 通道本身是独立于 OpenClaw 存在的你随时可以在控制台重新生成 Key 并配置到新工具里。控制台入口https://taotoken.net/console?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 。整个卸载流程走完你的系统应该是干净的没有 OpenClaw 的服务和进程没有残留目录没有占用端口没有孤儿环境变量。如果之后还要用类似的 Agent 工具建议装之前先规划好目录和 Key 的命名卸载时就能按图索骥不用满系统翻找。