{
  "schemaVersion": "1.0",
  "item": {
    "slug": "openclaw-reminder",
    "name": "Reminder",
    "source": "tencent",
    "type": "skill",
    "category": "通讯协作",
    "sourceUrl": "https://clawhub.ai/skyan/openclaw-reminder",
    "canonicalUrl": "https://clawhub.ai/skyan/openclaw-reminder",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/openclaw-reminder",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=openclaw-reminder",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "SKILL.md",
      "scripts/sanitize-message.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-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/openclaw-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/openclaw-reminder",
    "agentPageUrl": "https://openagent3.xyz/skills/openclaw-reminder/agent",
    "manifestUrl": "https://openagent3.xyz/skills/openclaw-reminder/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/openclaw-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": "Reminder Skill",
        "body": "Create one-time reminder tasks using OpenClaw cron."
      },
      {
        "title": "Usage",
        "body": "When user says \"remind me to XXX in 30 seconds\" or \"remind me at 3pm\", I create a cron job that executes the task and returns the result when the time comes."
      },
      {
        "title": "Fixed Parameters",
        "body": "--session main - Use main session to inherit Discord context\n--system-event - System event payload for main session\n--channel discord - Discord channel\n--announce - Send result directly to Discord\n--delete-after-run - Delete task after execution"
      },
      {
        "title": "Dynamic Parameters (from current session context)",
        "body": "Use session_status tool to get current session's deliveryContext:\n\n--agent - Get from deliveryContext.accountId (e.g., machu)\n--to - Get from deliveryContext.to (e.g., channel:1476104553148452958)\n\nHow to get:\n\n# Get current session info\nsession_status\n# Output contains deliveryContext:\n# {\n#   \"channel\": \"discord\",\n#   \"to\": \"channel:1476104553148452958\",\n#   \"accountId\": \"machu\"\n# }"
      },
      {
        "title": "Time Parsing",
        "body": "Parse user input time, support:\n\nRelative time: 30 seconds, 1 minute, 30 minutes, 2 hours, 1 day\nAbsolute time: 3pm, 9am today, 12pm tomorrow\n\nConvert to ISO 8601 format for cron."
      },
      {
        "title": "Usage Example",
        "body": "User says \"remind me to check weather in 30 seconds\":\n\n# 1. Get current session's deliveryContext\nsession_status\n# Assume output:\n# {\n#   \"deliveryContext\": {\n#     \"channel\": \"discord\",\n#     \"to\": \"channel:1476104553148452958\",\n#     \"accountId\": \"machu\"\n#   }\n# }\n\n# 2. Calculate time 30 seconds later\ndate -u -d \"+30 seconds\" +\"%Y-%m-%dT%H:%M:%SZ\"\n# Result: 2026-02-26T13:30:00Z\n\n# 3. Create cron job (using main session + system-event)\nopenclaw cron add \\\n  --name \"reminder-weather\" \\\n  --at \"2026-02-26T13:30:00Z\" \\\n  --session main \\\n  --system-event \"Check Beijing weather\" \\\n  --agent machu \\\n  --announce \\\n  --channel discord \\\n  --to \"channel:1476104553148452958\" \\\n  --delete-after-run"
      },
      {
        "title": "Task Content (SECURITY)",
        "body": "User-specified task content must be sanitized before passing to cron:\n\nValidation Method: REJECT dangerous patterns (not escape)\nThe script rejects any input containing:\n\nCommand substitution: $(), backticks `\nShell metacharacters: ;, |, &, >, <\nDouble quotes: \" (breaks CLI quoting)\nNewlines: \\n (can inject multiple commands)\nDangerous command prefixes: sudo, rm, wget, curl, bash, etc.\n\n\n\nSanitization Script:\nUse scripts/sanitize-message.sh to validate input:\n./scripts/sanitize-message.sh \"user's task content\"\n# Exit code 0 = safe, non-zero = rejected\n\n\n\nIf rejected: Tell user the task contains invalid characters and ask them to rephrase without: $() ` ; | & > < \" or dangerous commands."
      },
      {
        "title": "Confirmation Reply",
        "body": "After creating the task, reply to user to confirm:\n\n\"OK, will remind you in X minutes/to do XXX\"\nDon't tell user the specific cron command"
      },
      {
        "title": "Notes",
        "body": "Time must be in the future, not the past\nTask content should be concise and clear\nIf time exceeds 48 hours, suggest using calendar\nAlways use --session main + --system-event for reliable Discord delivery\nValidate task content with sanitize-message.sh before creating job"
      }
    ],
    "body": "Reminder Skill\n\nCreate one-time reminder tasks using OpenClaw cron.\n\nUsage\n\nWhen user says \"remind me to XXX in 30 seconds\" or \"remind me at 3pm\", I create a cron job that executes the task and returns the result when the time comes.\n\nParameter Configuration\nFixed Parameters\n--session main - Use main session to inherit Discord context\n--system-event - System event payload for main session\n--channel discord - Discord channel\n--announce - Send result directly to Discord\n--delete-after-run - Delete task after execution\nDynamic Parameters (from current session context)\n\nUse session_status tool to get current session's deliveryContext:\n\n--agent - Get from deliveryContext.accountId (e.g., machu)\n--to - Get from deliveryContext.to (e.g., channel:1476104553148452958)\n\nHow to get:\n\n# Get current session info\nsession_status\n# Output contains deliveryContext:\n# {\n#   \"channel\": \"discord\",\n#   \"to\": \"channel:1476104553148452958\",\n#   \"accountId\": \"machu\"\n# }\n\nTime Parsing\n\nParse user input time, support:\n\nRelative time: 30 seconds, 1 minute, 30 minutes, 2 hours, 1 day\nAbsolute time: 3pm, 9am today, 12pm tomorrow\n\nConvert to ISO 8601 format for cron.\n\nUsage Example\n\nUser says \"remind me to check weather in 30 seconds\":\n\n# 1. Get current session's deliveryContext\nsession_status\n# Assume output:\n# {\n#   \"deliveryContext\": {\n#     \"channel\": \"discord\",\n#     \"to\": \"channel:1476104553148452958\",\n#     \"accountId\": \"machu\"\n#   }\n# }\n\n# 2. Calculate time 30 seconds later\ndate -u -d \"+30 seconds\" +\"%Y-%m-%dT%H:%M:%SZ\"\n# Result: 2026-02-26T13:30:00Z\n\n# 3. Create cron job (using main session + system-event)\nopenclaw cron add \\\n  --name \"reminder-weather\" \\\n  --at \"2026-02-26T13:30:00Z\" \\\n  --session main \\\n  --system-event \"Check Beijing weather\" \\\n  --agent machu \\\n  --announce \\\n  --channel discord \\\n  --to \"channel:1476104553148452958\" \\\n  --delete-after-run\n\nTask Content (SECURITY)\n\nUser-specified task content must be sanitized before passing to cron:\n\nValidation Method: REJECT dangerous patterns (not escape)\n\nThe script rejects any input containing:\n\nCommand substitution: $(), backticks `\nShell metacharacters: ;, |, &, >, <\nDouble quotes: \" (breaks CLI quoting)\nNewlines: \\n (can inject multiple commands)\nDangerous command prefixes: sudo, rm, wget, curl, bash, etc.\n\nSanitization Script: Use scripts/sanitize-message.sh to validate input:\n\n./scripts/sanitize-message.sh \"user's task content\"\n# Exit code 0 = safe, non-zero = rejected\n\n\nIf rejected: Tell user the task contains invalid characters and ask them to rephrase without: $() ` ; | & > < \" or dangerous commands.\n\nConfirmation Reply\n\nAfter creating the task, reply to user to confirm:\n\n\"OK, will remind you in X minutes/to do XXX\"\nDon't tell user the specific cron command\nNotes\nTime must be in the future, not the past\nTask content should be concise and clear\nIf time exceeds 48 hours, suggest using calendar\nAlways use --session main + --system-event for reliable Discord delivery\nValidate task content with sanitize-message.sh before creating job"
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/skyan/openclaw-reminder",
    "publisherUrl": "https://clawhub.ai/skyan/openclaw-reminder",
    "owner": "skyan",
    "version": "1.0.5",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/openclaw-reminder",
    "downloadUrl": "https://openagent3.xyz/downloads/openclaw-reminder",
    "agentUrl": "https://openagent3.xyz/skills/openclaw-reminder/agent",
    "manifestUrl": "https://openagent3.xyz/skills/openclaw-reminder/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/openclaw-reminder/agent.md"
  }
}