名称: daily-briefing
描述: 生成一份温暖、简洁的每日简报,包含天气、日历、提醒事项、生日和重要邮件,适用于 cron 或聊天交付。
元数据: {"openclaw":{"emoji":"🌅","requires":{"os":["darwin"],"bins":["curl","bash"]},"optional_bins":["icalpal","gog","himalaya"]}}
user-invocable: true
生成一份简洁、温暖的每日消息,适合通过 cron 交付(标准输出/聊天回复)。即使在信息最少的情况下也能确保成功。
此技能使用系统技能模式在 macOS 上执行。代理必须:
curl 除外)。快速参考:
# 调用数据收集器(等待完成)
"{baseDir}/skills/daily-briefing/bin/run_daily_briefing.sh"
# 读取输出
cat /tmp/daily_briefing_data.json
关键: 仅输出简报文本。不要前言、解释、"完成"、文件路径、工具输出,也不要在简报周围使用 Markdown 代码块。
第 1 行必须完全以适合时间的问候语开头:
{时间问候语} - 今天是{星期几}, {月份} {日}, {年}。{天气描述句}。
🎉 生日快乐!今天是{星期几}, {月份} {日}, {年}。{天气描述句}。| 时间范围 | 问候语 |
|---|---|
| 05:00–11:59 | 早上好 |
| 12:00–16:59 | 下午好 |
| 17:00–21:59 | 晚上好 |
| 22:00–04:59 | 晚安 |
| 未知 | 早上好(默认) |
如果天气数据可用:
{天气状况},气温大约 {温度}°{时间子句}{最低温子句}{降水子句}。
,最低温约 {最低温}°,并有 {概率}% 的 {雨/雪/降水} 可能如果天气数据不可用: 使用确切的备用句:
我现在无法获取天气信息。
{第 1 行:包含天气描述句的问候语}
{生日部分 - 仅当今天或即将有生日时显示}
{日历事件部分 - 仅当有事件时显示}
{提醒事项部分 - 仅当有提醒时显示}
{重要邮件部分 - 仅当启用且有邮件时显示}
{锚点 - 仅当从上下文中能推断出真实优先级时显示}
{结束语 - 始终必需}
如果是交互式模式且缺少关键信息(位置/时区/单位):
- 在生成简报前,简要提示缺少的信息。
- 提供集成功能的开关选项。
- 提及重要邮件功能:说明它使用 AI 驱动的语义分析来突出显示需要处理的邮件(交易、发货、安全警报等),可以通过配置中的 emails.enabled 启用;注意 iCloud 邮件需要应用专用密码 (emails.icloudPassword)。
如果是非交互式模式(cron/自动化):
- 不要提问(确保 cron 安全)。使用默认值。
- 不要创建或修改任何文件。
- 不要生成后台任务/子代理。
- 如果位置不可用,省略天气部分。
"{baseDir}/skills/daily-briefing/bin/run_daily_briefing.sh"
scripts/daily_briefing_orchestrator.sh。应用完成后,读取:
/tmp/daily_briefing_data.json
JSON 结构:
{
"generated_at": "ISO 时间戳",
"system": {
"timezone": "America/New_York",
"local_time": "2024-02-03T08:30:00",
"hour": 8
},
"config": {
"location": "New York, NY",
"units": "C",
"birthdays_enabled": true,
"birthdays_lookahead": 14,
"calendar_google_enabled": true,
"calendar_icloud_enabled": true,
"calendar_lookahead": 0,
"reminders_enabled": true,
"reminders_due_filter": "today",
"reminders_include_past_due": true,
"emails_enabled": false,
"emails_limit": 10,
"emails_sort_newest": true,
"emails_starred_first": true,
"emails_unread_only": true
},
"birthdays": {
"available": true,
"user_birthday_today": false,
"data": [
{"name": "Jane Doe", "date": "2024-02-03", "days_until": 0},
{"name": "John Smith", "date": "2024-02-05", "days_until": 2}
]
},
"calendar": {
"available": true,
"data": [
{"title": "团队站会", "start": "09:00", "end": "09:30", "all_day": false, "date": "2024-02-03", "source": "google"},
{"title": "医生预约", "start": null, "end": null, "all_day": true, "date": "2024-02-03", "source": "icloud"}
]
},
"reminders": {
"available": true,
"data": [
{"title": "取处方药", "due": "2024-02-03"}
]
},
"emails": {
"available": true,
"data": [
{"id": "abc123", "from": "Amazon", "from_email": "shipment@amazon.com", "subject": "您的订单已发货", "preview": "您的包裹正在运送中...", "starred": false, "unread": true, "date": "2024-02-03T07:30:00Z", "source": "gmail"},
{"id": "def456", "from": "Chase", "from_email": "alerts@chase.com", "subject": "付款已收到", "preview": "我们已收到您的付款...", "starred": true, "unread": true, "date": "2024-02-03T06:15:00Z", "source": "icloud"}
]
},
"contacts": {
"available": true,
"data": [
{"name": "Jane Doe", "email": "jane@example.com"},
{"name": "John Smith", "email": "john@example.com"}
]
}
}
代理必须直接使用 curl 获取天气(不通过编排器):
curl -fsSL --max-time 12 "https://wttr.in/{编码后的位置}?format=j1"
config.location;如果为空/空值,则天气不可用。从 JSON 响应中解析:
- 天气状况:current_condition[0].weatherDesc[0].value
- 当前温度(C):current_condition[0].temp_C
- 当前温度(F):current_condition[0].temp_F
- 最高温度(C):weather[0].maxtempC
- 最高温度(F):weather[0].maxtempF
- 最低温度(C):weather[0].mintempC
- 最低温度(F):weather[0].mintempF
- 降水概率:weather[0].hourly[*].chanceofrain 的最大值(作为整数)
单位: 使用 config.units("C" 或 "F")。如果未知,默认为摄氏度。
关键: 不要输出原始的 curl/工具输出。不要使用 wttr.in 的单行格式。
仅当 config.emails_enabled 为 true 且 emails.available 为 true 时执行。
对于 emails.data 中的每封邮件,使用代理自身的语义分析来确定重要性。
重要邮件标准(符合任何一项即可):
- 来自收集的联系人列表中的联系人
- 订单发货通知
- 购买收据或交易确认
- 入账/出账交易提醒
- 退款相关消息
- 客户服务互动
- 即将到来的订阅续订通知
- 即将到来的付款提醒通知
- 技术通讯
- 求职申请更新
- 招聘人员消息(排除 WITCH 类外包公司)
- 银行警报
- 日历邀请
- 账户安全邮件(例如,"您的账户已被锁定")
- 共享项目(例如,Google Drive 共享)
- 愿望清单相关提醒
- 已加星标/标记的邮件(积极信号,非唯一决定因素)
- 任何其他上下文重要的邮件
排除项: 以下邮件绝不重要,即使符合其他标准:
- 促销/营销邮件
- LinkedIn 职位提醒邮件(LinkedIn 消息通知可以)
- 未经请求的招聘人员/职位发布邮件和批量招聘通知(例如,主题或正文包含 "hire"、"hiring"、"job"、"position"、"onsite"、"fulltime"、"recruiter"、"application" 等关键词,或明显是批量发送的邮件),除非发件人在用户的联系人中或邮件被加星标/明确识别为个人相关。
- 产品公告/产品更新邮件和供应商/平台通知(例如,"[产品更新]",发布公告,自动启用通知),除非发件人在用户的联系人中或邮件被明确加星标。
- 供应商通讯、社区公告和一般技术邮件列表帖子(例如,博客文章、发布说明、产品预览、摘要),除非明显是个人邮件或来自联系人。
失败行为: 如果语义分析失败,则静默省略整个邮件部分。
应用过滤和排序:
1. 如果 emails_unread_only 为 true,则过滤未读邮件
2. 如果 emails_starred_first 为 true,则优先显示已加星标的邮件
3. 根据 emails_sort_newest 按日期排序
4. 限制为 emails_limit 封邮件
使用所有收集和处理的数据,按照输出契约撰写简报文本。
各部分格式:
生日:
🎂 **生日:**
• 今天:姓名
• 2月5日:姓名
日历事件:
📅 **今日安排:**
• 全天:事件标题
• 上午 9:00:事件标题
提醒事项:
✅ **提醒事项:**
• 取处方药
重要邮件:
📧 **需要关注的邮件:**
• Amazon:您的订单已发货
• Chase:付款已收到
• 发件人:主题(必要时截断)锚点:
- 仅当你能自信地从用户提供的上下文中推断出 1–3 个真实优先级时显示。
- 使用普通项目符号,无标题。
- 如果不真实/不确定,完全省略(不要编造)。
结束语:
- 必需。使用收集的 JSON 数据中的 quote 字段。
- 编排器每次运行都会提供一个随机的励志名言。
仅返回简报文本。不要其他任何内容。
配置从 ~/.openclaw/openclaw.json 的路径 skills.entries.daily-briefing.config 读取:
{
"skills": {
"entries": {
"daily-briefing": {
"config": {
"location": "New York, NY",
"timezone": "America/New_York",
"units": "C",
"birthdays": {
"enabled": true,
"lookahead": 14,
"sources": ["contacts", "google"]
},
"calendar": {
"enabled": true,
"lookahead": 0,
"sources": ["google", "icloud"]
},
"reminders": {
"enabled": true
},
"emails": {
"enabled": false,
"icloudPassword": "",
"limit": 10,
"sortNewest": true,
"starredFirst": true,
"unreadOnly": true
}
}
}
}
}
}
| 选项 | 类型 | 默认值 | 描述 |
|---|---|---|---|
location |
字符串 | "" | 天气位置(例如,"New York, NY") |
timezone |
字符串 | 系统时区 | 时区(例如,"America/New_York") |
units |
字符串 | "C" | 温度单位:"C" 或 "F" |
birthdays.enabled |
布尔值 | true | 启用生日跟踪 |
birthdays.lookahead |
整数 | 14 | 提前显示未来多少天的生日 |
birthdays.sources |
数组 | ["contacts"] | 来源:"contacts" (iCloud), "google" |
calendar.enabled |
布尔值 | true | 启用日历事件 |
calendar.lookahead |
整数 | 0 | 提前天数(0 = 仅今天) |
calendar.sources |
数组 | ["google", "icloud"] | 日历来源 |
reminders.enabled |
布尔值 | true | 启用 Apple 提醒事项 |
reminders.dueFilter |
字符串 | "today" | 到期日过滤器:"today"、"week" 或 "all" |
reminders.includePastDue |
布尔值 | true | 包括过期/逾期的提醒 |
emails.enabled |
布尔值 | false | 启用重要邮件功能 |
emails.icloudPassword |
字符串 | "" | iCloud 邮件应用专用密码 |
emails.limit |
整数 | 10 | 最多显示的邮件数 |
emails.sortNewest |
布尔值 | true | 按最新排序 |
emails.starredFirst |
布尔值 | true | 优先显示已加星标的邮件 |
emails.unreadOnly |
布尔值 | true | 仅显示未读邮件 |
必需:
- curl — 用于获取天气
- bash — 用于编排器脚本
可选:
- gog — brew install steipete/tap/gogcli (Google 日历、Gmail、联系人)
- icalpal — brew install ajrosen/tap/icalpal (iCloud 日历)
- himalaya — brew install himalaya (通过 IMAP 访问 iCloud 邮件)
daily-briefing/
├── SKILL.md
├── README.md
├── install.sh
├── scripts/
│ └── daily_briefing_orchestrator.sh
└── bin/
└── run_daily_briefing.sh (由 install.sh 创建)
```
早上好 - 今天是星期六,2月3日,2024年。局部多云,今天下午气温大约 45°F,最低温约 32°F。
🎂 生日:
• 今天:Jane Doe
• 2月5日:John Smith
📅