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

詳細

朝のブリーフィングワークフロー

概要

毎日の朝のブリーフィングを作成し、次の3つの方法で届けます。

  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 フィールドに記載されている名前のみを使用してください
  • スクリプトがメッセージを返さない場合は、「EOD メッセージは見つかりませんでした」と記載してください
  • スクリプトが名前の代わりに送信者 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 フィールドに記載されている名前のみを使用してください
  • スクリプトがメッセージを返さない場合は、「EOD メッセージは見つかりませんでした」と記載してください
  • スクリプトが名前の代わりに送信者 ID(例:「users/12345...」)を返した場合:
    • Unknown (users/123456...) — [メッセージ本文に記載された場所] の形式で表示してください
    • 次の注記を追加してください:「名前がマッピングにありません — 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 セクションに記載されているエージェント名のみを使用してください
  • スクリプトが返したチケット数をそのまま使用してください
  • 名前やチケット数を決して捏造しないでください
  • エージェント名が ID またはメールアドレスで表示されている場合は、そのまま表示してください

チケット統計を報告する前に:

  1. get_daily_summary.js の未加工の JSON 出力を確認します
  2. byAgent フィールドの正確なエージェント名を列挙します
  3. その名前と件数のみを使用してください

取得内容:

  • クローズしたチケットの合計数
  • エージェント別の内訳
  • カテゴリ別の内訳(パスワードのリセット、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 手順

ワークフロー:

  1. get_recent_bill_activity.js の出力を取得します
  2. 各法案の URL を WebFetch します(処理を高速化するため、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. EdTechニュース(約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
    • 締めの挨拶

スタイルガイドライン:

  • メンバーの仕事について述べる際は、ファーストネームを使用
  • 具体的な詳細を含める(「チケットに対応」ではなく「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にインフォグラフィックを追加

ブリーフィングの先頭(タイトルの後)に、次を追加します。

![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

フェーズ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 語)
カスタマイズ

ユーザーは次のようにリクエストできます:

  • 「ニュースを省略」- ニュースセクションを省略します
  • 「ポッドキャストなし」- テキストのみ
  • 「カレンダーとタスクだけ」- 最小限のブリーフィング

コメント