📱 用手机浏览器和你的 OpenClaw AI 智能体聊天
功能特性 • 截图预览 • 快速开始 • 部署方式 • 外网访问 • 配置参数 • 常见问题 • 社区交流 • English
🌐 产品主页 • 🇨🇳 OpenClaw 中文汉化版 • 💬 Discord • 🤖 元宝派 • 💬 QQ 群 • 💬 微信群
OpenClaw 是一个强大的 AI 智能体平台(中文汉化版),但它的 Gateway 默认只监听本机(127.0.0.1:18789),手机无法直接连接。
ClawApp 解决了这个问题:
手机浏览器(任意网络)
↓ WebSocket (WS / WSS)
代理服务端(ClawApp Server,端口 3210,离线缓存)
↓ WebSocket + Ed25519 设备签名
OpenClaw Gateway(端口 18789)
代理服务端自动完成 Ed25519 设备签名握手认证(兼容 OpenClaw 2.13+),同时提供 H5 聊天页面,打开就能用,不需要装 App。
- 💬 实时流式聊天(打字机效果)
- 📷 图片收发(拍照/相册上传,AI 图片回复)
- 📝 Markdown 渲染 + 代码高亮(XSS 防护)
- ⚡ 快捷指令面板(/model、/think、/new 等)
- 🔧 工具调用实时状态显示
- 🎤 语音输入(语音转文字,需 HTTPS 环境)
- 🤖 多智能体支持(新建会话时可选择不同 Agent)
- 📋 会话管理(切换、新建、删除)
- 🌙 主题切换(亮色 / 暗色 / 跟随系统)
- 🌐 中英文切换
- 🔄 智能重连(断线自动恢复,无闪烁,消息去重)
- 🔒 Token + Ed25519 设备认证(兼容 OpenClaw 2.13+)
- 💾 离线消息缓存(IndexedDB 持久化,断网可查看历史,恢复后自动同步)
- 👋 新用户功能引导
- 📱 PWA 支持(添加到主屏幕,离线可用)
- 📦 Android APK 打包(Capacitor + GitHub Actions 自动构建)
![]() 登录连接 |
![]() 流式聊天 |
![]() 快捷指令 |
![]() 会话管理 |
![]() 指令面板 |
![]() 设置与帮助 |
curl -fsSL https://raw.githubusercontent.com/qingchencloud/clawapp/main/install.sh | bashirm https://raw.githubusercontent.com/qingchencloud/clawapp/main/install.ps1 | iex脚本会自动检测环境、克隆仓库、安装依赖、构建前端、交互式配置 Token,并支持 PM2 常驻运行。如果本地已安装 OpenClaw,会自动读取 Gateway Token。
git clone https://github.com/qingchencloud/clawapp.git
cd clawapp在项目根目录创建 .env 文件:
# 手机连接时的密码(自己设一个)
PROXY_TOKEN=my-secret-token-123
# OpenClaw Gateway 的 Token(在 ~/.openclaw/gateway.yaml 里找)
OPENCLAW_GATEWAY_TOKEN=你的gateway-token启动:
docker compose up -d --buildgit clone https://github.com/qingchencloud/clawapp.git
cd clawapp
npm run install:all
npm run build:h5
cp server/.env.example server/.env
# 编辑 server/.env,填入你的 token
npm start- 确保手机和电脑在同一 WiFi
- 查看电脑 IP:
- Mac:
ifconfig | grep "inet " | grep -v 127.0.0.1 - Windows:
ipconfig - Linux:
ip addr
- Mac:
- 手机浏览器打开
http://你的电脑IP:3210 - 填入服务器地址和 Token,点击连接
适合家庭/办公室使用,手机和电脑在同一 WiFi 下。
git clone https://github.com/qingchencloud/clawapp.git
cd clawapp && npm run install:all
npm run build:h5
cp server/.env.example server/.env
# 编辑 server/.env 填入 token
npm start# 创建 .env
cat > .env << 'EOF'
PROXY_TOKEN=my-token-123
OPENCLAW_GATEWAY_TOKEN=你的gateway-token
ALLOWED_ORIGINS=
EOF
# 构建并启动
docker compose up -d --build
# 查看日志
docker compose logs -fDocker 环境下会自动使用 host.docker.internal 连接宿主机的 Gateway。
# 安装 pm2
npm install -g pm2
# 启动
pm2 start server/index.js --name clawapp
# 开机自启
pm2 save && pm2 startup不在同一网络时,有以下方案:
cftunnel 是 Cloudflare Tunnel 一键管理 CLI,免费、自动 HTTPS、无需公网 IP。
💡 为什么推荐 cftunnel? 浏览器的语音输入(🎤)功能要求 HTTPS 安全上下文,局域网 HTTP 访问无法使用麦克风。cftunnel 自动提供 HTTPS,一条命令即可解锁语音输入等高级功能。
临时分享(零配置):
# 安装 cftunnel
curl -fsSL https://raw.githubusercontent.com/qingchencloud/cftunnel/main/install.sh | bash
# 一条命令穿透
cftunnel quick 3210
# ✔ 隧道已启动: https://xxx-yyy-zzz.trycloudflare.com固定域名(需要 Cloudflare 账号 + 自有域名):
cftunnel init # 配置 CF API Token
cftunnel create my-tunnel # 创建隧道
cftunnel add clawapp 3210 --domain chat.example.com # 添加路由(自动创建 DNS)
cftunnel up # 启动
cftunnel install # 注册开机自启详见 cftunnel 文档 · 也有 桌面客户端 可视化管理
需要一台有公网 IP 的服务器。
# 在你的电脑上执行
ssh -f -N \
-o ServerAliveInterval=15 \
-o ServerAliveCountMax=4 \
-R 0.0.0.0:3210:127.0.0.1:3210 \
user@你的服务器IP
⚠️ 服务器需要:
/etc/ssh/sshd_config中设置GatewayPorts yes- 防火墙放行 3210 端口
手机访问 http://服务器IP:3210
⚠️ SSH 隧道默认是 HTTP,语音输入功能不可用。如需语音输入,请配合 Nginx SSL 或改用 cftunnel。
server {
listen 443 ssl;
server_name clawapp.你的域名.com;
ssl_certificate /path/to/cert.pem;
ssl_certificate_key /path/to/key.pem;
location / {
proxy_pass http://127.0.0.1:3210;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_read_timeout 86400;
}
}| 方案 | 优点 | 缺点 |
|---|---|---|
| cftunnel(推荐) | 一条命令,免费,自动 HTTPS,开机自启 | 依赖 Cloudflare 服务 |
| SSH 隧道 | 简单,无需额外软件 | 需要公网服务器,隧道可能断开 |
| Nginx 反代 | 完全可控,自定义域名 | 需要服务器 + SSL 配置 |
| Tailscale/ZeroTier | P2P 直连,加密 | 手机也要装客户端 |
打开 H5 页面后会看到连接设置页,需要填写两个字段:
填写运行 ClawApp Server 的电脑 IP 和端口。
局域网访问(手机和电脑同一 WiFi):
# 查看电脑 IP
# Mac
ifconfig | grep "inet " | grep -v 127.0.0.1
# Windows
ipconfig
# Linux
ip addr然后在 App 中填入 你的电脑IP:3210,例如 192.168.1.100:3210
外网访问:填入公网地址,例如 你的服务器IP:3210 或 cftunnel 生成的域名 xxx-yyy.trycloudflare.com
本机访问:直接填 localhost:3210
App 登录页的 Token 是你在部署时自己设置的 PROXY_TOKEN,相当于访问密码。
脚本会交互式引导你设置 Token,设置完后记住即可。如果忘了,查看配置文件:
cat server/.env | grep PROXY_TOKENToken 在 .env(Docker)或 server/.env(手动部署)文件中配置:
# 这个是 App 登录密码,自己随便设一个
PROXY_TOKEN=my-secret-token-123
# 这个是 OpenClaw Gateway 的认证 Token(见下方获取方式)
OPENCLAW_GATEWAY_TOKEN=你的gateway-tokenPROXY_TOKEN 是你自己定义的密码,设什么 App 里就填什么。
这个 Token 在 OpenClaw 的配置文件 ~/.openclaw/openclaw.json 中(JSON5 格式):
# 查看 Gateway Token
cat ~/.openclaw/openclaw.json | grep token在配置文件中找到类似这样的结构:
{
gateway: {
port: 18789,
auth: {
mode: "token",
token: "你的-gateway-token" // ← 复制这个值
}
}
}把 gateway.auth.token 的值复制到 .env 的 OPENCLAW_GATEWAY_TOKEN 中即可。
💡
PROXY_TOKEN(App 登录密码)和OPENCLAW_GATEWAY_TOKEN(Gateway 认证)是两个不同的 Token。前者自己设,后者从 OpenClaw 配置中获取。
💡 通过 HTTPS 访问时(如 Cloudflare Tunnel),WebSocket 会自动切换为 WSS 加密连接。
点击聊天页右上角 ⚙️ 图标:
- 主题:浅色 / 深色 / 跟随系统
- 语言:中文 / English
- 断开连接:返回连接页
| 变量 | 必填 | 默认值 | 说明 |
|---|---|---|---|
PROXY_PORT |
否 | 3210 |
代理服务端端口 |
PROXY_TOKEN |
是 | - | H5 客户端连接密码 |
OPENCLAW_GATEWAY_URL |
否 | ws://127.0.0.1:18789 |
Gateway 地址(Docker 下自动设为 host.docker.internal) |
OPENCLAW_GATEWAY_TOKEN |
是 | - | Gateway 认证 token |
ALLOWED_ORIGINS |
否 | - | 额外 CORS 白名单,逗号分隔 |
clawapp/
├── server/ # WebSocket 代理服务端
│ ├── index.js # Express + WS 代理 + Gateway 握手
│ ├── package.json
│ ├── Dockerfile
│ └── .env.example
├── h5/ # H5 移动端前端
│ ├── src/
│ │ ├── main.js # 入口 + 连接页
│ │ ├── ws-client.js # WebSocket 协议层
│ │ ├── chat-ui.js # 聊天 UI + 会话管理
│ │ ├── message-db.js # IndexedDB 离线消息存储
│ │ ├── offline-queue.js # 离线队列 + 增量同步
│ │ ├── commands.js # 快捷指令面板
│ │ ├── markdown.js # Markdown 渲染 + 代码高亮
│ │ ├── media.js # 图片处理
│ │ ├── i18n.js # 国际化(中文 / English)
│ │ ├── theme.js # 主题管理(亮/暗/自动)
│ │ ├── settings.js # 设置面板
│ │ ├── style.css # 主样式 + 主题变量
│ │ └── components.css # 组件样式
│ ├── index.html
│ └── vite.config.js
├── android/ # Capacitor Android 项目
├── .github/workflows/ # GitHub Actions
│ └── build-apk.yml # 自动构建 APK
├── docs/ # 文档 + GitHub Pages
│ ├── index.html # 产品落地页
│ ├── pwa-and-apk-guide.md # PWA/APK 打包指南
│ └── image/ # 截图
├── capacitor.config.ts # Capacitor 配置
├── Dockerfile # 多阶段构建
├── docker-compose.yml # 生产部署
└── README.md
# 安装依赖
npm run install:all
# H5 开发服务器(热更新,端口 5173)
npm run dev:h5
# 代理服务端(端口 3210)
npm run dev:serverQ: 一直显示「连接中」或报 502 Bad Gateway 错误?
- 检查 OpenClaw Gateway 是否在运行:
curl http://localhost:18789 - 后台日志如果提示
Gateway 握手失败: NOT_PAIRED或pairing required,是因为根据 OpenClaw 的安全机制,首次连接需要作为设备进行配对审批。请在运行 Gateway 的服务端执行以下命令批准配对:# 查看待配对设备列表并获取 requestId openclaw gateway call device.pair.list --json # 使用 requestId 批准配对 openclaw gateway call device.pair.approve --params '{"requestId":"<你的id>"}' --json
- 确认
OPENCLAW_GATEWAY_TOKEN正确 - Docker 部署时,Gateway 地址应为
ws://host.docker.internal:18789
Q: 手机打不开页面?
- 手机和电脑是否在同一 WiFi?
- 电脑防火墙是否放行了 3210 端口?
- 地址是否用了电脑 IP(不是 localhost)?
Q: WebSocket 经常断开?
服务端内置 30 秒心跳保活,客户端也有 25 秒应用层心跳。如果还是断,检查反向代理的超时配置(建议 > 60s)。SSH 隧道建议加 -o ServerAliveInterval=15。
Q: 能多人同时使用吗?
可以。每个连接创建独立的 Gateway 会话,但共享同一个 OpenClaw 实例。
Q: 怎么添加更多语言?
编辑 h5/src/i18n.js,添加新的语言包(如 'ja'),然后在 settings.js 中添加对应按钮。
Q: 语音输入按钮点了没反应?
浏览器要求 HTTPS 才能使用麦克风。局域网 HTTP 访问时,语音按钮会提示需要 HTTPS。解决方案:使用 cftunnel quick 3210 一键开启 HTTPS 隧道,详见外网访问。
Q: Docker 构建时 npm install 超时失败?
国内网络拉取 npm 包可能很慢,有几种解决方案:
- 在 Dockerfile 的
RUN npm install前加镜像源:RUN npm config set registry https://registry.npmmirror.com && npm install --omit=dev - 或者跳过 Docker,直接本地运行(推荐网络不好时使用):
npm run install:all && npm run build:h5 cp server/.env.example server/.env # 编辑填入 token npm start
Q: 启动时报 EADDRINUSE 端口被占用?
说明 3210 端口已被其他进程占用。常见原因:
- 之前用 PM2 启动过:
pm2 stop openclaw-mobile && pm2 delete openclaw-mobile - 之前用 nohup 启动过:
lsof -i:3210 -t | xargs kill -9 - Docker 容器还在跑:
docker compose down
确认端口释放后再启动:lsof -i:3210 || echo "端口可用"
Q: 用 PM2 管理时不断重启?
PM2 会在进程崩溃时自动重启。如果 Gateway 没运行或 Token 错误,服务会启动后立即因连接失败而退出,导致循环重启。解决:
- 先确认 Gateway 在运行:
curl http://localhost:18789 - 检查
server/.env中的 Token 是否正确 - 查看 PM2 日志定位问题:
pm2 logs openclaw-mobile --lines 30
Q: 不需要修改 OpenClaw 就能用吗?
是的。ClawApp 完全兼容原生 OpenClaw,不需要安装插件、不需要改配置、不需要开额外端口。只要 Gateway 在运行(默认 127.0.0.1:18789),把 Token 填到 .env 里就能用。
Q: 部署到远程服务器后访问不了?
- 确认防火墙放行了 3210 端口:
# Ubuntu/Debian sudo ufw allow 3210/tcp # CentOS/RHEL sudo firewall-cmd --add-port=3210/tcp --permanent && sudo firewall-cmd --reload
- 云服务器还需要在控制台安全组中放行 3210 端口
- 确认服务在监听:
ss -tlnp | grep 3210 - 注意:远程服务器上也需要运行 OpenClaw Gateway,否则页面能打开但无法聊天
Q: 一键脚本安装的 Node.js (nvm) 在 PM2 重启后找不到?
nvm 安装的 Node.js 需要 source 才能生效。如果 PM2 通过 pm2 startup 设置了开机自启,重启后可能找不到 node。解决:
# 获取 node 的绝对路径
which node # 例如 /root/.nvm/versions/node/v22.22.0/bin/node
# 用绝对路径启动 PM2
pm2 startup
pm2 save或者将 nvm 的 node 软链到系统路径:
sudo ln -sf $(which node) /usr/local/bin/node
sudo ln -sf $(which npm) /usr/local/bin/npm
sudo ln -sf $(which pm2) /usr/local/bin/pm2Q: 能部署到没有 OpenClaw 的服务器上吗?
可以部署,但需要通过 SSH 隧道或反向代理将远程服务器的请求转发回运行 OpenClaw 的电脑。典型场景:
手机 → 远程服务器 ClawApp(:3210) → SSH隧道 → 本地电脑 Gateway(:18789)
在远程服务器上:
# 将远程的 18789 端口转发到本地电脑的 Gateway
ssh -f -N -L 127.0.0.1:18789:127.0.0.1:18789 user@你的电脑IP这样远程 ClawApp 就能通过 ws://127.0.0.1:18789 连接到你本地的 Gateway。
- 务必设置强
PROXY_TOKEN(建议 32 位以上随机字符串)openssl rand -hex 24
- Gateway Token 只在服务端
.env中,不会暴露给客户端 - 公网访问建议使用 HTTPS(Cloudflare Tunnel 或 Nginx + SSL)
- 可选:使用 Cloudflare Access 添加额外认证
- 部署到公网服务器时,务必设置防火墙规则,只开放必要端口(3210)
- 不要将
.env文件提交到 Git(已在.gitignore中排除)
- OpenClaw - AI 智能体平台
- OpenClaw 中文汉化版 - 社区汉化
- cftunnel - Cloudflare Tunnel 一键管理 CLI(推荐用于外网访问)
- cftunnel-app - cftunnel 桌面客户端
欢迎加入社区,交流使用心得、反馈问题、获取最新动态:
扫码或 点击链接 加入 | 2000 人大群,满员自动切换
扫码或 点击链接 加入 | 碰到问题也可以直接在群内反馈
- 🎮 Discord 社区 — 国际交流频道
- 🤖 元宝派社群圈子 — 腾讯元宝派讨论区
English Documentation
ClawApp is an H5 mobile chat client that lets you chat with your OpenClaw AI agent from any phone browser.
Docker:
git clone https://github.com/qingchencloud/clawapp.git
cd clawapp
echo 'PROXY_TOKEN=your-token' > .env
echo 'OPENCLAW_GATEWAY_TOKEN=your-gw-token' >> .env
docker compose up -d --buildDirect:
git clone https://github.com/qingchencloud/clawapp.git
cd clawapp && npm run install:all && npm run build:h5
cp server/.env.example server/.env # edit tokens
npm startOpen http://your-ip:3210 on your phone.
- cftunnel (recommended):
cftunnel quick 3210— github.com/qingchencloud/cftunnel - SSH Tunnel:
ssh -f -N -R 0.0.0.0:3210:localhost:3210 user@server - Nginx: Configure WebSocket proxy to port 3210
Real-time streaming chat, image send & receive, Markdown rendering, offline message cache (IndexedDB), Ed25519 device auth, session management, dark/light/auto theme, English/Chinese i18n, smart reconnect (no flicker), XSS protection, token auth.
由 晴辰云 开发维护
clawapp.qt.cool
MIT






