Release v1.20.0: Add twitter-reader skill

- Add twitter-reader v1.0.0 for Twitter/X content fetching via Jina.ai API
- Implement secure API key management using environment variables
- Support individual and batch tweet fetching with bundled scripts
- Include Python (fetch_tweet.py) and Bash (fetch_tweets.sh) scripts
- Update marketplace to v1.20.0 (26 → 27 skills)
- Update all documentation (README.md, README.zh-CN.md, CLAUDE.md)
- Security: Remove hardcoded API keys, enforce HTTPS, add validation

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
daymade
2026-01-11 15:41:13 +08:00
parent 7ba893d837
commit 3f2f8f02ca
9 changed files with 338 additions and 11 deletions

View File

@@ -5,8 +5,8 @@
"email": "daymadev89@gmail.com"
},
"metadata": {
"description": "Professional Claude Code skills for GitHub operations, document conversion, diagram generation, statusline customization, Teams communication, repomix utilities, skill creation, CLI demo generation, LLM icon access, Cloudflare troubleshooting, UI design system extraction, professional presentation creation, YouTube video downloading, secure repomix packaging, ASR transcription correction, video comparison quality analysis, comprehensive QA testing infrastructure, prompt optimization with EARS methodology, session history recovery, documentation cleanup, PDF generation with Chinese font support, CLAUDE.md progressive disclosure optimization, CCPM skill registry search and management, Promptfoo LLM evaluation framework, iOS app development with XcodeGen and SwiftUI, and fact-checking with automated corrections",
"version": "1.19.0",
"description": "Professional Claude Code skills for GitHub operations, document conversion, diagram generation, statusline customization, Teams communication, repomix utilities, skill creation, CLI demo generation, LLM icon access, Cloudflare troubleshooting, UI design system extraction, professional presentation creation, YouTube video downloading, secure repomix packaging, ASR transcription correction, video comparison quality analysis, comprehensive QA testing infrastructure, prompt optimization with EARS methodology, session history recovery, documentation cleanup, PDF generation with Chinese font support, CLAUDE.md progressive disclosure optimization, CCPM skill registry search and management, Promptfoo LLM evaluation framework, iOS app development with XcodeGen and SwiftUI, fact-checking with automated corrections, and Twitter/X content fetching",
"version": "1.20.0",
"homepage": "https://github.com/daymade/claude-code-skills"
},
"plugins": [
@@ -269,6 +269,16 @@
"category": "productivity",
"keywords": ["fact-checking", "verification", "accuracy", "sources", "validation", "corrections", "web-search"],
"skills": ["./fact-checker"]
},
{
"name": "twitter-reader",
"description": "Fetch Twitter/X post content by URL using jina.ai API to bypass JavaScript restrictions. Use when Claude needs to retrieve tweet content including author, timestamp, post text, images, and thread replies. Supports individual posts or batch fetching from x.com or twitter.com URLs",
"source": "./",
"strict": false,
"version": "1.0.0",
"category": "utilities",
"keywords": ["twitter", "x", "social-media", "jina", "content-fetching", "api", "scraping", "threads"],
"skills": ["./twitter-reader"]
}
]
}

View File

@@ -25,6 +25,34 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
### Security
- None
## [1.20.0] - 2026-01-11
### Added
- **New Skill**: twitter-reader - Fetch Twitter/X post content using Jina.ai API
- Bypass JavaScript restrictions without authentication
- Retrieve tweet content including author, timestamp, post text, images, and thread replies
- Support for individual posts or batch fetching from x.com or twitter.com URLs
- Bundled scripts: `fetch_tweet.py` (Python) and `fetch_tweets.sh` (Bash)
- Environment variable configuration for secure API key management
- Supports both x.com and twitter.com URL formats
### Changed
- Updated marketplace skills count from 26 to 27
- Updated marketplace version from 1.19.0 to 1.20.0
- Updated README.md badges (skills count: 27, version: 1.20.0)
- Updated README.md to include twitter-reader in skills listing
- Updated README.zh-CN.md badges (skills count: 27, version: 1.20.0)
- Updated README.zh-CN.md to include twitter-reader in skills listing
- Updated CLAUDE.md skills count from 26 to 27
- Added twitter-reader use case section to README.md
- Added twitter-reader use case section to README.zh-CN.md
### Security
- **twitter-reader**: Implemented secure API key management using environment variables
- Removed hardcoded API keys from all scripts and documentation
- Added validation for JINA_API_KEY environment variable
- Enforced HTTPS-only URLs in Python script
## [1.18.2] - 2026-01-05
### Changed

View File

@@ -4,7 +4,7 @@ This file provides guidance to Claude Code (claude.ai/code) when working with co
## Repository Overview
This is a Claude Code skills marketplace containing 25 production-ready skills organized in a plugin marketplace structure. Each skill is a self-contained package that extends Claude's capabilities with specialized knowledge, workflows, and bundled resources.
This is a Claude Code skills marketplace containing 27 production-ready skills organized in a plugin marketplace structure. Each skill is a self-contained package that extends Claude's capabilities with specialized knowledge, workflows, and bundled resources.
**Essential Skill**: `skill-creator` is the most important skill in this marketplace - it's a meta-skill that enables users to create their own skills. Always recommend it first for users interested in extending Claude Code.
@@ -134,7 +134,7 @@ Skills for public distribution must NOT contain:
## Marketplace Configuration
The marketplace is configured in `.claude-plugin/marketplace.json`:
- Contains 25 plugins, each mapping to one skill
- Contains 27 plugins, each mapping to one skill
- Each plugin has: name, description, version, category, keywords, skills array
- Marketplace metadata: name, owner, version, homepage
@@ -144,7 +144,7 @@ The marketplace is configured in `.claude-plugin/marketplace.json`:
1. **Marketplace Version** (`.claude-plugin/marketplace.json``metadata.version`)
- Tracks the marketplace catalog as a whole
- Current: v1.18.0
- Current: v1.20.0
- Bump when: Adding/removing skills, major marketplace restructuring
- Semantic versioning: MAJOR.MINOR.PATCH
@@ -185,6 +185,8 @@ The marketplace is configured in `.claude-plugin/marketplace.json`:
23. **skills-search** - Search, discover, install, and manage Claude Code skills from the CCPM registry
24. **promptfoo-evaluation** - Run LLM evaluations with Promptfoo for prompt testing and model comparison
25. **iOS-APP-developer** - iOS app development with XcodeGen, SwiftUI, and SPM troubleshooting
26. **fact-checker** - Verify factual claims in documents using web search with automated corrections
27. **twitter-reader** - Fetch Twitter/X post content using Jina.ai API without JavaScript or authentication
**Recommendation**: Always suggest `skill-creator` first for users interested in creating skills or extending Claude Code.

View File

@@ -6,15 +6,15 @@
[![简体中文](https://img.shields.io/badge/语言-简体中文-red)](./README.zh-CN.md)
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
[![Skills](https://img.shields.io/badge/skills-25-blue.svg)](https://github.com/daymade/claude-code-skills)
[![Version](https://img.shields.io/badge/version-1.18.0-green.svg)](https://github.com/daymade/claude-code-skills)
[![Skills](https://img.shields.io/badge/skills-27-blue.svg)](https://github.com/daymade/claude-code-skills)
[![Version](https://img.shields.io/badge/version-1.20.0-green.svg)](https://github.com/daymade/claude-code-skills)
[![Claude Code](https://img.shields.io/badge/Claude%20Code-2.0.13+-purple.svg)](https://claude.com/code)
[![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg)](./CONTRIBUTING.md)
[![Maintenance](https://img.shields.io/badge/Maintained%3F-yes-green.svg)](https://github.com/daymade/claude-code-skills/graphs/commit-activity)
</div>
Professional Claude Code skills marketplace featuring 25 production-ready skills for enhanced development workflows.
Professional Claude Code skills marketplace featuring 27 production-ready skills for enhanced development workflows.
## 📑 Table of Contents
@@ -213,6 +213,9 @@ claude plugin install promptfoo-evaluation@daymade-skills
# iOS app development
claude plugin install iOS-APP-developer@daymade-skills
# Twitter/X content fetching
claude plugin install twitter-reader@daymade-skills
```
Each skill can be installed independently - choose only what you need!
@@ -995,6 +998,55 @@ xcodebuild -destination 'platform=iOS Simulator,name=iPhone 17' build
---
### 25. **twitter-reader** - Twitter/X Content Fetching
Fetch Twitter/X post content using Jina.ai API to bypass JavaScript restrictions without authentication.
**When to use:**
- Retrieving tweet content for analysis or documentation
- Fetching thread replies and conversation context
- Extracting images and media from posts
- Batch downloading multiple tweets for reference
**Key features:**
- No JavaScript rendering or browser automation needed
- No Twitter authentication required
- Returns markdown-formatted content with metadata
- Supports both individual and batch fetching
- Includes author, timestamp, post text, images, and replies
- Environment variable configuration for secure API key management
**Example usage:**
```bash
# Set your Jina API key (get from https://jina.ai/)
export JINA_API_KEY="your_api_key_here"
# Fetch a single tweet
curl "https://r.jina.ai/https://x.com/USER/status/TWEET_ID" \
-H "Authorization: Bearer ${JINA_API_KEY}"
# Batch fetch multiple tweets
scripts/fetch_tweets.sh \
"https://x.com/user/status/123" \
"https://x.com/user/status/456"
# Fetch to file using Python script
python scripts/fetch_tweet.py https://x.com/user/status/123 output.md
```
**🎬 Live Demo**
*Coming soon*
📚 **Documentation**: See [twitter-reader/SKILL.md](./twitter-reader/SKILL.md) for full details and URL format support.
**Requirements**:
- **Jina.ai API key** (get from https://jina.ai/ - free tier available)
- **curl** (pre-installed on most systems)
- **Python 3.6+** (for Python script)
---
## 🎬 Interactive Demo Gallery
Want to see all demos in one place with click-to-enlarge functionality? Check out our [interactive demo gallery](./demos/index.html) or browse the [demos directory](./demos/).
@@ -1055,6 +1107,9 @@ Use **promptfoo-evaluation** to set up prompt tests, compare model outputs, and
### For iOS App Development
Use **iOS-APP-developer** to configure XcodeGen projects, resolve SPM dependency issues, and troubleshoot code signing or device deployment.
### For Twitter/X Content Research
Use **twitter-reader** to fetch tweet content without JavaScript rendering or authentication. Perfect for documenting social media discussions, archiving threads, analyzing tweet content, or gathering reference material from Twitter/X. Combine with **markdown-tools** to convert fetched content into other formats, or with **repomix-safe-mixer** to package research collections securely.
## 📚 Documentation
Each skill includes:
@@ -1090,6 +1145,7 @@ Each skill includes:
- **skills-search**: See `skills-search/SKILL.md` for CCPM CLI commands and registry operations
- **promptfoo-evaluation**: See `promptfoo-evaluation/references/promptfoo_api.md` for evaluation patterns
- **iOS-APP-developer**: See `iOS-APP-developer/references/xcodegen-full.md` for XcodeGen options and project.yml details
- **twitter-reader**: See `twitter-reader/SKILL.md` for API key setup and URL format support
## 🛠️ Requirements
@@ -1102,6 +1158,7 @@ Each skill includes:
- **FFmpeg/FFprobe** (for video-comparer): `brew install ffmpeg`, `apt install ffmpeg`, or `winget install ffmpeg`
- **weasyprint, markdown** (for pdf-creator)
- **VHS** (for cli-demo-generator): `brew install vhs`
- **Jina.ai API key** (for twitter-reader): Free tier available at https://jina.ai/
- **asciinema** (optional, for cli-demo-generator interactive recording)
- **ccusage** (optional, for statusline cost tracking)
- **pandas & matplotlib** (optional, for ppt-creator chart generation)

View File

@@ -6,15 +6,15 @@
[![简体中文](https://img.shields.io/badge/语言-简体中文-red)](./README.zh-CN.md)
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
[![Skills](https://img.shields.io/badge/skills-25-blue.svg)](https://github.com/daymade/claude-code-skills)
[![Version](https://img.shields.io/badge/version-1.18.0-green.svg)](https://github.com/daymade/claude-code-skills)
[![Skills](https://img.shields.io/badge/skills-27-blue.svg)](https://github.com/daymade/claude-code-skills)
[![Version](https://img.shields.io/badge/version-1.20.0-green.svg)](https://github.com/daymade/claude-code-skills)
[![Claude Code](https://img.shields.io/badge/Claude%20Code-2.0.13+-purple.svg)](https://claude.com/code)
[![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg)](./CONTRIBUTING.md)
[![Maintenance](https://img.shields.io/badge/Maintained%3F-yes-green.svg)](https://github.com/daymade/claude-code-skills/graphs/commit-activity)
</div>
专业的 Claude Code 技能市场,提供 25 个生产就绪的技能,用于增强开发工作流。
专业的 Claude Code 技能市场,提供 27 个生产就绪的技能,用于增强开发工作流。
## 📑 目录
@@ -213,6 +213,9 @@ claude plugin install promptfoo-evaluation@daymade-skills
# iOS 应用开发
claude plugin install iOS-APP-developer@daymade-skills
# Twitter/X 内容获取
claude plugin install twitter-reader@daymade-skills
```
每个技能都可以独立安装 - 只选择你需要的!
@@ -1034,6 +1037,55 @@ xcodebuild -destination 'platform=iOS Simulator,name=iPhone 17' build
---
### 25. **twitter-reader** - Twitter/X 内容获取
使用 Jina.ai API 获取 Twitter/X 帖子内容,无需 JavaScript 渲染或身份验证即可绕过限制。
**使用场景:**
- 检索推文内容用于分析或文档记录
- 获取话题回复与对话上下文
- 从帖子中提取图片和媒体
- 批量下载多条推文作为参考
**主要功能:**
- 无需 JavaScript 渲染或浏览器自动化
- 无需 Twitter 身份验证
- 返回带元数据的 Markdown 格式内容
- 支持单条和批量获取
- 包含作者、时间戳、帖子文本、图片和回复
- 环境变量配置实现安全的 API 密钥管理
**示例用法:**
```bash
# 设置你的 Jina API 密钥(从 https://jina.ai/ 获取)
export JINA_API_KEY="your_api_key_here"
# 获取单条推文
curl "https://r.jina.ai/https://x.com/USER/status/TWEET_ID" \
-H "Authorization: Bearer ${JINA_API_KEY}"
# 批量获取多条推文
scripts/fetch_tweets.sh \
"https://x.com/user/status/123" \
"https://x.com/user/status/456"
# 使用 Python 脚本获取到文件
python scripts/fetch_tweet.py https://x.com/user/status/123 output.md
```
**🎬 实时演示**
*即将推出*
📚 **文档**:参见 [twitter-reader/SKILL.md](./twitter-reader/SKILL.md) 了解完整细节和 URL 格式支持。
**要求**
- **Jina.ai API 密钥**(从 https://jina.ai/ 获取 - 提供免费套餐)
- **curl**(大多数系统预装)
- **Python 3.6+**(用于 Python 脚本)
---
## 🎬 交互式演示画廊
想要在一个地方查看所有演示并具有点击放大功能?访问我们的[交互式演示画廊](./demos/index.html)或浏览[演示目录](./demos/)。
@@ -1091,6 +1143,9 @@ xcodebuild -destination 'platform=iOS Simulator,name=iPhone 17' build
### iOS 应用开发
使用 **iOS-APP-developer** 配置 XcodeGen 项目,处理 SPM 依赖、签名与部署问题。
### Twitter/X 内容研究
使用 **twitter-reader** 无需 JavaScript 渲染或身份验证即可获取推文内容。非常适合记录社交媒体讨论、归档话题、分析推文内容或从 Twitter/X 收集参考资料。与 **markdown-tools** 结合可将获取的内容转换为其他格式,或与 **repomix-safe-mixer** 结合安全地打包研究集合。
### 技能发现与管理
使用 **skills-search** 从 CCPM 注册表中查找、安装和管理 Claude Code 技能。非常适合为特定任务发现新技能、为常见工作流安装技能包,以及保持技能集合的有序管理。
@@ -1129,6 +1184,7 @@ xcodebuild -destination 'platform=iOS Simulator,name=iPhone 17' build
- **skills-search**:参见 `skills-search/SKILL.md` 了解 CCPM CLI 命令和注册表操作
- **promptfoo-evaluation**:参见 `promptfoo-evaluation/references/promptfoo_api.md` 了解评测模式
- **iOS-APP-developer**:参见 `iOS-APP-developer/references/xcodegen-full.md` 了解 XcodeGen 选项与 project.yml 细节
- **twitter-reader**:参见 `twitter-reader/SKILL.md` 了解 API 密钥设置和 URL 格式支持
## 🛠️ 系统要求
@@ -1146,6 +1202,7 @@ xcodebuild -destination 'platform=iOS Simulator,name=iPhone 17' build
- **CCPM CLI**(用于 skills-search`npm install -g @daymade/ccpm`
- **Promptfoo**(用于 promptfoo-evaluation`npx promptfoo@latest`
- **macOS + Xcode、XcodeGen**(用于 iOS-APP-developer
- **Jina.ai API 密钥**(用于 twitter-readerhttps://jina.ai/ 提供免费套餐
## ❓ 常见问题

View File

@@ -0,0 +1,4 @@
Security scan passed
Scanned at: 2026-01-11T15:27:31.794239
Tool: gitleaks + pattern-based validation
Content hash: 2349813d82b8932f89fdc653c0dde1b2335483478227653554553b59007975c1

72
twitter-reader/SKILL.md Normal file
View File

@@ -0,0 +1,72 @@
---
name: twitter-reader
description: Fetch Twitter/X post content by URL using jina.ai API to bypass JavaScript restrictions. Use when Claude needs to retrieve tweet content including author, timestamp, post text, images, and thread replies. Supports individual posts or batch fetching from x.com or twitter.com URLs.
---
# Twitter Reader
Fetch Twitter/X post content without needing JavaScript or authentication.
## Prerequisites
You need a Jina API key to use this skill:
1. Visit https://jina.ai/ to sign up (free tier available)
2. Get your API key from the dashboard
3. Set the environment variable:
```bash
export JINA_API_KEY="your_api_key_here"
```
## Quick Start
For a single tweet, use curl directly:
```bash
curl "https://r.jina.ai/https://x.com/USER/status/TWEET_ID" \
-H "Authorization: Bearer ${JINA_API_KEY}"
```
For multiple tweets, use the bundled script:
```bash
scripts/fetch_tweets.sh url1 url2 url3
```
## What Gets Returned
- **Title**: Post author and content preview
- **URL Source**: Original tweet link
- **Published Time**: GMT timestamp
- **Markdown Content**: Full post text with media descriptions
## Bundled Scripts
### fetch_tweet.py
Python script for fetching individual tweets.
```bash
python scripts/fetch_tweet.py https://x.com/user/status/123 output.md
```
### fetch_tweets.sh
Bash script for batch fetching multiple tweets.
```bash
scripts/fetch_tweets.sh \
"https://x.com/user/status/123" \
"https://x.com/user/status/456"
```
## URL Formats Supported
- `https://x.com/USER/status/ID`
- `https://twitter.com/USER/status/ID`
- `https://x.com/...` (redirects work automatically)
## Environment Variables
- `JINA_API_KEY`: Required. Your Jina.ai API key for accessing the reader API

View File

@@ -0,0 +1,66 @@
#!/usr/bin/env python3
"""
Fetch Twitter/X post content using jina.ai API.
Usage:
python fetch_tweet.py <tweet_url> [output_file]
Example:
python fetch_tweet.py https://x.com/dabit3/status/2009131298250428923 tweet.md
Requires:
JINA_API_KEY environment variable set with your Jina.ai API key
"""
import sys
import os
import argparse
import subprocess
from pathlib import Path
def fetch_tweet(url: str, output_file: str = None) -> str:
"""Fetch tweet content using jina.ai API via curl."""
api_key = os.getenv("JINA_API_KEY")
if not api_key:
print("Error: JINA_API_KEY environment variable is not set", file=sys.stderr)
print("Get your API key from https://jina.ai/ and set:", file=sys.stderr)
print(" export JINA_API_KEY='your_api_key_here'", file=sys.stderr)
sys.exit(1)
jina_api_url = f"https://r.jina.ai/{url}"
cmd = [
"curl", "-s", jina_api_url,
"-H", f"Authorization: Bearer {api_key}"
]
result = subprocess.run(cmd, capture_output=True, text=True)
if result.returncode != 0:
print(f"Error fetching tweet: {result.stderr}", file=sys.stderr)
sys.exit(1)
content = result.stdout
if output_file:
Path(output_file).write_text(content, encoding="utf-8")
print(f"Saved to {output_file}")
return content
if __name__ == "__main__":
parser = argparse.ArgumentParser(description="Fetch Twitter/X post content")
parser.add_argument("url", help="Twitter/X post URL")
parser.add_argument("output", nargs="?", help="Optional output file path")
args = parser.parse_args()
if not args.url.startswith(("https://x.com/", "https://twitter.com/")):
print("Error: URL must be from x.com or twitter.com (HTTPS only)", file=sys.stderr)
sys.exit(1)
content = fetch_tweet(args.url, args.output)
if not args.output:
print(content)

View File

@@ -0,0 +1,31 @@
#!/bin/bash
# Fetch Twitter/X post content using jina.ai API
# Usage: ./fetch_tweets.sh <url1> [url2] ...
# Requires: JINA_API_KEY environment variable
if [ -z "$JINA_API_KEY" ]; then
echo "Error: JINA_API_KEY environment variable is not set" >&2
echo "Get your API key from https://jina.ai/ and set:" >&2
echo " export JINA_API_KEY='your_api_key_here'" >&2
exit 1
fi
if [ $# -eq 0 ]; then
echo "Usage: $0 <tweet_url> [tweet_url2] ..."
echo "Example: $0 https://x.com/dabit3/status/2009131298250428923"
exit 1
fi
for url in "$@"; do
if [[ ! "$url" =~ ^https?://(x\.com|twitter\.com)/ ]]; then
echo "Skipping invalid URL: $url" >&2
continue
fi
echo "Fetching: $url"
curl -s "https://r.jina.ai/${url}" \
-H "Authorization: Bearer ${JINA_API_KEY}"
echo ""
echo "---"
echo ""
done