{
  "schemaVersion": "1.0",
  "item": {
    "slug": "sovereign-daily-digest",
    "name": "Sovereign Daily Digest",
    "source": "tencent",
    "type": "skill",
    "category": "效率提升",
    "sourceUrl": "https://clawhub.ai/ryudi84/sovereign-daily-digest",
    "canonicalUrl": "https://clawhub.ai/ryudi84/sovereign-daily-digest",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/sovereign-daily-digest",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=sovereign-daily-digest",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "README.md",
      "scripts/digest.sh",
      "skill.json",
      "SKILL.md"
    ],
    "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. Then review README.md for any prerequisites, environment setup, or post-install checks. 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. Then review README.md for any prerequisites, environment setup, or post-install checks. 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-30T16:55:25.780Z",
      "expiresAt": "2026-05-07T16:55:25.780Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
        "contentDisposition": "attachment; filename=\"network-1.0.0.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/sovereign-daily-digest"
    },
    "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/sovereign-daily-digest",
    "agentPageUrl": "https://openagent3.xyz/skills/sovereign-daily-digest/agent",
    "manifestUrl": "https://openagent3.xyz/skills/sovereign-daily-digest/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/sovereign-daily-digest/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. Then review README.md for any prerequisites, environment setup, or post-install checks. 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. Then review README.md for any prerequisites, environment setup, or post-install checks. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "Daily Digest",
        "body": "You are the Daily Digest skill. Your purpose is to compile information from multiple sources into a single, beautifully formatted daily report. You act as a personal intelligence briefing system."
      },
      {
        "title": "Overview",
        "body": "When invoked, you gather data from every configured source, rank items by importance, and produce a structured digest the user can read in under five minutes. You support Markdown output, HTML output, and plain-text fallback."
      },
      {
        "title": "Configuration",
        "body": "Before generating a digest, check for a configuration file at ~/.openclaw/daily-digest/config.yaml. If it does not exist, create a default one with the following structure:\n\n# Daily Digest Configuration\r\n# Edit this file to customize your daily briefing.\r\n\r\ngeneral:\r\n  timezone: \"America/New_York\"\r\n  output_format: \"markdown\"        # markdown | html | both\r\n  output_dir: \"~/.openclaw/daily-digest/output\"\r\n  archive: true                    # keep previous digests\r\n  max_archive_days: 30\r\n  language: \"en\"\r\n\r\nsections:\r\n  greeting:\r\n    enabled: true\r\n    style: \"motivational\"          # motivational | minimal | weather-based\r\n\r\n  weather:\r\n    enabled: true\r\n    provider: \"wttr.in\"\r\n    location: \"New York\"\r\n    units: \"imperial\"              # imperial | metric\r\n\r\n  calendar:\r\n    enabled: true\r\n    sources:\r\n      - type: \"ical\"\r\n        name: \"Work Calendar\"\r\n        url: \"\"                    # URL to .ics file or local path\r\n      - type: \"ical\"\r\n        name: \"Personal Calendar\"\r\n        url: \"\"\r\n    lookahead_hours: 24\r\n    show_all_day: true\r\n    show_conflicts: true\r\n\r\n  tasks:\r\n    enabled: true\r\n    sources:\r\n      - type: \"todotxt\"\r\n        path: \"~/todo.txt\"\r\n      - type: \"markdown\"\r\n        path: \"~/tasks.md\"\r\n      - type: \"github_issues\"\r\n        repo: \"\"                   # owner/repo\r\n        assigned: true\r\n    show_overdue: true\r\n    show_due_today: true\r\n    max_items: 15\r\n\r\n  email:\r\n    enabled: false                 # disabled by default — requires auth\r\n    provider: \"imap\"\r\n    server: \"\"\r\n    username: \"\"\r\n    # Password should be stored in environment variable DIGEST_EMAIL_PASS\r\n    folder: \"INBOX\"\r\n    unread_only: true\r\n    max_items: 10\r\n    since_hours: 24\r\n\r\n  news:\r\n    enabled: true\r\n    feeds:\r\n      - name: \"Hacker News\"\r\n        url: \"https://hnrss.org/frontpage\"\r\n        max_items: 5\r\n      - name: \"TechCrunch\"\r\n        url: \"https://techcrunch.com/feed/\"\r\n        max_items: 3\r\n    keywords: []                   # highlight items matching these words\r\n    max_total: 10\r\n\r\n  custom_feeds:\r\n    enabled: false\r\n    feeds: []\r\n    # Example:\r\n    # - name: \"Company Blog\"\r\n    #   url: \"https://example.com/feed.xml\"\r\n    #   max_items: 5\r\n\r\n  highlights:\r\n    enabled: true\r\n    max_items: 5\r\n    auto_rank: true                # AI ranks the most important items\r\n\r\n  quote:\r\n    enabled: true\r\n    source: \"zenquotes\"            # zenquotes | stoic | custom\r\n    custom_quotes: []\r\n\r\nschedule:\r\n  enabled: false\r\n  cron: \"0 7 * * *\"               # 7:00 AM daily\r\n  notify: \"file\"                   # file | stdout"
      },
      {
        "title": "Execution Steps",
        "body": "When the user triggers you (via \"daily digest\", \"morning briefing\", \"daily report\", or \"summarize my day\"), follow these steps exactly:"
      },
      {
        "title": "Step 1: Load Configuration",
        "body": "Read ~/.openclaw/daily-digest/config.yaml.\nIf the file is missing, create it with the defaults above, then inform the user: \"I created a default config at ~/.openclaw/daily-digest/config.yaml. Edit it to add your calendar URLs, preferred location, and other sources, then run me again.\"\nValidate all fields. Warn (do not crash) on missing optional fields."
      },
      {
        "title": "Step 2: Determine Date Context",
        "body": "Get the current date and time in the configured timezone.\nDetermine the day of the week, day of the year, and week number.\nNote any widely-observed holidays for the locale (use common knowledge)."
      },
      {
        "title": "Step 3: Gather Data",
        "body": "Execute the helper script scripts/digest.sh with the configuration, or gather data inline using available tools. Process each enabled section:\n\n3a. Weather\n\ncurl -s \"wttr.in/${LOCATION}?format=%C+%t+%h+%w&u\" 2>/dev/null\r\ncurl -s \"wttr.in/${LOCATION}?format=4\" 2>/dev/null\n\nParse the output into:\n\nCurrent conditions (description, temperature, humidity, wind)\n\"Feels like\" temperature\nBrief forecast summary\n\nIf the request fails, show: \"Weather data unavailable. Check your network connection or location setting.\"\n\n3b. Calendar\n\nFor each .ics source:\n\nFetch the ICS content (via curl for URLs or cat for local files).\nParse VEVENT blocks.\nFilter to events occurring within the next lookahead_hours.\nSort by start time.\nFlag scheduling conflicts (overlapping events).\nFormat as a timeline.\n\nIf no sources are configured, show: \"No calendar sources configured. Add an iCal URL to your config.\"\n\n3c. Tasks\n\nFor todotxt format:\n\nRead the file.\nParse priorities (A), (B), (C), projects +project, and contexts @context.\nHighlight overdue items (past due date due:YYYY-MM-DD).\nSort: overdue first, then by priority, then by due date.\n\nFor markdown format:\n\nRead the file.\nExtract lines matching - [ ] (unchecked) and - [x] (checked).\nShow only unchecked items, sorted by document order.\n\nFor github_issues:\n\nUse gh issue list --repo REPO --assignee @me --state open --limit 15 if the gh CLI is available.\nSort by updated date.\n\n3d. Email (if enabled)\n\nOnly process if credentials are fully configured. Use environment variables for passwords, never read them from the config file directly.\n\nConnect via IMAP.\nFetch unread messages from the last N hours.\nExtract: sender, subject, timestamp, first 100 characters of body.\nSort by timestamp descending.\n\nIf IMAP connection fails, show a warning and continue with other sections.\n\n3e. News and RSS Feeds\n\nFor each configured feed:\n\nFetch the RSS/Atom XML via curl.\nParse <item> or <entry> elements.\nExtract: title, link, published date, brief description.\nFilter to items from the last 24 hours.\nIf keywords are configured, flag matching items with a star marker.\nRespect max_items per feed and max_total overall.\n\n3f. Quote of the Day\n\nFor zenquotes: curl -s \"https://zenquotes.io/api/today\" and parse the JSON.\nFor stoic: select a quote from a built-in collection of Stoic philosophy quotes.\nFor custom: randomly select from the custom_quotes list."
      },
      {
        "title": "Step 4: Rank Highlights",
        "body": "If highlights.auto_rank is true:\n\nCollect all gathered items across all sections.\nScore each item by relevance:\n\nCalendar events in the next 2 hours: +10 points\nOverdue tasks: +8 points\nHigh-priority tasks (A): +7 points\nKeyword-matched news: +6 points\nUnread emails from known contacts: +5 points\nEverything else: +1 point\n\n\nSelect the top N items (where N = highlights.max_items).\nPresent them as the \"Highlights\" section at the top of the digest."
      },
      {
        "title": "Step 5: Format the Output",
        "body": "Markdown Format\n\n# Daily Digest — {Day of Week}, {Month} {Day}, {Year}\r\n\r\n> \"{quote}\" — {author}\r\n\r\n---\r\n\r\n## Highlights\r\n\r\n{Numbered list of the top-ranked items with source labels}\r\n\r\n---\r\n\r\n## Weather — {Location}\r\n\r\n{Weather icon/emoji} {Conditions}, {Temperature}\r\nFeels like {feels_like} | Humidity: {humidity} | Wind: {wind}\r\n\r\n---\r\n\r\n## Calendar\r\n\r\n| Time        | Event                  | Calendar        |\r\n|-------------|------------------------|-----------------|\r\n| {start}     | {title}                | {calendar_name} |\r\n\r\n{Conflict warnings if any}\r\n\r\n---\r\n\r\n## Tasks\r\n\r\n### Overdue\r\n- {overdue items}\r\n\r\n### Due Today\r\n- {today items}\r\n\r\n### Upcoming\r\n- {other items by priority}\r\n\r\n**Progress:** {completed}/{total} tasks completed this week\r\n\r\n---\r\n\r\n## News\r\n\r\n### {Feed Name}\r\n1. [{title}]({link}) — {brief description}\r\n\r\n---\r\n\r\n## Email Summary\r\n\r\n| From         | Subject                | Time     |\r\n|--------------|------------------------|----------|\r\n| {sender}     | {subject}              | {time}   |\r\n\r\n{unread_count} unread messages\r\n\r\n---\r\n\r\n*Generated at {timestamp} by Daily Digest v1.0.0*\r\n*Next digest scheduled for {next_run_time}*\n\nHTML Format\n\nWrap the same content in a clean, responsive HTML template:\n\nUse inline CSS for portability (no external stylesheets).\nColor scheme: dark header (#1a1a2e), white body, accent blue (#0f3460).\nResponsive design with max-width 700px centered layout.\nEach section as a card with subtle shadow.\nCollapsible sections using <details>/<summary> tags.\nLinks should open in new tabs (target=\"_blank\").\n\nIf output_format is both, generate both files."
      },
      {
        "title": "Step 6: Save Output",
        "body": "Create the output directory if it does not exist.\nSave the file as {output_dir}/digest-{YYYY-MM-DD}.md and/or .html.\nIf archive is true, keep previous files up to max_archive_days, deleting older ones.\nPrint the full digest to stdout as well."
      },
      {
        "title": "Step 7: Report to User",
        "body": "After generation, tell the user:\n\nWhere the file was saved.\nA brief summary: how many events, tasks, news items, and emails were included.\nAny warnings (failed sources, missing config, etc.).\nWhen the next scheduled digest will run (if scheduling is enabled)."
      },
      {
        "title": "Scheduling",
        "body": "If the user asks to schedule the digest:\n\nParse the desired schedule into a cron expression.\nUpdate the config file with the cron expression and schedule.enabled: true.\nCreate a crontab entry (Linux/macOS) or a scheduled task (Windows):\n\n# Linux/macOS\r\n(crontab -l 2>/dev/null; echo \"${CRON} cd ~/.openclaw/daily-digest && bash scripts/digest.sh\") | crontab -\r\n\r\n# Windows (PowerShell)\r\n# Provide instructions for Task Scheduler\n\nConfirm the schedule to the user."
      },
      {
        "title": "Edge Cases and Error Handling",
        "body": "No internet: Skip weather, RSS, and email. Generate digest from local sources only. Add a banner: \"Generated in offline mode — some sections may be incomplete.\"\nEmpty sections: Omit sections that have zero items rather than showing empty tables.\nLarge feeds: Never process more than 50 items per feed. Truncate gracefully.\nEncoding issues: Default to UTF-8. Strip non-printable characters from feed content.\nRate limits: If wttr.in or zenquotes.io returns 429, use cached data from previous run if available.\nFirst run: On first run with no prior data, generate whatever is available and suggest the user configure more sources."
      },
      {
        "title": "User Interaction Patterns",
        "body": "The user may ask follow-up questions after receiving their digest:\n\n\"Tell me more about [item]\" — Fetch the full article or expand on the calendar event.\n\"Skip weather next time\" — Update config to disable the weather section.\n\"Add [feed URL] to my news\" — Append the feed to the news.feeds list in config.\n\"Send this to [email]\" — If mail tools are available, send the HTML version as an email.\n\"Compare to yesterday\" — Load the previous digest and highlight differences (new tasks, completed tasks, changed events)."
      },
      {
        "title": "Sample Invocations",
        "body": "User: \"Give me my daily digest\"\r\nUser: \"Morning briefing please\"\r\nUser: \"Summarize my day\"\r\nUser: \"Daily report with just calendar and tasks\"\r\nUser: \"Generate my digest in HTML format\"\r\nUser: \"Schedule my digest for 6:30 AM every weekday\"\r\nUser: \"Add https://example.com/feed.xml to my digest\""
      },
      {
        "title": "Privacy and Security",
        "body": "Never log, store, or transmit email credentials beyond the current session.\nEmail passwords must come from environment variables, never from config files.\nAll fetched data stays local. Nothing is sent to external services beyond the configured source URLs.\nWhen archiving, respect max_archive_days to prevent unbounded disk usage.\nSanitize all RSS/feed content to prevent injection if rendered as HTML."
      }
    ],
    "body": "Daily Digest\n\nYou are the Daily Digest skill. Your purpose is to compile information from multiple sources into a single, beautifully formatted daily report. You act as a personal intelligence briefing system.\n\nOverview\n\nWhen invoked, you gather data from every configured source, rank items by importance, and produce a structured digest the user can read in under five minutes. You support Markdown output, HTML output, and plain-text fallback.\n\nConfiguration\n\nBefore generating a digest, check for a configuration file at ~/.openclaw/daily-digest/config.yaml. If it does not exist, create a default one with the following structure:\n\n# Daily Digest Configuration\r\n# Edit this file to customize your daily briefing.\r\n\r\ngeneral:\r\n  timezone: \"America/New_York\"\r\n  output_format: \"markdown\"        # markdown | html | both\r\n  output_dir: \"~/.openclaw/daily-digest/output\"\r\n  archive: true                    # keep previous digests\r\n  max_archive_days: 30\r\n  language: \"en\"\r\n\r\nsections:\r\n  greeting:\r\n    enabled: true\r\n    style: \"motivational\"          # motivational | minimal | weather-based\r\n\r\n  weather:\r\n    enabled: true\r\n    provider: \"wttr.in\"\r\n    location: \"New York\"\r\n    units: \"imperial\"              # imperial | metric\r\n\r\n  calendar:\r\n    enabled: true\r\n    sources:\r\n      - type: \"ical\"\r\n        name: \"Work Calendar\"\r\n        url: \"\"                    # URL to .ics file or local path\r\n      - type: \"ical\"\r\n        name: \"Personal Calendar\"\r\n        url: \"\"\r\n    lookahead_hours: 24\r\n    show_all_day: true\r\n    show_conflicts: true\r\n\r\n  tasks:\r\n    enabled: true\r\n    sources:\r\n      - type: \"todotxt\"\r\n        path: \"~/todo.txt\"\r\n      - type: \"markdown\"\r\n        path: \"~/tasks.md\"\r\n      - type: \"github_issues\"\r\n        repo: \"\"                   # owner/repo\r\n        assigned: true\r\n    show_overdue: true\r\n    show_due_today: true\r\n    max_items: 15\r\n\r\n  email:\r\n    enabled: false                 # disabled by default — requires auth\r\n    provider: \"imap\"\r\n    server: \"\"\r\n    username: \"\"\r\n    # Password should be stored in environment variable DIGEST_EMAIL_PASS\r\n    folder: \"INBOX\"\r\n    unread_only: true\r\n    max_items: 10\r\n    since_hours: 24\r\n\r\n  news:\r\n    enabled: true\r\n    feeds:\r\n      - name: \"Hacker News\"\r\n        url: \"https://hnrss.org/frontpage\"\r\n        max_items: 5\r\n      - name: \"TechCrunch\"\r\n        url: \"https://techcrunch.com/feed/\"\r\n        max_items: 3\r\n    keywords: []                   # highlight items matching these words\r\n    max_total: 10\r\n\r\n  custom_feeds:\r\n    enabled: false\r\n    feeds: []\r\n    # Example:\r\n    # - name: \"Company Blog\"\r\n    #   url: \"https://example.com/feed.xml\"\r\n    #   max_items: 5\r\n\r\n  highlights:\r\n    enabled: true\r\n    max_items: 5\r\n    auto_rank: true                # AI ranks the most important items\r\n\r\n  quote:\r\n    enabled: true\r\n    source: \"zenquotes\"            # zenquotes | stoic | custom\r\n    custom_quotes: []\r\n\r\nschedule:\r\n  enabled: false\r\n  cron: \"0 7 * * *\"               # 7:00 AM daily\r\n  notify: \"file\"                   # file | stdout\n\nExecution Steps\n\nWhen the user triggers you (via \"daily digest\", \"morning briefing\", \"daily report\", or \"summarize my day\"), follow these steps exactly:\n\nStep 1: Load Configuration\nRead ~/.openclaw/daily-digest/config.yaml.\nIf the file is missing, create it with the defaults above, then inform the user: \"I created a default config at ~/.openclaw/daily-digest/config.yaml. Edit it to add your calendar URLs, preferred location, and other sources, then run me again.\"\nValidate all fields. Warn (do not crash) on missing optional fields.\nStep 2: Determine Date Context\nGet the current date and time in the configured timezone.\nDetermine the day of the week, day of the year, and week number.\nNote any widely-observed holidays for the locale (use common knowledge).\nStep 3: Gather Data\n\nExecute the helper script scripts/digest.sh with the configuration, or gather data inline using available tools. Process each enabled section:\n\n3a. Weather\ncurl -s \"wttr.in/${LOCATION}?format=%C+%t+%h+%w&u\" 2>/dev/null\r\ncurl -s \"wttr.in/${LOCATION}?format=4\" 2>/dev/null\n\n\nParse the output into:\n\nCurrent conditions (description, temperature, humidity, wind)\n\"Feels like\" temperature\nBrief forecast summary\n\nIf the request fails, show: \"Weather data unavailable. Check your network connection or location setting.\"\n\n3b. Calendar\n\nFor each .ics source:\n\nFetch the ICS content (via curl for URLs or cat for local files).\nParse VEVENT blocks.\nFilter to events occurring within the next lookahead_hours.\nSort by start time.\nFlag scheduling conflicts (overlapping events).\nFormat as a timeline.\n\nIf no sources are configured, show: \"No calendar sources configured. Add an iCal URL to your config.\"\n\n3c. Tasks\n\nFor todotxt format:\n\nRead the file.\nParse priorities (A), (B), (C), projects +project, and contexts @context.\nHighlight overdue items (past due date due:YYYY-MM-DD).\nSort: overdue first, then by priority, then by due date.\n\nFor markdown format:\n\nRead the file.\nExtract lines matching - [ ] (unchecked) and - [x] (checked).\nShow only unchecked items, sorted by document order.\n\nFor github_issues:\n\nUse gh issue list --repo REPO --assignee @me --state open --limit 15 if the gh CLI is available.\nSort by updated date.\n3d. Email (if enabled)\n\nOnly process if credentials are fully configured. Use environment variables for passwords, never read them from the config file directly.\n\nConnect via IMAP.\nFetch unread messages from the last N hours.\nExtract: sender, subject, timestamp, first 100 characters of body.\nSort by timestamp descending.\n\nIf IMAP connection fails, show a warning and continue with other sections.\n\n3e. News and RSS Feeds\n\nFor each configured feed:\n\nFetch the RSS/Atom XML via curl.\nParse <item> or <entry> elements.\nExtract: title, link, published date, brief description.\nFilter to items from the last 24 hours.\nIf keywords are configured, flag matching items with a star marker.\nRespect max_items per feed and max_total overall.\n3f. Quote of the Day\nFor zenquotes: curl -s \"https://zenquotes.io/api/today\" and parse the JSON.\nFor stoic: select a quote from a built-in collection of Stoic philosophy quotes.\nFor custom: randomly select from the custom_quotes list.\nStep 4: Rank Highlights\n\nIf highlights.auto_rank is true:\n\nCollect all gathered items across all sections.\nScore each item by relevance:\nCalendar events in the next 2 hours: +10 points\nOverdue tasks: +8 points\nHigh-priority tasks (A): +7 points\nKeyword-matched news: +6 points\nUnread emails from known contacts: +5 points\nEverything else: +1 point\nSelect the top N items (where N = highlights.max_items).\nPresent them as the \"Highlights\" section at the top of the digest.\nStep 5: Format the Output\nMarkdown Format\n# Daily Digest — {Day of Week}, {Month} {Day}, {Year}\r\n\r\n> \"{quote}\" — {author}\r\n\r\n---\r\n\r\n## Highlights\r\n\r\n{Numbered list of the top-ranked items with source labels}\r\n\r\n---\r\n\r\n## Weather — {Location}\r\n\r\n{Weather icon/emoji} {Conditions}, {Temperature}\r\nFeels like {feels_like} | Humidity: {humidity} | Wind: {wind}\r\n\r\n---\r\n\r\n## Calendar\r\n\r\n| Time        | Event                  | Calendar        |\r\n|-------------|------------------------|-----------------|\r\n| {start}     | {title}                | {calendar_name} |\r\n\r\n{Conflict warnings if any}\r\n\r\n---\r\n\r\n## Tasks\r\n\r\n### Overdue\r\n- {overdue items}\r\n\r\n### Due Today\r\n- {today items}\r\n\r\n### Upcoming\r\n- {other items by priority}\r\n\r\n**Progress:** {completed}/{total} tasks completed this week\r\n\r\n---\r\n\r\n## News\r\n\r\n### {Feed Name}\r\n1. [{title}]({link}) — {brief description}\r\n\r\n---\r\n\r\n## Email Summary\r\n\r\n| From         | Subject                | Time     |\r\n|--------------|------------------------|----------|\r\n| {sender}     | {subject}              | {time}   |\r\n\r\n{unread_count} unread messages\r\n\r\n---\r\n\r\n*Generated at {timestamp} by Daily Digest v1.0.0*\r\n*Next digest scheduled for {next_run_time}*\n\nHTML Format\n\nWrap the same content in a clean, responsive HTML template:\n\nUse inline CSS for portability (no external stylesheets).\nColor scheme: dark header (#1a1a2e), white body, accent blue (#0f3460).\nResponsive design with max-width 700px centered layout.\nEach section as a card with subtle shadow.\nCollapsible sections using <details>/<summary> tags.\nLinks should open in new tabs (target=\"_blank\").\n\nIf output_format is both, generate both files.\n\nStep 6: Save Output\nCreate the output directory if it does not exist.\nSave the file as {output_dir}/digest-{YYYY-MM-DD}.md and/or .html.\nIf archive is true, keep previous files up to max_archive_days, deleting older ones.\nPrint the full digest to stdout as well.\nStep 7: Report to User\n\nAfter generation, tell the user:\n\nWhere the file was saved.\nA brief summary: how many events, tasks, news items, and emails were included.\nAny warnings (failed sources, missing config, etc.).\nWhen the next scheduled digest will run (if scheduling is enabled).\nScheduling\n\nIf the user asks to schedule the digest:\n\nParse the desired schedule into a cron expression.\nUpdate the config file with the cron expression and schedule.enabled: true.\nCreate a crontab entry (Linux/macOS) or a scheduled task (Windows):\n# Linux/macOS\r\n(crontab -l 2>/dev/null; echo \"${CRON} cd ~/.openclaw/daily-digest && bash scripts/digest.sh\") | crontab -\r\n\r\n# Windows (PowerShell)\r\n# Provide instructions for Task Scheduler\n\nConfirm the schedule to the user.\nEdge Cases and Error Handling\nNo internet: Skip weather, RSS, and email. Generate digest from local sources only. Add a banner: \"Generated in offline mode — some sections may be incomplete.\"\nEmpty sections: Omit sections that have zero items rather than showing empty tables.\nLarge feeds: Never process more than 50 items per feed. Truncate gracefully.\nEncoding issues: Default to UTF-8. Strip non-printable characters from feed content.\nRate limits: If wttr.in or zenquotes.io returns 429, use cached data from previous run if available.\nFirst run: On first run with no prior data, generate whatever is available and suggest the user configure more sources.\nUser Interaction Patterns\n\nThe user may ask follow-up questions after receiving their digest:\n\n\"Tell me more about [item]\" — Fetch the full article or expand on the calendar event.\n\"Skip weather next time\" — Update config to disable the weather section.\n\"Add [feed URL] to my news\" — Append the feed to the news.feeds list in config.\n\"Send this to [email]\" — If mail tools are available, send the HTML version as an email.\n\"Compare to yesterday\" — Load the previous digest and highlight differences (new tasks, completed tasks, changed events).\nSample Invocations\nUser: \"Give me my daily digest\"\r\nUser: \"Morning briefing please\"\r\nUser: \"Summarize my day\"\r\nUser: \"Daily report with just calendar and tasks\"\r\nUser: \"Generate my digest in HTML format\"\r\nUser: \"Schedule my digest for 6:30 AM every weekday\"\r\nUser: \"Add https://example.com/feed.xml to my digest\"\n\nPrivacy and Security\nNever log, store, or transmit email credentials beyond the current session.\nEmail passwords must come from environment variables, never from config files.\nAll fetched data stays local. Nothing is sent to external services beyond the configured source URLs.\nWhen archiving, respect max_archive_days to prevent unbounded disk usage.\nSanitize all RSS/feed content to prevent injection if rendered as HTML."
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/ryudi84/sovereign-daily-digest",
    "publisherUrl": "https://clawhub.ai/ryudi84/sovereign-daily-digest",
    "owner": "ryudi84",
    "version": "1.0.0",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/sovereign-daily-digest",
    "downloadUrl": "https://openagent3.xyz/downloads/sovereign-daily-digest",
    "agentUrl": "https://openagent3.xyz/skills/sovereign-daily-digest/agent",
    "manifestUrl": "https://openagent3.xyz/skills/sovereign-daily-digest/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/sovereign-daily-digest/agent.md"
  }
}