Commit Graph

50 Commits

Author SHA1 Message Date
Matt Van Horn c8ddb60397 Revert query parsing display to V1 format
User preferred V1's "I'll research X across Reddit, X, and the web..."
with explicit Parsed intent block over V2's emoji format.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-07 08:18:37 -08:00
Matt Van Horn 10f61c503d Restore 7 missing v1 features + add query parsing display + v1-vs-v2 test plan
Feature audit found 11 things v2 dropped from v1. Restored the 7 that affect
output quality: quality checklist for prompts, anti-pattern examples, self-check
instruction, "don't re-search" context memory, prompt format anti-pattern,
multi-prompt guidance, and emoji footer with engagement counts.

Also adds visible query parsing display (🔍 **{TOPIC}** · {QUERY_TYPE}) and
the full v1-vs-v2 comparison test plan with all 17 test queries from README.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-06 15:27:46 -08:00
Matt Van Horn 4b0098b754 Remove context: fork — root cause of broken skill execution
The old v1 skill worked because context: fork was SILENTLY IGNORED
due to Claude Code bug #17283. The skill ran inline in the main
conversation. Claude Code 2.1+ fixed the bug and now properly
honors fork mode, creating an isolated subagent that ignores all
instruction ordering (text output, bash-first, etc.).

Fix: remove context: fork so the skill runs inline again, matching
the behavior the user knows works. Also restored v1-style
instruction flow: parse intent first, then run script, then WebSearch.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-06 10:28:58 -08:00
Matt Van Horn df29bbb53d Revert to bash-first execution with echo progress display
The agent in fork mode ignores text output instructions and jumps
straight to WebSearch. Reverted to the original "YOUR FIRST ACTION:
Run this command. EXECUTE." pattern that actually worked. Embedded
progress display as echo statements inside the bash command so they
can't be skipped. The agent was not running the Python script at all
when the first instruction was about text output.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-06 10:18:53 -08:00
Matt Van Horn a6dd0a8b0e Move progress block to very first instruction in SKILL.md
The agent was skipping the progress text because it was buried after
parsing logic at line 41. Restructured so the FIRST section is
"YOUR FIRST OUTPUT" with the progress block, BEFORE any tool call
instructions. Added explicit "DO NOT skip this" enforcement.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-06 10:16:49 -08:00
Matt Van Horn c3120d29a3 Show visible progress block before research starts
The ui.py spinner/color output goes to stderr which Claude Code
buffers invisibly. Instead, have the agent output a visible progress
block with emoji showing Reddit/X/Web agents deploying.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-06 10:13:59 -08:00
Matt Van Horn 11f9ab8519 Restore acknowledgment step before research execution
Add back the brief topic acknowledgment ("Researching X — searching
Reddit for upvotes...") and descriptive intro that the v1 skill had.
The v2 version was jumping straight into script execution with no
user-facing feedback about what was being researched.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-06 10:10:49 -08:00
Matt Van Horn 7c36866524 Fix v2 output quality: stats format, Reddit results, citations, summary structure
- Stats: replace BAD/GOOD examples with strict fill-in-the-blank template
- Reddit: add subreddit-targeted fallback search, soften scoring penalties
  (engagement -10→-3, date confidence -10→-5), add minimum result guarantee
- Citations: limit to 1 per insight, short format, no engagement metrics
- Summary: add bold topic headers template for structured paragraphs

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-06 10:04:46 -08:00
Matt Van Horn 38451d44c9 Restore original description, enforce emoji stats format, require source attribution
- Reverted description to original public repo copy
- Restored H1 heading, moved imperative instruction to bold paragraph
- Added BAD/GOOD examples enforcing emoji tree stats format
- Required @handle and r/subreddit citation in ALL summary types
- Removed agent:Explore and disable-model-invocation from frontmatter

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-06 09:48:21 -08:00
Matt Van Horn 63de326df0 Fix skill not executing: remove agent:Explore, front-load run command
The Explore agent was treating SKILL.md as documentation to summarize
instead of instructions to follow. Removed agent:Explore from frontmatter
and restructured opening to immediately command script execution.

Also adds release plan for Bird CLI v2.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-06 09:38:32 -08:00
Matt Van Horn 4230fa2b69 Fix YAML parsing error in argument-hint field
Wrap value in single quotes to properly escape nested double quotes.
This fixes skills CLI installation.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-05 07:37:17 -08:00
Matt Van Horn 4e972d009c Rename skill from last30daystest to last30days
- Update skill name and description (remove TEST markers)
- Update script path to ~/.claude/skills/last30days/
- Clean up header, keep Bird CLI features prominent

Ready for local testing as the main skill.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-03 16:11:21 -08:00
Matt Van Horn 17485ec797 Make RECOMMENDATIONS format flexible (table or stacked)
- Remove over-prescriptive format requirements
- Let Claude choose table vs stacked naturally based on content
- Keep critical requirement: Sources line with @handles
- Claude Code's renderer handles the responsive wrapping

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-03 15:55:41 -08:00
Matt Van Horn 56f9eceb9c Switch RECOMMENDATIONS to stacked card format (responsive)
- Replace ASCII table with stacked card format
- Each card: Tool/Mentions/Use Case/Sources on separate lines
- Cards separated by horizontal rule (────)
- Doesn't break when terminal window is narrow
- Still includes @handles in Sources line

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-03 15:12:56 -08:00
Matt Van Horn c534c3b9a5 Update RECOMMENDATIONS format to use ASCII tables with @handles
- Changed from numbered list to ASCII box-drawing table format
- Added "Key Sources" column that MUST include @handles from X posts
- Added explicit instructions to parse and display highest-engagement handles
- Matches the output quality of the original xAI version

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-03 15:04:41 -08:00
Matt Van Horn 3afc1213b8 Add explicit instructions to calculate engagement totals
Claude was summarizing qualitatively ('mostly casual conversation')
instead of summing actual engagement numbers from the output.

Added CRITICAL note to:
- Parse [Xlikes, Yrt] from each X post
- Sum totals for the stats display
- Show top voices with engagement (e.g., @handle (15K likes))

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-03 14:47:41 -08:00
Matt Van Horn 2c398ef6cb Enable API keys: remove clean mode
Now reads from ~/.config/last30days/.env like the regular skill.
Bird CLI + API keys both work together.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-03 13:47:10 -08:00
Matt Van Horn 89bdbae0fe Fix: restore pretty emojis and box chars in stats summary
Original format:
 All agents reported back!
├─ 🟠 Reddit: {n} threads │ {sum} upvotes │ {sum} comments
├─ 🔵 X: {n} posts │ {sum} likes │ {sum} reposts
├─ 🌐 Web: {n} pages │ {domains}
└─ Top voices: r/{sub1}, r/{sub2} │ @{handle1}, @{handle2}

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-03 13:09:14 -08:00
Matt Van Horn 06061884f1 Update SKILL.md: remove interactive prompt references
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-03 12:39:16 -08:00
Matt Van Horn fe9ebb9944 feat: add clean mode for testing Bird CLI flow
- Add LAST30DAYS_CONFIG_DIR env var to override config location
- Set LAST30DAYS_CONFIG_DIR="" in test skill for clean mode
- Test skill now ignores existing API keys to show Bird install prompt

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-03 11:48:40 -08:00
Matt Van Horn d122210e1e rename: use last30daystest as main skill name for testing 2026-02-03 11:32:47 -08:00
Matt Van Horn cc892d736b revert: restore original argument-hint format (testing) 2026-01-28 13:43:10 -08:00
Matt Van Horn 6cc7dad86e fix: YAML frontmatter and GPT-5 model fallback
- Fix invalid YAML in SKILL.md argument-hint (closes #8)
  Wrapped value in single quotes to properly escape double quotes

- Add automatic model fallback for GPT-5 access errors (closes #9)
  When OpenAI returns 400 for unverified orgs, retry with gpt-4o

- Add tests for model fallback logic

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-28 11:07:33 -08:00
Matt Van Horn 6fbfbb9ccc feat: Add web-only fallback mode with API key promo
- Skill now works without any API keys using WebSearch fallback
- Shows promo banner marketing Reddit/X data when keys are missing
- Partial mode (one key) shows shorter tip for the missing source
- Updated SKILL.md to document three modes: Full, Partial, Web-Only
- Added get_missing_keys() to env.py for promo logic
- Added show_promo(), start_web_only(), show_web_only_complete() to ui.py
- Updated render_compact() to include inline promo for web-only mode

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-25 09:32:24 -08:00
Matt Van Horn 6831e624b8 docs: Add photorealistic aging portrait example
Shows multi-panel consistency for photorealistic people:
- JSON structure with face preservation
- Same person at ages 10, 20, 40, 80
- Heterochromia + freckles maintained across panels
- Real generated result

Also added to SKILL.md intro examples.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-24 16:28:15 -08:00
Matt Van Horn 7f1ab7a2e9 fix: Remove duplicate stats display from Judge section
Stats were showing twice - once in Judge section, once at end.
Now Judge section just synthesizes internally, stats only appear
at the end right before invitation.

Order: What I learned -> Stats -> Share your vision

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-24 16:22:55 -08:00
Matt Van Horn 60c663697e fix: Reorder output - stats right before invitation
New order:
1. What I learned / KEY PATTERNS (or Most mentioned)
2. Stats (All agents reported back!)
3. Share your vision (last)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-24 16:09:52 -08:00
Matt Van Horn bcb1c7d71b feat: Reorder use cases - Prompting first, rename HOW-TO to PROMPTING
Prompting is the primary use case, so it should be first:
1. Prompting - "Midjourney prompts", "ChatGPT image generation"
2. Recommendations - "best Claude Code skills", "top AI tools"
3. News - "what's happening with OpenAI"
4. General - any topic

Also renamed HOW-TO query type to PROMPTING for clarity.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-24 16:07:35 -08:00
Matt Van Horn c8504d3b30 fix: Use user's exact terminology, don't add outdated tech names
Claude was "helpfully" adding DALL-E, GPT-4o to searches when user
asked about "ChatGPT image prompting". This uses outdated knowledge.

Now explicitly instructs: use the user's exact terminology, don't
substitute or add tech names. Trust the user knows what they're
asking about.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-24 15:05:45 -08:00
Matt Van Horn 6577da0b14 feat: More emojis and bring back Judge Agent in display
Updated research banner:
- Added Judge Agent: "Standing by to synthesize..."
- Better emoji descriptions: "Scanning for gold", "Catching latest takes"

Updated completion display:
- "All agents reported back!"
- "Judge Agent: Weighing the evidence..."
- Emojis on the Judge's evaluation criteria

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-24 15:03:41 -08:00
Matt Van Horn 6a7c29010d fix: Answer follow-up questions from research, don't re-search
After research is complete, Claude is an expert. Follow-up questions
should be answered from the research findings, not trigger new
WebSearches. Only do new research for a different topic.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-24 15:01:35 -08:00
Matt Van Horn b6cdbc9058 fix: Display research banner before background script starts
Since script runs in background, users don't see its live output.
Now Claude displays the fancy emoji banner immediately before
starting the background script.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-24 15:00:30 -08:00
Matt Van Horn 5f8623f129 feat: Smart query detection for better research results
Added QUERY_TYPE detection:
- RECOMMENDATIONS ("best X") → searches for lists, extracts specific names
- NEWS → searches for current events
- HOW-TO → searches for tutorials
- GENERAL → broad topic research

For RECOMMENDATIONS queries, synthesis now extracts specific entity names
with mention counts instead of generic patterns.

Example: "best Claude Code skills" now returns:
  "Most mentioned: /commit (5x), remotion (4x), git-worktree (3x)"
Instead of:
  "Skills are good. Keep them under 500 lines."

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-24 13:23:31 -08:00
Matt Van Horn 68420ca1e2 fix: Run Reddit/X script in background for parallel execution
Start the script first with run_in_background:true, then do WebSearch.
Both run in parallel so users see the script's progress display while
WebSearch also fetches results.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-24 12:48:07 -08:00
Matt Van Horn 0e4df9f38a fix: Clean up final display - no Sources, end with invitation
- Suppress "Sources:" output from WebSearch (redundant noise)
- Reorder: Research Complete stats → What I learned → Share your vision
- Simplified KEY PATTERNS to 3 items
- Clean ending users see while waiting for their input

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-24 12:38:51 -08:00
Matt Van Horn 85e7b6445c fix: Run WebSearch before script for better working state
Users now see the script's progress display as the "working state"
while waiting, rather than the WebSearch tool call.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-24 12:32:49 -08:00
Matt Van Horn e926a5aabd fix: Remove redundant Web Agent from banner display
WebSearch shows as visible tool calls, so announcing it in the
banner was redundant. Now only Reddit and X agents are shown
in the initial display.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-24 12:29:36 -08:00
Matt Van Horn 407801f8be feat: Add parallel research agents with Judge synthesis
- Deploy 3 agents in parallel: Reddit+X, WebSearch, Backup WebSearch
- Add visual progress indicators (🟠🔵🌐)
- Add Judge Agent to synthesize all sources
- Include web authors in top voices (e.g., "John on Medium")
- Weight Reddit/X higher than WebSearch (engagement signals)

Makes the research feel magical with parallel execution.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-24 10:51:07 -08:00
Matt Van Horn dde996a228 fix: Update SKILL.md to execute WebSearch after script
- Add WebSearch to allowed-tools
- Add --include-web flag to script invocation
- Add WebSearch Execution section with instructions
- Update summary format to include web sources

The skill now instructs Claude to use WebSearch after the
Python script runs, when the WEBSEARCH REQUIRED marker appears.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-24 10:40:53 -08:00
Matt Van Horn a552314443 CRITICAL: Enforce using prompt FORMAT from research
If research says "use JSON prompts", the generated prompt MUST be JSON.
Previously the skill would learn about JSON format then ignore it and
write plain prose - defeating the purpose of the research.

- Add PROMPT FORMAT as required field to capture during research
- Add explicit anti-pattern warning about ignoring format
- Update quality checklist to verify format matches research

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-23 17:00:34 -08:00
Matt Van Horn 664b1cc52d Fix output order and Reddit extraction
1. Output order: What I learned → TARGET TOOL → KEY PATTERNS → Research Complete → Share vision
2. Fixed Reddit returning empty results - OpenAI was finding URLs but not extracting content
   - Updated prompt to explicitly require extraction from search results
   - Added "MUST include threads" instruction to prevent empty items

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-23 16:02:05 -08:00
Matt Van Horn c9d4320b9b Fix UX: research first, ask about tool after
Previously asked "What tool?" before running research, which was
backwards for exploratory queries like "iOS design mockups".

Now:
- If tool is specified in query, use it
- If tool NOT specified, run research first
- Ask about target tool AFTER showing results (with smarter options based on what research found)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-23 15:54:23 -08:00
Matt Van Horn 101c3ad07a Fix synthesis hallucination - ground in actual research content
The skill was finding correct sources (e.g., ClawdBot content) but Claude
was synthesizing based on its pre-existing knowledge (Claude Code skills)
instead of what the research actually said.

Added strong grounding instructions:
- CRITICAL warning to base synthesis on actual research, not pre-existing knowledge
- Anti-pattern example: don't conflate "clawdbot skills" with "Claude Code skills"
- Self-check reminder before displaying summary
- Updated "What I learned" template to emphasize traceability to sources

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-23 15:40:36 -08:00
Matt Van Horn 40f9dc4877 Fix output order and add Reddit error handling
- SKILL.md: Move "What I learned" BEFORE "Research Complete" stats
- Add error tracking to Report schema (reddit_error, x_error fields)
- Wrap OpenAI API calls in try/catch with clear error messages
- Show explicit error or "no results" messages in compact output
- Fix false positive error detection for null error fields

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-23 15:26:33 -08:00
Matt Van Horn 72e4f79d65 Reorder: patterns → expert → stats → invitation
Stats near bottom so they're visible in terminal when output finishes.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-23 13:50:40 -08:00
Matt Van Horn 4f027fe972 Reorder output: stats → patterns → expert → invitation
Show proof of work first:
1. Research stats (upvotes, likes, sources)
2. Key patterns discovered (5 bullet points)
3. "I'm now an expert in X"
4. "Share your vision..."

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-23 13:49:20 -08:00
Matt Van Horn f603323ca8 Add --quick and --deep flags for research depth
- quick: 8-12 sources each, faster response
- default: 20-30 sources each (unchanged behavior)
- deep: 50-70 Reddit, 40-60 X for comprehensive research

Adjusts API timeouts based on depth. Cache keys include depth
so different depths are cached separately.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-23 13:41:55 -08:00
Matt Van Horn 19d2c41161 Wait for user's vision before writing prompts
- After stats summary, invite user to share what they want to create
- Wait for their response instead of auto-dumping generic prompts
- Write ONE tailored prompt based on their specific vision
- Only provide multiple options if they ask for more
- Stay in expert mode for follow-up requests

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-23 13:30:19 -08:00
Matt Van Horn c037eea15f Refocus skill on prompt-first output with stats summary
- Parse user intent for TOPIC and TARGET_TOOL upfront
- Ask follow-up if target tool unclear
- Show impressive stats summary after research (upvotes, likes, etc.)
- Primary output is now copy-paste-ready prompts for target tool
- Keep expert context for follow-up custom prompt requests
- Research is internalized, not dumped back at user

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-23 13:26:01 -08:00
Matt Van Horn 5ca4829be4 Initial commit: last30days skill
Research topics across Reddit + X from the last 30 days using
OpenAI and xAI APIs. Features:
- Auto model selection (GPT-5.x, Grok-3)
- Popularity-aware scoring (relevance + recency + engagement)
- Reddit thread enrichment with real metrics
- Near-duplicate detection
- Multiple emit modes (compact, json, context, path)
- 24h caching with --refresh bypass
- NUX for API key setup
- 87 passing unit tests

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-23 12:37:31 -08:00