网淘吧来吧,欢迎您!

Daily Briefing

2026-03-29 新闻来源:网淘吧 围观:13
电脑广告
手机广告

每日简报

生成一条简洁、温馨的每日消息,适用于cron任务交付(标准输出/聊天回复)。即使在上下文信息极少的情况下,也始终能成功生成。


技能类型:系统技能(协调器模式)

此技能使用系统技能模式在macOS上执行。代理必须:

  1. 绝不直接运行原始CLI命令(除了curl用于获取天气信息)。
  2. 始终调用运行器脚本来收集数据。
  3. 脚本完成后,从JSON中读取收集到的数据。
  4. 利用代理自身的能力生成简报文本。

快速参考:

# Invoke data gatherer (waits for completion)
"{baseDir}/skills/daily-briefing/bin/run_daily_briefing.sh"

# Read output
cat /tmp/daily_briefing_data.json

输出契约(严格)

关键:仅输出 only简报文本。无需前言,无需解释,无需"完成",无需文件路径,无需工具输出,简报周围无需markdown代码块。

第1行格式(必需)

第1行必须严格以符合当前时间的问候语开头:

Good {time_of_day} - Today is {Weekday}, {Month} {D}, {YYYY}. {Skies sentence}.
  • 使用完整的月份名称(例如,"February",而非"Feb")。
  • 如果今天是用户的生日(通过联系人姓名匹配):将问候语替换为:
    🎉 Happy Birthday! Today is {Weekday}, {Month} {D}, {YYYY}. {Skies sentence}.
    

问候语选择(当地时间)

时间范围问候语
05:00–11:59早上好
12:00–16:59下午好
17:00–21:59晚上好
22:00–04:59晚安
未知早上好(默认)

天气状况句子规则

如果天气数据可用:

{Conditions} skies, around {TEMP}°{time_clause}{low_clause}{precip_clause}.
  • 使用最高气温若数据可靠 → 时间状语:"今天下午"
  • 否则使用当前气温→ 时间状语:"当前时刻"
  • 若存在最低气温:追加,最低气温约{LOW}度
  • 若降水概率≥30%:追加,并有{CHANCE}%的{雨/雪/降水}概率

如果天气数据不可用:使用精确备用方案:

I can't access weather right now.

布局规则

{Line 1: Greeting with skies sentence}

{Birthdays section - only if any today or upcoming}

{Calendar events section - only if any}

{Reminders section - only if any}

{Important emails section - only if enabled and any}

{Anchors - only if real priorities from context}

{Closing line - always required}
  • 始终在首行后包含一个空行
  • 各段落间若存在则以空行分隔。
  • 目标长度约5至15行根据启用的集成功能而定。

氛围与基调

  • 献给今日的温柔馈赠温暖、平静、富有同情心,带着安静的希望。
  • 没有责备,没有紧迫感,没有生产力压力。
  • 适用于Telegram风格:简短行文,宽松间距,易于浏览。

系统技能执行

步骤1:检查模式(交互式 vs 定时任务)

如果是交互式模式且缺少关键信息(位置/时区/单位):

  • 在生成简报前,简要提示用户补充缺失信息。
  • 提供集成功能的开关选项。
  • 提及重要邮件功能:说明它使用AI驱动的语义分析来筛选出需要处理的邮件(交易、物流、安全警报等),并可通过配置中的 `emails.enabled` 启用。`emails.enabled`;注意iCloud邮箱需要应用专用密码(配置中的 `emails.icloudPassword`)。`emails.icloudPassword`如果是非交互式模式(定时任务/自动化):

不要提问(确保定时任务安全)。使用默认设置。

  • 不要创建或修改任何文件。
  • 不要启动后台任务或子代理。
  • Do NOT spawn background tasks/sub-agents.
  • 省略天气信息若位置信息不可用。

步骤 2:调用数据收集器

"{baseDir}/skills/daily-briefing/bin/run_daily_briefing.sh"
  • 运行脚本执行scripts/daily_briefing_orchestrator.sh
  • 授予 Terminal.app(或调用进程)TCC 权限。

步骤 3:读取收集的数据

应用完成后,读取:

/tmp/daily_briefing_data.json

JSON 结构:

{
  "generated_at": "ISO timestamp",
  "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": "Team standup", "start": "09:00", "end": "09:30", "all_day": false, "date": "2024-02-03", "source": "google"},
      {"title": "Doctor appointment", "start": null, "end": null, "all_day": true, "date": "2024-02-03", "source": "icloud"}
    ]
  },
  "reminders": {
    "available": true,
    "data": [
      {"title": "Pick up prescription", "due": "2024-02-03"}
    ]
  },
  "emails": {
    "available": true,
    "data": [
      {"id": "abc123", "from": "Amazon", "from_email": "shipment@amazon.com", "subject": "Your order has shipped", "preview": "Your package is on its way...", "starred": false, "unread": true, "date": "2024-02-03T07:30:00Z", "source": "gmail"},
      {"id": "def456", "from": "Chase", "from_email": "alerts@chase.com", "subject": "Payment received", "preview": "We received your payment of...", "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"}
    ]
  }
}

步骤 4:获取天气(代理任务)

代理必须直接使用curl(而非通过编排器)获取天气:

curl -fsSL --max-time 12 "https://wttr.in/{ENCODED_LOCATION}?format=j1"
  • 位置:使用config.location从收集的数据中获取;若为空/无效,则天气信息不可用。
  • 重试:失败时重试一次。
  • 若仍失败或不可用:天气信息不可用;使用备用语句。

从JSON响应中解析:

  • 天气状况:current_condition[0].weatherDesc[0].value
  • 当前温度(摄氏度):current_condition[0].temp_C
  • 当前温度(华氏度):current_condition[0].temp_F
  • 最高温度(摄氏度):weather[0].maxtempC
  • 最高温度(华氏度):weather[0].maxtempF
  • 最低温度(摄氏度):weather[0].mintempC
  • 最低温度(华氏度):weather[0].mintempF
  • 降水概率:取以下数组中的最大值weather[0].hourly[*].chanceofrain(作为整数处理)

单位:使用config.units("C" 或 "F")。如果未知,则默认使用摄氏度。

关键:请勿输出原始的curl/工具输出。请勿使用wttr.in单行格式。

步骤5:分类重要邮件(代理任务)

仅当config.emails_enabled为真且emails.available为真时执行。

对于emails.data中的每一封邮件,使用代理自身的语义分析来确定其重要性。

重要邮件标准(符合以下任意一条即视为重要):

  • 来自已收集联系人列表中的联系人
  • 订单发货通知
  • 购买收据或交易确认
  • 入账/出账交易提醒
  • 退款相关消息
  • 客户服务互动
  • 即将到来的订阅续订通知
  • 即将到来的付款提醒通知
  • 技术通讯
  • 求职申请更新
  • 来自招聘人员的消息(排除类似WITCH的外包公司)
  • 银行提醒
  • 日历邀请
  • 账户安全邮件(例如"您的账户已被锁定")
  • 共享项目(例如Google云端硬盘共享)
  • 心愿单相关提醒
  • 星标/标记邮件(积极信号,非唯一判定标准)
  • 其他任何上下文重要的邮件

排除项:以下邮件绝不重要(即使符合其他标准):

  • 促销/营销邮件
  • LinkedIn职位提醒邮件(LinkedIn消息通知可保留)
  • 未经请求的招聘/职位发布邮件及批量招聘通知(例如主题或正文包含"招聘"、"雇用"、"职位"、"岗位"、"现场"、"全职"、"招聘人员"、"申请"等关键词或明显群发内容),除非发件人在用户联系人中,或邮件被星标/可明确识别为个人相关邮件
  • 产品公告 / 产品更新邮件以及供应商/平台通知(例如"[产品更新]"、发布公告、自动启用通知),除非发件人在用户的联系人列表中或邮件被明确标星。
  • 供应商新闻通讯、社区公告以及一般技术邮件列表帖子(例如,博客文章、发行说明、产品预览、摘要),除非明显是个人邮件或来自联系人。

失败行为:如果语义分析失败,则静默地省略整个邮件部分

应用过滤和排序:

  1. 仅未读邮件进行过滤,如果为真
  2. 如果星标邮件优先为真,则星标邮件优先
  3. 按日期排序,依据邮件排序_最新
  4. 限制为邮件限制数量

步骤 6:生成简报

使用所有已收集和处理的数据,按照输出约定撰写简报文本。

区块格式:

生日:

🎂 **Birthdays:**
• Today: Name
• Feb 5: Name
  • 按日期分组多个条目
  • 今日条目优先显示
  • 最多显示5个即将到来的生日(今日除外)

日历事件:

📅 **Today's schedule:**
• All-day: Event title
• 9:00 AM: Event title
  • 单日事件:显示为"今日日程"
  • 多日事件:显示为"日程",并使用"今日/明日/{月} {日}"标签
  • 全天事件优先,然后按开始时间排序
  • 每天最多显示3个事件

提醒事项:

✅ **Reminders:**
• Pick up prescription
  • 仅显示今日到期的提醒
  • 最多显示3个提醒

重要邮件:

📧 **Emails needing attention:**
• Amazon: Your order has shipped
• Chase: Payment received
  • 格式:• 发件人:主题(必要时截断)

重点事项锚点:

  • 仅在能够从用户提供的上下文信息中可靠推断出1-3个真实优先级事项时显示
  • 使用普通项目符号,无标题
  • 若非真实事项或无法确定则完全省略此部分(不要虚构)。

结束语:

  • 必需。使用quote字段,该字段来自收集的JSON数据。
  • 编排器每次运行都会提供一个随机的励志名言。

步骤7:输出简报

返回简报文本。不要其他任何内容。


配置

配置从~/.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")
时区字符串系统时区(例如:"America/New_York")
单位字符串"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仅显示未读邮件

默认设置

  • 时区:用户的本地时区;若未知则回退至UTC
  • 位置:用户的位置(如果存在);省略天气信息若在 cron 模式下不可用。
  • 单位:若已知,则使用用户偏好的单位;否则摄氏度

依赖项

必需:

  • 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 (created by install.sh)

示例输出

Good morning - Today is Saturday, February 3, 2024. Partly cloudy skies, around 45°F this afternoon, with a low around 32°F.

🎂 **Birthdays:**
• Today: Jane Doe
• Feb 5: John Smith

📅 **Today's schedule:**
• All-day: Doctor appointment
• 9:00 AM: Team standup

✅ **Reminders:**
• Pick up prescription

📧 **Emails needing attention:**
• Amazon: Your order has shipped
• Chase: Payment received

Take things one step at a time today—you've got this.

清理

"{baseDir}/skills/daily-briefing/bin/run_daily_briefing.sh" --cleanup
免责申明
部分文章来自各大搜索引擎,如有侵权,请与我联系删除。
打赏
文章底部电脑广告
手机广告位-内容正文底部

相关文章

您是本站第321518名访客 今日有117篇新文章/评论