拿到“OpenClaw 彻底卸载指南”这个标题,我第一反应是:这题我熟。OpenClaw 这类 AI Agent 框架,装起来的时候一条命令、一个 Docker 脚本,看着干干净净,但真正想从机器上把它请走,你会发现它像一张蜘蛛网——服务注册、配置目录、skill 扩展、连接器缓存、定时任务、环境变量,到处都牵着一根线。只删主目录再跑个 uninstall 脚本,往往重装时会遇到各种怪问题,端口被占、配置残留、旧 skill 干扰新会话,全来了。
所以这篇我不打算只给你“敲三行命令就完事”的速通教程,而是站在架构治理的角度,把 OpenClaw 在系统里的存在方式拆开看:它有哪些层面、每层分别留在哪里、用什么顺序清理才不出事。适合自己折腾过 OpenClaw、如今想彻底移除重装,或者被“卸载不干净”折磨过的人。我尽量写得像面对面聊,步骤给全,坑也一并交代。
1. 卸载前必须搞懂的 OpenClaw 架构层次
1.1 服务面:常驻进程与系统服务
OpenClaw 不是你跑一下就退出的命令行工具,安装后它会拉起一整套运行时。我这边以常见的 0.8.x 版本为例,安装完你至少会看到这么几类东西:
- 一个 CLI 主程序,通常叫
openclaw或者openclawctl,负责接收你输入的指令。 - 一个后台 API 服务,负责处理 agent 的调度和连接器请求,默认会监听本地端口,比如 8080 或 3456 这类常见端口。
- Linux 上可能注册了 systemd 服务,macOS 上可能是 launchd 或 brew services,Windows 上则是后台任务计划或 Companion 小部件。
只删掉主程序文件,这个服务还在后台跑着,端口还占着,下次重装它会直接告诉你“端口已被占用”或者“服务已在运行”。这是卸载不干净的第一层原因。
1.2 数据面:配置、状态与日志的分布
第二层是数据面。OpenClaw 会把配置文件、运行状态和日志散落在用户目录下,常见布局大概是这种:
~/.openclaw/:主配置目录,存放config.toml或openclaw.json,里面有模型 API 配置、连接器设置、agent 角色设定。~/.claw/或~/.openclaw/state/:状态目录,存会话历史、任务队列、会话 ID 之类的运行时数据。~/.local/share/openclaw/logs/或/tmp/openclaw/:日志目录。~/.cache/openclaw/:缓存文件,有时为了加速模型响应,会缓存一部分中间结果。
这些目录才是“残留”的大头。你重装之后如果发现对话历史还在、配置还能加载出旧的 API key、甚至 agent 的说话风格都还是老一套,多半就是这些数据目录没清干净。
1.3 扩展面:skill 与 connector 的隐藏残留
第三层最容易被忽略:扩展面。OpenClaw 的 skill 和 connector 机制,让它可以外接各种工具和 API。卸载时,自定义的 skill 脚本会留在~/.openclaw/skills/,连接器的认证 token 可能缓存在~/.openclaw/connectors/或系统的钥匙串里。
这些扩展残留不会直接报错,但会在你重装后产生隐性干扰:旧 skill 调用时指向已不存在的脚本路径,连接器 token 失效导致 API 认证一直失败。我见过最典型的例子是——用户反馈“重装后 Facebook 连接器连不上”,结果查了半天发现是旧的连接器缓存里还藏着过期 token,新旧版本读取逻辑还不一样,整个行为就变得很迷。所以彻底的卸载,必须把扩展层一并处理掉。
2. 卸载前的状态评估与安全备份
2.1 先摸清家里藏了哪些 OpenClaw 组件
动手之前,我建议你先做一次“资产盘点”。别上来就 rm,先把你机器上到底有哪些 OpenClaw 相关的东西搞清楚。我自己的习惯是记录下三个信息:
先看主版本和安装方式:
openclaw --version openclaw --help如果你是用 Docker 装的,还会有容器和镜像:
docker ps -a | grep -i claw docker images | grep -i claw如果是手动编译或通过包管理器装的,查看二进制路径:
which openclaw拿到这些信息,你才能判断卸载的深度:只删二进制,还是连容器、镜像、数据卷一起删。很多人卸载不干净,就是因为根本不知道自己当初装了多少层。
2.2 数据备份:要删的东西,先留个后路
“彻底卸载”不代表“无备份卸载”。你在卸载前应该把配置和数据目录打包带走,原因很简单:万一你只是想换个版本重装,这些配置还能继续用;万一卸载中途出了岔子,也能回滚。
我一般会这么备份:
mkdir -p ~/openclaw-backup cd ~ cp -r .openclaw ~/openclaw-backup/config cp -r .claw ~/openclaw-backup/state cp -r .local/share/openclaw/logs ~/openclaw-backup/logs注意把~/.openclaw里可能包含的 API key、token 也一起备份了——这些东西删了可就找不回来了。如果你确定自己不再需要任何配置,备份这一步可以跳过;但凡有一丁点“可能以后还用得上”的想法,就老老实实备份。
2.3 确认依赖关系与端口占用
OpenClaw 往往还依赖 Python 环境、Node.js 运行时,或者 Docker。卸载前先确认一下,这台机器上有没有其他项目也在用这些依赖。比如你同时跑着其他基于 Python 的工具,那卸载 OpenClaw 时就不能顺手把 Python 包环境给清了,否则会误伤。
端口也是同理。先看一眼端口占用情况:
lsof -i :8080 lsof -i :3456如果发现端口还被某个openclaw-server或clawd进程占着,说明服务还没停,后面要先处理这一层。
3. 服务治理:停止进程、移除开机自启与系统服务
3.1 停掉运行中的服务进程
卸载的第一步永远是停服务,不是删目录。顺序反了,你会遇到“文件被占用,删不掉”的报错,或者服务会在你删除的过程中不断重新拉起文件句柄。
先看当前有哪些 OpenClaw 相关进程在跑:
ps aux | grep -i openclaw ps aux | grep -i clawd然后优雅地停掉主服务。如果你装的是带 service 子命令的版本,可以直接:
openclaw service stop openclaw stop如果你是自己手动起进程的,那就直接 kill 对应 PID。注意优先用SIGTERM,让它自己清理临时文件,实在不行再用SIGKILL:
kill <PID> # 如果它不听话 kill -9 <PID>3.2 清理 systemd 服务与开机自启
服务停掉只是第一步,关键是“开机自启”还在。Linux 上如果你之前通过 systemd 把它注册成了服务,那卸载时必须把这层关系切断,不然每次开机系统都会尝试拉起一个已经不存在的 OpenClaw,轻则多一条报错日志,重则系统服务管理器进入 degraded 状态。
检查并清理 systemd 用户服务和系统服务:
systemctl --user list-unit-files | grep -i claw systemctl list-unit-files | grep -i claw sudo systemctl disable --now openclaw.service systemctl --user disable --now openclaw.service重点是把服务单元文件也删掉,而不只是 disable:
sudo rm /etc/systemd/system/openclaw.service rm ~/.config/systemd/user/openclaw.service rm ~/.config/systemd/user/openclaw-session.service做完这个操作后,执行一遍systemctl daemon-reload和systemctl --user daemon-reload,让服务管理器刷新状态。macOS 上面的逻辑类似,如果你用 brew services 装的,就:
brew services stop openclaw brew services cleanup openclaw launchctl unload ~/Library/LaunchAgents/com.openclaw.plist3.3 Windows 端:Companion 与任务计划程序
如果你在 Windows 上用过 OpenClaw 的 Companion 组件,那卸载的姿势又不一样。这个 Companion 通常会把自己注册成开机启动项或者计划任务。光卸载主程序没用,Windows 自带的任务计划程序里还留着一条触发记录,每次开机它都会尝试调用一个已经不存在的小部件。
我的建议是:先打开“任务计划程序”,找名称里带 openclaw、claw、clawd 字样的任务,右键禁用并删除;再去“启动”文件夹和注册表HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run下面翻一遍,清理对应的启动入口。注册表操作前最好导出备份,别手滑删错键值。
3.4 拿掉 CLI 入口和 Python/Node 全局包
服务面清理完了,接下来处理命令行入口。OpenClaw 如果是通过 npm 安装的,就直接:
npm uninstall -g openclaw npm uninstall -g @openclaw/cli如果通过 pip 安装:
pip uninstall openclaw pip uninstall openclaw-core如果通过 Homebrew:
brew uninstall openclaw brew autoremove卸载完成之后,执行一下which openclaw,如果还有路径输出,说明还有一处二进制残留,需要手动删掉那个文件。我之前遇到过一种情况:同一个机器上既有 pip 版又有 npm 版,两个 openclaw 命令指向不同位置,卸载一个之后which还能找到另一个,行为非常混乱。
4. 残留清理:配置、缓存、日志与扩展的完整切除
4.1 配置目录:核心残留的大本营
服务停了、命令也删了,现在进入重头戏:配置文件。OpenClaw 的配置文件目录在不同平台上分布不太一样,但常见的就这几个位置,建议逐个排查:
~/.openclaw/(Linux / macOS 用户目录下的主配置)~/.config/openclaw/(部分新版版本会遵循 XDG 规范)%USERPROFILE%\.openclaw\(Windows 端)
直接删掉:
rm -rf ~/.openclaw rm -rf ~/.config/openclaw重点提醒一下:这个目录里通常会存着你的模型 API 密钥、连接器 token 和自定义 agent 配置。如果你之后想换工具,这些信息不会被 OpenClaw 的卸载脚本自动带走,一定要手动删掉,否则等于把钥匙留在别人家门口。
4.2 缓存与日志:悄悄占磁盘空间的一层
配置文件清掉之后,缓存和日志也不能放过。OpenClaw 在运行过程中会往几个地方写数据:
~/.cache/openclaw/:缓存目录,存模型响应缓存和临时文件~/.local/share/openclaw/:数据目录,存会话记录和状态~/.local/state/openclaw/:状态目录,部分版本会使用/tmp/openclaw/:临时文件目录
清理命令:
rm -rf ~/.cache/openclaw rm -rf ~/.local/share/openclaw rm -rf ~/.local/state/openclaw rm -rf /tmp/openclaw*这里有个容易被忽略的点:这些目录名字里可能没有 openclaw,比如 session 历史会存在.claw-sessions这种目录里,日志会写到~/openclaw.log或~/.claw/logs/。我习惯用一条 find 命令把全盘相关的文件都找出来:
find ~ -maxdepth 4 -iname "*openclaw*" 2>/dev/null find ~ -maxdepth 4 -iname "*clawd*" 2>/dev/null find ~ -maxdepth 4 -iname "*claw-session*" 2>/dev/null能扫到很多名字里不带 openclaw 但实际属于它的文件。
4.3 环境变量与 shell 配置:隐藏最深的“幽灵”
配置目录删了、缓存清了,还有一处非常容易漏:shell 配置文件里的环境变量和别名。安装时有些脚本会在.bashrc、.zshrc或.profile里追加类似这样的内容:
export OPENCLAW_HOME="$HOME/.openclaw" export OPENCLAW_API_PORT="8080" alias claw="openclaw"这些行不会被卸载脚本自动移除。它们平时没什么存在感,但当你重装 OpenClaw 时,旧的环境变量可能指向不存在的路径,导致程序启动就报错;或者新的版本改了默认端口,但旧的环境变量把端口锁死在 8080,你改了配置文件也不生效。
检查方法:
grep -n -i "openclaw\|clawd" ~/.bashrc ~/.zshrc ~/.profile 2>/dev/null找到之后,把对应的 export 和 alias 行删掉就行。如果你之前用过.env文件或 direnv,也检查一下项目目录里的.envrc。
4.4 数据库与向量存储:Agent 框架特有的数据残留
OpenClaw 这类 Agent 框架,和普通 CLI 工具最大的区别在于:它可能自带数据库或向量存储。我见过几种情况:
- 用 SQLite 存会话记录,文件是
~/.openclaw/openclaw.db。 - 用 LanceDB / Chroma 存向量索引,目录是
~/.openclaw/vector_store/。 - 用 Redis 做任务队列,key 前缀是
claw:*或openclaw:*。
SQLite 和向量索引目录直接跟着主配置目录一起删就行。但 Redis 这种独立组件,你得单独处理,连接上 Redis 后执行:
redis-cli keys "claw:*" redis-cli keys "openclaw:*" # 确认是 OpenClaw 的数据后,批量删除 redis-cli --scan --pattern "claw:*" | xargs redis-cli del这里要特别谨慎,千万别直接FLUSHALL,机器上可能还有别的服务在用同一个 Redis 实例。删除前先确认 key 的归属,这是我在生产环境踩过坑之后养成的习惯。
4.5 skill 与 connector 扩展:老配置干扰新会话的元凶
最后处理扩展层。自定义 skill 会放在~/.openclaw/skills/或~/.claw/skills/,连接器凭证缓存在~/.openclaw/connectors/,这些都得一并删掉:
rm -rf ~/.openclaw/skills rm -rf ~/.openclaw/connectors rm -rf ~/.claw/skillsWindows 上可能还会在%APPDATA%\openclaw\skills存一份。删除之后,有条件的可以顺手看一下系统的钥匙串(macOS 的 Keychain Access / Windows 的凭据管理器),把 OpenClaw 相关的 token 条目删掉。很多连接器认证失败的问题,根源就是系统凭据管理里还留着旧 token,而新安装的 OpenClaw 会优先读取这个凭据。
5. 不同平台的差异化卸载要点
5.1 Windows 端:卸载器、计划任务与注册表
Windows 是卸载重灾区。你从“设置 -> 应用”里卸载 OpenClaw 主程序,只是卸掉了主安装包,实际残留往往还有:计划任务里的启动项、注册表里的配置键、AppData 下的数据目录、Companion 小部件的后台进程。
完整的 Windows 卸载路径我整理一下:
- 用系统自带的“应用和功能”卸载主程序。
- 打开任务计划程序,删除 openclaw 相关任务。
- 删除
%USERPROFILE%\.openclaw、%APPDATA%\openclaw、%LOCALAPPDATA%\openclaw。 - 打开注册表编辑器,检查
HKCU\Software\OpenClaw和HKLM\SOFTWARE\OpenClaw,确认无残留后删除。 - 检查“启动”文件夹和
Run注册表键。
Windows 上有个额外麻烦:文件被进程占用时删除会直接报错。如果你删不掉某个目录,先去任务管理器里把带 openclaw、clawd、companion 字样的进程全部结束,再重试删除。
5.2 macOS 端:LaunchAgent 与 Keychain 遗忘项
macOS 上的 OpenClaw 用户,很多是通过 Homebrew 或源码安装的。除了前面写的 brew 卸载命令,还要注意~/Library/LaunchAgents/下有没有com.openclaw.plist,~/Library/Application Support/OpenClaw/下有没有数据文件,~/Library/Caches/com.openclaw/下有没有缓存。
还有一个 macOS 特有的点:OpenClaw 会把连接器 token 存进 Keychain,条目名称类似OpenClaw Connector Token。在“钥匙串访问”里搜 openclaw 或 clawd,找到对应条目删除。这个步骤很容易漏,漏了之后最直接的后果就是重装时连不上原来的连接器,而且报错信息看起来像网络问题,实际上是被 Keychain 里的旧 token 带偏了。
5.3 Linux 端:XDG 目录与容器残留
Linux 用户通常是重灾区里的重灾区,因为大家太习惯rm -rf一把梭了。除了~/.openclaw,Linux 上还要检查/opt/openclaw(手动安装的生产目录)、/usr/local/bin/openclaw(二进制链接)、/var/lib/openclaw(服务状态目录,如果之前用 root 跑过服务)。
Docker 部署的残留也要单独处理:
docker ps -a | grep -i claw docker stop <容器名> docker rm <容器名> docker rmi <镜像名> docker volume ls | grep -i claw docker volume rm <卷名>很多人记得删容器和镜像,但忘了数据卷。数据卷不删,等于数据库文件还躺在磁盘上,只是换了个地方存着。
5.4 移动端 / Termux 环境:轻量但依旧全面
在 Termux 里部署 OpenClaw 的玩法,本质上和 Linux 差不多。Termux 没 systemd,而是靠termux-services管理后台服务。卸载时:
service openclaw stop pkg remove openclaw # 或者 pip 版就 pip uninstall rm -rf ~/.openclaw ~/.config/openclaw ~/.clawTermux 平台的坑是环境变量会写在~/.bashrc或~/.zshrc里,而且很多人是从~/.shortcuts里启动的快捷方式,这几个地方都要检查。
6. 常见问题与排查技巧实录
6.1 端口被占用但找不到对应进程
卸载完仍然提示端口被占用,最常见的原因是:你删了文件,但旧进程还在跑。用lsof -i :8080找到 PID,然后kill -9补一刀。另一种情况是 Docker 容器还挂着端口映射,需要docker ps -a查看并清理。
6.2 命令提示“找不到”,但目录还在
这种情况多出现在 npm 或 pip 版本混装之后。which openclaw指向旧路径,卸载了一版,另一版还在 PATH 里。处理方式是先用which -a openclaw列出所有找到的路径,逐个确认并删除。
6.3 重装后配置异常:旧数据干扰新版本
我实际遇到过几次重装后 agent 行为异常的情况,查到最后都是~/.openclaw里残留的旧 skill 或连接器缓存导致的。新版本读取这些旧扩展,API 变了但 skill 脚本还是旧的调用方式,就会静默失败或报奇怪的错。所以重装前的数据清理必须彻底,尤其是~/.openclaw/connectors/和~/.openclaw/skills/,宁可多删不能少删。
6.4 API Key 与授权 token 失效
卸载后重新安装,发现旧的连接器全部认证失败,这个跟前面说的 Keychain / 凭据管理器残留有关。清理掉系统凭据里 openclaw 相关条目,再重新授权基本就能恢复。如果你备份过旧配置,注意不要把旧连接器的 token 带回新环境。
6.5 清理验证清单
我给自己整理了一个卸载完成后的验证清单,分享出来:
| 检查项 | 验证命令 / 方法 |
|---|---|
| 二进制入口已移除 | which openclaw应无输出 |
| 端口已释放 | lsof -i :8080应无结果 |
| 配置目录已清空 | ls ~/.openclaw应报“不存在” |
| 服务单元已删除 | systemctl list-unit-files | grep -i claw应无输出 |
| 容器与镜像已清理 | docker ps -a | grep -i claw应无输出 |
| shell 配置已还原 | grep -i openclaw ~/.bashrc ~/.zshrc应无结果 |
| 缓存与日志已删除 | find ~ -maxdepth 4 -iname "*openclaw*" 2>/dev/null应无结果 |
验证通过,这台机器才算真正和 OpenClaw 说再见。
最后分享一点个人体会:卸载这件事,本质上比安装更考验对架构的理解。安装是往系统里加东西,错了可以再来;卸载是从系统里抽丝剥茧,一旦漏掉一层,后患无穷。我自己处理过不少“卸载不干净”的求助,九成以上问题都出在服务面没停干净和扩展面没清彻底这两处。所以别嫌步骤多,按服务、数据、扩展三个层面逐层拆解,每一步都核对一下,基本就稳了。