一天24小时,你有多少时间花在重复琐事上?
查天气、定闹钟、发邮件、整理文件、看新闻、记笔记...这些事每件都要5分钟,一天加起来就是1-2小时。
我之前也是这样,直到我用OpenClaw搭了个个人自动化助手。
现在我只说一句话,它就帮我搞定所有琐事。
"查一下明天天气,如果有雨就提醒我带伞,顺带给老板发个请假邮件,把今天的Todo列表整理一下,最后把明天的日程同步到日历。"
这句话包含了6个任务,以前我要切换5个APP,花15分钟。现在一句话,30秒搞定。
这篇文章讲我是怎么做到的。
核心思路:把你的日常操作变成Skill
OpenClaw的核心概念是Skill——一个能完成特定任务的小模块。
比如"查天气"是一个Skill,"定闹钟"是另一个Skill,"发邮件"是第三个Skill。
你把这些Skill串起来,就能完成复杂任务。
你输入: "查天气、定闹钟、发邮件" ↓ OpenClaw分析意图 ↓ 匹配Skill: WeatherSkill + AlarmSkill + EmailSkill ↓ 按顺序执行 ↓ 返回结果
关键点:不是每次都重新写代码,而是把常用的操作封装成Skill,复用。
搭建过程:三步走
▪ 第一步:安装OpenClaw
# 克隆项目 git clone https://github.com/helloworldtang/openclaw.git cd openclaw # 安装依赖 npm install # 启动 npm start
踩坑1:Node版本问题
我一开始用Node 16启动,报错"Cannot find module 'xxx'"。查了半天发现OpenClaw需要Node 18+。
# 查看Node版本 node -v # 升级到Node 18+ nvm install 18 nvm use 18
代价:查了30分钟,差点放弃。
▪ 第二步:配置环境变量
OpenClaw需要一个配置文件config.yaml:
skills: enabled: - weather - alarm - email - calendar - todo weather: apiKey: "your-weather-api-key" email: smtp: host: "smtp.gmail.com" port: 587 user: "your-email@gmail.com" password: "your-app-password" calendar: apiKey: "your-calendar-api-key"
踩坑2:API Key配置错误
我一开始把Weather API Key写错了,结果每次查天气都返回"API Key无效"。
解决方法:在OpenClaw的Web界面测试API Key是否有效,而不是直接填到配置文件里。
# 测试Weather API curl "https://api.weather.com/v1/current?apikey=your-key&location=Beijing"
代价:排查了1小时,以为是代码bug,结果是API Key写错。
▪ 第三步:创建自定义Skill
OpenClaw内置了常用Skill(天气、闹钟、邮件等),但你需要自定义一些Skill才能满足个人需求。
比如我创建了一个"整理Todo列表"的Skill:
class TodoOrganizerSkill(Skill): name = "todo-organizer" description = "整理Todo列表,标记已完成的任务" def execute(self, context): # 读取Todo列表 todos = self.read_todos() # 标记已完成的任务 completed = [t for t in todos if t['status'] == 'completed'] # 保存到文件 self.save_todos(todos) return f"已整理Todo列表,完成了{len(completed)}个任务" def read_todos(self): with open('todos.json', 'r') as f: return json.load(f) def save_todos(self, todos): with open('todos.json', 'w') as f: json.dump(todos, f)
踩坑3:JSON文件权限问题
我一开始把todos.json放在系统目录,结果OpenClaw没有写入权限,报错"Permission denied"。
解决方法:把数据文件放在data/目录下,确保OpenClaw有读写权限。
# 创建data目录 mkdir -p data # 修改权限 chmod 755 data
代价:排查了45分钟,以为是代码逻辑错误,结果是权限问题。
我的5个高频Skill
▪ Skill 1:天气查询 + 自动提醒
早上起床后,我只需说"今天天气怎么样",OpenClaw会:
class WeatherWithReminderSkill(Skill): name = "weather-reminder" description = "查询天气并自动提醒" def execute(self, context): # 查询天气 weather = self.get_weather("Beijing") # 判断是否下雨 if weather['condition'] == 'rain': self.send_notification("今天有雨,记得带伞!") return f"今天{weather['condition']},温度{weather['temp']}度"
▪ Skill 2:自动整理Todo列表
每天晚上睡前,我只需说"整理今天的Todo",OpenClaw会:
class TodoDailySummarySkill(Skill): name = "todo-daily-summary" description = "整理Todo列表并生成今日总结" def execute(self, context): todos = self.read_todos() completed = [t for t in todos if t['status'] == 'completed'] pending = [t for t in todos if t['status'] == 'pending'] summary = f"今天完成了{len(completed)}个任务,还有{len(pending)}个任务未完成" self.save_todos(todos) return summary
▪ Skill 3:自动发邮件
有时候我需要给老板发请假邮件,只需说"发个请假邮件给老板,说我明天有事",OpenClaw会:
class AutoEmailSkill(Skill): name = "auto-email" description = "自动发送邮件" def execute(self, context): recipient = context.get('recipient') subject = context.get('subject') content = context.get('content') self.send_email(recipient, subject, content) return f"已发送邮件给{recipient},主题:{subject}"
▪ Skill 4:同步日程到日历
每周一,我只需说"同步本周日程到日历",OpenClaw会:
class CalendarSyncSkill(Skill): name = "calendar-sync" description = "同步日程到日历" def execute(self, context): todos = self.read_todos() for todo in todos: if todo['has_deadline']: self.create_calendar_event(todo) return f"已同步{len(todos)}个日程到日历"
▪ Skill 5:新闻摘要
每天早上,我只需说"今天的新闻",OpenClaw会:
class NewsSummarySkill(Skill): name = "news-summary" description = "生成今日新闻摘要" def execute(self, context): news = self.fetch_news() # 过滤不感兴趣的话题 filtered = [n for n in news if not self.is_blacklisted(n['topic'])] # 生成摘要 summary = self.generate_summary(filtered) return summary
效果:每天节省2小时
我用了一周OpenClaw,效果很明显:
任务 | 以前耗时 | 现在耗时 | 节省时间 |
|---|---|---|---|
查天气 + 定闹钟 | 10分钟 | 30秒 | 9.5分钟 |
整理Todo列表 | 15分钟 | 1分钟 | 14分钟 |
发邮件 | 10分钟 | 1分钟 | 9分钟 |
同步日程到日历 | 20分钟 | 2分钟 | 18分钟 |
查新闻 | 30分钟 | 5分钟 | 25分钟 |
总计 | 85分钟 | 9.5分钟 | 75.5分钟 |
每天节省1小时15分钟,一周就节省了8.75小时,相当于多了一个工作日。
踩坑总结
▪ 坑1:Skill之间的数据共享问题
我一开始想让"天气查询"和"自动提醒"两个Skill共享数据,但发现Skill之间无法直接传递数据。
解决: 用文件系统作为中转。
# Skill 1: 查询天气 def execute(self, context): weather = self.get_weather() # 保存到文件 with open('weather.json', 'w') as f: json.dump(weather, f) return "天气查询完成" # Skill 2: 读取天气数据 def execute(self, context): # 读取文件 with open('weather.json', 'r') as f: weather = json.load(f) if weather['condition'] == 'rain': self.send_notification("今天有雨,记得带伞!") return "提醒已发送"
代价:排查了2小时,查了文档才发现需要用文件系统。
▪ 坑2:Skill执行顺序问题
我一开始以为Skill是按我配置的顺序执行的,结果发现是按OpenClaw内部匹配的顺序执行的。
解决: 用dependencies字段指定依赖关系。
class EmailSkill(Skill): name = "email" description = "发送邮件" dependencies = ["todo-daily-summary"] # 依赖Todo整理完成后才能发送 def execute(self, context): summary = context.get('todo_summary') self.send_email("boss@example.com", "今日总结", summary) return "邮件已发送"
代价:排查了1.5小时,以为是bug,结果是缺少依赖声明。
▪ 坑3:Skill的输入输出格式不一致
我一开始以为所有Skill的输入输出都是JSON,结果发现有些Skill需要字符串,有些需要字典。
解决: 统一用JSON格式,在Skill内部做转换。
def execute(self, context): # 统一从context中提取参数 if isinstance(context, str): context = json.loads(context) # 处理逻辑... # 统一返回JSON格式 return json.dumps({"status": "success", "result": result})
代价:排查了1小时,以为是数据类型错误,结果是格式不统一。
你可以学到什么
三个模式,适用于任何个人自动化场景:
模式1:封装高频操作为Skill
不要每次都从头写代码,把常用的操作封装成Skill,复用。
模式2:用文件系统做数据共享
Skill之间无法直接传递数据,用文件系统作为中转。
模式3:用dependencies字段控制执行顺序
不要依赖OpenClaw的默认顺序,显式声明Skill的依赖关系。
GitHub项目
完整代码:https://github.com/helloworldtang/my-personal-assistant
包含5个Skill的完整实现,可以直接运行。
一句话
最好的自动化不是你每天记着做什么,而是系统自动帮你做。
用OpenClaw搭个个人自动化助手,让你从琐事中解放出来,把时间花在真正重要的事情上。