Some checks failed
CI / Check / macos-latest (push) Has been cancelled
CI / Check / ubuntu-latest (push) Has been cancelled
CI / Check / windows-latest (push) Has been cancelled
CI / Test / macos-latest (push) Has been cancelled
CI / Test / ubuntu-latest (push) Has been cancelled
CI / Test / windows-latest (push) Has been cancelled
CI / Clippy (push) Has been cancelled
CI / Format (push) Has been cancelled
CI / Security Audit (push) Has been cancelled
CI / Secrets Scan (push) Has been cancelled
CI / Install Script Smoke Test (push) Has been cancelled
362 lines
12 KiB
Markdown
362 lines
12 KiB
Markdown
---
|
|
name: twitter-hand-skill
|
|
version: "1.0.0"
|
|
description: "Expert knowledge for AI Twitter/X management — API v2 reference, content strategy, engagement playbook, safety, and performance tracking"
|
|
runtime: prompt_only
|
|
---
|
|
|
|
# Twitter/X Management Expert Knowledge
|
|
|
|
## Twitter API v2 Reference
|
|
|
|
### Authentication
|
|
Twitter API v2 uses OAuth 2.0 Bearer Token for app-level access and OAuth 1.0a for user-level actions.
|
|
|
|
**Bearer Token** (read-only access + tweet creation):
|
|
```
|
|
Authorization: Bearer $TWITTER_BEARER_TOKEN
|
|
```
|
|
|
|
**Environment variable**: `TWITTER_BEARER_TOKEN`
|
|
|
|
### Core Endpoints
|
|
|
|
**Get authenticated user info**:
|
|
```bash
|
|
curl -s -H "Authorization: Bearer $TWITTER_BEARER_TOKEN" \
|
|
"https://api.twitter.com/2/users/me"
|
|
```
|
|
Response: `{"data": {"id": "123", "name": "User", "username": "user"}}`
|
|
|
|
**Post a tweet**:
|
|
```bash
|
|
curl -s -X POST "https://api.twitter.com/2/tweets" \
|
|
-H "Authorization: Bearer $TWITTER_BEARER_TOKEN" \
|
|
-H "Content-Type: application/json" \
|
|
-d '{"text": "Hello world!"}'
|
|
```
|
|
Response: `{"data": {"id": "tweet_id", "text": "Hello world!"}}`
|
|
|
|
**Post a reply**:
|
|
```bash
|
|
curl -s -X POST "https://api.twitter.com/2/tweets" \
|
|
-H "Authorization: Bearer $TWITTER_BEARER_TOKEN" \
|
|
-H "Content-Type: application/json" \
|
|
-d '{"text": "Great point!", "reply": {"in_reply_to_tweet_id": "PARENT_TWEET_ID"}}'
|
|
```
|
|
|
|
**Post a thread** (chain of replies to yourself):
|
|
1. Post first tweet → get `tweet_id`
|
|
2. Post second tweet with `reply.in_reply_to_tweet_id` = first tweet_id
|
|
3. Repeat for each tweet in thread
|
|
|
|
**Delete a tweet**:
|
|
```bash
|
|
curl -s -X DELETE "https://api.twitter.com/2/tweets/TWEET_ID" \
|
|
-H "Authorization: Bearer $TWITTER_BEARER_TOKEN"
|
|
```
|
|
|
|
**Like a tweet**:
|
|
```bash
|
|
curl -s -X POST "https://api.twitter.com/2/users/USER_ID/likes" \
|
|
-H "Authorization: Bearer $TWITTER_BEARER_TOKEN" \
|
|
-H "Content-Type: application/json" \
|
|
-d '{"tweet_id": "TARGET_TWEET_ID"}'
|
|
```
|
|
|
|
**Get mentions**:
|
|
```bash
|
|
curl -s -H "Authorization: Bearer $TWITTER_BEARER_TOKEN" \
|
|
"https://api.twitter.com/2/users/USER_ID/mentions?max_results=10&tweet.fields=public_metrics,created_at,author_id"
|
|
```
|
|
|
|
**Search recent tweets**:
|
|
```bash
|
|
curl -s -H "Authorization: Bearer $TWITTER_BEARER_TOKEN" \
|
|
"https://api.twitter.com/2/tweets/search/recent?query=QUERY&max_results=10&tweet.fields=public_metrics"
|
|
```
|
|
|
|
**Get tweet metrics**:
|
|
```bash
|
|
curl -s -H "Authorization: Bearer $TWITTER_BEARER_TOKEN" \
|
|
"https://api.twitter.com/2/tweets?ids=ID1,ID2,ID3&tweet.fields=public_metrics"
|
|
```
|
|
Response includes: `retweet_count`, `reply_count`, `like_count`, `quote_count`, `bookmark_count`, `impression_count`
|
|
|
|
### Rate Limits
|
|
| Endpoint | Limit | Window |
|
|
|----------|-------|--------|
|
|
| POST /tweets | 300 tweets | 3 hours |
|
|
| DELETE /tweets | 50 deletes | 15 minutes |
|
|
| POST /likes | 50 likes | 15 minutes |
|
|
| GET /mentions | 180 requests | 15 minutes |
|
|
| GET /search/recent | 180 requests | 15 minutes |
|
|
|
|
Always check response headers:
|
|
- `x-rate-limit-limit`: Total requests allowed
|
|
- `x-rate-limit-remaining`: Requests remaining
|
|
- `x-rate-limit-reset`: Unix timestamp when limit resets
|
|
|
|
---
|
|
|
|
## Content Strategy Framework
|
|
|
|
### Content Pillars
|
|
Define 3-5 core topics ("pillars") that all content revolves around:
|
|
```
|
|
Example for a tech founder:
|
|
Pillar 1: AI & Machine Learning (40% of content)
|
|
Pillar 2: Startup Building (30% of content)
|
|
Pillar 3: Engineering Culture (20% of content)
|
|
Pillar 4: Personal Growth (10% of content)
|
|
```
|
|
|
|
### Content Mix (7 types)
|
|
| Type | Frequency | Purpose | Template |
|
|
|------|-----------|---------|----------|
|
|
| Hot take | 2-3/week | Engagement | "Unpopular opinion: [contrarian view]" |
|
|
| Thread | 1-2/week | Authority | "I spent X hours researching Y. Here's what I found:" |
|
|
| Tip/How-to | 2-3/week | Value | "How to [solve problem] in [N] steps:" |
|
|
| Question | 1-2/week | Engagement | "[Interesting question]? I'll go first:" |
|
|
| Curated share | 1-2/week | Curation | "This [article/tool/repo] is a game changer for [audience]:" |
|
|
| Story | 1/week | Connection | "3 years ago I [relatable experience]. Here's what happened:" |
|
|
| Data/Stat | 1/week | Authority | "[Surprising statistic]. Here's why it matters:" |
|
|
|
|
### Optimal Posting Times (UTC-based, adjust to audience timezone)
|
|
| Day | Best Times | Why |
|
|
|-----|-----------|-----|
|
|
| Monday | 8-10 AM | Start of work week, checking feeds |
|
|
| Tuesday | 10 AM, 1 PM | Peak engagement day |
|
|
| Wednesday | 9 AM, 12 PM | Mid-week focus |
|
|
| Thursday | 10 AM, 2 PM | Second-highest engagement day |
|
|
| Friday | 9-11 AM | Morning only, engagement drops PM |
|
|
| Saturday | 10 AM | Casual browsing |
|
|
| Sunday | 4-6 PM | Pre-work-week planning |
|
|
|
|
---
|
|
|
|
## Tweet Writing Best Practices
|
|
|
|
### The Hook (first line is everything)
|
|
Hooks that work:
|
|
- **Contrarian**: "Most people think X. They're wrong."
|
|
- **Number**: "I analyzed 500 [things]. Here's what I found:"
|
|
- **Question**: "Why do 90% of [things] fail?"
|
|
- **Story**: "In 2019, I almost [dramatic thing]."
|
|
- **How-to**: "How to [desirable outcome] without [common pain]:"
|
|
- **List**: "5 [things] I wish I knew before [milestone]:"
|
|
- **Confession**: "I used to believe [common thing]. Then I learned..."
|
|
|
|
### Writing Rules
|
|
1. **One idea per tweet** — don't try to cover everything
|
|
2. **Front-load value** — the hook must deliver or promise value
|
|
3. **Use line breaks** — no wall of text, 1-2 sentences per line
|
|
4. **280 character limit** — every word must earn its place
|
|
5. **Active voice** — "We shipped X" not "X was shipped by us"
|
|
6. **Specific > vague** — "3x faster" not "much faster"
|
|
7. **End with a call to action** — "Agree? RT" or "What would you add?"
|
|
|
|
### Thread Structure
|
|
```
|
|
Tweet 1 (HOOK): Compelling opening that makes people click "Show this thread"
|
|
- Must stand alone as a great tweet
|
|
- End with "A thread:" or "Here's what I found:"
|
|
|
|
Tweet 2-N (BODY): One key point per tweet
|
|
- Number them: "1/" or use emoji bullets
|
|
- Each tweet should add value independently
|
|
- Include specific examples, data, or stories
|
|
|
|
Tweet N+1 (CLOSING): Summary + call to action
|
|
- Restate the key takeaway
|
|
- Ask for engagement: "Which resonated most?"
|
|
- Self-reference: "If this was useful, follow @handle for more"
|
|
```
|
|
|
|
### Hashtag Strategy
|
|
- **0-2 hashtags** per tweet (more looks spammy)
|
|
- Use hashtags for discovery, not decoration
|
|
- Mix broad (#AI) and specific (#LangChain)
|
|
- Never use hashtags in threads (except maybe tweet 1)
|
|
- Research trending hashtags in your niche before using them
|
|
|
|
---
|
|
|
|
## Engagement Playbook
|
|
|
|
### Replying to Mentions
|
|
Rules:
|
|
1. **Respond within 2 hours** during engagement_hours
|
|
2. **Add value** — don't just say "thanks!" — expand on their point
|
|
3. **Ask a follow-up question** — drives conversation
|
|
4. **Be genuine** — match their energy and tone
|
|
5. **Never argue** — if someone is hostile, ignore or block
|
|
|
|
Reply templates:
|
|
- Agreement: "Great point! I'd also add [related insight]"
|
|
- Question: "Interesting question. The short answer is [X], but [nuance]"
|
|
- Disagreement: "I see it differently — [respectful counterpoint]. What's your experience?"
|
|
- Gratitude: "Appreciate you sharing this! [Specific thing you liked about their tweet]"
|
|
|
|
### When NOT to Engage
|
|
- Trolls or obviously bad-faith arguments
|
|
- Political flame wars (unless that's your content pillar)
|
|
- Personal attacks (block immediately)
|
|
- Spam or bot accounts
|
|
- Tweets that could create legal liability
|
|
|
|
### Auto-Like Strategy
|
|
Like tweets from:
|
|
1. People who regularly engage with your content (reciprocity)
|
|
2. Influencers in your niche (visibility)
|
|
3. Thoughtful content related to your pillars (curation signal)
|
|
4. Replies to your tweets (encourages more replies)
|
|
|
|
Do NOT auto-like:
|
|
- Controversial or political content
|
|
- Content you haven't actually read
|
|
- Spam or low-quality threads
|
|
- Competitor criticism (looks petty)
|
|
|
|
---
|
|
|
|
## Content Calendar Template
|
|
|
|
```
|
|
WEEK OF [DATE]
|
|
|
|
Monday:
|
|
- 8 AM: [Tip/How-to] about [Pillar 1]
|
|
- 12 PM: [Curated share] related to [Pillar 2]
|
|
|
|
Tuesday:
|
|
- 10 AM: [Thread] deep dive on [Pillar 1]
|
|
- 2 PM: [Hot take] about [trending topic]
|
|
|
|
Wednesday:
|
|
- 9 AM: [Question] to audience about [Pillar 3]
|
|
- 1 PM: [Data/Stat] about [Pillar 2]
|
|
|
|
Thursday:
|
|
- 10 AM: [Story] about [personal experience in Pillar 3]
|
|
- 3 PM: [Tip/How-to] about [Pillar 1]
|
|
|
|
Friday:
|
|
- 9 AM: [Hot take] about [week's trending topic]
|
|
- 11 AM: [Curated share] — best thing I read this week
|
|
```
|
|
|
|
---
|
|
|
|
## Performance Metrics
|
|
|
|
### Key Metrics
|
|
| Metric | What It Measures | Good Benchmark |
|
|
|--------|-----------------|----------------|
|
|
| Impressions | How many people saw the tweet | Varies by follower count |
|
|
| Engagement rate | (likes+RTs+replies)/impressions | >2% is good, >5% is great |
|
|
| Reply rate | replies/impressions | >0.5% is good |
|
|
| Retweet rate | RTs/impressions | >1% is good |
|
|
| Profile visits | People checking your profile after tweet | Track trend |
|
|
| Follower growth | Net new followers per period | Track trend |
|
|
|
|
### Engagement Rate Formula
|
|
```
|
|
engagement_rate = (likes + retweets + replies + quotes) / impressions * 100
|
|
|
|
Example:
|
|
50 likes + 10 RTs + 5 replies + 2 quotes = 67 engagements
|
|
67 / 2000 impressions = 3.35% engagement rate
|
|
```
|
|
|
|
### Content Performance Analysis
|
|
Track which content types and topics perform best:
|
|
```
|
|
| Content Type | Avg Impressions | Avg Engagement Rate | Best Performing |
|
|
|-------------|-----------------|--------------------|--------------------|
|
|
| Hot take | 2500 | 4.2% | "Unpopular opinion: ..." |
|
|
| Thread | 5000 | 3.1% | "I analyzed 500 ..." |
|
|
| Tip | 1800 | 5.5% | "How to ... in 3 steps" |
|
|
```
|
|
|
|
Use this data to optimize future content mix.
|
|
|
|
---
|
|
|
|
## Brand Voice Guide
|
|
|
|
### Voice Dimensions
|
|
| Dimension | Range | Description |
|
|
|-----------|-------|-------------|
|
|
| Formal ↔ Casual | 1-5 | 1=corporate, 5=texting a friend |
|
|
| Serious ↔ Humorous | 1-5 | 1=all business, 5=comedy account |
|
|
| Reserved ↔ Bold | 1-5 | 1=diplomatic, 5=no-filter |
|
|
| General ↔ Technical | 1-5 | 1=anyone can understand, 5=deep expert |
|
|
|
|
### Consistency Rules
|
|
- Use the same voice across ALL tweets (hot takes and how-tos)
|
|
- Develop 3-5 "signature phrases" you reuse naturally
|
|
- If the brand voice says "casual," don't suddenly write a formal thread
|
|
- Read tweets aloud — does it sound like the same person?
|
|
|
|
---
|
|
|
|
## Safety & Compliance
|
|
|
|
### Content Guidelines
|
|
NEVER post:
|
|
- Discriminatory content (race, gender, religion, sexuality, disability)
|
|
- Defamatory claims about real people or companies
|
|
- Private or confidential information
|
|
- Threats, harassment, or incitement to violence
|
|
- Impersonation of other accounts
|
|
- Misleading claims presented as fact
|
|
- Content that violates Twitter Terms of Service
|
|
|
|
### Approval Mode Queue Format
|
|
```json
|
|
[
|
|
{
|
|
"id": "q_001",
|
|
"content": "Tweet text here",
|
|
"type": "hot_take",
|
|
"pillar": "AI",
|
|
"scheduled_for": "2025-01-15T10:00:00Z",
|
|
"created": "2025-01-14T20:00:00Z",
|
|
"status": "pending",
|
|
"notes": "Based on trending discussion about LLM pricing"
|
|
}
|
|
]
|
|
```
|
|
|
|
Preview file for human review:
|
|
```markdown
|
|
# Tweet Queue Preview
|
|
Generated: YYYY-MM-DD
|
|
|
|
## Pending Tweets (N total)
|
|
|
|
### 1. [Hot Take] — Scheduled: Mon 10 AM
|
|
> Tweet text here
|
|
|
|
**Notes**: Based on trending discussion about LLM pricing
|
|
**Pillar**: AI | **Status**: Pending approval
|
|
|
|
---
|
|
|
|
### 2. [Thread] — Scheduled: Tue 10 AM
|
|
> Tweet 1/5: Hook text here
|
|
> Tweet 2/5: Point one
|
|
> ...
|
|
|
|
**Notes**: Deep dive on new benchmark results
|
|
**Pillar**: AI | **Status**: Pending approval
|
|
```
|
|
|
|
### Risk Assessment
|
|
Before posting, evaluate each tweet:
|
|
- Could this be misinterpreted? → Rephrase for clarity
|
|
- Does this punch down? → Don't post
|
|
- Would you be comfortable seeing this attributed to the user in a news article? → If no, don't post
|
|
- Is this verifiably true? → If not sure, add hedging language or don't post
|