{
  "schemaVersion": "1.0",
  "item": {
    "slug": "mastodon-scout",
    "name": "Mastodon Scout",
    "source": "tencent",
    "type": "skill",
    "category": "开发工具",
    "sourceUrl": "https://clawhub.ai/patelhiren/mastodon-scout",
    "canonicalUrl": "https://clawhub.ai/patelhiren/mastodon-scout",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/mastodon-scout",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=mastodon-scout",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "SKILL.md",
      "scripts/mastodon_scout.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",
      "slug": "mastodon-scout",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-05-05T09:00:23.307Z",
      "expiresAt": "2026-05-12T09:00:23.307Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=mastodon-scout",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=mastodon-scout",
        "contentDisposition": "attachment; filename=\"mastodon-scout-2.0.1.zip\"",
        "redirectLocation": null,
        "bodySnippet": null,
        "slug": "mastodon-scout"
      },
      "scope": "item",
      "summary": "Item download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this item.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/mastodon-scout"
    },
    "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/mastodon-scout",
    "agentPageUrl": "https://openagent3.xyz/skills/mastodon-scout/agent",
    "manifestUrl": "https://openagent3.xyz/skills/mastodon-scout/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/mastodon-scout/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": "Purpose",
        "body": "Read-only Mastodon skill. Fetches data from the Mastodon API via a bundled Python script (scripts/mastodon_scout.py). Returns human-readable summaries by default, or raw JSON with --json."
      },
      {
        "title": "Invocation Rules (MANDATORY)",
        "body": "python3 ./scripts/mastodon_scout.py <command> [options]"
      },
      {
        "title": "Commands",
        "body": "CommandWhat it fetcheshomeAuthenticated user's home timelineuser-tweetsAuthenticated user's own postsmentionsMentions of the authenticated usersearch <query>Posts matching the query"
      },
      {
        "title": "Options",
        "body": "--instance <url>   Mastodon instance base URL (default: $MASTODON_INSTANCE or https://mastodon.social)\n--limit <int>      Number of items to return (default: $LIMIT or 20)\n--json             Output raw JSON instead of human-readable text"
      },
      {
        "title": "Environment Variables",
        "body": "MASTODON_TOKEN      Required. OAuth bearer token.\nMASTODON_INSTANCE   Optional. Instance base URL (default: https://mastodon.social)."
      },
      {
        "title": "Examples",
        "body": "python3 ./scripts/mastodon_scout.py home\npython3 ./scripts/mastodon_scout.py mentions --limit 10\npython3 ./scripts/mastodon_scout.py search \"golang\"\npython3 ./scripts/mastodon_scout.py home --json\npython3 ./scripts/mastodon_scout.py home --instance https://fosstodon.org"
      },
      {
        "title": "Text Mode (Default)",
        "body": "The script formats each post as:\n\n[N] Display Name (@user@instance) · <timestamp>\n<content>\n↩ <replies>  🔁 <reblogs>  ⭐ <favourites>\n<url>\n\nThe agent MAY add a brief summary after the list."
      },
      {
        "title": "JSON Mode (--json)",
        "body": "Returns raw Mastodon API JSON. Return it verbatim — no interpretation."
      },
      {
        "title": "Error Handling",
        "body": "The script prints a human-readable error to stderr and exits non-zero:\n\nConditionMessageToken missingError: MASTODON_TOKEN is not set401Mastodon API error: 401 Unauthorized — check MASTODON_TOKEN403Mastodon API error: 403 Forbidden422Mastodon API error: 422 Unprocessable Entity429Mastodon API error: 429 Rate Limited — try again later\n\nDo not retry on error. Guide the user to Authentication Setup if the token is missing or invalid."
      },
      {
        "title": "Examples That Trigger This Skill",
        "body": "mastodon-scout home\nshow my mastodon timeline\ncheck mastodon mentions\nsearch mastodon for \"golang\"\nget my mastodon posts"
      },
      {
        "title": "Notes",
        "body": "This skill is read-only (no posting, following, or other mutations)\nscripts/mastodon_scout.py uses stdlib only — no pip install required\nIn JSON mode: output verbatim, no interpretation"
      },
      {
        "title": "Authentication Setup (Agent MAY Help)",
        "body": "EXCEPTION TO STRICT MODE: If the user needs help obtaining a token, the agent may provide guidance before executing the skill."
      },
      {
        "title": "How to Obtain a Token:",
        "body": "Step 1: Access Development Settings\n\nLog into your Mastodon instance (e.g., mastodon.social, fosstodon.org)\nNavigate to: Settings → Development (or Preferences → Development)\nDirect URL: https://[instance-domain]/settings/applications\n\nStep 2: Create Application\n\nClick \"New Application\"\n\nApplication name: mastodon-scout (or any name)\nRedirect URI: urn:ietf:wg:oauth:2.0:oob\nScopes: CRITICAL — only select read (uncheck write, follow, push)\n\nStep 3: Get Access Token\n\nClick Submit, then open the created application\nCopy the \"Your access token\" value\n\nStep 4: Set Environment Variable\n\nexport MASTODON_TOKEN=\"paste_token_here\"\n\nStep 5: Verify\n\npython3 ./scripts/mastodon_scout.py home --limit 5"
      },
      {
        "title": "Common Mastodon Instances:",
        "body": "mastodon.social — General purpose (default)\nfosstodon.org — FOSS/tech community\nmas.to — Tech focused\nhachyderm.io — Tech/infosec community"
      },
      {
        "title": "Security Notes:",
        "body": "Token is read-only (cannot post, follow, or delete)\nKeep token secret (don't commit to git)\nCan be revoked anytime in Development settings\nEach Mastodon instance requires its own token"
      }
    ],
    "body": "Mastodon Scout\nPurpose\n\nRead-only Mastodon skill. Fetches data from the Mastodon API via a bundled Python script (scripts/mastodon_scout.py). Returns human-readable summaries by default, or raw JSON with --json.\n\nInvocation Rules (MANDATORY)\npython3 ./scripts/mastodon_scout.py <command> [options]\n\nCommands\nCommand\tWhat it fetches\nhome\tAuthenticated user's home timeline\nuser-tweets\tAuthenticated user's own posts\nmentions\tMentions of the authenticated user\nsearch <query>\tPosts matching the query\nOptions\n--instance <url>   Mastodon instance base URL (default: $MASTODON_INSTANCE or https://mastodon.social)\n--limit <int>      Number of items to return (default: $LIMIT or 20)\n--json             Output raw JSON instead of human-readable text\n\nEnvironment Variables\nMASTODON_TOKEN      Required. OAuth bearer token.\nMASTODON_INSTANCE   Optional. Instance base URL (default: https://mastodon.social).\n\nExamples\npython3 ./scripts/mastodon_scout.py home\npython3 ./scripts/mastodon_scout.py mentions --limit 10\npython3 ./scripts/mastodon_scout.py search \"golang\"\npython3 ./scripts/mastodon_scout.py home --json\npython3 ./scripts/mastodon_scout.py home --instance https://fosstodon.org\n\nOutput Modes\nText Mode (Default)\n\nThe script formats each post as:\n\n[N] Display Name (@user@instance) · <timestamp>\n<content>\n↩ <replies>  🔁 <reblogs>  ⭐ <favourites>\n<url>\n\n\nThe agent MAY add a brief summary after the list.\n\nJSON Mode (--json)\n\nReturns raw Mastodon API JSON. Return it verbatim — no interpretation.\n\nError Handling\n\nThe script prints a human-readable error to stderr and exits non-zero:\n\nCondition\tMessage\nToken missing\tError: MASTODON_TOKEN is not set\n401\tMastodon API error: 401 Unauthorized — check MASTODON_TOKEN\n403\tMastodon API error: 403 Forbidden\n422\tMastodon API error: 422 Unprocessable Entity\n429\tMastodon API error: 429 Rate Limited — try again later\n\nDo not retry on error. Guide the user to Authentication Setup if the token is missing or invalid.\n\nExamples That Trigger This Skill\nmastodon-scout home\nshow my mastodon timeline\ncheck mastodon mentions\nsearch mastodon for \"golang\"\nget my mastodon posts\nNotes\nThis skill is read-only (no posting, following, or other mutations)\nscripts/mastodon_scout.py uses stdlib only — no pip install required\nIn JSON mode: output verbatim, no interpretation\nAuthentication Setup (Agent MAY Help)\n\nEXCEPTION TO STRICT MODE: If the user needs help obtaining a token, the agent may provide guidance before executing the skill.\n\nHow to Obtain a Token:\n\nStep 1: Access Development Settings\n\nLog into your Mastodon instance (e.g., mastodon.social, fosstodon.org)\nNavigate to: Settings → Development (or Preferences → Development)\nDirect URL: https://[instance-domain]/settings/applications\n\nStep 2: Create Application\n\nClick \"New Application\"\nApplication name: mastodon-scout (or any name)\nRedirect URI: urn:ietf:wg:oauth:2.0:oob\nScopes: CRITICAL — only select read (uncheck write, follow, push)\n\nStep 3: Get Access Token\n\nClick Submit, then open the created application\nCopy the \"Your access token\" value\n\nStep 4: Set Environment Variable\n\nexport MASTODON_TOKEN=\"paste_token_here\"\n\n\nStep 5: Verify\n\npython3 ./scripts/mastodon_scout.py home --limit 5\n\nCommon Mastodon Instances:\nmastodon.social — General purpose (default)\nfosstodon.org — FOSS/tech community\nmas.to — Tech focused\nhachyderm.io — Tech/infosec community\nSecurity Notes:\nToken is read-only (cannot post, follow, or delete)\nKeep token secret (don't commit to git)\nCan be revoked anytime in Development settings\nEach Mastodon instance requires its own token"
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/patelhiren/mastodon-scout",
    "publisherUrl": "https://clawhub.ai/patelhiren/mastodon-scout",
    "owner": "patelhiren",
    "version": "2.0.1",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/mastodon-scout",
    "downloadUrl": "https://openagent3.xyz/downloads/mastodon-scout",
    "agentUrl": "https://openagent3.xyz/skills/mastodon-scout/agent",
    "manifestUrl": "https://openagent3.xyz/skills/mastodon-scout/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/mastodon-scout/agent.md"
  }
}