{
  "schemaVersion": "1.0",
  "item": {
    "slug": "snail-mail",
    "name": "Snail Mail",
    "source": "tencent",
    "type": "skill",
    "category": "通讯协作",
    "sourceUrl": "https://clawhub.ai/dvdegenz/snail-mail",
    "canonicalUrl": "https://clawhub.ai/dvdegenz/snail-mail",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/snail-mail",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=snail-mail",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "SKILL.md",
      "scripts/inbox.js"
    ],
    "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/snail-mail"
    },
    "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/snail-mail",
    "agentPageUrl": "https://openagent3.xyz/skills/snail-mail/agent",
    "manifestUrl": "https://openagent3.xyz/skills/snail-mail/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/snail-mail/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": "Operator Inbox",
        "body": "A \"slow channel\" between you and your operator. Not every event deserves a ping. The inbox captures what matters and presents it beautifully when they're ready to look."
      },
      {
        "title": "Setup",
        "body": "On first use, the inbox file is created automatically at {workspace}/inbox/messages.json.\n\nRequires: node (Node.js runtime)."
      },
      {
        "title": "When to Write to the Inbox",
        "body": "Write an inbox entry when something is notable enough that your operator would want to know, but not urgent enough to interrupt them."
      },
      {
        "title": "Write when:",
        "body": "Needs decision — something only a human can resolve (payment, approval, policy)\nAbnormal — errors, failures, unexpected patterns, security events\nInteresting — notable engagement, media mentions, milestones, opportunities\nFYI — context that might matter later but needs no action now"
      },
      {
        "title": "Do NOT write when:",
        "body": "Routine success (\"cron ran fine\", \"heartbeat OK\")\nSomething you already told them in chat\nTrivial events with no lasting significance\nDuplicate of something already in the inbox"
      },
      {
        "title": "Priority levels:",
        "body": "urgent — needs attention within hours (prefix title with [URGENT])\nimportant — should see today (prefix title with [IMPORTANT])\nnormal — whenever they check (no prefix)"
      },
      {
        "title": "Writing good entries:",
        "body": "Title: Short, scannable. Include the WHO or WHAT. (\"@bigaccount (500K) mentioned us\", not \"Social media event\")\nMessage: 1-3 sentences. What happened, why it matters, what (if anything) needs doing. Include links/handles when relevant."
      },
      {
        "title": "CLI Usage",
        "body": "# Add entry\nnode {skill}/scripts/inbox.js add \"Title\" \"Description of what happened\"\n\n# Add with priority\nnode {skill}/scripts/inbox.js add \"[URGENT] Server disk 95%\" \"Only 2GB remaining on /dev/sda1\"\n\n# List unread\nnode {skill}/scripts/inbox.js list\n\n# List all (including read)\nnode {skill}/scripts/inbox.js list all\n\n# List archived\nnode {skill}/scripts/inbox.js list archived\n\n# Mark one read\nnode {skill}/scripts/inbox.js read <id>\n\n# Mark all read\nnode {skill}/scripts/inbox.js read-all\n\n# Archive one\nnode {skill}/scripts/inbox.js archive <id>\n\n# Archive all read\nnode {skill}/scripts/inbox.js archive-read\n\n# Render for chat (auto-detects channel via OPENCLAW_CHANNEL)\nnode {skill}/scripts/inbox.js render [unread|all|archived]\n\n# Render as HTML (force)\nnode {skill}/scripts/inbox.js render --html\n\n# Render as markdown (force)\nnode {skill}/scripts/inbox.js render --md\n\n# Render as plain text (force)\nnode {skill}/scripts/inbox.js render --text"
      },
      {
        "title": "Presenting the Inbox",
        "body": "When the operator asks to see their inbox (or says \"inbox\", \"messages\", \"check inbox\"), run:\n\nnode {skill}/scripts/inbox.js render [unread|all|archived] [--html|--md|--text]\n\nChoose format based on channel:\n\nTelegram, webchat → --html\nDiscord, Slack → --md\nSMS, plain → --text\n\nSend the output as your reply. Do not add commentary unless they ask."
      },
      {
        "title": "Heartbeat Integration",
        "body": "During heartbeats, check for unread urgent/important items:\n\nnode {skill}/scripts/inbox.js list unread --json\n\nIf urgent items exist, surface them proactively. Otherwise stay quiet."
      },
      {
        "title": "Storage",
        "body": "Messages stored in {workspace}/inbox/messages.json. Single-writer (the agent), so no locking needed. Writes use atomic rename (write .tmp → rename) to prevent corruption.\n\nEnvironment variables:\n\nOPENCLAW_WORKSPACE — base directory for inbox storage (defaults to $HOME)\nOPENCLAW_CHANNEL — used by render auto-format detection (telegram/discord/slack/webchat)"
      }
    ],
    "body": "Operator Inbox\n\nA \"slow channel\" between you and your operator. Not every event deserves a ping. The inbox captures what matters and presents it beautifully when they're ready to look.\n\nSetup\n\nOn first use, the inbox file is created automatically at {workspace}/inbox/messages.json.\n\nRequires: node (Node.js runtime).\n\nWhen to Write to the Inbox\n\nWrite an inbox entry when something is notable enough that your operator would want to know, but not urgent enough to interrupt them.\n\nWrite when:\nNeeds decision — something only a human can resolve (payment, approval, policy)\nAbnormal — errors, failures, unexpected patterns, security events\nInteresting — notable engagement, media mentions, milestones, opportunities\nFYI — context that might matter later but needs no action now\nDo NOT write when:\nRoutine success (\"cron ran fine\", \"heartbeat OK\")\nSomething you already told them in chat\nTrivial events with no lasting significance\nDuplicate of something already in the inbox\nPriority levels:\nurgent — needs attention within hours (prefix title with [URGENT])\nimportant — should see today (prefix title with [IMPORTANT])\nnormal — whenever they check (no prefix)\nWriting good entries:\nTitle: Short, scannable. Include the WHO or WHAT. (\"@bigaccount (500K) mentioned us\", not \"Social media event\")\nMessage: 1-3 sentences. What happened, why it matters, what (if anything) needs doing. Include links/handles when relevant.\nCLI Usage\n# Add entry\nnode {skill}/scripts/inbox.js add \"Title\" \"Description of what happened\"\n\n# Add with priority\nnode {skill}/scripts/inbox.js add \"[URGENT] Server disk 95%\" \"Only 2GB remaining on /dev/sda1\"\n\n# List unread\nnode {skill}/scripts/inbox.js list\n\n# List all (including read)\nnode {skill}/scripts/inbox.js list all\n\n# List archived\nnode {skill}/scripts/inbox.js list archived\n\n# Mark one read\nnode {skill}/scripts/inbox.js read <id>\n\n# Mark all read\nnode {skill}/scripts/inbox.js read-all\n\n# Archive one\nnode {skill}/scripts/inbox.js archive <id>\n\n# Archive all read\nnode {skill}/scripts/inbox.js archive-read\n\n# Render for chat (auto-detects channel via OPENCLAW_CHANNEL)\nnode {skill}/scripts/inbox.js render [unread|all|archived]\n\n# Render as HTML (force)\nnode {skill}/scripts/inbox.js render --html\n\n# Render as markdown (force)\nnode {skill}/scripts/inbox.js render --md\n\n# Render as plain text (force)\nnode {skill}/scripts/inbox.js render --text\n\nPresenting the Inbox\n\nWhen the operator asks to see their inbox (or says \"inbox\", \"messages\", \"check inbox\"), run:\n\nnode {skill}/scripts/inbox.js render [unread|all|archived] [--html|--md|--text]\n\n\nChoose format based on channel:\n\nTelegram, webchat → --html\nDiscord, Slack → --md\nSMS, plain → --text\n\nSend the output as your reply. Do not add commentary unless they ask.\n\nHeartbeat Integration\n\nDuring heartbeats, check for unread urgent/important items:\n\nnode {skill}/scripts/inbox.js list unread --json\n\n\nIf urgent items exist, surface them proactively. Otherwise stay quiet.\n\nStorage\n\nMessages stored in {workspace}/inbox/messages.json. Single-writer (the agent), so no locking needed. Writes use atomic rename (write .tmp → rename) to prevent corruption.\n\nEnvironment variables:\n\nOPENCLAW_WORKSPACE — base directory for inbox storage (defaults to $HOME)\nOPENCLAW_CHANNEL — used by render auto-format detection (telegram/discord/slack/webchat)"
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/dvdegenz/snail-mail",
    "publisherUrl": "https://clawhub.ai/dvdegenz/snail-mail",
    "owner": "dvdegenz",
    "version": "1.0.2",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/snail-mail",
    "downloadUrl": "https://openagent3.xyz/downloads/snail-mail",
    "agentUrl": "https://openagent3.xyz/skills/snail-mail/agent",
    "manifestUrl": "https://openagent3.xyz/skills/snail-mail/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/snail-mail/agent.md"
  }
}