Claude-skill-registry adding-tweets
Add tweets to the Second Brain. Use when the user provides a Twitter/X URL and pasted tweet content, asking to "add a tweet", "save this tweet", or "capture this tweet".
git clone https://github.com/majiayu000/claude-skill-registry
T=$(mktemp -d) && git clone --depth=1 https://github.com/majiayu000/claude-skill-registry "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/data/adding-tweets" ~/.claude/skills/majiayu000-claude-skill-registry-adding-tweets && rm -rf "$T"
skills/data/adding-tweets/SKILL.mdAdding Tweets to Second Brain
Add tweets with author linking, tags, and personal annotations.
Expected Input
User provides:
- Tweet URL -
orx.com/*/status/*twitter.com/*/status/* - Pasted tweet content - Copy-pasted from Twitter/X
Example user input:
add this tweet https://x.com/naval/status/1234567890 my favorite way to use Claude Code is spec based start with a minimal spec and ask Claude to interview you
Workflow
Phase 1: Parse URL → Extract tweet ID and author handle Phase 2: Parse Content → Extract text, date, author name from paste Phase 3: Author Resolution → Check/create author profile Phase 4: Generate Tweet File → Write to content/tweets/ Phase 5: Suggest Editing → Tags, annotations, wiki-links Phase 6: Quality Check → Run pnpm lint:fix && pnpm typecheck
Phase 1: Parse URL
Extract from URL using regex:
: The numeric ID fromtweetId/status/{id}
: The username fromauthorHandlex.com/{username}/status/
Pattern: (?:x\.com|twitter\.com)/([^/]+)/status/(\d+) Example: https://x.com/naval/status/1789234567890 → authorHandle: "naval" → tweetId: "1789234567890"
Phase 2: Parse Content
From the pasted text:
- tweetText: The main tweet content (clean up any extra whitespace)
- tweetedAt: If date is visible in paste, use it. Otherwise use today's date.
- authorName: If visible (e.g., "Naval Ravikant"), use it. Otherwise use handle.
If critical info is missing, use the
AskUserQuestion tool to gather it:
question: "I need some missing tweet info. What is the tweet text?" header: "Tweet Info" multiSelect: false options: - label: "I'll provide it" description: "Let me paste the tweet content"
For optional fields like date, ask separately if needed.
Phase 3: Author Resolution
-
Check if author exists:
ls content/authors/{authorHandle}.md -
If not exists, create minimal profile:
--- name: "{Display Name or Handle}" slug: {authorHandle} socials: twitter: "https://x.com/{authorHandle}" --- -
For full author enhancement, suggest running
/enhance-author {authorHandle}
Phase 4: Generate Tweet File
Slug format:
tweet-{tweetId}
File path:
content/tweets/tweet-{tweetId}.md
Frontmatter template:
--- type: tweet title: "{First 50 chars of tweet}..." tweetId: "{tweetId}" tweetUrl: "{originalUrl}" tweetText: "{full tweet text}" author: {authorHandle} tweetedAt: {YYYY-MM-DD} tags: - {suggested tags} --- {User's personal annotations go here}
Phase 5: User Editing
After saving, inform user:
- File location
- Suggest adding tags (use
for suggestions).claude/skills/adding-notes/scripts/list-existing-tags.sh - Suggest adding personal annotations in the body
- Suggest wiki-links to related notes
Tag Suggestions
Based on tweet content, suggest from existing tags:
.claude/skills/adding-notes/scripts/list-existing-tags.sh
Common tweet themes → tags:
- Wisdom, advice →
,mindsetphilosophy - Business, startups →
,startupbusiness - Technology →
,techprogramming - Productivity →
,productivityhabit - AI, Claude →
,claude-code
,ai-agentsprompt-engineering
Validation
Before saving, verify:
- Tweet ID is unique (no duplicate file exists)
- Author profile exists or was created
is valid date formattweetedAt
is not emptytweetText
Phase 6: Quality Check
Run linter and type check to catch any issues:
pnpm lint:fix && pnpm typecheck
If errors are found, fix them before completing the task.