本文所有示例均基于 OpenClaw 2026 最新版,配合 Control UI 和 Tailscale Serve 实现安全远程访问。
一、为什么是 80%?
过去三个月,我用 OpenClaw 重构了自己的开发工作流。结论很简单:
80% 的编程任务可以交给 AI,但剩下 20% 必须自己动手。
关键不是"AI 能不能做",而是"AI 该不该做"。
先说结果:我的日均编码时间从 6 小时降到 1.5 小时,但产出反而增加了。省下的时间用来做什么?架构设计、代码审查、和技术调研——这些 AI 做不了的事。
二、OpenClaw Web 能力的独特优势
为什么选择 OpenClaw?因为它不是另一个"AI 编程助手",而是一个可以操作真实世界的 AI 代理框架。
1. Control UI:浏览器里的指挥中心
访问地址:http://127.0.0.1:18789/或 Tailscale Serve:https://<magicdns>/
Control UI 是一个 Vite + Lit 构建的单页应用,直接通过 WebSocket 与 Gateway 通信。这意味着:
无需命令行:所有操作在浏览器完成
实时流式输出:工具调用、代码生成过程可视化
多会话管理:同时运行多个 AI 任务互不干扰
我每天早上打开 Control UI,第一件事是查看 Cron 任务执行情况——昨晚 AI 已经帮我完成了代码审查和日志分析。
2. Tailscale Serve:安全的远程访问(重点推荐)

这是本文的重点——如何安全地把 OpenClaw 暴露到远程,而不会被黑客扫描攻击。
什么是 Tailscale Serve?(国内可以访问,且个人免费,用了一年了是真的香)
简单说,Tailscale Serve 是 Tailscale 提供的一个内建反向代理,让你无需配置 Nginx、无需申请证书、无需开放端口,就能安全地访问内网服务。
核心优势:
| 传统方案 | Tailscale Serve |
|---|---|
| 需要公网 IP | 无需公网 IP |
| 需要配置端口转发 | 无需端口转发 |
| 需要申请 HTTPS 证书 | 自动 HTTPS |
| 暴露在公网,会被扫描攻击 | 只在 Tailnet 内可见 |
| 需要自己处理认证 | 基于 Tailscale 身份 |
📖 完整配置教程(实战步骤)
以下是我在 macOS 上配置 OpenClaw + Tailscale Serve 的完整过程,包含所有细节和踩坑记录。
前置条件
已安装 OpenClaw(2026.3.13 或更新版本)
已安装 Tailscale 应用(从 https://tailscale.com/download 下载)
已登录 Tailscale 账号(支持 Google/Microsoft/GitHub/Apple ID)
Step 1:检查 Tailscale CLI 是否可用
Tailscale 桌面应用安装后,CLI 工具通常位于:
# macOS 默认路径/Applications/Tailscale.app/Contents/MacOS/tailscale# 添加到 PATH(临时)exportPATH="/Applications/Tailscale.app/Contents/MacOS:$PATH"# 验证安装tailscale version
输出示例:
1.94.2 tailscale commit: 0a29cf18b56e478b9cd33af07755fcae90d5171a
Step 2:启用 Tailscale HTTPS 证书
重要:Tailscale Serve 需要 HTTPS 证书支持。
打开 Tailscale 管理后台:https://login.tailscale.com/
进入 Settings → General
找到 HTTPS 部分,点击 Manage
启用 HTTPS 证书功能
Step 3:配置 OpenClaw
编辑 ~/.openclaw/openclaw.json:
{"gateway": {"port": 18789,"mode": "local","bind": "loopback","controlUi": {"allowedOrigins": ["http://localhost:18789","http://127.0.0.1:18789","https://<你的机器名>.tailnet-name.ts.net" ] },"auth": {"mode": "token","token": "你的安全 token","allowTailscale": true },"tailscale": {"mode": "serve","resetOnExit": false } }}
关键字段说明:
| 字段 | 值 | 说明 |
|---|---|---|
bind | "loopback" | 只监听本地,不暴露到网络 |
tailscale.mode | "serve" | 启用 Tailscale Serve 模式 |
auth.allowTailscale | true | 允许 Tailscale 身份认证 |
controlUi.allowedOrigins | 包含 HTTPS 地址 | 允许 Control UI 从远程访问 |
Step 4:启动 Tailscale Serve
由于 OpenClaw 的 tailscale.mode: "serve" 配置需要 Tailscale CLI 支持,建议手动启动 Serve:
# 添加 PATHexportPATH="/Applications/Tailscale.app/Contents/MacOS:$PATH"# 启动 Serve(后台模式)tailscale serve --bg18789
输出示例:
Available within your tailnet:https://macbook-pro.tail000000.ts.net/|-- proxy http://127.0.0.1:18789Serve started and running in the background.
验证 Serve 状态:
tailscale serve status输出:
https://macbook-pro.tail100000.ts.net (tailnet only)|-- / proxy http://127.0.0.1:18789
Step 5:启动 OpenClaw Gateway
openclaw gateway restartStep 6:本机配对(这里比较麻烦,可以借助你本地Coding plan计划去配置)
腾讯云Coding Plan计划,首月7.9 搭配更配:https://curl.qcloud.com/kuliJQTW
重要:首次从远程访问前,需要在本机完成配对。
在本机浏览器打开:
http://127.0.0.1:18789输入配置的 token 登录
配对成功后,设备信息会被保存
Step 7:远程访问
在同一 Tailnet 内的任何设备上访问:
https://macbook-pro.tail100000.ts.net/输入 token 登录即可使用 Control UI。
🔍 实战问题排查(2026-03-18 真实案例)
以下是我在配置完成后遇到的实际问题和解决过程,供你参考。
问题现象:
浏览器控制台反复出现以下错误:
Proxy headers detected from untrusted address. Connection will not be treated as local.Configure gateway.trustedProxies to restore local client detection behind your proxy.[ws] closed before connect conn=xxx remote=127.0.0.1 fwd=100.125.104.64 origin=https://macbook-pro.tail100000.ts.net code=1008 reason=pairing required
问题分析:
Proxy headers detected from untrusted addressTailscale Serve 作为反向代理,会将请求转发给 Gateway
Gateway 检测到请求来自 Tailscale CGNAT IP(
100.125.104.64),但未配置为可信代理导致连接被拒绝
pairing required设备首次连接需要配对授权
即使网络通了,未配对的设备也无法连接
解决步骤:
Step A:添加 Tailscale 可信代理配置

编辑 ~/.openclaw/openclaw.json,在 gateway 部分添加:
{"gateway": {"port": 18789,"mode": "local","bind": "loopback","trustedProxies": ["100.33.0.0/10"], //你的taiscale网段"controlUi": {"allowedOrigins": ["http://localhost:18789","http://127.0.0.1:18789","https://macbook-pro.tail100000.ts.net"//登录之后在首页获取,如图片 ] },"auth": {"mode": "token","token": "your-token","allowTailscale": true },"tailscale": {"mode": "serve","resetOnExit": false } }}
关键字段:
"trustedProxies": ["100.33.0.0/10"]100.33.0.0/10 是 Tailscale 的 CGNAT IP 范围,添加后 Gateway 会信任来自 Tailscale 的代理请求。
Step B:重启 Gateway
openclaw gateway restart或使用 gateway 工具自动重启(配置修改后自动触发)。
Step C:批准设备配对
重启后,检查待配对设备:
openclaw devices list输出示例:
Pending (2)┌──────────────────────────────────────┬─────────────────────────────────────┬──────────┬────────────┬────────┬────────┐│ Request │ Device │ Role │ IP │ Age │ Flags │├──────────────────────────────────────┼─────────────────────────────────────┼──────────┼────────────┼────────┼────────┤│ 58886ea5-41a3-9dcb-6195636fd0e5 │ 8b9eca13d171efd39052539ab8c0c75 │ operator │ │ 2m ago │ ││ 6fe2597e-465d-a754-e14c29054f39 │ addb7e3a7b42fd7856d9b9e2e156287 │ operator │ │ 4m ago │ │└──────────────────────────────────────┴─────────────────────────────────────┴──────────┴────────────┴────────┴────────┘
批准最新设备:
openclaw devices approve --latest重复执行直到所有待处理设备都已批准。
验证配对成功:
openclaw devices list输出应显示 Paired (N) 且 Pending (0)。
Step D:刷新浏览器
配对完成后,刷新浏览器页面重新连接。
📋 完整配置清单
~/.openclaw/openclaw.json 最终配置:
{"gateway": {"port": 18789,"mode": "local","bind": "loopback","controlUi": {"allowedOrigins": ["http://localhost:18789","http://127.0.0.1:18789","https://macbook-pro.tail100000.ts.net" ] },"auth": {"mode": "token","token": "8849267ab4cdbd11fa2c8429ba8542d7341366e6605",//用你自己的token"allowTailscale": true },"tailscale": {"mode": "serve","resetOnExit": false } }}
Tailscale Serve 配置:
# 后台启动 Servetailscale serve --bg18789# 查看状态tailscale serve status# 停止 Servetailscale serve --https=443 off
🔧 常见问题与解决方案
问题 1:tailscale: command not found
解决:Tailscale CLI 不在 PATH 中。
# macOS 添加路径exportPATH="/Applications/Tailscale.app/Contents/MacOS:$PATH"# 或创建软链接sudoln-s /Applications/Tailscale.app/Contents/MacOS/tailscale /usr/local/bin/tailscale
问题 2:Serve is not enabled on your tailnet
解决:需要在 Tailscale 管理后台启用 HTTPS。
访问 https://login.tailscale.com/f/serve?node=<你的节点 ID>
或手动进入 Settings → General → HTTPS → Manage
启用 HTTPS 证书
问题 3:origin not allowed
解决:需要在 allowedOrigins 中添加远程地址。
{"controlUi": {"allowedOrigins": ["http://localhost:18789","http://127.0.0.1:18789","https://<你的机器名>.tailnet-name.ts.net" ] }}
问题 4:pairing required

解决:需要在本机浏览器先访问一次完成配对。
本机访问
http://127.0.0.1:18789输入 token 登录
配对后远程设备即可访问
问题 5:另一台电脑无法访问
检查清单:
- 另一台电脑已安装 Tailscale(两台都要安装taiscale cli)
- 已登录同一 Tailscale 账号
- Tailscale 状态正常(
tailscale status显示 active) - Serve 配置正确(
tailscale serve status有输出) - 已在本机完成配对
🔒 安全原理
Gateway 只监听 loopback(127.0.0.1),不暴露到网络
Tailscale Serve 做反向代理,从 Tailnet 接收请求转发给 Gateway
自动 HTTPS,Tailscale 处理证书
身份验证,基于 Tailscale 用户身份(
tailscale whois验证)
这意味着:
黑客扫描不到你的 Gateway(没有开放端口)
即使扫描到,也需要加入你的 Tailnet 才能访问
所有流量加密(HTTPS)
⚠️ 关于 Funnel 模式(公网访问)
如果你需要完全公开的访问(比如给非 Tailnet 用户),可以用 Funnel:
{gateway: {bind: "loopback",tailscale: { mode: "funnel" },auth: { mode: "password", password: "your-strong-password" } }}
⚠️ 注意:Funnel 会暴露到公网,必须配置强密码!
适用场景:
给外部合作伙伴临时访问
在公开网络环境演示
没有 Tailscale 的设备访问
不推荐日常使用,因为会被公网扫描。
❓ 常见问题
Q1:Tailscale Serve 和直接 bind 到 tailnet IP 有什么区别?
// Serve 模式(推荐){gateway: { bind: "loopback", tailscale: { mode: "serve" } }}// 访问:https://<magicdns>/ (自动 HTTPS)// Tailnet bind 模式{gateway: { bind: "tailnet", auth: { mode: "token", token: "xxx" } }}// 访问:http://<tailscale-ip>:18789/ (HTTP,需要 token)
Serve 模式更好,因为:
自动 HTTPS
无需管理 token
基于 Tailscale 身份
Q2:多台机器都能访问吗?
可以。只要都加入同一个 Tailnet,任何设备都能访问。
Q3:手机能访问吗?
可以。安装 Tailscale iOS/Android App,加入 Tailnet 后用 Safari/Chrome 访问。
Q4:会被黑客攻击吗?
Serve 模式:
不开放公网端口,扫描不到
需要加入 Tailnet 才能访问
流量加密
Funnel 模式:
暴露到公网,会被扫描
必须配置强密码
流量加密
Q5:Tailscale 免费吗?
个人版免费,支持:
最多 3 个用户
无限设备
Serve 和 Funnel 都支持
团队版收费,更多功能。
Q6:Serve 配置重启后丢失怎么办?
Tailscale Serve 配置在重启后可能丢失,需要重新配置:
# 方法 1:手动重新启动tailscale serve --bg18789# 方法 2:添加到启动脚本# 将命令添加到 ~/.zshrc 或 ~/.bashrcexportPATH="/Applications/Tailscale.app/Contents/MacOS:$PATH"tailscale serve --bg18789
3. 多会话并行:真正的多任务处理
# 并行审查 3 个 PRopenclaw sessions spawn --runtime acp --label pr-review-1 "审查 PR #123"openclaw sessions spawn --runtime acp --label pr-review-2 "审查 PR #124"openclaw sessions spawn --runtime acp --label pr-review-3 "审查 PR #125"
传统 AI 助手一次只能处理一个请求。OpenClaw 的 sessions_spawn 可以创建多个隔离会话,每个会话独立运行不同的 AI 任务。
三、这 8 类任务,放心交给 AI
1. 样板代码生成
场景:新项目需要创建基础的 CRUD 接口、数据模型、配置文件。
传统做法:复制旧项目,手动修改,耗时 2-3 小时。
OpenClaw 做法:
# 创建隔离会话生成项目骨架openclaw sessions spawn --runtime acp --mode session \--task"基于 Express.js + TypeScript 创建用户管理模块,包含:- User 模型(id, email, name, createdAt)- RESTful API(GET/POST/PUT/DELETE /users)- Jest 单元测试框架 输出到 /Users/cuihao/.openclaw/workspace/user-service/"
5 分钟后,项目骨架完成。我只需要 review 关键逻辑。
时间节省:2 小时 → 10 分钟 review
2. 单元测试编写
场景:核心函数写好了,但测试覆盖率只有 30%。
OpenClaw 做法:
# 让 AI 为指定文件生成测试openclaw sessions spawn --runtime acp \--task"为 /src/utils/validator.ts 编写完整的 Jest 测试, 覆盖所有边界情况,包括:- 空值处理- 类型错误- 边界值 输出到 /src/utils/validator.test.ts"
时间节省:3 小时 → 20 分钟 review + 补充
3. 文档生成与整理
场景:项目完成了,但 README 和 API 文档还没写。
OpenClaw 做法:
# 用 web_fetch 抓取依赖文档,让 AI 整理openclaw sessions spawn --runtime acp \--task"1. 读取 package.json 获取依赖列表2. 用 web_fetch 抓取主要依赖的官方文档3. 生成项目 README.md,包含:- 项目简介- 安装步骤- 使用示例- API 参考 输出到 /README.md"
时间节省:4 小时 → 30 分钟 review
4. 代码审查初筛
场景:团队每天有 10+ 个 PR 需要审查。
OpenClaw 做法:
# 创建定时任务,每日自动审查openclaw cron add --job'{"name": "每日 PR 审查","schedule": { "kind": "cron", "expr": "0 9 * * 1-5", "tz": "Asia/Shanghai" },"payload": {"kind": "agentTurn","message": "审查过去 24 小时的所有 PR,检查:- 代码风格一致性- 潜在的安全问题- 测试覆盖率变化- 文档更新情况 生成审查报告发送到 #dev-channel" },"sessionTarget": "isolated","delivery": { "mode": "announce", "channel": "dev-channel" }}'
效果:每天早上 9 点,AI 审查报告准时出现在团队频道。我只需要处理标记为"高风险"的 PR。
5. 重复性重构
场景:API 接口迁移,需要批量修改 50+ 个文件中的调用方式。
OpenClaw 做法:
# 用 exec 找出所有需要修改的文件openclaw exec "grep -r 'old-api' /src --include='*.ts' -l"# 然后让 AI 批量修改openclaw sessions spawn --runtime acp \--task"将所有文件中的 old-api 调用迁移到 new-api, 保持原有逻辑不变,输出修改后的文件列表"
时间节省:1 天 → 30 分钟
6. 技术调研与信息收集
场景:需要对比 3 个状态管理方案,选出最适合项目的。
OpenClaw 做法:
# 并行抓取多个方案的文档和对比openclaw sessions spawn --runtime acp \--task"用 web_fetch 抓取以下页面并对比:1. Redux 官方文档核心概念2. Zustand GitHub README3. Jotai 官方文档 生成对比表格,包含:- 学习曲线- 性能特点- 适用场景- 社区活跃度 推荐适合中型项目的方案"
时间节省:4 小时 → 20 分钟 review
7. 日志分析与错误定位
场景:生产环境出现偶发错误,需要从海量日志中定位问题。
OpenClaw 做法:
# 实时日志监控 + AI 分析openclaw sessions spawn --runtime acp \--task"1. 用 logs.tail 实时读取 /var/log/app/error.log2. 分析错误模式,识别高频错误3. 关联代码位置,给出修复建议 发现严重错误立即通知"
效果:错误定位时间从小时级降到分钟级。
8. 自动化脚本编写
场景:需要定期执行数据备份、清理、报告生成等任务。
OpenClaw 做法:
# 创建定时备份任务openclaw cron add --job'{"name": "每日数据库备份","schedule": { "kind": "cron", "expr": "0 2 * * *", "tz": "Asia/Shanghai" },"payload": {"kind": "systemEvent","text": "执行数据库备份:pg_dump mydb > /backup/mydb_$(date +%Y%m%d).sql" },"sessionTarget": "main"}'
效果:完全自动化,无需人工干预。
四、这 5 类任务,必须自己动手
1. 核心业务逻辑设计
AI 不懂你的业务场景。它可以生成代码,但无法决定:
这个功能该不该做?
优先级如何排序?
用户体验如何平衡?
我的原则:业务逻辑的核心算法和流程设计,必须自己写。
2. 安全敏感代码
认证、授权、加密、支付——这些代码出问题就是大问题。
我的原则:
AI 可以生成初稿,但必须逐行 review
关键安全逻辑自己重写
上线前做专项安全审计
3. 性能关键路径优化
AI 生成的代码往往能跑,但不一定高效。
案例:AI 生成的数据库查询用了 N+1 模式,功能正常,但数据量大时性能暴跌。
我的原则:
性能敏感代码必须人工 profiling
数据库查询自己写 SQL
缓存策略自己设计
4. 创造性问题解决
AI 只能基于已有模式组合,无法真正创新。
案例:设计一个新的交互模式,AI 给出的方案都是现有产品的变体。
我的原则:需要创造力的工作,AI 只能做头脑风暴助手,决策必须自己来。
5. 最终代码审查与责任承担
AI 写的代码,出了问题是你的责任。
我的原则:
所有 AI 生成的代码必须 review 后才能合并
核心模块自己写单元测试验证
上线前做完整的功能测试
五、我的 OpenClaw 工作流(实战案例)
案例 1:自动 PR 审查流水线
// ~/.openclaw/openclaw.json{"cron": {"jobs": [ {"name": "PR 自动审查","schedule": { "kind": "every", "everyMs": 3600000 },"payload": {"kind": "agentTurn","message": "检查 GitHub PR 列表,对新 PR 进行初审:1.代码风格检查(prettier/eslint)2.测试覆盖率变化3.敏感文件修改检测4.生成审查评论到PR高风险PR标记@人工审查" },"sessionTarget": "isolated" } ] }}
效果:每小时自动审查新 PR,80% 的 PR 可以直接合并,20% 标记人工审查。
案例 2:项目健康日报
# 每天早上 8 点生成项目健康报告openclaw cron add --job'{"name": "项目健康日报","schedule": { "kind": "cron", "expr": "0 8 * * *", "tz": "Asia/Shanghai" },"payload": {"kind": "agentTurn","message": "生成项目健康报告:1. 用 exec 运行 git status 检查未提交变更2. 用 exec 运行 npm audit 检查安全漏洞3. 用 exec 运行 npm test 检查测试状态4. 读取 package.json 检查依赖更新 生成报告发送到 #project-health 频道" },"sessionTarget": "isolated","delivery": { "mode": "announce", "channel": "project-health" }}'
效果:每天早上自动收到项目健康报告,问题早发现早解决。
案例 3:技术文档自动更新
# 每次 git push 后自动更新文档openclaw cron add --job'{"name": "文档自动更新","schedule": { "kind": "every", "everyMs": 1800000 },"payload": {"kind": "agentTurn","message": "检查 git 变更,如果有新函数/类:1. 读取源代码提取 API 签名2. 更新 API.md 文档3. 提交变更并推送" },"sessionTarget": "isolated"}'
效果:文档永远和代码同步,再也不用"回头补文档"了。
六、关键配置清单
1. Gateway 配置(安全远程访问)
// ~/.openclaw/openclaw.json{"gateway": {"bind": "loopback","tailscale": { "mode": "serve" },"auth": { "allowTailscale": true },"controlUi": {"enabled": true,"allowedOrigins": ["https://<magicdns>"] } }}
2. Cron 任务配置(自动化)
{"cron": {"jobs": [ {"name": "任务名称","schedule": { "kind": "cron", "expr": "0 9 * * *" },"payload": { "kind": "agentTurn", "message": "任务描述" },"sessionTarget": "isolated","delivery": { "mode": "announce" } } ] }}
3. 会话管理(并行任务)
# 创建持久会话openclaw sessions spawn --runtime acp --mode session --label my-task "任务描述"# 查看会话状态openclaw sessions list# 发送消息到会话openclaw sessions send --label my-task "继续执行"
七、避坑指南
1. 不要过度依赖 AI
坑:把所有代码都交给 AI 写,结果上线后出问题看不懂代码。
解:核心逻辑自己写,AI 只做辅助。
2. 不要忽略安全配置
坑:Gateway 直接暴露在公网,没有配置认证。
解:用 Tailscale Serve,或者至少配置 token 认证。
{"gateway": {"auth": { "mode": "token", "token": "your-secure-token" } }}
3. 不要一次性创建太多会话
坑:同时 spawn 10 个会话,API 额度瞬间用完。
解:控制并发数,用队列管理任务。
4. 不要忽略日志监控
坑:Cron 任务失败了没人知道。
解:配置 webhook 通知,或者定期检查 openclaw cron runs。
结语
AI 编程不是"取代程序员",而是"解放程序员"。
把 80% 的重复工作交给 AI,把省下的时间用来做那 20% 真正有价值的事——架构设计、技术创新、和解决复杂问题。
OpenClaw 的 Web 能力(Control UI + Tailscale + Cron + Sessions)让这个过程变得简单、安全、可管理。
最后的建议:
从一个小任务开始尝试(比如自动生成 README)
逐步扩大 AI 的工作范围
始终保持 review 和 oversight
记录哪些任务适合 AI,哪些不适合
夜雨聆风