morning-briefing について
morning-briefing は、予定、タスク、チケット、ニュースをまとめる日次ブリーフィングのワークフローです。複数の情報源を集約し、ターミナル、Obsidian、メールで配信します。
主な機能
- 01カレンダー予定とOmniFocusタスクの収集
- 02過去24時間のメールの抽出
- 03チケット、承認依頼、チーム状況の収集
- 04ニュースと法案の活動の検索・要約
- 05チケット傾向の比較と優先事項の特定
- 06ターミナル、Obsidian、メールへの配信
活用シーン
- 01業務開始時の日程とタスクの確認
- 02チームの前営業日の作業と完了チケットの把握
- 03教育、AI、安全、政策関連ニュースの確認
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ krishagel/ geoffrey --skill morning-briefingインストール後、Claude Code で/morning-briefingを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
pronunciation_guide.jsonreferences/podcast-script-template.mdscripts/apply_pronunciations.jsget_due_flagged.jsget_last_business_day.jstemplates/email.html詳細
朝のブリーフィングワークフロー
概要
毎日の朝のブリーフィングを作成し、次の3つの方法で届けます。
- ターミナル:要約をすぐに表示
- Obsidian:ブリーフィング全文をデイリーノートに保存
- メール:ブリーフィングのテキストと音声ポッドキャストを添付
場所
- 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件)について、次の手順を実行します。
- WebFetchを使用して記事全文を読みます
- 次の内容を含む2~3文の要約を作成します。
- 何が起きたか/何が新しいか
- K-12教育にとってなぜ重要か
- 主なポイントまたは対応事項
新しさの確認:掲載する前に記事の日付を確認します。過去24時間以内に公開された記事のみを含めます。検索結果に表示されても、古い記事は除外します。
対象トピック:
- EdTech製品のリリースや更新
- 学校のテクノロジーに関する方針変更
- 学校のサイバーセキュリティ
- デジタル学習の動向
1.8 AIニュース(要約付き)
WebSearchを使用します。
artificial intelligence news past 24 hours January 2026 latest
見つかった各記事(3~5件)について、次の手順を実行します。
- WebFetchを使用して記事全文を読みます
- 次の内容を含む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件)について、次の手順を実行します。
- WebFetchを使用して記事全文を読みます
- 次の内容を含む2~3文の要約を作成します。
- 方針またはリーダーシップに関する動向
- 学区/学校への影響
- CIO/テクノロジーリーダーシップとの関連性
新しさの確認:掲載する前に記事の日付を確認します。過去24時間以内に公開された記事のみを含めます。検索結果に表示されても、古い記事は除外します。
対象トピック:
- 州および連邦政府の教育政策
- 教育長および教育委員会のニュース
- 学校の資金調達と予算
- 労働力および人員配置の動向
1.9b 学校の安全・セキュリティに関するニュース(概要付き)
WebSearch を使用します:
K-12 school safety security news past 24 hours January 2026
見つかった記事(3 件)ごとに:
- WebFetch を使用して記事全文を読みます
- 次の内容を含む、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フィールドに記載されている名前のみを使用してください - スクリプトがメッセージを返さない場合は、「EOD メッセージは見つかりませんでした」と記載してください
- スクリプトが名前の代わりに送信者 ID を含むメッセージを返した場合は、ID を表示してください(例:「users/12345...」)
- 名前、場所、実績を決して捏造しないでください
- コピー&ペースト方式で、スクリプトの出力を真実として扱ってください
チームデータを抽出する前に:
- スクリプトの未加工の JSON 出力を確認します
- 返された
senderの値を正確に列挙します - その名前のみを使用してください。言い換えたり、「改善」したりしないでください
重要:各チームメンバーの EOD メッセージから詳細をすべて抽出してください。「Today:」で始まるメッセージを探してください。これらが詳細な EOD の概要です。
EOD の概要を投稿した各チームメンバーについて:
- 名前:投稿者(
senderフィールドの名前をそのまま使用) - 場所:勤務場所(WFH、DCRC、学校施設)
- 主な実績:完了した具体的なタスク(単に「チケット」としない)
- 特記事項:解決した興味深い問題、取り組んだプロジェクト
- 問題/障害:言及されている問題
未加工のメッセージからの抽出例:
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フィールドに記載されている名前のみを使用してください - スクリプトがメッセージを返さない場合は、「EOD メッセージは見つかりませんでした」と記載してください
- スクリプトが名前の代わりに送信者 ID(例:「users/12345...」)を返した場合:
- Unknown (users/123456...) — [メッセージ本文に記載された場所] の形式で表示してください
- 次の注記を追加してください:「名前がマッピングにありません — chat_user_mapping.json を更新してください」
- 名前、場所、実績を決して捏造しないでください
- コピー&ペースト方式で、スクリプトの出力を真実として扱ってください
チームデータを抽出する前に:
- スクリプトの未加工の JSON 出力を確認します
- 返された
senderの値を正確に列挙します - その名前のみを使用してください。言い換えたり、「改善」したりしないでください
テクノロジーチームと同じ形式で、名前、場所、実績、問題を抽出します。
注:今日が月曜日の場合、「前営業日」は金曜日です(ただし、金曜日が祝日だった場合は木曜日です)。
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セクションに記載されているエージェント名のみを使用してください - スクリプトが返したチケット数をそのまま使用してください
- 名前やチケット数を決して捏造しないでください
- エージェント名が ID またはメールアドレスで表示されている場合は、そのまま表示してください
チケット統計を報告する前に:
get_daily_summary.jsの未加工の JSON 出力を確認しますbyAgentフィールドの正確なエージェント名を列挙します- その名前と件数のみを使用してください
取得内容:
- クローズしたチケットの合計数
- エージェント別の内訳
- カテゴリ別の内訳(パスワードのリセット、Chromebook など)
- 自動処理とエージェントによる解決の内訳
ワークスペース: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.
次の点を分析します。
- 件数の傾向(増加/減少)
- カテゴリーの急増(特定の種類の課題の急増)
- エージェントの作業負荷の分布
- 通常と異なるパターン
1.13 ソフトウェア開発ワークスペースのチケット
ソフトウェア開発ワークスペースの未解決チケットを取得します。
bun /Users/hagelk/non-ic-code/geoffrey/skills/freshservice-manager/scripts/search_tickets.js "status:2 OR status:3" 13
ソフトウェア開発ワークスペースのすべてのオープン(status:2)および保留中(status: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
次の情報が返されます。
- 確認する日付範囲(直近の営業日 → 今日)
- 確認済みの教育法案 ID の一覧(約 143 件)
- 各法案の WebFetch 手順
ワークフロー:
get_recent_bill_activity.jsの出力を取得します- 各法案の URL を WebFetch します(処理を高速化するため、5~6 件を並列でまとめて実行します)
- 各法案のページから最新のアクション日を抽出します
- latest_action_date >= lookback_start の法案に絞り込みます
- 優先度の枠組みを適用します(学区への影響に基づいて HIGH/MEDIUM/LOW)
- 各法案の内容の概要を含めます
月曜日の場合: 対象期間は金曜日(または金曜日が祝日の場合はそれ以前)から始まるため、週末の活動(公聴会、採決、委員会での措置)がすべて含まれます。
WebFetch する URL の例:
https://app.leg.wa.gov/billsummary?BillNumber=1020&Year=2025https://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語)
- リスナーに直接語りかける(「今日知っておくべきことをお伝えします……」)
必須セクション(順番どおり):
-
オープニング(約100語)
- 曜日、日付、天気の概要
- 主な項目を簡単に紹介
-
カレンダーとスケジュール(約150語)
- 今日の予定とその背景
- 重要な会議やイベントを強調
- 予定の重複や、準備が必要な事項を記載
-
タスクと優先事項(約150語)
- 対応が必要な期限超過の項目
- 今日が期限の項目
- 優先事項としてフラグが付いた項目
-
チケットとサービスデスク(約150語)
- オープン中のテクノロジーチケット
- ソフトウェア開発のチケット
- 承認待ちの項目
-
チームの活動 - 詳細(約400語)
- テクノロジーチームが直近の営業日に達成したこと
- 具体的な内容とともに、名前を挙げてチームメンバーを3~5人紹介
- 注目すべきプロジェクトや、解決した興味深い問題
- 安全・セキュリティチームが達成したこと
- チケット完了数の全体統計
重要 - ハルシネーション禁止:
- スクリプト出力の
senderフィールドにある名前のみを使用 get_daily_summary.jsの出力にあるチケット数のみを使用- スクリプトからメッセージが返されなかった場合は、「EODメッセージは投稿されませんでした」と記載
- 名前、場所、達成事項を決して捏造しない
-
EdTechニュース(約200語)
- 2~3件の記事とその概要
- K-12教育にとって重要な理由
-
AIニュース(約200語)
- 2~3件の記事とその概要
- 業界への影響と関連性
-
K-12リーダーシップニュース(約150語)
- 1~2件の記事とその概要
- 政策やリーダーシップへの影響
8b. 学校の安全・セキュリティニュース(約150語)
- 2~3件の記事とその概要
- 安全対策と学区への影響
-
立法に関する最新情報(約150語)
- 直近の営業日以降に公聴会、採決、または審議が行われた法案
- 学区に直接的な影響(財政、運営、人員配置など)がある法案を強調
- 関連する場合は、今後の公聴会の日程を記載
- 月曜日は、週末の動向の概要を含める
-
クロージング(約100語)
- 今日の優先事項トップ3
- 締めの挨拶
スタイルガイドライン:
- メンバーの仕事について述べる際は、ファーストネームを使用
- 具体的な詳細を含める(「チケットに対応」ではなく「Chromebookの修理を34件解決」など)
- セクション間を自然につなぐ
- ニュース項目に簡単な解説や分析を加える
/tmp/morning_briefing_podcast.txtに保存します
フェーズ3:ポッドキャストの作成
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:インフォグラフィックの生成(必須)
**重要:**インフォグラフィックを必ず生成してください。このフェーズを省略しないでください。
画像生成スキルを使用して、視覚的な要約インフォグラフィックを作成します。
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
フェーズ4: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にインフォグラフィックを追加
ブリーフィングの先頭(タイトルの後)に、次を追加します。

4.3 ブリーフィングファイルの保存
Obsidian MCPツールを使用します。
-
デイリーノートが存在するか確認:
mcp__obsidian-vault__get_vault_file filename: "Geoffrey/Daily Briefings/[YYYY-MM-DD].md" -
作成または更新:
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
フェーズ5:メールの送信(インフォグラフィックをインラインで含む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 スクリプトが見つからない場合
カレンダー/メールのスクリプトが存在しない場合:
- 該当するセクションを省略します
- 出力に「Integration pending」と記載します
- 利用可能なデータソースで処理を続行します
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 アカウント
- Technology ワークスペース:workspace_id: 2
- Software Dev ワークスペース:workspace_id: 13
- Technology チャットスペース:spaces/AAAAxOtpv10(Technology Staff Check-Ins & Logs)
- Safety & Security チャットスペース:spaces/AAAAFpQaAnA(PSD Safety & Security Team)
- 音声:af_heart(温かく親しみやすい音声 - ローカル Kokoro TTS)
- ポッドキャストの長さ:10~15 分(約 1500~2000 語)
カスタマイズ
ユーザーは次のようにリクエストできます:
- 「ニュースを省略」- ニュースセクションを省略します
- 「ポッドキャストなし」- テキストのみ
- 「カレンダーとタスクだけ」- 最小限のブリーフィング