mcpField
M
morning-briefing

morning-briefing

github.com/krishagel生产力7199 次安装33 周前更新
代码仓库

关于 morning-briefing

morning-briefing 是一项每日简报工作流,面向需要汇总个人日程、任务、工单和新闻的用户。它将多种数据源与团队动态纳入简报,并通过终端、Obsidian 和邮件交付。

主要功能

  1. 01汇总日历事件与 OmniFocus 任务
  2. 02筛选近 24 小时的邮件
  3. 03收集工单、待审批和团队动态
  4. 04检索并概述新闻与立法活动
  5. 05比较工单趋势并识别优先事项
  6. 06输出终端、Obsidian 和邮件简报

适用场景

  1. 01开始工作日时查看日程与待办事项
  2. 02跟进团队昨日工作和已结工单
  3. 03了解教育、AI、安全及政策相关新闻

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/krishagel/geoffrey --skill morning-briefing

安装后在 Claude Code 中输入/morning-briefing确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

pronunciation_guide.json
references/
podcast-script-template.md
scripts/
apply_pronunciations.js
get_due_flagged.js
get_last_business_day.js
templates/
email.html

详细介绍

Morning Briefing 工作流

概述

生成每日晨间简报,并通过以下三种方式发送:

  1. 终端:立即显示摘要
  2. Obsidian:将完整简报保存到每日笔记
  3. 电子邮件:简报文本 + 音频播客附件

位置

  • Gig Harbor,WA - 用于天气查询

阶段 1:收集数据

执行以下数据收集步骤:

1.1 日历(今日活动)
cd /Users/hagelk/non-ic-code/geoffrey/skills/google-workspace && bun calendar/list_events.js psd --today

返回包含今日活动的 JSON,其中包括:

  • 活动摘要、地点、开始/结束时间
  • 参与者及其回复状态
  • Hangout/会议链接

账户:工作日历使用 psd

1.2 OmniFocus 任务(到期和已标记)
osascript -l JavaScript /Users/hagelk/non-ic-code/geoffrey/skills/morning-briefing/scripts/get_due_flagged.js

返回符合以下条件的任务:

  • 今日到期或已逾期
  • 已标记
  • 可用(未被阻止,也未推迟到未来)
1.3 最近的电子邮件(过去 24 小时)
# Get yesterday's date in Gmail query format
YESTERDAY=$(date -v-1d +%Y/%m/%d)
cd /Users/hagelk/non-ic-code/geoffrey/skills/google-workspace && bun gmail/list_messages.js psd --query "in:inbox after:$YESTERDAY" --max 15

返回最近的收件箱邮件,其中包括:

  • 发件人、主题、日期、摘要
  • 已读或未读状态
  • 用于了解上下文的会话 ID
  • 标签数组

筛选:仅显示仍在收件箱中的电子邮件(尚未添加标签/处理)。

  • 带有自定义标签(Label_XXXXX)的电子邮件已分类,应排除
  • 例外:包含 SaneCC 或 SaneLater 标签的电子邮件应纳入(值得留意)
  • 系统标签(UNREAD、INBOX、CATEGORY_*、IMPORTANT)不算作“已处理”

原则:过去 24 小时内仍在收件箱中的任何电子邮件都需要关注,无论已读与否。

账户:工作电子邮件使用 psd

1.4 未结的 Freshservice 工单
bun /Users/hagelk/non-ic-code/geoffrey/skills/freshservice-manager/scripts/list_tickets.js '{"workspace_id": 2, "filter": "new_and_my_open"}'

返回 Technology 工作区中分配给用户或由用户创建的未结工单。

1.5 待审批事项
bun /Users/hagelk/non-ic-code/geoffrey/skills/freshservice-manager/scripts/get_approvals.js requested

返回等待审批的服务请求。

1.6 天气

使用 WebSearch:

Gig Harbor WA weather today forecast

提取:

  • 当前天气状况
  • 最高/最低气温
  • 降水概率
  • 任何预警
1.7 EdTech 新闻(含摘要)

使用 WebSearch:

K-12 education technology news past 24 hours January 2026

对于找到的每篇文章(3-5 篇):

  1. 使用 WebFetch 阅读全文
  2. 提取 2-3 句摘要,涵盖:
    • 发生了什么 / 有哪些新进展
    • 这对 K-12 教育为何重要
    • 关键结论或行动事项

时效性检查:纳入文章前,确认文章日期。仅纳入过去 24 小时内发布的文章。即使较旧的文章出现在搜索结果中,也应跳过。

涵盖主题:

  • EdTech 产品发布与更新
  • 学校技术政策变化
  • 学校网络安全
  • 数字化学习趋势
1.8 AI 新闻(含摘要)

使用 WebSearch:

artificial intelligence news past 24 hours January 2026 latest

对于找到的每篇文章(3-5 篇):

  1. 使用 WebFetch 阅读全文
  2. 提取 2-3 句摘要,涵盖:
    • 有哪些新进展
    • 对行业的影响
    • 与教育/工作的相关性

时效性检查:纳入文章前,确认文章日期。仅纳入过去 24 小时内发布的文章。即使较旧的文章出现在搜索结果中,也应跳过。

涵盖主题:

  • 重要 AI 模型的发布及其能力
  • AI 政策与监管
  • 企业采用 AI 的情况
  • AI 研究突破
1.9 K-12 领导力新闻(含摘要)

使用 WebSearch:

K-12 school leadership superintendent news past 24 hours January 2026

对于找到的每篇文章(2-3 篇):

  1. 使用 WebFetch 阅读全文
  2. 提取 2-3 句摘要,涵盖:
    • 政策或领导力方面的新进展
    • 对学区/学校的影响
    • 与 CIO/技术领导力的相关性

时效性检查:纳入文章前,确认文章日期。仅纳入过去 24 小时内发布的文章。即使较旧的文章出现在搜索结果中,也应跳过。

涵盖主题:

  • 州和联邦教育政策
  • 学监和教育委员会新闻
  • 学校资金与预算
  • 人力和人员配置趋势
1.9b 学校安全与安保新闻(附摘要)

使用 WebSearch:

K-12 school safety security news past 24 hours January 2026

对于找到的每篇文章(3 篇):

  1. 使用 WebFetch 阅读文章全文
  2. 提取 2–3 句话的摘要,涵盖:
    • 发生了什么/有哪些新进展
    • 对学校安全措施的影响
    • 对学区的重要启示

时效性检查:纳入文章前核实发布日期。仅纳入过去 24 小时内发布的文章。即使较早的文章出现在搜索结果中,也要跳过。

涵盖主题:

  • 学校安保事件及应对措施
  • 安全政策变更
  • 应急准备
  • 心理健康与威胁评估
  • 实体安保技术
1.10 技术团队 EOD 消息(上一工作日)- 详细版

从 Technology Staff 空间获取每日结束时的签到消息:

cd /Users/hagelk/non-ic-code/geoffrey/skills/google-workspace && bun chat/get_eod_messages.js psd spaces/AAAAxOtpv10 last-business-day

重要——禁止编造:

  • 仅使用脚本输出 sender 字段中出现的姓名
  • 如果脚本未返回消息,请说“No EOD messages found”
  • 如果脚本返回的消息中是发送者 ID 而非姓名,请显示该 ID(例如:“users/12345...”)
  • 绝不编造姓名、地点或成就
  • 采用复制粘贴的方式:将脚本输出视为唯一事实来源

提取团队数据前:

  1. 检查脚本返回的原始 JSON 输出
  2. 列出返回的确切 sender 值
  3. 仅使用这些姓名——不得改述或“润色”

重要:提取每位团队成员 EOD 消息中的完整详情。查找包含“Today:”前缀的消息——这些是详细的 EOD 总结。

对于每位发布了 EOD 总结的团队成员:

  1. 姓名:发布者(严格使用 sender 字段中的姓名)
  2. 地点:工作地点(WFH、DCRC、学校现场)
  3. 主要成就:已完成的具体任务(而非仅写“工单”)
  4. 值得关注的事项:解决的有趣问题、参与的项目
  5. 问题/阻碍:提及的任何问题

从原始消息中提取的示例:

Brad White:
- Location: TSD (Tech Services)
- Accomplished: Packaged Cinema 4D plugin for deployment, fixed OAuth blocking for Maxon App sign-in, created SwiftDialog notification for plugin installs, used Claude Code for first time to create Installomator label for Godot game engine
- Notable: Working on Unity deployment troubleshooting, burning comp time leaving early

注意:如果今天是星期一,“上一工作日”即星期五(如果星期五是假日,则为星期四)。

1.10b 安全与安保团队 EOD 消息(上一工作日)

从 Safety & Security Staff 空间获取每日结束时的签到消息:

cd /Users/hagelk/non-ic-code/geoffrey/skills/google-workspace && bun chat/get_eod_messages.js psd spaces/AAAAFpQaAnA last-business-day

空间:PSD Safety & Security Team

重要——禁止编造:

  • 仅使用脚本输出 sender 字段中出现的姓名
  • 如果脚本未返回消息,请说“No EOD messages found”
  • 如果脚本返回的消息中是发送者 ID(例如“users/12345...”)而非姓名:
    • 显示为:Unknown (users/123456...) - [消息内容中的地点]
    • 添加备注:“Name not in mapping - update chat_user_mapping.json”
  • 绝不编造姓名、地点或成就
  • 采用复制粘贴的方式:将脚本输出视为唯一事实来源

提取团队数据前:

  1. 检查脚本返回的原始 JSON 输出
  2. 列出返回的确切 sender 值
  3. 仅使用这些姓名——不得改述或“润色”

按与技术团队相同的格式提取——姓名、地点、成就、问题。

注意:如果今天是星期一,“上一工作日”即星期五(如果星期五是假日,则为星期四)。

1.11 团队已完成工单(上一工作日)

获取技术团队在上一工作日关闭的工单:

# First get the last business day
LAST_BIZ_DAY=$(bun /Users/hagelk/non-ic-code/geoffrey/skills/morning-briefing/scripts/get_last_business_day.js | jq -r '.date')

# Then get daily summary for that date
bun /Users/hagelk/non-ic-code/geoffrey/skills/freshservice-manager/scripts/get_daily_summary.js "$LAST_BIZ_DAY"

重要——禁止编造:

  • 仅使用脚本输出 byAgent 部分中出现的 Agent 姓名
  • 严格使用脚本返回的工单数量
  • 绝不编造姓名或工单数量
  • 如果 Agent 姓名显示为 ID 或电子邮件地址,请原样显示

报告工单统计前:

  1. 检查 get_daily_summary.js 返回的原始 JSON 输出
  2. 列出 byAgent 字段中的确切 Agent 姓名
  3. 仅使用这些姓名和数量

返回内容:

  • 已关闭工单总数
  • 按 Agent 划分的明细
  • 按类别划分的明细(密码重置、Chromebook 等)
  • 自动处理与 Agent 处理的工单

工作区:Technology(workspace_id:2)

1.12 工单趋势分析

将上一个工作日与之前的日期进行比较,分析趋势:

# Get last 5 business days of summaries for trend analysis
# The get_daily_summary.js script supports date parsing
bun /Users/hagelk/non-ic-code/geoffrey/skills/freshservice-manager/scripts/get_daily_summary.js "last monday"
bun /Users/hagelk/non-ic-code/geoffrey/skills/freshservice-manager/scripts/get_daily_summary.js "last tuesday"
# etc.

分析以下内容:

  • 工单数量趋势(增加/减少)
  • 类别激增(特定问题类型突然增加)
  • Agent 工作负载分布
  • 异常模式
1.13 软件开发工作区工单

获取软件开发工作区中的未关闭工单:

bun /Users/hagelk/non-ic-code/geoffrey/skills/freshservice-manager/scripts/search_tickets.js "status:2 OR status:3" 13

返回软件开发工作区中所有未关闭(状态:2)和待处理(状态:3)的工单。

工作区 ID:13(软件开发) 注意:这是用户用于跟踪 AI Studio 和其他 PSD 应用程序缺陷的内部软件开发工单系统。

1.14 立法动态(上一个工作日)

获取自上一个工作日起有动态的 K-12 教育法案:

# Get lookback info and bills to check
bun /Users/hagelk/non-ic-code/geoffrey/skills/legislative-tracker/scripts/get_recent_bill_activity.js --last-business-day

返回以下内容:

  • 要检查的日期范围(上一个工作日 → 今天)
  • 约 143 个已确认的教育法案 ID 列表
  • 每项法案的 WebFetch 说明

工作流:

  1. 获取 get_recent_bill_activity.js 的输出
  2. 使用 WebFetch 获取每项法案的 URL(为提高速度,每批并行处理 5-6 项)
  3. 从每项法案页面提取最新行动日期
  4. 筛选出 latest_action_date >= lookback_start 的法案
  5. 应用优先级框架(根据对选区的影响划分为 HIGH/MEDIUM/LOW)
  6. 概述每项法案的内容

周一:回溯范围从周五开始(如果周五是假日,则从更早的日期开始),因此会包含整个周末的动态(听证会、投票、委员会行动)。

要使用 WebFetch 获取的示例 URL:

  • https://app.leg.wa.gov/billsummary?BillNumber=1020&Year=2025
  • https://app.leg.wa.gov/billsummary?BillNumber=5038&Year=2025

注意:仅包含确实有动态的法案。如果没有法案进展,则输出“自 [date] 以来没有立法动态”。

第 2 阶段:生成简报

2.1 分析并确定优先级

查看收集到的数据并识别:

  • 冲突:日历事件时间重叠
  • 紧急事项:逾期任务、高优先级工单
  • 主题:不同数据源中的模式
2.2 格式化 Markdown 简报

使用以下结构:

# Daily Briefing - [DATE]

## Weather
[Current conditions, high/low, precipitation]

## Today's Calendar
| Time | Event | Location |
|------|-------|----------|
| ... | ... | ... |

**Conflicts/Notes**: [any issues]

## Priority Tasks
### Due Today
- [ ] Task 1
- [ ] Task 2

### Flagged
- [ ] Task 3

### Overdue
- [ ] Task 4 (due [date])

## Recent Emails (Last 24h)
[X emails in inbox from last 24 hours]

### Needs Response
- From: [sender] - [subject] (snippet)
- From: [sender] - [subject] (snippet)

### FYI/Notifications
- [sender] - [subject]

## Freshservice
### Technology Tickets: [count] open
[Top 3-5 tickets by priority/age]

### Software Development Tickets: [count] open
[List tickets in Software Dev workspace]

### Pending Approvals: [count]
[List with ticket #, requester, summary]

## Team Activity (Last Business Day: [DAY, DATE])

**Data Source Verification (REQUIRED):**
- Technology EOD script returned: [X] messages from [list exact sender names from JSON]
- Safety & Security EOD script returned: [X] messages from [list exact sender names from JSON]
- Freshservice daily summary returned: [X] tickets by [list exact agent names from JSON]

*Use ONLY the names listed above. Never invent or paraphrase names.*

### Technology Team EOD Summaries

**[Name from sender field]** - [Location(s)]
- [Key accomplishment 1 - be specific about what they did]
- [Key accomplishment 2]
- [Notable: any interesting problems solved or projects]

**[Name from sender field]** - [Location(s)]
- [Key accomplishment 1]
- [Key accomplishment 2]
- [Issues: any blockers or problems mentioned]

*[Continue for each team member who posted an EOD summary]*

### Safety & Security Team EOD Summaries

**[Name from sender field]** - [Location(s)]
- [Key accomplishment 1]
- [Key accomplishment 2]
- [Notable: any issues or incidents handled]

*If sender shows as user ID (users/12345...), display: **Unknown (users/12345...)** - [Location]*

*[Continue for each team member who posted an EOD summary]*

### Tickets Completed by Team: [count]
| Agent | Tickets | Top Categories |
|-------|---------|----------------|
| [Name from byAgent field] | X | Password Reset (Y), Chromebook (Z) |

### Ticket Trends
- Volume: [up/down/stable] vs previous days
- Notable patterns: [any spikes or anomalies]

## EdTech News

### [Article Title 1] - [Source]
[2-3 sentence synopsis: what happened, why it matters, key takeaway]

### [Article Title 2] - [Source]
[2-3 sentence synopsis]

### [Article Title 3] - [Source]
[2-3 sentence synopsis]

## AI News

### [Article Title 1] - [Source]
[2-3 sentence synopsis: what's the development, industry impact, relevance]

### [Article Title 2] - [Source]
[2-3 sentence synopsis]

### [Article Title 3] - [Source]
[2-3 sentence synopsis]

## K-12 Leadership News

### [Article Title 1] - [Source]
[2-3 sentence synopsis: policy/leadership development, impact, relevance to tech leadership]

### [Article Title 2] - [Source]
[2-3 sentence synopsis]

## School Safety & Security News

### [Article Title 1] - [Source]
[2-3 sentence synopsis: what happened, impact on safety practices, takeaway for districts]

### [Article Title 2] - [Source]
[2-3 sentence synopsis]

### [Article Title 3] - [Source]
[2-3 sentence synopsis]

## Legislative Activity ([Last Biz Day] - Today)

[X] education bills had movement:

### 🔴 HIGH Priority

#### [Bill ID] - [Short Title]
**Action**: [What happened - hearing, vote, committee action, etc.]
**Summary**: [1-2 sentences: what the bill does, potential district impact]

### 🟡 MEDIUM Priority

#### [Bill ID] - [Short Title]
**Action**: [What happened]
**Summary**: [1-2 sentences]

### 🟢 LOW Priority
- [Bill ID]: [Action type] - [One line summary]

*No legislative activity since [date]* - if no bills moved

## Quick Stats
- Calendar events: X
- Tasks overdue: X | Due today: X | Flagged: X
- Open tickets (Tech): X
- Open tickets (Software Dev): X
- Pending approvals: X
- Recent emails (24h): X
- Team tickets closed [last biz day]: X
- News articles: EdTech (X) | AI (X) | Leadership (X)
- Legislative bills with activity: X
2.3 生成播客脚本(扩展格式)

将简报改写为内容全面、对话式的音频脚本:

  • 使用第一人称,语气轻松而专业
  • 朗读时长为 10-15 分钟(约 1500-2000 个单词)
  • 直接面向听众(例如:“以下是今天你需要了解的内容……”)

必需章节(按顺序):

  1. 开场(约 100 个单词)

    • 星期、日期、天气概况
    • 简要预告重点内容
  2. 日历与日程安排(约 150 个单词)

    • 介绍今天的活动及其背景
    • 突出重要会议/活动
    • 提醒日程冲突或需要提前准备的事项
  3. 任务与优先事项(约 150 个单词)

    • 需要处理的逾期事项
    • 今天到期的事项
    • 标记的优先事项
  4. 工单与服务台(约 150 个单词)

    • 未结的技术工单
    • 软件开发工单
    • 待审批事项
  5. 团队动态 - 详细内容(约 400 个单词)

    • 技术团队在上一个工作日完成的工作
    • 点名介绍 3-5 名团队成员及其具体工作
    • 值得关注的项目和解决的棘手问题
    • 安全与安保团队完成的工作
    • 工单关闭总数

    关键要求 - 禁止臆造:

    • 只能使用脚本输出中 sender 字段里的姓名
    • 只能使用 get_daily_summary.js 输出中的工单数量
    • 如果脚本没有返回任何消息,请说“没有发布任何 EOD 消息”
    • 绝不要臆造姓名、地点或工作成果
  6. 教育科技新闻(约 200 个单词)

    • 介绍 2-3 篇文章并概述内容
    • 说明每篇文章对 K-12 教育的重要性
  7. AI 新闻(约 200 个单词)

    • 介绍 2-3 篇文章并概述内容
    • 分析行业影响及相关性
  8. K-12 教育领导力新闻(约 150 个单词)

    • 介绍 1-2 篇文章并概述内容
    • 说明政策/领导力方面的影响

8b. 校园安全与安保新闻(约 150 个单词)

  • 介绍 2-3 篇文章并概述内容
  • 说明安全实践及对学区的影响
  1. 立法动态(约 150 个单词)

    • 介绍自上一个工作日起举行听证会、表决或审议的法案
    • 突出对学区有直接影响(财政、运营、人员配置)的法案
    • 如有相关信息,注明即将举行的听证会日期
    • 星期一时,概述周末动态
  2. 结尾(约 100 个单词)

    • 列出当天最重要的 3 项优先事项
    • 结束致辞

风格指南:

  • 介绍团队成员的工作时,使用名字
  • 提供具体细节(不要说“处理了工单”,而要说“解决了 34 台 Chromebook 的维修问题”)
  • 各章节之间衔接自然
  • 简要评论并分析新闻内容

保存到 /tmp/morning_briefing_podcast.txt

第三阶段:制作播客

uv run --with mlx-audio --with pydub /Users/hagelk/non-ic-code/geoffrey/skills/local-tts/scripts/generate_audio.py \
  --file /tmp/morning_briefing_podcast.txt \
  --voice af_heart \
  --output ~/Desktop/morning_briefing_[DATE].mp3

语音选择:af_heart(温暖、友好,适合晨间简报) 注意:使用本地 MLX TTS(Kokoro 模型),无需支付 API 费用

第 3.5 阶段:生成信息图(必做)

关键要求: 必须生成信息图。不得跳过此阶段。

使用 image-gen 技能创建视觉摘要信息图。

3.5.1 编写信息图提示词

根据收集到的数据,为信息图构建提示词:

Create an infographic summarizing a daily work briefing for [DATE].

Visual concept: A clean dashboard layout with distinct sections for different data categories.

Key data to display:
- Weather: [conditions], High [X]°F, Low [Y]°F
- Calendar: [X] events today, highlight: [key meeting]
- Tasks: [X] overdue, [Y] due today, [Z] flagged
- Tickets: [X] Technology open, [Y] Software Dev open
- Team Activity: [X] tickets closed by team yesterday
- Emails: [X] in inbox from last 24h

Style: Professional, clean design with PSD brand colors (navy blue #003366, gold accent #FFD700).
Flat design, clear sections, modern sans-serif typography.

Layout: Horizontal 16:9, organized as a dashboard with weather top-left, calendar top-right,
tasks and tickets in middle row, team stats at bottom.

Title: "Daily Briefing - [DATE]"
Subtitle: "Gig Harbor, WA"
3.5.2 生成图像
uv run /Users/hagelk/non-ic-code/geoffrey/skills/image-gen/scripts/generate.py \
  "[infographic prompt]" \
  ~/Desktop/morning_briefing_[DATE].png \
  16:9 \
  2K

设置:

  • 宽高比:16:9(横向仪表板)
  • 尺寸:2K(确保文字清晰易读)
  • 输出:~/Desktop/morning_briefing_[DATE].png

第四阶段:保存到 Obsidian

4.1 将信息图复制到 Obsidian 资源目录
cp ~/Desktop/morning_briefing_[DATE].png \
  ~/Library/Mobile\ Documents/iCloud~md~obsidian/Documents/Personal_Notes/Geoffrey/Daily\ Briefings/assets/
4.2 将信息图添加到简报 Markdown 文件

在简报顶部(标题之后)添加:

![Daily Briefing Infographic](assets/morning_briefing_[DATE].png)
4.3 保存简报文件

使用 Obsidian MCP 工具:

  1. 检查每日笔记是否存在:

    mcp__obsidian-vault__get_vault_file
    filename: "Geoffrey/Daily Briefings/[YYYY-MM-DD].md"
    
  2. 创建或更新:

    mcp__obsidian-vault__create_vault_file
    filename: "Geoffrey/Daily Briefings/[YYYY-MM-DD].md"
    content: [full briefing markdown with infographic embed]
    

文件路径格式:Geoffrey/Daily Briefings/YYYY-MM-DD.md

备用方案(若 MCP 不可用):直接写入 iCloud 路径:

/Users/hagelk/Library/Mobile Documents/iCloud~md~obsidian/Documents/Personal_Notes/Geoffrey/Daily Briefings/[YYYY-MM-DD].md

第五阶段:发送电子邮件(HTML 格式并内嵌信息图)

5.1 生成 HTML 邮件正文

创建一封专业的 HTML 邮件(不是 Markdown)。请参考 skills/morning-briefing/templates/email.html 中的模板。

关键 HTML 结构:

<!DOCTYPE html>
<html>
<head>
  <style>
    body { font-family: -apple-system, BlinkMacSystemFont, sans-serif; max-width: 600px; margin: 0 auto; }
    .header { text-align: center; border-bottom: 2px solid #003366; padding: 16px; }
    .stat-box { background: #f8f9fa; padding: 12px; text-align: center; }
    /* ... more styles from template ... */
  </style>
</head>
<body>
  
  <img src="cid:briefing_image" alt="Daily Briefing" style="width: 100%; max-width: 600px; border-radius: 8px; margin-bottom: 20px;">

  <div class="header">
    <h1 style="color: #003366;">Daily Briefing</h1>
    <p>[DAY_OF_WEEK], [DATE_FORMATTED]</p>
  </div>

  
  

  <div style="background: #e8f4f8; padding: 16px; border-radius: 8px; margin-top: 20px;">
    <strong>Attachments:</strong><br>
    🎧 Audio Podcast (~10-15 min)<br>
    📊 Infographic (also shown above)
  </div>

  <p style="text-align: center; color: #666; font-size: 12px;">
    Full briefing: Obsidian/Geoffrey/Daily Briefings/[DATE].md
  </p>
</body>
</html>

重要: <img src="cid:briefing_image"> 会在邮件顶部以内嵌方式显示信息图。

保存到 /tmp/morning_briefing_email.html

5.2 发送邮件并内嵌图片 + 添加附件
cd /Users/hagelk/non-ic-code/geoffrey/skills/google-workspace && bun gmail/send_with_attachments.js psd \
  --to "[email protected]" \
  --subject "Daily Briefing - [DATE]" \
  --body-file /tmp/morning_briefing_email.html \
  --html \
  --inline-image "~/Desktop/morning_briefing_[DATE].png" \
  --attachments "~/Desktop/morning_briefing_[DATE].mp3"

选项说明:

  • --html - 将正文视为 HTML(格式化所必需)
  • --inline-image - 在邮件顶部内嵌图片(引用为 cid:briefing_image)
  • --attachments - 添加其他附件(播客)

结果:

  • 信息图会以内嵌方式显示在邮件顶部(无需下载即可查看)
  • 播客作为附件,可供下载
  • 邮件在 Gmail 中以专业样式美观呈现

输出

返回标准化摘要:

## Summary
Generated daily briefing for [DATE]

## Actions
- Gathered calendar events: X
- Gathered tasks: X (Y due today, Z flagged)
- Gathered Technology tickets: X open, Y approvals pending
- Gathered Software Dev tickets: X open
- Gathered team EOD messages: X from [last business day]
- Gathered team completed tickets: X from [last business day]
- Weather: [conditions]
- News: X headlines
- Generated podcast: ~/Desktop/morning_briefing_[DATE].mp3
- Saved to Obsidian: Geoffrey/Daily Briefings/[DATE].md
- Email: [sent/skipped - reason]

## Status
[Status emoji] [Complete/Partial]

## Quick View
[2-3 line summary of most important items]

错误处理

Google Workspace 脚本缺失

如果日历或邮件脚本不存在:

  • 跳过相应部分
  • 在输出中注明“集成待完成”
  • 继续使用可用的数据源
OmniFocus 未运行
Status: Partial
Note: OmniFocus not running - task data unavailable
Freshservice API 错误
Status: Partial
Note: Freshservice API error - ticket data unavailable
本地 TTS 生成失败
Status: Partial
Note: Audio generation failed - check mlx-audio setup
Briefing saved to Obsidian without podcast

依赖项

技能/工具必需用途回退方案
google-workspace日历、邮件、团队 EOD跳过相应部分
omnifocus-manager任务跳过相应部分
freshservice-manager工单、审批、团队统计跳过相应部分
local-tts音频播客仅提供文本简报
obsidian-vault (MCP)保存简报仅显示
WebSearch新闻、天气跳过相应部分

配置

用户偏好
  • 位置:Gig Harbor, WA(天气)
  • 工作邮箱:psd 账号
  • 技术工作区:workspace_id: 2
  • 软件开发工作区:workspace_id: 13
  • 技术聊天空间:spaces/AAAAxOtpv10(Technology Staff Check-Ins & Logs)
  • 安全与保障聊天空间:spaces/AAAAFpQaAnA(PSD Safety & Security Team)
  • 语音:af_heart(温暖、友好 - 本地 Kokoro TTS)
  • 播客时长:10-15 分钟(约 1500-2000 字)
自定义

用户可以提出以下要求:

  • “跳过新闻” - 省略新闻部分
  • “不要播客” - 仅提供文本
  • “只要日历和任务” - 提供精简简报

评论

支持 Markdown