{
  "schemaVersion": "1.0",
  "item": {
    "slug": "waste-reminder",
    "name": "WastePickupReminder",
    "source": "tencent",
    "type": "skill",
    "category": "开发工具",
    "sourceUrl": "https://clawhub.ai/Apenklit/waste-reminder",
    "canonicalUrl": "https://clawhub.ai/Apenklit/waste-reminder",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/waste-reminder",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=waste-reminder",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "SKILL.md",
      "waste_cron.py",
      "waste_reminder.py"
    ],
    "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-05-07T17:22:31.273Z",
      "expiresAt": "2026-05-14T17:22:31.273Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=afrexai-annual-report",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=afrexai-annual-report",
        "contentDisposition": "attachment; filename=\"afrexai-annual-report-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/waste-reminder"
    },
    "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/waste-reminder",
    "agentPageUrl": "https://openagent3.xyz/skills/waste-reminder/agent",
    "manifestUrl": "https://openagent3.xyz/skills/waste-reminder/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/waste-reminder/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": "Waste Reminder Skill",
        "body": "A flexible, token-efficient skill for automated waste container collection reminders."
      },
      {
        "title": "Overview",
        "body": "This skill helps automate waste collection reminders based on user-defined schedules. It uses simple JSON configuration for maximum flexibility and minimal token usage.\n\nHow it works:\nThe skill reads your config and schedule, determines which reminders need to be sent, and outputs them in a format that your AI assistant can process. The AI then sends the actual messages to the specified channels.\n\nOutput format:\n\nSEND_TO:recipient_id\nCHANNEL:whatsapp\nYour message here\n---\n\nThis approach keeps your configuration simple and token-efficient - the skill doesn't need API keys or direct network access."
      },
      {
        "title": "Features",
        "body": "Multiple container types\nCustom reminder schedules (up to 4 times per pickup)\nFlexible targeting (group, personal, escalation)\nMulti-channel support (WhatsApp, Telegram, Discord, Email) - messages sent by your AI\nConfirmation system (stops further reminders)\nSingle schedule file\nToken-efficient - generates reminders without using AI tokens"
      },
      {
        "title": "Installation",
        "body": "clawhub install waste-reminder"
      },
      {
        "title": "Setup for Users",
        "body": "When you install this skill, the AI assistant will send you a config template. Reply in any language - the AI will understand and convert it to the correct format!"
      },
      {
        "title": "Example Template (Complete example with all options)",
        "body": "I want to set up waste reminders!\n\nMy containers:\n- blue: Paper (🔵)\n- gray: Residual (⚫)\n- orange: Plastic (🟠)\n- green: Garden (🟢)\n\nReminder times:\n- 18:00: to group_whatsapp (day before, group notification)\n- 22:00: to group_whatsapp (evening reminder to group)\n- 06:30: to partner_whatsapp (morning, specific person)\n- 09:30: to me_telegram (escalation, different channel)\n\nMy contacts:\n- group_whatsapp: 123456789@g.us\n- partner_whatsapp: +31600000001\n- me_telegram: 222222222\n\nUpcoming pickups:\n- 2026-02-24: orange\n- 2026-02-25: gray\n- 2026-03-02: blue\n\nThe AI will convert this to the correct JSON format and set everything up."
      },
      {
        "title": "Configuration",
        "body": "The skill stores configuration in:\n/data/.openclaw/workspace/data/waste-reminder/"
      },
      {
        "title": "Files",
        "body": "waste-reminder/\n├── config.json      # Your containers, reminder times, targets\n└── schedule.json   # Your pickup dates and status"
      },
      {
        "title": "Complete config.json Example (all options shown)",
        "body": "{\n  \"config_version\": \"1.0\",\n  \"containers\": {\n    \"blue\": {\"name\": \"Paper\", \"color\": \"blue\", \"emoji\": \"🔵\"},\n    \"gray\": {\"name\": \"Residual\", \"color\": \"gray\", \"emoji\": \"⚫\"},\n    \"orange\": {\"name\": \"Plastic\", \"color\": \"orange\", \"emoji\": \"🟠\"},\n    \"green\": {\"name\": \"Garden\", \"color\": \"green\", \"emoji\": \"🟢\"}\n  },\n  \"reminder_times\": {\n    \"18:00\": {\n      \"type\": \"group\",\n      \"template\": \"Tomorrow: {container_emoji} {container_name} will be collected!\",\n      \"target\": \"group_whatsapp\"\n    },\n    \"22:00\": {\n      \"type\": \"group\",\n      \"template\": \"Not confirmed yet - {container_emoji} needs to go out by 7am!\",\n      \"target\": \"group_whatsapp\"\n    },\n    \"06:30\": {\n      \"type\": \"personal\",\n      \"template\": \"⚠️ {container_emoji} put out NOW!\",\n      \"target\": \"partner_whatsapp\"\n    },\n    \"09:30\": {\n      \"type\": \"escalation\",\n      \"template\": \"Container still not outside!\",\n      \"target\": \"me_telegram\"\n    }\n  },\n  \"targets\": {\n    \"group_whatsapp\": {\"id\": \"123456789@g.us\", \"channel\": \"whatsapp\"},\n    \"partner_whatsapp\": {\"id\": \"+31600000001\", \"channel\": \"whatsapp\"},\n    \"partner_telegram\": {\"id\": \"111111111\", \"channel\": \"telegram\"},\n    \"me_whatsapp\": {\"id\": \"+31600000002\", \"channel\": \"whatsapp\"},\n    \"me_telegram\": {\"id\": \"222222222\", \"channel\": \"telegram\"},\n    \"me_discord\": {\"id\": \"https://discord.com/api/webhooks/...\", \"channel\": \"discord\"}\n  }\n}"
      },
      {
        "title": "Complete schedule.json Example",
        "body": "{\n  \"2026-02-24\": {\n    \"orange\": {\n      \"confirmed\": false,\n      \"reminded_18:00\": false,\n      \"reminded_22:00\": false,\n      \"reminded_06:30\": false,\n      \"reminded_09:30\": false\n    }\n  },\n  \"2026-02-25\": {\n    \"gray\": {\n      \"confirmed\": false,\n      \"reminded_18:00\": false,\n      \"reminded_22:00\": false,\n      \"reminded_06:30\": false,\n      \"reminded_09:30\": false\n    }\n  }\n}"
      },
      {
        "title": "Cron Job",
        "body": "Add ONE cron job that runs every 15 minutes:\n\nName: \"Waste Reminder Check\"\nSchedule: every 15 minutes\nScript: /data/.openclaw/workspace/skills/waste-reminder/waste_cron.py\n\nThe cron script checks if any reminders need to be sent and outputs them. Your AI assistant (triggered by the cron job) reads this output and sends the actual messages to the appropriate channels."
      },
      {
        "title": "User Commands",
        "body": "Confirm: \"container is out\"\nView: \"waste schedule\" or \"waste status\"\nAdd: \"waste add [date] [container]\"\nRemove: \"waste remove [date] [container]\""
      },
      {
        "title": "Files",
        "body": "waste-reminder/\n├── SKILL.md           # This file\n├── waste_reminder.py # CLI tool (manual commands)\n└── waste_cron.py      # Cron script (every 15 min)"
      },
      {
        "title": "Template Placeholders",
        "body": "{container_emoji} - The emoji\n{container_name} - The name\n{date} - The date"
      },
      {
        "title": "Channel Support",
        "body": "Supported channels:\n\nwhatsapp - Use phone number or group ID as ID\ntelegram - Use chat ID\ndiscord - Use webhook URL\nemail - Use email address\n\nEach target must specify both id and channel."
      },
      {
        "title": "Target Naming Convention",
        "body": "Targets should be named with channel suffix:\n\ngroup_whatsapp, group_telegram, group_discord\nme_whatsapp, me_telegram, me_discord\npartner_whatsapp, partner_telegram, partner_discord\n\nThe channel is extracted from the target name automatically."
      },
      {
        "title": "License",
        "body": "MIT License"
      }
    ],
    "body": "Waste Reminder Skill\n\nA flexible, token-efficient skill for automated waste container collection reminders.\n\nOverview\n\nThis skill helps automate waste collection reminders based on user-defined schedules. It uses simple JSON configuration for maximum flexibility and minimal token usage.\n\nHow it works: The skill reads your config and schedule, determines which reminders need to be sent, and outputs them in a format that your AI assistant can process. The AI then sends the actual messages to the specified channels.\n\nOutput format:\n\nSEND_TO:recipient_id\nCHANNEL:whatsapp\nYour message here\n---\n\n\nThis approach keeps your configuration simple and token-efficient - the skill doesn't need API keys or direct network access.\n\nFeatures\nMultiple container types\nCustom reminder schedules (up to 4 times per pickup)\nFlexible targeting (group, personal, escalation)\nMulti-channel support (WhatsApp, Telegram, Discord, Email) - messages sent by your AI\nConfirmation system (stops further reminders)\nSingle schedule file\nToken-efficient - generates reminders without using AI tokens\nInstallation\nclawhub install waste-reminder\n\nSetup for Users\n\nWhen you install this skill, the AI assistant will send you a config template. Reply in any language - the AI will understand and convert it to the correct format!\n\nExample Template (Complete example with all options)\nI want to set up waste reminders!\n\nMy containers:\n- blue: Paper (🔵)\n- gray: Residual (⚫)\n- orange: Plastic (🟠)\n- green: Garden (🟢)\n\nReminder times:\n- 18:00: to group_whatsapp (day before, group notification)\n- 22:00: to group_whatsapp (evening reminder to group)\n- 06:30: to partner_whatsapp (morning, specific person)\n- 09:30: to me_telegram (escalation, different channel)\n\nMy contacts:\n- group_whatsapp: 123456789@g.us\n- partner_whatsapp: +31600000001\n- me_telegram: 222222222\n\nUpcoming pickups:\n- 2026-02-24: orange\n- 2026-02-25: gray\n- 2026-03-02: blue\n\n\nThe AI will convert this to the correct JSON format and set everything up.\n\nConfiguration\n\nThe skill stores configuration in: /data/.openclaw/workspace/data/waste-reminder/\n\nFiles\nwaste-reminder/\n├── config.json      # Your containers, reminder times, targets\n└── schedule.json   # Your pickup dates and status\n\nComplete config.json Example (all options shown)\n{\n  \"config_version\": \"1.0\",\n  \"containers\": {\n    \"blue\": {\"name\": \"Paper\", \"color\": \"blue\", \"emoji\": \"🔵\"},\n    \"gray\": {\"name\": \"Residual\", \"color\": \"gray\", \"emoji\": \"⚫\"},\n    \"orange\": {\"name\": \"Plastic\", \"color\": \"orange\", \"emoji\": \"🟠\"},\n    \"green\": {\"name\": \"Garden\", \"color\": \"green\", \"emoji\": \"🟢\"}\n  },\n  \"reminder_times\": {\n    \"18:00\": {\n      \"type\": \"group\",\n      \"template\": \"Tomorrow: {container_emoji} {container_name} will be collected!\",\n      \"target\": \"group_whatsapp\"\n    },\n    \"22:00\": {\n      \"type\": \"group\",\n      \"template\": \"Not confirmed yet - {container_emoji} needs to go out by 7am!\",\n      \"target\": \"group_whatsapp\"\n    },\n    \"06:30\": {\n      \"type\": \"personal\",\n      \"template\": \"⚠️ {container_emoji} put out NOW!\",\n      \"target\": \"partner_whatsapp\"\n    },\n    \"09:30\": {\n      \"type\": \"escalation\",\n      \"template\": \"Container still not outside!\",\n      \"target\": \"me_telegram\"\n    }\n  },\n  \"targets\": {\n    \"group_whatsapp\": {\"id\": \"123456789@g.us\", \"channel\": \"whatsapp\"},\n    \"partner_whatsapp\": {\"id\": \"+31600000001\", \"channel\": \"whatsapp\"},\n    \"partner_telegram\": {\"id\": \"111111111\", \"channel\": \"telegram\"},\n    \"me_whatsapp\": {\"id\": \"+31600000002\", \"channel\": \"whatsapp\"},\n    \"me_telegram\": {\"id\": \"222222222\", \"channel\": \"telegram\"},\n    \"me_discord\": {\"id\": \"https://discord.com/api/webhooks/...\", \"channel\": \"discord\"}\n  }\n}\n\nComplete schedule.json Example\n{\n  \"2026-02-24\": {\n    \"orange\": {\n      \"confirmed\": false,\n      \"reminded_18:00\": false,\n      \"reminded_22:00\": false,\n      \"reminded_06:30\": false,\n      \"reminded_09:30\": false\n    }\n  },\n  \"2026-02-25\": {\n    \"gray\": {\n      \"confirmed\": false,\n      \"reminded_18:00\": false,\n      \"reminded_22:00\": false,\n      \"reminded_06:30\": false,\n      \"reminded_09:30\": false\n    }\n  }\n}\n\nCron Job\n\nAdd ONE cron job that runs every 15 minutes:\n\nName: \"Waste Reminder Check\"\nSchedule: every 15 minutes\nScript: /data/.openclaw/workspace/skills/waste-reminder/waste_cron.py\n\nThe cron script checks if any reminders need to be sent and outputs them. Your AI assistant (triggered by the cron job) reads this output and sends the actual messages to the appropriate channels.\n\nUser Commands\nConfirm: \"container is out\"\nView: \"waste schedule\" or \"waste status\"\nAdd: \"waste add [date] [container]\"\nRemove: \"waste remove [date] [container]\"\nFiles\nwaste-reminder/\n├── SKILL.md           # This file\n├── waste_reminder.py # CLI tool (manual commands)\n└── waste_cron.py      # Cron script (every 15 min)\n\nTemplate Placeholders\n{container_emoji} - The emoji\n{container_name} - The name\n{date} - The date\nChannel Support\n\nSupported channels:\n\nwhatsapp - Use phone number or group ID as ID\ntelegram - Use chat ID\ndiscord - Use webhook URL\nemail - Use email address\n\nEach target must specify both id and channel.\n\nTarget Naming Convention\n\nTargets should be named with channel suffix:\n\ngroup_whatsapp, group_telegram, group_discord\nme_whatsapp, me_telegram, me_discord\npartner_whatsapp, partner_telegram, partner_discord\n\nThe channel is extracted from the target name automatically.\n\nLicense\n\nMIT License"
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/Apenklit/waste-reminder",
    "publisherUrl": "https://clawhub.ai/Apenklit/waste-reminder",
    "owner": "Apenklit",
    "version": "1.0.2",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/waste-reminder",
    "downloadUrl": "https://openagent3.xyz/downloads/waste-reminder",
    "agentUrl": "https://openagent3.xyz/skills/waste-reminder/agent",
    "manifestUrl": "https://openagent3.xyz/skills/waste-reminder/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/waste-reminder/agent.md"
  }
}