{
  "schemaVersion": "1.0",
  "item": {
    "slug": "twitter-autopilot",
    "name": "Twitter Autopilot",
    "source": "tencent",
    "type": "skill",
    "category": "AI 智能",
    "sourceUrl": "https://clawhub.ai/persnola1-sketch/twitter-autopilot",
    "canonicalUrl": "https://clawhub.ai/persnola1-sketch/twitter-autopilot",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/twitter-autopilot",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=twitter-autopilot",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "SKILL.md",
      "references/content-strategy.md",
      "references/strategy-templates.md",
      "scripts/tweet.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/twitter-autopilot"
    },
    "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/twitter-autopilot",
    "agentPageUrl": "https://openagent3.xyz/skills/twitter-autopilot/agent",
    "manifestUrl": "https://openagent3.xyz/skills/twitter-autopilot/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/twitter-autopilot/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": "Twitter Autopilot",
        "body": "End-to-end Twitter/X automation for AI agents running on OpenClaw."
      },
      {
        "title": "Credentials (all set as env vars)",
        "body": "VariableRequiredDescriptionTWITTER_API_KEY✅OAuth 1.0a consumer keyTWITTER_API_SECRET✅OAuth 1.0a consumer secretTWITTER_ACCESS_TOKEN✅OAuth 1.0a user tokenTWITTER_ACCESS_SECRET✅OAuth 1.0a user secretTWITTER_BEARER_TOKENOptionalOAuth 2.0 bearer (needed for reads/follows)"
      },
      {
        "title": "Dependencies",
        "body": "tweepy (pip install)"
      },
      {
        "title": "Files Read/Written",
        "body": "PathAccessPurposetwitter/MODE.mdReadDraft vs auto mode flagtwitter/queue.mdRead/WriteApproved tweets waiting to posttwitter/drafts/pending.mdRead/WriteUnapproved draftstwitter/posted-log.mdRead/WriteFull history of posted tweets (duplicate check)twitter/logs/WriteEngagement and posting logs"
      },
      {
        "title": "Scope",
        "body": "⚠️ Posts tweets to Twitter/X (public, real-world impact)\nReads/writes local draft and log files\nCan run autonomously via cron (check MODE.md to control)"
      },
      {
        "title": "1. Get API Keys",
        "body": "Go to developer.x.com → create a project + app\nSet app permissions to Read and Write\nGenerate: API Key, API Secret, Access Token, Access Token Secret\nGenerate Bearer Token: curl -u \"API_KEY:API_SECRET\" -d \"grant_type=client_credentials\" \"https://api.twitter.com/oauth2/token\""
      },
      {
        "title": "2. Set Environment Variables",
        "body": "TWITTER_API_KEY=your_api_key\nTWITTER_API_SECRET=your_api_secret\nTWITTER_ACCESS_TOKEN=your_access_token\nTWITTER_ACCESS_SECRET=your_access_token_secret\nTWITTER_BEARER_TOKEN=your_bearer_token"
      },
      {
        "title": "3. Install Dependency",
        "body": "pip install tweepy"
      },
      {
        "title": "Usage",
        "body": "All commands via scripts/tweet.py:\n\n# Post (auto-threads if >280 chars)\npython tweet.py post \"your tweet text here\"\n\n# Reply to a tweet\npython tweet.py reply TWEET_ID \"your reply\"\n\n# Quote tweet\npython tweet.py quote TWEET_ID \"your take\"\n\n# Retweet\npython tweet.py retweet TWEET_ID\n\n# Delete\npython tweet.py delete TWEET_ID\n\n# Follow / Unfollow\npython tweet.py follow @username\npython tweet.py unfollow @username\n\n# Check mentions\npython tweet.py mentions\n\n# Account stats\npython tweet.py me"
      },
      {
        "title": "Long Tweets → Auto-Thread",
        "body": "Free API tier limits single tweets to 280 chars. The post command auto-splits at sentence boundaries into a thread when text exceeds 280 chars.\n\nFor manual threads, call thread from Python:\n\nfrom tweet import thread\nthread([\"Tweet 1\", \"Tweet 2\", \"Tweet 3\"])"
      },
      {
        "title": "Draft Workflow",
        "body": "For agents that need human approval before posting:\n\nCreate twitter/MODE.md with content DRAFT or AUTO\nCreate twitter/drafts/pending.md for queued drafts\nIn cron jobs, check MODE.md before posting:\n\nDRAFT → append to pending.md, notify human\nAUTO → post directly, log to twitter/logs/"
      },
      {
        "title": "Gotchas",
        "body": "Free tier: 280 char limit per tweet, rate limits on posting (~50/day write, reads limited)\n401 on follows/reads: You need a Bearer Token (OAuth 2.0), not just OAuth 1.0a keys\n403 on long tweets: Free tier rejects >280 chars — use auto-thread\nShell escaping: Avoid passing tweets with quotes via shell args — use Python directly for complex text\nRate limits: Add time.sleep(1) between batch operations (follows, thread posts)"
      },
      {
        "title": "Strategy",
        "body": "See references/content-strategy.md for the full tweet writing playbook:\n\nX algorithm breakdown (engagement hierarchy, peak times, dwell time)\n6 hook formulas with examples (bold, specific result, curiosity gap, story, pattern interrupt, question)\n6 tweet formats (listicle, contrarian, before/after, framework, universal experience, fill-in-blank)\nCopywriting frameworks (PAS, BAB, AIDA)\nThread structure template (7-8 tweet sweet spot)\nGrowth tactics (30-day subtopic, reply strategy, 80/20 rule)\nAI agent-specific tips\n\nSee references/strategy-templates.md for content pillars, engagement playbooks, and cron schedule templates."
      },
      {
        "title": "Key Lessons (from real usage)",
        "body": "AIs that BUILD things get followers. AIs that post thoughts don't.\nEngage with the AI agent community — they engage back.\nHigh volume matters early (5-10+ posts/day including replies).\nSelf-deprecating humor > motivational quotes.\nDraft mode for new accounts — one bad tweet can tank trust.\nALWAYS check twitter/posted-log.md before posting — crons can reword the same topic and create duplicates. Compare ideas, not just exact text.\nSay your human's name (e.g. \"Alex\"), not \"my human\" — sounds more personal and real.\nLog EVERY posted tweet to twitter/posted-log.md with full text, ID, date, and source."
      }
    ],
    "body": "Twitter Autopilot\n\nEnd-to-end Twitter/X automation for AI agents running on OpenClaw.\n\nRequirements & Scope\nCredentials (all set as env vars)\nVariable\tRequired\tDescription\nTWITTER_API_KEY\t✅\tOAuth 1.0a consumer key\nTWITTER_API_SECRET\t✅\tOAuth 1.0a consumer secret\nTWITTER_ACCESS_TOKEN\t✅\tOAuth 1.0a user token\nTWITTER_ACCESS_SECRET\t✅\tOAuth 1.0a user secret\nTWITTER_BEARER_TOKEN\tOptional\tOAuth 2.0 bearer (needed for reads/follows)\nDependencies\ntweepy (pip install)\nFiles Read/Written\nPath\tAccess\tPurpose\ntwitter/MODE.md\tRead\tDraft vs auto mode flag\ntwitter/queue.md\tRead/Write\tApproved tweets waiting to post\ntwitter/drafts/pending.md\tRead/Write\tUnapproved drafts\ntwitter/posted-log.md\tRead/Write\tFull history of posted tweets (duplicate check)\ntwitter/logs/\tWrite\tEngagement and posting logs\nScope\n⚠️ Posts tweets to Twitter/X (public, real-world impact)\nReads/writes local draft and log files\nCan run autonomously via cron (check MODE.md to control)\nSetup\n1. Get API Keys\nGo to developer.x.com → create a project + app\nSet app permissions to Read and Write\nGenerate: API Key, API Secret, Access Token, Access Token Secret\nGenerate Bearer Token: curl -u \"API_KEY:API_SECRET\" -d \"grant_type=client_credentials\" \"https://api.twitter.com/oauth2/token\"\n2. Set Environment Variables\nTWITTER_API_KEY=your_api_key\nTWITTER_API_SECRET=your_api_secret\nTWITTER_ACCESS_TOKEN=your_access_token\nTWITTER_ACCESS_SECRET=your_access_token_secret\nTWITTER_BEARER_TOKEN=your_bearer_token\n\n3. Install Dependency\npip install tweepy\n\nUsage\n\nAll commands via scripts/tweet.py:\n\n# Post (auto-threads if >280 chars)\npython tweet.py post \"your tweet text here\"\n\n# Reply to a tweet\npython tweet.py reply TWEET_ID \"your reply\"\n\n# Quote tweet\npython tweet.py quote TWEET_ID \"your take\"\n\n# Retweet\npython tweet.py retweet TWEET_ID\n\n# Delete\npython tweet.py delete TWEET_ID\n\n# Follow / Unfollow\npython tweet.py follow @username\npython tweet.py unfollow @username\n\n# Check mentions\npython tweet.py mentions\n\n# Account stats\npython tweet.py me\n\nLong Tweets → Auto-Thread\n\nFree API tier limits single tweets to 280 chars. The post command auto-splits at sentence boundaries into a thread when text exceeds 280 chars.\n\nFor manual threads, call thread from Python:\n\nfrom tweet import thread\nthread([\"Tweet 1\", \"Tweet 2\", \"Tweet 3\"])\n\nDraft Workflow\n\nFor agents that need human approval before posting:\n\nCreate twitter/MODE.md with content DRAFT or AUTO\nCreate twitter/drafts/pending.md for queued drafts\nIn cron jobs, check MODE.md before posting:\nDRAFT → append to pending.md, notify human\nAUTO → post directly, log to twitter/logs/\nGotchas\nFree tier: 280 char limit per tweet, rate limits on posting (~50/day write, reads limited)\n401 on follows/reads: You need a Bearer Token (OAuth 2.0), not just OAuth 1.0a keys\n403 on long tweets: Free tier rejects >280 chars — use auto-thread\nShell escaping: Avoid passing tweets with quotes via shell args — use Python directly for complex text\nRate limits: Add time.sleep(1) between batch operations (follows, thread posts)\nStrategy\n\nSee references/content-strategy.md for the full tweet writing playbook:\n\nX algorithm breakdown (engagement hierarchy, peak times, dwell time)\n6 hook formulas with examples (bold, specific result, curiosity gap, story, pattern interrupt, question)\n6 tweet formats (listicle, contrarian, before/after, framework, universal experience, fill-in-blank)\nCopywriting frameworks (PAS, BAB, AIDA)\nThread structure template (7-8 tweet sweet spot)\nGrowth tactics (30-day subtopic, reply strategy, 80/20 rule)\nAI agent-specific tips\n\nSee references/strategy-templates.md for content pillars, engagement playbooks, and cron schedule templates.\n\nKey Lessons (from real usage)\nAIs that BUILD things get followers. AIs that post thoughts don't.\nEngage with the AI agent community — they engage back.\nHigh volume matters early (5-10+ posts/day including replies).\nSelf-deprecating humor > motivational quotes.\nDraft mode for new accounts — one bad tweet can tank trust.\nALWAYS check twitter/posted-log.md before posting — crons can reword the same topic and create duplicates. Compare ideas, not just exact text.\nSay your human's name (e.g. \"Alex\"), not \"my human\" — sounds more personal and real.\nLog EVERY posted tweet to twitter/posted-log.md with full text, ID, date, and source."
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/persnola1-sketch/twitter-autopilot",
    "publisherUrl": "https://clawhub.ai/persnola1-sketch/twitter-autopilot",
    "owner": "persnola1-sketch",
    "version": "1.3.1",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/twitter-autopilot",
    "downloadUrl": "https://openagent3.xyz/downloads/twitter-autopilot",
    "agentUrl": "https://openagent3.xyz/skills/twitter-autopilot/agent",
    "manifestUrl": "https://openagent3.xyz/skills/twitter-autopilot/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/twitter-autopilot/agent.md"
  }
}