{
  "schemaVersion": "1.0",
  "item": {
    "slug": "morning-email-rollup",
    "name": "Morning Email Rollup",
    "source": "tencent",
    "type": "skill",
    "category": "效率提升",
    "sourceUrl": "https://clawhub.ai/am-will/morning-email-rollup",
    "canonicalUrl": "https://clawhub.ai/am-will/morning-email-rollup",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/morning-email-rollup",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=morning-email-rollup",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "SKILL.md",
      "rollup.sh"
    ],
    "primaryDoc": "SKILL.md",
    "quickSetup": [
      "Download the package from Yavira.",
      "Extract the archive and review SKILL.md first.",
      "Import or place the package into your OpenClaw setup."
    ],
    "agentAssist": {
      "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
      "steps": [
        "Download the package from Yavira.",
        "Extract it into a folder your agent can access.",
        "Paste one of the prompts below and point your agent at the extracted folder."
      ],
      "prompts": [
        {
          "label": "New install",
          "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
        },
        {
          "label": "Upgrade existing",
          "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
        }
      ]
    },
    "sourceHealth": {
      "source": "tencent",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-04-23T16:43:11.935Z",
      "expiresAt": "2026-04-30T16:43:11.935Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=4claw-imageboard",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=4claw-imageboard",
        "contentDisposition": "attachment; filename=\"4claw-imageboard-1.0.1.zip\"",
        "redirectLocation": null,
        "bodySnippet": null
      },
      "scope": "source",
      "summary": "Source download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this source.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/morning-email-rollup"
    },
    "validation": {
      "installChecklist": [
        "Use the Yavira download entry.",
        "Review SKILL.md after the package is downloaded.",
        "Confirm the extracted package contains the expected setup assets."
      ],
      "postInstallChecks": [
        "Confirm the extracted package includes the expected docs or setup files.",
        "Validate the skill or prompts are available in your target agent workspace.",
        "Capture any manual follow-up steps the agent could not complete."
      ]
    },
    "downloadPageUrl": "https://openagent3.xyz/downloads/morning-email-rollup",
    "agentPageUrl": "https://openagent3.xyz/skills/morning-email-rollup/agent",
    "manifestUrl": "https://openagent3.xyz/skills/morning-email-rollup/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/morning-email-rollup/agent.md"
  },
  "agentAssist": {
    "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
    "steps": [
      "Download the package from Yavira.",
      "Extract it into a folder your agent can access.",
      "Paste one of the prompts below and point your agent at the extracted folder."
    ],
    "prompts": [
      {
        "label": "New install",
        "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
      },
      {
        "label": "Upgrade existing",
        "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "Morning Email Rollup",
        "body": "Automatically generates a daily summary of important emails and delivers it to Telegram at 8am Denver time."
      },
      {
        "title": "Setup",
        "body": "Required: Set your Gmail account email:\n\nexport GOG_ACCOUNT=\"your-email@gmail.com\"\n\nOr edit the script directly to set the default."
      },
      {
        "title": "What It Does",
        "body": "Runs every day at 8:00 AM (configurable timezone)\nShows today's calendar events from Google Calendar\nSearches for emails marked as important or starred from the last 24 hours\nUses AI (Gemini CLI) to generate natural language summaries of each email\nShows up to 20 most important emails with:\n\n🔴 Unread indicator (red)\n🟢 Read indicator (green)\nSender name/email\nSubject line\nAI-generated 1-sentence summary (natural language, not scraped content)\n\n\nDelivers formatted summary to Telegram"
      },
      {
        "title": "Manual Run",
        "body": "# Default (10 emails)\nbash skills/morning-email-rollup/rollup.sh\n\n# Custom number of emails\nMAX_EMAILS=20 bash skills/morning-email-rollup/rollup.sh\nMAX_EMAILS=5 bash skills/morning-email-rollup/rollup.sh"
      },
      {
        "title": "View Log",
        "body": "cat $HOME/clawd/morning-email-rollup-log.md"
      },
      {
        "title": "How It Works",
        "body": "Checks calendar - Lists today's events from Google Calendar via gog\nSearches Gmail - Query: is:important OR is:starred newer_than:1d\nFetches details - Gets sender, subject, date, and body for each email\nAI Summarization - Uses Gemini CLI to generate natural language summaries\nFormats output - Creates readable summary with read/unread markers\nSends to Telegram - Delivers via Clawdbot's messaging system"
      },
      {
        "title": "Calendar Integration",
        "body": "The script automatically includes today's calendar events from your Google Calendar using the same gog CLI that queries Gmail.\n\nGraceful Fallback:\n\nIf gog is not installed → Calendar section is silently skipped (no errors)\nIf no events today → Calendar section is silently skipped\nIf events exist → Shows formatted list with 12-hour times and titles\n\nRequirements:\n\ngog must be installed and authenticated\nUses the same Google account configured for Gmail (set via GOG_ACCOUNT environment variable)"
      },
      {
        "title": "Email Criteria",
        "body": "Emails are included if they match any of:\n\nMarked as Important by Gmail (lightning bolt icon)\nManually Starred by you\nReceived in the last 24 hours"
      },
      {
        "title": "AI Summarization",
        "body": "Each email is summarized using the Gemini CLI (gemini):\n\nExtracts the email body (cleans HTML/CSS)\nSends to gemini --model gemini-2.0-flash with a prompt to summarize in 1 sentence\nThe summary is medium-to-long length natural language (not scraped content)\nFalls back to cleaned body text if Gemini is unavailable\n\nImportant: The email body is passed as part of the prompt (not via stdin) because the gemini CLI doesn't handle piped input with prompts correctly.\n\nExample output:\n\n🔴 **William Ryan: Invitation to team meeting**\n   The email invites you to a team meeting tomorrow at 2pm to discuss the Q1 roadmap and assign tasks for the upcoming sprint."
      },
      {
        "title": "Read/Unread Indicators",
        "body": "🔴 Red dot = Unread email\n🟢 Green dot = Read email\n\nAll emails show one of these markers for visual consistency."
      },
      {
        "title": "Formatting Notes",
        "body": "Subject and Summary Cleanup:\n\nExtra quotes are automatically stripped from subject lines (e.g., \"\"Agent Skills\"\" → Agent Skills)\nSummaries from Gemini are also cleaned of leading/trailing quotes\nThis ensures clean, readable output in Telegram/other channels"
      },
      {
        "title": "Cron Schedule",
        "body": "Set up a daily cron job at your preferred time:\n\ncron add --name \"Morning Email Rollup\" \\\n  --schedule \"0 8 * * *\" \\\n  --tz \"America/Denver\" \\\n  --session isolated \\\n  --message \"GOG_ACCOUNT=your-email@gmail.com bash /path/to/skills/morning-email-rollup/rollup.sh\"\n\nAdjust the time (8:00 AM) and timezone to your preference."
      },
      {
        "title": "Change Number of Emails",
        "body": "By default, the rollup shows 10 emails. To change this:\n\nTemporary (one-time):\n\nMAX_EMAILS=20 bash skills/morning-email-rollup/rollup.sh\n\nPermanent:\nEdit skills/morning-email-rollup/rollup.sh:\n\nMAX_EMAILS=\"${MAX_EMAILS:-20}\"  # Change 10 to your preferred number"
      },
      {
        "title": "Change Search Criteria",
        "body": "Edit skills/morning-email-rollup/rollup.sh:\n\n# Current: important or starred from last 24h\nIMPORTANT_EMAILS=$(gog gmail search 'is:important OR is:starred newer_than:1d' --max 20 ...)\n\n# Examples of other searches:\n# Unread important emails only\nIMPORTANT_EMAILS=$(gog gmail search 'is:important is:unread newer_than:1d' --max 20 ...)\n\n# Specific senders\nIMPORTANT_EMAILS=$(gog gmail search 'from:boss@company.com OR from:client@example.com newer_than:1d' --max 20 ...)\n\n# By label/category\nIMPORTANT_EMAILS=$(gog gmail search 'label:work is:important newer_than:1d' --max 20 ...)"
      },
      {
        "title": "Change Time",
        "body": "Update the cron schedule:\n\n# List cron jobs to get the ID\ncron list\n\n# Update schedule (example: 7am instead of 8am)\ncron update <job-id> --schedule \"0 7 * * *\" --tz \"America/Denver\""
      },
      {
        "title": "Change Summary Style",
        "body": "Edit the prompt in the summarize_email() function in rollup.sh:\n\n# Current: medium-to-long 1 sentence\n\"Summarize this email in exactly 1 sentence of natural language. Make it medium to long length. Don't use quotes:\"\n\n# Shorter summaries\n\"Summarize in 1 short sentence:\"\n\n# More detail\n\"Summarize in 2-3 sentences with key details:\""
      },
      {
        "title": "Change AI Model",
        "body": "Edit the gemini command in summarize_email():\n\n# Current: gemini-2.0-flash (fast)\ngemini --model gemini-2.0-flash \"Summarize...\"\n\n# Use a different model\ngemini --model gemini-pro \"Summarize...\""
      },
      {
        "title": "Not receiving rollups",
        "body": "# Check if cron job is enabled\ncron list\n\n# Check last run status\ncron runs <job-id>\n\n# Test manually\nbash skills/morning-email-rollup/rollup.sh"
      },
      {
        "title": "Missing emails",
        "body": "Gmail's importance markers may filter out expected emails\nCheck if emails are actually marked important/starred in Gmail\nTry running manual search: gog gmail search 'is:important newer_than:1d'"
      },
      {
        "title": "Summaries not appearing",
        "body": "Check if gemini CLI is installed: which gemini\nTest manually: echo \"test\" | gemini \"Summarize this:\"\nVerify Gemini is authenticated (it should prompt on first run)"
      },
      {
        "title": "Wrong timezone",
        "body": "Cron uses America/Denver (MST/MDT)\nUpdate with: cron update <job-id> --tz \"Your/Timezone\""
      },
      {
        "title": "Log History",
        "body": "All rollup runs are logged to:\n\n$HOME/clawd/morning-email-rollup-log.md\n\nFormat:\n\n- [2026-01-15 08:00:00] 🔄 Starting morning email rollup\n- [2026-01-15 08:00:02] ✅ Rollup complete: 15 emails"
      }
    ],
    "body": "Morning Email Rollup\n\nAutomatically generates a daily summary of important emails and delivers it to Telegram at 8am Denver time.\n\nSetup\n\nRequired: Set your Gmail account email:\n\nexport GOG_ACCOUNT=\"your-email@gmail.com\"\n\n\nOr edit the script directly to set the default.\n\nWhat It Does\nRuns every day at 8:00 AM (configurable timezone)\nShows today's calendar events from Google Calendar\nSearches for emails marked as important or starred from the last 24 hours\nUses AI (Gemini CLI) to generate natural language summaries of each email\nShows up to 20 most important emails with:\n🔴 Unread indicator (red)\n🟢 Read indicator (green)\nSender name/email\nSubject line\nAI-generated 1-sentence summary (natural language, not scraped content)\nDelivers formatted summary to Telegram\nUsage\nManual Run\n# Default (10 emails)\nbash skills/morning-email-rollup/rollup.sh\n\n# Custom number of emails\nMAX_EMAILS=20 bash skills/morning-email-rollup/rollup.sh\nMAX_EMAILS=5 bash skills/morning-email-rollup/rollup.sh\n\nView Log\ncat $HOME/clawd/morning-email-rollup-log.md\n\nHow It Works\nChecks calendar - Lists today's events from Google Calendar via gog\nSearches Gmail - Query: is:important OR is:starred newer_than:1d\nFetches details - Gets sender, subject, date, and body for each email\nAI Summarization - Uses Gemini CLI to generate natural language summaries\nFormats output - Creates readable summary with read/unread markers\nSends to Telegram - Delivers via Clawdbot's messaging system\nCalendar Integration\n\nThe script automatically includes today's calendar events from your Google Calendar using the same gog CLI that queries Gmail.\n\nGraceful Fallback:\n\nIf gog is not installed → Calendar section is silently skipped (no errors)\nIf no events today → Calendar section is silently skipped\nIf events exist → Shows formatted list with 12-hour times and titles\n\nRequirements:\n\ngog must be installed and authenticated\nUses the same Google account configured for Gmail (set via GOG_ACCOUNT environment variable)\nEmail Criteria\n\nEmails are included if they match any of:\n\nMarked as Important by Gmail (lightning bolt icon)\nManually Starred by you\nReceived in the last 24 hours\nAI Summarization\n\nEach email is summarized using the Gemini CLI (gemini):\n\nExtracts the email body (cleans HTML/CSS)\nSends to gemini --model gemini-2.0-flash with a prompt to summarize in 1 sentence\nThe summary is medium-to-long length natural language (not scraped content)\nFalls back to cleaned body text if Gemini is unavailable\n\nImportant: The email body is passed as part of the prompt (not via stdin) because the gemini CLI doesn't handle piped input with prompts correctly.\n\nExample output:\n\n🔴 **William Ryan: Invitation to team meeting**\n   The email invites you to a team meeting tomorrow at 2pm to discuss the Q1 roadmap and assign tasks for the upcoming sprint.\n\nRead/Unread Indicators\n🔴 Red dot = Unread email\n🟢 Green dot = Read email\n\nAll emails show one of these markers for visual consistency.\n\nFormatting Notes\n\nSubject and Summary Cleanup:\n\nExtra quotes are automatically stripped from subject lines (e.g., \"\"Agent Skills\"\" → Agent Skills)\nSummaries from Gemini are also cleaned of leading/trailing quotes\nThis ensures clean, readable output in Telegram/other channels\nCron Schedule\n\nSet up a daily cron job at your preferred time:\n\ncron add --name \"Morning Email Rollup\" \\\n  --schedule \"0 8 * * *\" \\\n  --tz \"America/Denver\" \\\n  --session isolated \\\n  --message \"GOG_ACCOUNT=your-email@gmail.com bash /path/to/skills/morning-email-rollup/rollup.sh\"\n\n\nAdjust the time (8:00 AM) and timezone to your preference.\n\nCustomization\nChange Number of Emails\n\nBy default, the rollup shows 10 emails. To change this:\n\nTemporary (one-time):\n\nMAX_EMAILS=20 bash skills/morning-email-rollup/rollup.sh\n\n\nPermanent: Edit skills/morning-email-rollup/rollup.sh:\n\nMAX_EMAILS=\"${MAX_EMAILS:-20}\"  # Change 10 to your preferred number\n\nChange Search Criteria\n\nEdit skills/morning-email-rollup/rollup.sh:\n\n# Current: important or starred from last 24h\nIMPORTANT_EMAILS=$(gog gmail search 'is:important OR is:starred newer_than:1d' --max 20 ...)\n\n# Examples of other searches:\n# Unread important emails only\nIMPORTANT_EMAILS=$(gog gmail search 'is:important is:unread newer_than:1d' --max 20 ...)\n\n# Specific senders\nIMPORTANT_EMAILS=$(gog gmail search 'from:boss@company.com OR from:client@example.com newer_than:1d' --max 20 ...)\n\n# By label/category\nIMPORTANT_EMAILS=$(gog gmail search 'label:work is:important newer_than:1d' --max 20 ...)\n\nChange Time\n\nUpdate the cron schedule:\n\n# List cron jobs to get the ID\ncron list\n\n# Update schedule (example: 7am instead of 8am)\ncron update <job-id> --schedule \"0 7 * * *\" --tz \"America/Denver\"\n\nChange Summary Style\n\nEdit the prompt in the summarize_email() function in rollup.sh:\n\n# Current: medium-to-long 1 sentence\n\"Summarize this email in exactly 1 sentence of natural language. Make it medium to long length. Don't use quotes:\"\n\n# Shorter summaries\n\"Summarize in 1 short sentence:\"\n\n# More detail\n\"Summarize in 2-3 sentences with key details:\"\n\nChange AI Model\n\nEdit the gemini command in summarize_email():\n\n# Current: gemini-2.0-flash (fast)\ngemini --model gemini-2.0-flash \"Summarize...\"\n\n# Use a different model\ngemini --model gemini-pro \"Summarize...\"\n\nTroubleshooting\nNot receiving rollups\n# Check if cron job is enabled\ncron list\n\n# Check last run status\ncron runs <job-id>\n\n# Test manually\nbash skills/morning-email-rollup/rollup.sh\n\nMissing emails\nGmail's importance markers may filter out expected emails\nCheck if emails are actually marked important/starred in Gmail\nTry running manual search: gog gmail search 'is:important newer_than:1d'\nSummaries not appearing\nCheck if gemini CLI is installed: which gemini\nTest manually: echo \"test\" | gemini \"Summarize this:\"\nVerify Gemini is authenticated (it should prompt on first run)\nWrong timezone\nCron uses America/Denver (MST/MDT)\nUpdate with: cron update <job-id> --tz \"Your/Timezone\"\nLog History\n\nAll rollup runs are logged to:\n\n$HOME/clawd/morning-email-rollup-log.md\n\n\nFormat:\n\n- [2026-01-15 08:00:00] 🔄 Starting morning email rollup\n- [2026-01-15 08:00:02] ✅ Rollup complete: 15 emails"
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/am-will/morning-email-rollup",
    "publisherUrl": "https://clawhub.ai/am-will/morning-email-rollup",
    "owner": "am-will",
    "version": "2.1.0",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/morning-email-rollup",
    "downloadUrl": "https://openagent3.xyz/downloads/morning-email-rollup",
    "agentUrl": "https://openagent3.xyz/skills/morning-email-rollup/agent",
    "manifestUrl": "https://openagent3.xyz/skills/morning-email-rollup/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/morning-email-rollup/agent.md"
  }
}