Guide de démarrage last30days-Skill : Le collecteur de renseignements ultime pour Reddit/HN/Polymarket

March 25, 2026

Introduction | 15 minutes | Maîtrisez la collecte d'informations multiplateformes et doublez votre efficacité de recherche

TIP

last30days-Skill est actuellement le Skill de recherche IA le plus complet sur ClawHub, prenant en charge la recherche parallèle sur plus de 10 sources de signaux, avec dédoublonnage automatique, notation et génération de rapports factuels avec citations.

GitHub: mvanhorn/last30days-skill


Profil des lecteurs visés

  • Développeurs ayant 1 à 5 ans d'expérience
  • Professionnels ayant besoin de choisir des outils IA, d'effectuer une veille concurrentielle ou de suivre les tendances technologiques
  • Utilisateurs ayant des bases en ligne de commande, familiers avec Claude Code ou Codex CLI
  • Personnes souhaitant s'affranchir du processus fragmenté consistant à "scroller Reddit/HN pour trouver l'info"

Dépendances et environnement de base

DépendanceDescriptionRequis
Node.js 18+Environnement d'exécution du SkillOui
Python 3.10+Langage du script principalOui
ScrapeCreators API KeyReddit/TikTok/Instagram 3-en-1Oui
Claude Code ou Codex CLISupport d'exécution du SkillOui
X AUTH_TOKEN / CT0Authentification recherche X (optionnel)Non
Bluesky App PasswordRecherche Bluesky (optionnel)Non
Polymarket Gamma APIDonnées du marché de prédiction (gratuit)Non

Arborescence complète du projet

last30days-skill/
├── SKILL.md                    # Fichier de définition du Skill (à déployer dans ~/.claude/skills/)
├── SPEC.md                     # Documentation complète des spécifications techniques
├── CLAUDE.md                   # Guide de développement Claude Code
├── scripts/
│   ├── last30days.py           # Entrée principale Python (moteur de recherche)
│   ├── sync.sh                 # Script de synchronisation du déploiement
│   └── lib/
│       ├── __init__.py         # Entrée du package (importations paresseuses)
│       ├── env.py              # Chargement des variables d'environnement
│       ├── dates.py            # Plages de dates et calcul de confiance
│       ├── cache.py            # Cache avec TTL de 24h
│       ├── http.py             # Client HTTP de la bibliothèque standard
│       ├── models.py           # Sélection automatique du modèle OpenAI/xAI
│       ├── openai_reddit.py    # Recherche Reddit (OpenAI Responses API)
│       ├── xai_x.py            # Recherche X (xAI Responses API)
│       ├── reddit_enrich.py    # Extraction de métriques approfondies Reddit
│       ├── hackernews.py       # Hacker News (API gratuite Algolia)
│       ├── polymarket.py       # Marché de prédiction Polymarket (Gamma API)
│       ├── bluesky.py          # Recherche Bluesky/AT Protocol
│       ├── truthsocial.py      # Recherche Truth Social
│       ├── normalize.py        # Réponse brute → Schema normalisé
│       ├── score.py            # Modèle de notation multi-signaux
│       ├── dedupe.py           # Détection de doublons approximatifs
│       ├── render.py           # Rendu des rapports Markdown / JSON
│       └── schema.py           # Définition et validation des types
├── skills/last30days/
│   └── last30days.sh            # Wrapper Shell (Entrée du Skill Claude Code)
└── fixtures/                   # Données de test (fixtures)

Étape 1 : Installation et configuration de l'authentification

1.1 Installation via plugin Claude Code (Recommandé)

Si vous utilisez déjà Claude Code, installez-le directement avec les commandes de plugin :

/plugin marketplace add mvanhorn/last30days-skill
/plugin install last30days@last30days-skill

Ou utilisez l'outil officiel ClawHub :

clawhub install last30days-official

WARNING

La méthode par plugin nécessite que votre version de Claude Code supporte la commande /plugin. Vérifiez d'abord que claude --version >= 1.0.

1.2 Installation manuelle par Git Clone

Vous préférez ne pas utiliser de plugin ? Clonez directement le projet localement :

# Cloner dans le répertoire des skills de Claude Code
git clone https://github.com/mvanhorn/last30days-skill.git \
  ~/.claude/skills/last30days

# Accéder au répertoire pour vérifier les fichiers
cd ~/.claude/skills/last30days
ls -la scripts/

1.3 Configurer la clé API ScrapeCreators (Requis)

C'est le point d'entrée unifié pour Reddit, TikTok et Instagram. Une seule clé suffit pour tout :

  1. Visitez scrapecreators.com pour vous inscrire et obtenir une clé API.
  2. Créez le fichier de configuration :
mkdir -p ~/.config/last30days

cat > ~/.config/last30days/.env << 'EOF'
# REQUIS : Clé 3-en-1 pour Reddit + TikTok + Instagram
SCRAPECREATORS_API_KEY=sc_xxxxxxxxxxxxxxxxxxxx

# OPTIONNEL : OpenAI API (peut être omis après connexion Codex)
OPENAI_API_KEY=sk-xxxxxxxxxxxxxxxxxxxx
EOF

chmod 600 ~/.config/last30days/.env  # Protéger les fichiers sensibles

1.4 Configurer l'authentification optionnelle X / Bluesky

Recherche X (Méthode recommandée) :

# 1. Connectez-vous à x.com, ouvrez les DevTools (F12)
# 2. Application → Cookies → Copiez les valeurs de auth_token et ct0
# 3. Écrivez dans le fichier .env

cat >> ~/.config/last30days/.env << 'EOF'

# Authentification recherche X (via cookies)
AUTH_TOKEN=xxxxxxxxxxxxxxxxxxxx
CT0=xxxxxxxxxxxxxxxxxxxx

# Alternative X : xAI API (ne nécessite pas de cookies)
XAI_API_KEY=xai-xxxxxxxxxxxxxxxxxxxx
EOF

Recherche Bluesky :

# 1. Allez sur bsky.app/settings/app-passwords pour créer un mot de passe d'application
# 2. Écrivez dans le fichier .env

cat >> ~/.config/last30days/.env << 'EOF'

# Bluesky/AT Protocol
BSKY_HANDLE=votre-identifiant.bsky.social
BSKY_APP_PASSWORD=xxxx-xxxx-xxxx-xxxx
EOF

TIP

Les cookies X et le mot de passe Bluesky sont facultatifs. Si vous ne voulez pas vous compliquer la tâche, les sources gratuites Polymarket, Hacker News et Reddit suffisent pour la plupart des scénarios.

1.5 Vérifier l'installation

# Exécuter un test simple (l'option --mock utilise des données locales, n'utilise pas de quota API)
python3 ~/.claude/skills/last30days/scripts/last30days.py "Claude Code tips" --mock --emit=compact

Si vous voyez une sortie similaire, tout fonctionne correctement :

=== last30days Report: Claude Code tips ===
Sources: reddit, hackernews | Time: 2026-03-25 | Mode: mock
[results...]

Étape 2 : Utilisation de base

2.1 Commande /last30days

Dans Claude Code, tapez directement la commande :

/last30days best Claude Code prompts

Via Codex CLI :

python3 ~/.claude/skills/last30days/scripts/last30days.py "best Claude Code prompts" --emit=compact

TIP

Par défaut, l'outil recherche les contenus populaires des 30 derniers jours sur plus de 10 sources (Reddit, X, YouTube, TikTok, Instagram, Hacker News, Polymarket, Bluesky, etc.). Une recherche prend généralement 2 à 8 minutes, un peu plus pour les sujets de niche.

2.2 Interprétation de la structure du rapport

Après exécution, vous recevrez un rapport structuré qui ressemble à ceci :

# last30days Report: best Claude Code prompts

## Sources Searched (6 active)
reddit | x | hackernews | polymarket | youtube | reddit_threads

## Top Findings
...

## Best Practices (Méthodes validées par la communauté)
...

## Prompt Pack (Copie directe possible)
...

## Recent Developments
...

## References (Avec liens vers les sources)
...

Le rapport effectue automatiquement :

  • Détection de convergence : Les contenus mentionnés sur plusieurs plateformes reçoivent un poids plus important.
  • Dédoublonnage : Les posts sémantiquement similaires ne conservent que la meilleure occurrence.
  • Décroissance temporelle : Les contenus les plus récents sont mieux classés.
  • Citations : Chaque conclusion est accompagnée de son lien d'origine.

2.3 Mode rapide --quick

Pressé ? Ajoutez --quick pour ignorer certaines recherches approfondies :

python3 ~/.claude/skills/last30days/scripts/last30days.py \
  "Cursor AI vs Windsurf" \
  --quick \
  --emit=compact

2.4 Fenêtre temporelle personnalisée --days=N

Pas seulement 30 jours, vous pouvez personnaliser la durée :

python3 ~/.claude/skills/last30days/scripts/last30days.py \
  "OpenClaw latest news" \
  --days=7 \
  --emit=compact

2.5 Forcer le rafraîchissement --refresh

Les résultats sont mis en cache pendant 24 heures. Pour relancer la recherche :

python3 ~/.claude/skills/last30days/scripts/last30days.py \
  "AI code editors comparison" \
  --refresh \
  --emit=compact

Étape 3 : Mécanisme de recherche parallèle multi-sources

3.1 Principe de la recherche Reddit

Reddit est la source de signaux la plus importante. Le Skill procède en deux étapes :

# scripts/lib/openai_reddit.py (version simplifiée)
def search_reddit(query: str, days: int = 30) -> list[dict]:
    # Étape 1 : Découverte initiale via OpenAI Responses API + web_search
    response = openai.responses.create(
        model="gpt-4o",
        input=f"Find active Reddit discussions about: {query}",
        tools=[{"type": "web_search"}],
        max_tokens=2000
    )
    # Étape 2 : Extraction du JSON brut des posts pour obtenir les scores réels d'upvotes/commentaires
    enriched = reddit_enrich.fetch_threads(response.urls, days)
    return enriched

TIP

Depuis la v2.9, Reddit utilise par défaut ScrapeCreators. Une seule clé couvre Reddit + TikTok + Instagram, offrant une meilleure stabilité que les solutions indépendantes précédentes.

3.2 Intégration Hacker News

Accès gratuit, sans aucune clé API nécessaire :

# scripts/lib/hackernews.py
def search_hackernews(query: str, days: int = 30) -> list[dict]:
    # L'API Algolia de HN est ouverte et gratuite
    url = "https://hn.algolia.com/api/v1/search"
    params = {
        "query": query,
        "tags": "story",
        "numericFilters": f"created_at_i>{cutoff_timestamp(days)}"
    }
    resp = requests.get(url, params=params)
    items = resp.json()["hits"]
    # Tri combiné par points + nombre de commentaires
    return sorted(items, key=lambda x: x["points"] + x["num_comments"] * 2, reverse=True)

3.3 Données des marchés de prédiction Polymarket

C'est le point fort de last30days par rapport aux autres outils de recherche : il ne regarde pas seulement ce que "les gens disent", mais aussi ce que "les gens parient" :

# scripts/lib/polymarket.py
def search_polymarket(query: str) -> list[dict]:
    # Accès gratuit via Gamma API
    url = "https://gamma-api.polymarket.com/markets"
    resp = requests.get(url, params={"topic": query, "limit": 20})
    markets = resp.json()

    # Modèle de notation à cinq facteurs
    for m in markets:
        m["composite_score"] = (
            m["text_relevance"] * 0.30 +
            m["volume_24h"] * 0.30 +
            m["liquidity"] * 0.15 +
            m["price_velocity"] * 0.15 +
            m["outcome_competitiveness"] * 0.10
        )
    return sorted(markets, key=lambda x: x["composite_score"], reverse=True)

Effet concret : en cherchant "OpenClaw", vous verrez non seulement des posts Reddit, mais aussi des données de prédiction Polymarket sur le "nombre d'utilisateurs actifs mensuels d'OpenClaw". Les probabilités sur lesquelles les gens misent de l'argent réel sont souvent plus convaincantes que n'importe quel post.

3.4 Analyse du modèle de notation multi-signaux

Tous les résultats convergent vers un pipeline de notation unifié :

# scripts/lib/score.py
def compute_composite_score(item: dict, query: str, days: int) -> float:
    # 1. Pertinence textuelle (similarité bidirectionnelle + extension par synonymes)
    text_score = bidirectional_similarity(item["text"], query)

    # 2. Normalisation de la popularité (engagement)
    engagement_score = normalize_velocity(item["engagement"])

    # 3. Pondération par autorité de la source (HN > Reddit > X > TikTok)
    authority_score = SOURCE_WEIGHTS[item["source"]]

    # 4. Bonus de convergence multiplateforme
    convergence_score = detect_convergence(item, all_results)

    # 5. Décroissance temporelle (0.98 exponentiel par jour)
    recency_score = 0.98 ** days_since_post(item["timestamp"])

    return (
        text_score * 0.35 +
        engagement_score * 0.25 +
        authority_score * 0.20 +
        convergence_score * 0.10 +
        recency_score * 0.10
    )

Le score lors des tests à l'aveugle est passé de 3,73/5,0 en v1 à 4,38/5,0 en v2.5, soit une amélioration d'environ 17%.


Étape 4 : Mode Comparatif (X vs Y)

4.1 Cas pratique : "Cursor vs Windsurf"

L'une des fonctionnalités les plus puissantes de last30days — comparer directement deux outils :

/last30days cursor vs windsurf

Ou via la ligne de commande :

python3 ~/.claude/skills/last30days/scripts/last30days.py \
  "cursor vs windsurf" \
  --emit=compact

4.2 Mécanisme de recherche parallèle à trois voies

Le mode comparatif déclenche trois recherches indépendantes :

# scripts/lib/score.py (branche mode comparatif)
def run_comparative_mode(query_a: str, query_b: str, base_query: str):
    # Recherche parallèle trois voies
    results_a = run_research(query_a)       # Voie 1 : Uniquement Cursor
    results_b = run_research(query_b)       # Voie 2 : Uniquement Windsurf
    results_base = run_research(base_query) # Voie 3 : Discussions comparant les deux

    # Génération du rapport de comparaison côte à côte
    return render_comparison(results_a, results_b, results_base)

4.3 Lecture du rapport comparatif

Le format du rapport de sortie ressemble à ceci :

## Analyse Comparative : Cursor vs Windsurf

### Forces

| Dimension | Cursor | Windsurf |
|---|---|---|
| Vitesse autocomplétion | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ |
| Compréhension contexte | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ |
| Édition multi-fichiers | ⭐⭐⭐⭐ | ⭐⭐⭐ |
| Écosystème communauté | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ |

### Faiblesses

| Dimension | Cursor | Windsurf |
|---|---|---|
| Consommation RAM | Élevée | Moyenne |
| Support hors-ligne | Faible | Bon |

### Sentiment de la communauté (30 jours)
- Cursor : 78% positif (1 240 discussions)
- Windsurf : 65% positif (890 discussions)

### Verdict basé sur les données
Cursor domine en termes d'engagement communautaire et de qualité d'autocomplétion.
Windsurf excelle dans la compréhension contextuelle pour les refactorisations complexes.
**Recommandation** : Utilisez Cursor pour le code quotidien ; Windsurf pour la planification d'architecture.

Étape 5 : Intégration dans d'autres Skills / Pipelines CI

5.1 Injection comme contexte

D'autres Skills peuvent directement citer les résultats de recherche de last30days :

## Recent Research Context
!python3 ~/.claude/skills/last30days/scripts/last30days.py \
  "votre sujet de recherche" \
  --emit=context

5.2 Lire le contexte depuis un fichier

## Research Context
!cat ~/.local/share/last30days/out/last30days.context.md

5.3 Intégration JSON dans CI/CD

Injectez les résultats de recherche dans un pipeline automatisé :

# Sortie au format JSON pour utilisation par programme
python3 ~/.claude/skills/last30days/scripts/last30days.py \
  "best LLM for code review 2026" \
  --emit=json > research.json

# Vérifier le Top 3 des modèles recommandés
python3 -c "
import json
data = json.load(open('research.json'))
for r in data['top_results'][:3]:
    print(f\"- {r['title']} (score: {r['score']:.2f})\")
"

5.4 Surcharge .env au niveau du projet

Vous ne voulez pas de configuration globale ? Placez un fichier .claude/last30days.env à la racine de votre projet, il écrasera la configuration globale :

mkdir -p .claude

cat > .claude/last30days.env << 'EOF'
# Clés API spécifiques à ce projet
SCRAPECREATORS_API_KEY=sc_project_specific_key
OPENAI_API_KEY=sk-project-specific-key
EOF

TIP

C'est particulièrement utile pour le travail en équipe — chacun peut utiliser sa propre clé, tout en maintenant un comportement du Skill cohérent.

5.5 Vérification automatique au lancement de la session

La v2.9.5 a ajouté une vérification de configuration au lancement de la session. Chaque démarrage de Claude Code validera automatiquement si votre configuration .env est complète :

# Déclencher manuellement la vérification
python3 ~/.claude/skills/last30days/scripts/last30days.py \
  --validate-config

En cas de clé manquante, une alerte claire s'affiche :

❌ SCRAPECREATORS_API_KEY is missing (required)
✅ OPENAI_API_KEY found
⚠️  BSKY_HANDLE is missing (optional)

Dépannage des problèmes courants

Q1 : Erreur indiquant que SCRAPECREATORS_API_KEY est manquante

Cause : Les variables d'environnement ne sont pas chargées correctement.

Solution :

# Vérifier que la clé existe
cat ~/.config/last30days/.env | grep SCRAPECREATORS_API_KEY

# Si installé via plugin, tentez une synchronisation manuelle
bash ~/.claude/skills/last30days/scripts/sync.sh

Q2 : La recherche X retourne toujours des résultats vides

Cause : Les cookies AUTH_TOKEN / CT0 ont expiré ou sont invalides.

Solution :

# 1. Reconnectez-vous à x.com
# 2. Copiez à nouveau les derniers auth_token et ct0
# 3. Mettez à jour le fichier .env

# Ou utilisez l'alternative xAI API (ne nécessite pas de cookies)
echo "XAI_API_KEY=xai-votre-cle" >> ~/.config/last30days/.env

Q3 : La recherche est très lente (plus de 10 minutes)

Cause : Par défaut, 10 sources sont interrogées en parallèle ; les sujets de niche nécessitent plus de tentatives API.

Solution :

# 1. Utilisez --quick pour ignorer la recherche profonde
python3 ~/.claude/skills/last30days/scripts/last30days.py \
  "niche topic" \
  --quick

# 2. Vérifiez si une source est constamment en timeout
python3 ~/.claude/skills/last30days/scripts/last30days.py \
  "topic" \
  --sources=reddit  # Chercher uniquement sur Reddit pour déboguer

Q4 : Polymarket retourne des marchés non pertinents

Cause : La correspondance des sujets Polymarket est basée sur des mots-clés, certains sujets n'ont pas de marchés actifs.

Solution :

# Spécifier manuellement des extensions de mots-clés
python3 ~/.claude/skills/last30days/scripts/last30days.py \
  "AI coding assistant" \
  --polymarket-tags="artificial intelligence,llm,gpt" \
  --emit=compact

Q5 : Claude Code affiche Permission denied sur les scripts

Cause : Les scripts shell n'ont pas les droits d'exécution.

Solution :

chmod +x ~/.claude/skills/last30days/skills/last30days.sh
chmod +x ~/.claude/skills/last30days/scripts/last30days.py

Q6 : Trop peu de posts Reddit dans le rapport alors qu'il y en a beaucoup en ligne

Cause : Depuis la v2.9, l'outil passe par ScrapeCreators ; la clé est configurée mais le format est peut-être incorrect.

Solution :

# Vérifier si la clé ScrapeCreators est valide
curl -H "x-api-key: sc_votre_cle" \
  https://api.scrapecreators.com/v1/reddit/search?q=test

# Si la clé est valide mais toujours pas de données, forcer l'usage de ScrapeCreators dans .env
echo "FORCE_SCRAPECREATORS=1" >> ~/.config/last30days/.env

Lectures complémentaires / Directions avancées

1. Ajustement fin du modèle de notation

Les poids dans scripts/lib/score.py sont écrits en dur. Si vous avez une préférence pour une source, vous pouvez modifier votre fork :

# Faire passer le poids d'autorité de Hacker News de 0.20 à 0.35
SOURCE_WEIGHTS = {
    "hackernews": 0.35,   # ↑ Modifié depuis 0.20
    "reddit": 0.25,
    "x": 0.15,
    "polymarket": 0.15,
    "youtube": 0.10,
}

2. Intégration de sources personnalisées

Vous voulez ajouter GitHub Issues ou LinkedIn ? Inspirez-vous de l'interface de hackernews.py, créez un nouveau module dans scripts/lib/, puis enregistrez-le dans last30days.py. Le fichier SPEC.md contient la définition complète de l'interface.

3. Automatisation de la veille périodique

Utilisez cron pour lancer des recherches régulières et mettre à jour votre base de connaissances :

# Lancer une veille "AI tools weekly" chaque matin à 8h
0 8 * * * python3 ~/.claude/skills/last30days/scripts/last30days.py \
  "AI developer tools weekly" \
  --days=7 \
  --emit=md \
  --output ~/Documents/Last30Days/ai-tools-weekly-$(date +\%Y-\%m-\%d).md

4. Liaison avec une base de connaissances

Injectez directement les résultats de recherche dans votre base de connaissances personnelle (pipeline RAG) :

# Générer un contexte avec citations pour un autre Skill
python3 ~/.claude/skills/last30days/scripts/last30days.py \
  "Claude Code advanced techniques" \
  --emit=context > ~/.knowledge/last30_context.md

Ressources associées

Updated March 25, 2026