diff --git a/.claude-plugin/plugin.json b/.claude-plugin/plugin.json index e3c35a2..d2f15d9 100644 --- a/.claude-plugin/plugin.json +++ b/.claude-plugin/plugin.json @@ -22,5 +22,5 @@ "polymarket" ], "skills": ["./"], - "hooks": ["./hooks/"] + "hooks": {} } diff --git a/README.md b/README.md index 0082a56..aa555ab 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,10 @@ -# /last30days v2.9.1 +# /last30days v2.9.5 + +### Claude Code (recommended) +``` +/plugin marketplace add mvanhorn/last30days-skill +/plugin install last30days@last30days-skill +``` [![ClawHub](https://img.shields.io/badge/ClawHub-last30days--official-blue)](https://clawhub.ai/skills/last30days-official) @@ -6,7 +12,16 @@ clawhub install last30days-official ``` -**The AI world reinvents itself every month. This skill keeps you current.** /last30days researches your topic across Reddit, X, YouTube, TikTok, Instagram, Hacker News, Polymarket, and the web from the last 30 days, finds what the community is actually upvoting, sharing, betting on, and saying on camera, and writes you a grounded narrative with real citations. Whether it's Seedance 2.0 access, paper.design prompts, or the latest Nano Banana Pro techniques, you'll know what people who are paying attention already know. +**The AI world reinvents itself every month. This skill keeps you current.** /last30days researches your topic across Reddit, X, Bluesky, YouTube, TikTok, Instagram, Hacker News, Polymarket, and the web from the last 30 days, finds what the community is actually upvoting, sharing, betting on, and saying on camera, and writes you a grounded narrative with real citations. Whether it's Seedance 2.0 access, paper.design prompts, or the latest Nano Banana Pro techniques, you'll know what people who are paying attention already know. + +**New in v2.9.5 — Bluesky, Comparative Mode, ScrapeCreators X:** + +- **Bluesky/AT Protocol** is now a social source. Opt-in via `BSKY_HANDLE` + `BSKY_APP_PASSWORD` (create at bsky.app/settings/app-passwords). Full pipeline: search, score, dedupe, render. +- **Comparative mode** - ask "X vs Y" (e.g., `/last30 cursor vs windsurf`) and get 3 parallel research passes with a side-by-side comparison: strengths, weaknesses, head-to-head table, and a data-driven verdict. +- **ScrapeCreators X backend** - X/Twitter search now uses ScrapeCreators as an additional backend alongside Bird cookie auth. +- **Per-project .env config** - drop a `.last30days.env` in your project root for per-project API keys. +- **SessionStart config check** - validates your config automatically when a Claude Code session starts. +- **Expanded test coverage** - 455+ tests across all modules. **New in v2.9.1 — Auto-save to ~/Documents/Last30Days/:** Every run now saves the complete briefing as a topic-named `.md` file to your Documents folder. Build a personal research library automatically. Inspired by [@devin_explores](https://x.com/devin_explores). @@ -28,7 +43,7 @@ Instagram Reels is now the 8th signal source. TikTok and Instagram both run on S **New in V2:** Smarter query construction, two-phase supplemental search, free X search via bundled Bird client, `--days=N` flag, automatic model fallback. [Full changelog below.](#whats-new-in-v2) -**The tradeoff:** /last30days finds a lot of content but takes 2-8 minutes depending on how niche your topic is. Six sources searched in parallel, results scored, deduplicated, and synthesized. We think the depth is worth the wait, but `--quick` mode is there if you need speed over thoroughness. +**The tradeoff:** /last30days finds a lot of content but takes 2-8 minutes depending on how niche your topic is. Up to 10 sources searched in parallel, results scored, deduplicated, and synthesized. We think the depth is worth the wait, but `--quick` mode is there if you need speed over thoroughness. **Best for prompt research**: discover what prompting techniques actually work for any tool (ChatGPT, Midjourney, Claude, Paper, etc.) by learning from real community discussions and best practices. @@ -58,6 +73,8 @@ cat > ~/.config/last30days/.env << 'EOF' SCRAPECREATORS_API_KEY=... # Reddit + TikTok + Instagram (one key, all three) — scrapecreators.com OPENAI_API_KEY=sk-... # optional — legacy Reddit fallback if using `codex login` XAI_API_KEY=xai-... # optional — cookie auth is default for X search +BSKY_HANDLE=you.bsky.social # optional — Bluesky search (create app password below) +BSKY_APP_PASSWORD=xxxx-xxxx-xxxx # optional — bsky.app/settings/app-passwords EOF chmod 600 ~/.config/last30days/.env ``` @@ -136,6 +153,12 @@ BRAVE_API_KEY=... # Brave Search (free tier: 2,000 queries/month) OPENROUTER_API_KEY=... # OpenRouter/Perplexity Sonar Pro ``` +**Optional Bluesky credentials** (add to `~/.config/last30days/.env`): +```bash +BSKY_HANDLE=you.bsky.social # Your Bluesky handle +BSKY_APP_PASSWORD=xxxx-xxxx-xxxx # Create at bsky.app/settings/app-passwords +``` + Check source availability: `python3 scripts/last30days.py --diagnose` ## Usage @@ -153,7 +176,7 @@ Examples: ## What It Does -1. **Researches** - Scans Reddit, X, YouTube, TikTok, Instagram, Hacker News, Polymarket, and the web for discussions from the last 30 days +1. **Researches** - Scans Reddit, X, Bluesky, YouTube, TikTok, Instagram, Hacker News, Polymarket, and the web for discussions from the last 30 days 2. **Synthesizes** - Identifies patterns, best practices, and what actually works 3. **Delivers** - Either writes copy-paste-ready prompts for your target tool, or gives you a curated expert-level answer diff --git a/docs/plans/2026-03-08-feat-claude-code-plugin-marketplace-plan.md b/docs/plans/2026-03-08-feat-claude-code-plugin-marketplace-plan.md index 42c70f1..33c4941 100644 --- a/docs/plans/2026-03-08-feat-claude-code-plugin-marketplace-plan.md +++ b/docs/plans/2026-03-08-feat-claude-code-plugin-marketplace-plan.md @@ -1,7 +1,7 @@ --- title: "feat: Publish last30days as Claude Code marketplace plugin" type: feat -status: active +status: completed date: 2026-03-08 --- diff --git a/docs/plans/2026-03-09-docs-v295-readme-and-plugin-fix-plan.md b/docs/plans/2026-03-09-docs-v295-readme-and-plugin-fix-plan.md new file mode 100644 index 0000000..968d7d7 --- /dev/null +++ b/docs/plans/2026-03-09-docs-v295-readme-and-plugin-fix-plan.md @@ -0,0 +1,75 @@ +--- +title: "docs: v2.9.5 README update, plugin.json fix, Claude Code install above fold" +type: docs +status: completed +date: 2026-03-09 +--- + +# docs: v2.9.5 README update, plugin.json fix, Claude Code install above fold + +Three things in one commit: + +## 1. Fix plugin.json hooks field (Issue #62) + +**Bug:** `"hooks": ["./hooks/"]` should be `"hooks": {}`. Array format is invalid per Claude Code plugin manifest schema. No hooks directory exists anyway. + +**File:** `.claude-plugin/plugin.json:25` + +**Fix:** Change `"hooks": ["./hooks/"]` to `"hooks": {}` + +## 2. Add Claude Code install above ClawHub + +Currently the README opens with ClawHub badge + install. User wants Claude Code (the default/best way) to be equally prominent ABOVE ClawHub. + +**Add before the ClawHub badge:** +``` +### Claude Code (recommended) +/plugin marketplace add mvanhorn/last30days-skill +/plugin install last30days@last30days-skill +``` + +This matches the Installation section further down but puts it above the fold where people actually see it. + +## 3. Update README to v2.9.5 + +**Header:** Change `v2.9.1` to `v2.9.5` + +**Source list:** Add "Bluesky" everywhere sources are listed (currently says "Reddit, X, YouTube, TikTok, Instagram, Hacker News, Polymarket, and the web") + +**New in v2.9.5 block** (replace the v2.9.1 block): + +Features shipped since v2.9.1: +- **ScrapeCreators X backend** (`4b7087e`) - X/Twitter search now uses ScrapeCreators as a backend option alongside Bird cookies +- **Bluesky/AT Protocol** (`9a1059e`, `adb5a67`) - New social source with full pipeline (search, parse, normalize, score, dedupe, render). Opt-in via `BSKY_HANDLE` + `BSKY_APP_PASSWORD` app password +- **Comparative mode** (`ecf90c0`) - "X vs Y" queries run 3 parallel research passes and output side-by-side comparison +- **Per-project .env config** (PR #59) - `.last30days.env` in project root for per-project API keys +- **SessionStart config check** (PR #58) - Validates config on session start +- **Expanded test coverage** (PRs #56, #57) - Unit tests for untested modules + smoke tests + edge cases +- **Claude Code marketplace plugin** (`627947f`) - Install via `/plugin install` +- **Gemini CLI extension** (`2f16ff1`) - `gemini extensions install` + +**Env vars section:** Add `BSKY_HANDLE` and `BSKY_APP_PASSWORD` to the optional keys table + +## Files to Change + +| File | Change | +|------|--------| +| `README.md` | Version bump, Claude Code above fold, new features, Bluesky in source lists, env vars | +| `.claude-plugin/plugin.json` | Fix hooks field | + +## Acceptance Criteria + +- [x] `"hooks": {}` in plugin.json (fixes #62) +- [x] Claude Code plugin install appears ABOVE ClawHub badge +- [x] README says v2.9.5 +- [x] "New in v2.9.5" block lists all features since v2.9.1 +- [x] Bluesky appears in source list references +- [x] BSKY_HANDLE/BSKY_APP_PASSWORD documented in env vars +- [ ] Plugin installs successfully after fix + +## Sources + +- Issue #62: https://github.com/mvanhorn/last30days-skill/issues/62 +- Issue #63: https://github.com/mvanhorn/last30days-skill/issues/63 (skipped - score 4/10, niche) +- Recent commits: `4b7087e`, `9a1059e`, `ecf90c0`, `adb5a67` +- PRs #56-#59 merged since v2.9.1 diff --git a/docs/plans/2026-03-09-fix-bluesky-auth-opt-in-plan.md b/docs/plans/2026-03-09-fix-bluesky-auth-opt-in-plan.md index 98e1006..f47972f 100644 --- a/docs/plans/2026-03-09-fix-bluesky-auth-opt-in-plan.md +++ b/docs/plans/2026-03-09-fix-bluesky-auth-opt-in-plan.md @@ -95,7 +95,7 @@ AT Protocol auth flow: - [x] SKILL.md documents the env vars - [x] All existing Bluesky tests still pass - [x] New auth tests added -- [ ] `bash scripts/sync.sh` deploys successfully +- [x] `bash scripts/sync.sh` deploys successfully ## Sources