{
  "schemaVersion": "1.0",
  "item": {
    "slug": "email-triage",
    "name": "email-triage",
    "source": "tencent",
    "type": "skill",
    "category": "AI 智能",
    "sourceUrl": "https://clawhub.ai/briancolinger/email-triage",
    "canonicalUrl": "https://clawhub.ai/briancolinger/email-triage",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/email-triage",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=email-triage",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "SKILL.md",
      "scripts/email-triage.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-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/email-triage"
    },
    "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/email-triage",
    "agentPageUrl": "https://openagent3.xyz/skills/email-triage/agent",
    "manifestUrl": "https://openagent3.xyz/skills/email-triage/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/email-triage/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": "Email Triage",
        "body": "Scan your IMAP inbox, classify emails into priority categories, and surface the ones that need attention. Uses a local LLM (Ollama) for intelligent classification with a rule-based heuristic fallback when Ollama is unavailable."
      },
      {
        "title": "Prerequisites",
        "body": "Python 3.10+\nIMAP-accessible email account (Gmail, Fastmail, self-hosted, etc.)\nOllama (optional) — for AI-powered classification. Without it, the script uses keyword-based heuristics that still work well for common patterns."
      },
      {
        "title": "Categories",
        "body": "IconCategoryDescription🔴urgentOutages, security alerts, legal, payment failures, time-critical🟡needs-responseBusiness inquiries, questions, action items requiring a reply🔵informationalReceipts, confirmations, newsletters, automated notifications⚫spamMarketing, promotions, unsolicited junk"
      },
      {
        "title": "Configuration",
        "body": "All configuration is via environment variables:\n\nVariableRequiredDefaultDescriptionIMAP_HOST✅—IMAP server hostnameIMAP_PORT—993IMAP port (SSL)IMAP_USER✅—IMAP username / email addressIMAP_PASS✅—IMAP password or app-specific passwordEMAIL_TRIAGE_STATE—./data/email-triage.jsonPath to the JSON state fileOLLAMA_URL—http://127.0.0.1:11434Ollama API endpointOLLAMA_MODEL—qwen2.5:7bOllama model for classification"
      },
      {
        "title": "Directories Written",
        "body": "EMAIL_TRIAGE_STATE (default: ./data/email-triage.json) — Persistent state file tracking classified emails and surfacing status"
      },
      {
        "title": "Commands",
        "body": "# Scan inbox and classify new unread emails\npython3 scripts/email/email-triage.py scan\n\n# Scan with verbose output (shows each classification)\npython3 scripts/email/email-triage.py scan --verbose\n\n# Dry run — scan and classify but don't save state\npython3 scripts/email/email-triage.py scan --dry-run\n\n# Show unsurfaced important emails (urgent + needs-response)\npython3 scripts/email/email-triage.py report\n\n# Same as report but JSON output (for programmatic use)\npython3 scripts/email/email-triage.py report --json\n\n# Mark reported emails as surfaced (so they don't appear again)\npython3 scripts/email/email-triage.py mark-surfaced\n\n# Show triage statistics\npython3 scripts/email/email-triage.py stats"
      },
      {
        "title": "How It Works",
        "body": "Connects to IMAP over SSL and fetches unread messages (up to 20 per scan).\nDeduplicates by Message-ID (or a hash of subject + sender as fallback) so emails are never classified twice.\nClassifies each email using Ollama if available, otherwise falls back to keyword heuristics.\nStores state in a local JSON file — tracks category, reason, and whether the email has been surfaced.\nreport surfaces only unsurfaced urgent and needs-response emails, sorted by priority.\nmark-surfaced flags reported emails so they won't appear in future reports.\nAuto-prunes state to the most recent 200 entries to prevent unbounded growth."
      },
      {
        "title": "Integration Tips",
        "body": "Heartbeat / cron: Run scan periodically, then report --json to check for items needing attention.\nAgent workflow: scan → report --json → act on results → mark-surfaced.\nWithout Ollama: The heuristic classifier handles common patterns (automated notifications, marketing, urgent keywords) well. Ollama adds nuance for ambiguous emails.\nApp passwords: If your provider uses 2FA, generate an app-specific password for IMAP access."
      }
    ],
    "body": "Email Triage\n\nScan your IMAP inbox, classify emails into priority categories, and surface the ones that need attention. Uses a local LLM (Ollama) for intelligent classification with a rule-based heuristic fallback when Ollama is unavailable.\n\nPrerequisites\nPython 3.10+\nIMAP-accessible email account (Gmail, Fastmail, self-hosted, etc.)\nOllama (optional) — for AI-powered classification. Without it, the script uses keyword-based heuristics that still work well for common patterns.\nCategories\nIcon\tCategory\tDescription\n🔴\turgent\tOutages, security alerts, legal, payment failures, time-critical\n🟡\tneeds-response\tBusiness inquiries, questions, action items requiring a reply\n🔵\tinformational\tReceipts, confirmations, newsletters, automated notifications\n⚫\tspam\tMarketing, promotions, unsolicited junk\nConfiguration\n\nAll configuration is via environment variables:\n\nVariable\tRequired\tDefault\tDescription\nIMAP_HOST\t✅\t—\tIMAP server hostname\nIMAP_PORT\t—\t993\tIMAP port (SSL)\nIMAP_USER\t✅\t—\tIMAP username / email address\nIMAP_PASS\t✅\t—\tIMAP password or app-specific password\nEMAIL_TRIAGE_STATE\t—\t./data/email-triage.json\tPath to the JSON state file\nOLLAMA_URL\t—\thttp://127.0.0.1:11434\tOllama API endpoint\nOLLAMA_MODEL\t—\tqwen2.5:7b\tOllama model for classification\nDirectories Written\nEMAIL_TRIAGE_STATE (default: ./data/email-triage.json) — Persistent state file tracking classified emails and surfacing status\nCommands\n# Scan inbox and classify new unread emails\npython3 scripts/email/email-triage.py scan\n\n# Scan with verbose output (shows each classification)\npython3 scripts/email/email-triage.py scan --verbose\n\n# Dry run — scan and classify but don't save state\npython3 scripts/email/email-triage.py scan --dry-run\n\n# Show unsurfaced important emails (urgent + needs-response)\npython3 scripts/email/email-triage.py report\n\n# Same as report but JSON output (for programmatic use)\npython3 scripts/email/email-triage.py report --json\n\n# Mark reported emails as surfaced (so they don't appear again)\npython3 scripts/email/email-triage.py mark-surfaced\n\n# Show triage statistics\npython3 scripts/email/email-triage.py stats\n\nHow It Works\nConnects to IMAP over SSL and fetches unread messages (up to 20 per scan).\nDeduplicates by Message-ID (or a hash of subject + sender as fallback) so emails are never classified twice.\nClassifies each email using Ollama if available, otherwise falls back to keyword heuristics.\nStores state in a local JSON file — tracks category, reason, and whether the email has been surfaced.\nreport surfaces only unsurfaced urgent and needs-response emails, sorted by priority.\nmark-surfaced flags reported emails so they won't appear in future reports.\nAuto-prunes state to the most recent 200 entries to prevent unbounded growth.\nIntegration Tips\nHeartbeat / cron: Run scan periodically, then report --json to check for items needing attention.\nAgent workflow: scan → report --json → act on results → mark-surfaced.\nWithout Ollama: The heuristic classifier handles common patterns (automated notifications, marketing, urgent keywords) well. Ollama adds nuance for ambiguous emails.\nApp passwords: If your provider uses 2FA, generate an app-specific password for IMAP access."
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/briancolinger/email-triage",
    "publisherUrl": "https://clawhub.ai/briancolinger/email-triage",
    "owner": "briancolinger",
    "version": "1.0.1",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/email-triage",
    "downloadUrl": "https://openagent3.xyz/downloads/email-triage",
    "agentUrl": "https://openagent3.xyz/skills/email-triage/agent",
    "manifestUrl": "https://openagent3.xyz/skills/email-triage/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/email-triage/agent.md"
  }
}