team-attention/hoyeon/dev-scan

Claude Code and agent skill by team-attention/hoyeon

Trust tier 3
  • community
Source check pending

Checking that the SKILL.md file is still in the repository.

Collect diverse opinions on technical topics from developer communities. Use for "developer reactions", "community opinions" requests. Aggregates Reddit, HN, Dev.to, Lobsters, ProductHunt, etc.

Install

npx vskill@latest install team-attention/hoyeon/dev-scan

SKILL.md

Dev Opinions Scan

Collect and synthesize diverse opinions on specific topics from multiple developer communities.

Purpose

Quickly understand diverse perspectives on technical topics:

  • Distribution of pros/cons
  • Practitioner experiences
  • Hidden concerns or advantages
  • Unique or notable perspectives

Runtime Surface

Claude Code
  • Use the vendor scripts, WebSearch fallback, and hook-provided session ID as

described below.

  • Claude Code may use multiple Bash calls, but shell-level parallelism must

happen inside one Bash invocation with & and wait.

Codex
  • Use Bash-first vendor scripts. Do not add Hoyeon MCP for v1.
  • If no hook-provided session ID exists, generate one with

date +%Y%m%d-%H%M%S and store run artifacts under $HOME/.hoyeon/codex-$RUN_ID/tmp/.

  • Prefer node skills/dev-scan/vendor/chromux-search/web-search.mjs and the

bundled Python API scripts before using generic web search fallback.

  • Treat ProductHunt as optional when PRODUCT_HUNT_TOKEN is missing.
  • If dispatching internal research helpers, use Codex adapters when installed:

hoyeon-external-researcher, hoyeon-docs-researcher, or hoyeon-browser-explorer.

Data Sources

PlatformMethod
RedditVendored web-search.mjs (chromux) — Google site:reddit.com + enrichment (post body, comments, score)
X (Twitter)Vendored web-search.mjs (chromux) — Google site:x.com + enrichment (tweets, likes, replies)
Hacker NewsVendored hn-search.py (python3) — Algolia API, no key needed
Dev.toVendored web-search.mjs (chromux) — Google site:dev.to + enrichment (article, comments)
LobstersVendored web-search.mjs (chromux) — Google site:lobste.rs + enrichment (article, comments)
ThreadsVendored web-search.mjs (chromux) — Google site:threads.net + enrichment (posts, replies, likes)
ProductHuntVendored ph-search.py (python3) — GraphQL API, requires PRODUCT_HUNT_TOKEN env var

Execution

Step 0: Dependency Check

Run all checks in a single Bash call using shell backgrounding (& + wait). Claude Code executes Bash calls sequentially — multiple Bash tool calls do NOT run in parallel. The only way to parallelize is within one shell invocation.

bash
mkdir -p /tmp/dev-scan-$$
# Kill existing chromux instance (may be non-headless) and relaunch in headless mode
chromux kill 2>/dev/null || true
chromux launch default --headless 2>/dev/null || true
node skills/dev-scan/vendor/chromux-search/web-search.mjs --check > /tmp/dev-scan-$$/web.txt 2>&1 &
python3 skills/dev-scan/vendor/hn-search/hn-search.py --check > /tmp/dev-scan-$$/hn.txt 2>&1 &
python3 skills/dev-scan/vendor/ph-search/ph-search.py --check > /tmp/dev-scan-$$/ph.txt 2>&1 &
wait
echo "=== Web (chromux) ===" && cat /tmp/dev-scan-$$/web.txt
echo "=== HN ===" && cat /tmp/dev-scan-$$/hn.txt
echo "=== ProductHunt ===" && cat /tmp/dev-scan-$$/ph.txt
rm -rf /tmp/dev-scan-$$
ResultAction
web-search --check → available: truechromux available — Reddit, X, Dev.to, Lobsters all use Google site: + enrichment
web-search --check → available: falseFall back to WebSearch tool for all Google-based sources
hn-search --check → available: trueHacker News source available
hn-search --check → available: falseFall back to WebSearch for HN
ph-search --check → available: trueProductHunt source available
ph-search --check → available: falseSkip ProductHunt (token not set or invalid)

Report available sources before proceeding. Minimum 1 source required.

Step 1: Query Planning
Note: Step 0 (dependency check) and Step 1 (query planning) are independent — run Step 0 bash commands and perform Step 1 reasoning in the same message to save a round-trip.
1-1. Parse Request

Extract structured components from user request:

  • topic: Main subject
  • entities: Key product/technology names
  • type: comparison | opinion | technology | event

Examples:

  • "Developer reactions to React 19" → topic: React 19, entities: [React 19], type: opinion
  • "Community opinions on Bun vs Deno" → topic: Bun vs Deno, entities: [Bun, Deno], type: comparison
  • "What happened with Redis license" → topic: Redis license, entities: [Redis], type: event
1-2. Query Decomposition

User requests are often complex or conversational. Before generating platform-specific queries, decompose the request into atomic search concepts that search engines can match effectively.

Why this matters: Search engines match keywords, not intent. A verbose question like "Is React 19's use() hook a viable replacement for useEffect patterns in production apps?" will miss threads titled "use() vs useEffect" or "React 19 hooks review". Decomposition bridges this gap.

Process:

  1. Extract core entities: Product/technology names exactly as communities write them
  2. Generate query variants by search intent:
  • core: The most concise keyword combination (2-4 words)
  • versus: Direct comparison form if applicable ("A vs B")
  • opinion: How people ask about it ("A worth it", "A review", "A experience")
  • technical: Specific feature/aspect if the question targets one ("A feature X")
  1. Select best variant per platform (see mapping below)

Example: "Can React 19's use() hook replace the existing useEffect pattern?"

VariantQuery
coreReact 19 use hook
versususe() vs useEffect
opinionReact 19 use hook worth it
technicalReact 19 use hook replace useEffect

Example: "Is Cursor worth paying for compared to GitHub Copilot?"

VariantQuery
coreCursor AI editor
versusCursor vs GitHub Copilot
opinionCursor worth paying for
technical(not applicable — no specific feature)

Example: "What happened with the Redis license change"

VariantQuery
coreRedis license
versus(not applicable)
opinionRedis license change reaction
technicalRedis SSPL Valkey fork
1-3. Source-Specific Query Mapping

Map the best variant from Step 1-2 to each platform's search behavior. Store all variants — the retry step (Step 2.5) needs alternate queries if the primary returns 0 results.

SourceVariableBest variantRetry variantPlatform-specific adjustments
RedditQ_REDDITversus or opinioncoreGoogle site:reddit.com — keep "vs", natural phrasing. Enrichment extracts post body + top comments.
X/TwitterQ_TWITTERversus or coreopinionGoogle site:x.com — short terms. Enrichment extracts tweets + likes + replies.
HNQ_HNcore or technicalcore (shorter)Drop "vs" — Algolia full-text matches better without.
Dev.toQ_DEVTOopinion or versuscoreGoogle site:dev.to — add context word (comparison/review/guide) for recall.
LobstersQ_LOBSTERScorecore (2 words max)Google site:lobste.rs — simple terms. Small community, keep broad.
ThreadsQ_THREADSopinion or corecoreGoogle site:threads.net — short-form posts. Similar to X/Twitter, concise queries work best.
ProductHuntQ_PHcore—Product names only. Drop generic words. Only if PH relevant (see below).

ProductHunt relevance check — PH is a product launch community. Only set Q_PH when the query involves specific products, tools, or SaaS (e.g. "Cursor", "Linear", "Supabase vs Firebase"). Skip PH when the topic is abstract/conceptual (e.g. "microservices best practices", "Rust async patterns", "tech layoffs").

Full example: user asks "claude code vs codex"

Decomposition: core=claude code codex, versus=claude code vs codex, opinion=claude code vs codex worth it

VariableVariant usedOptimized Query
Q_REDDITversusclaude code vs codex
Q_TWITTERversusclaude code vs codex
Q_HNcoreclaude code codex
Q_DEVTOversusclaude code vs codex comparison
Q_LOBSTERScoreclaude code codex
Q_THREADSopinionclaude code vs codex
Q_PHcoreclaude code codex
Step 1.5: Time Period

Extract time period from user request. Default: month.

User saysTIME_PERIOD--time value
(nothing)monthmonth / m
"last week"weekweek / w
"last few days"weekweek / w
"this year"yearyear / y
"all time"allall / a

Use TIME_PERIOD in all search commands below.

Step 2: Search (Two Bash Calls → File-Based)

Split into two phases: API sources in parallel (shell backgrounding), then all Google site: sources sequentially (chromux shares one Chrome instance — simultaneous use causes tab conflicts).

Results go to files, not stdout. Enriched JSON can exceed 50KB — piping to stdout hits Claude Code's output limit. Instead, save to files and use the Read tool to access them. This also serves as a log of the scan.

Both Bash calls must share the same temp directory. Generate a stable RUN_ID once and use it in both calls.

Bash call 1 — API sources (parallel):

bash
SESSION_ID="[session ID from UserPromptSubmit hook]"
RUN_ID="dev-scan-$(date +%s)-$RANDOM"
D="$HOME/.hoyeon/$SESSION_ID/tmp/$RUN_ID"
mkdir -p "$D"
echo "$D" > /tmp/dev-scan-current-dir
python3 skills/dev-scan/vendor/hn-search/hn-search.py "{Q_HN}" --count 10 --comments 5 --time {TIME_PERIOD} --json > "$D/hn.json" 2>"$D/hn.err" &
python3 skills/dev-scan/vendor/ph-search/ph-search.py "{Q_PH}" --count 10 --comments 3 --time {TIME_PERIOD} --json > "$D/ph.json" 2>"$D/ph.err" &
wait
echo "RUN_DIR=$D"
for f in "$D"/*.json; do echo "$(basename $f): $(wc -c < $f) bytes, $(python3 -c "import json,sys; d=json.load(open('$f')); print(len(d) if isinstance(d,list) else 'obj')" 2>/dev/null || echo '?') items"; done

Bash call 2 — Google `site:` sources (sequential via chromux, same Bash call):

bash
D="$(cat /tmp/dev-scan-current-dir)"
node skills/dev-scan/vendor/chromux-search/web-search.mjs "{Q_REDDIT}" --site reddit.com --time {TIME_SHORT} --count 5 --comments 5 --body 300 --json > "$D/reddit.json" 2>"$D/reddit.err"
node skills/dev-scan/vendor/chromux-search/web-search.mjs "{Q_TWITTER}" --site x.com --time {TIME_SHORT} --count 5 --comments 5 --json > "$D/x.json" 2>"$D/x.err"
node skills/dev-scan/vendor/chromux-search/web-search.mjs "{Q_DEVTO}" --site dev.to --time {TIME_SHORT} --count 5 --comments 5 --body 300 --json > "$D/devto.json" 2>"$D/devto.err"
node skills/dev-scan/vendor/chromux-search/web-search.mjs "{Q_LOBSTERS}" --site lobste.rs --time {TIME_SHORT} --count 5 --comments 5 --json > "$D/lobsters.json" 2>"$D/lobsters.err"
node skills/dev-scan/vendor/chromux-search/web-search.mjs "{Q_THREADS}" --site threads.net --time {TIME_SHORT} --count 5 --comments 5 --body 300 --json > "$D/threads.json" 2>"$D/threads.err"
for f in "$D"/*.json; do echo "$(basename $f): $(wc -c < $f) bytes, $(python3 -c "import json,sys; d=json.load(open('$f')); print(len(d) if isinstance(d,list) else 'obj')" 2>/dev/null || echo '?') items"; done

Reading results: Use the Read tool on each $D/{source}.json file. Read the files with the most items first (Reddit, Dev.to tend to be richest). Skip files with 0 items.

`TIME_SHORT` mapping: month→m, week→w, year→y, all→a (web-search.mjs uses single-letter time codes).

This is the start of the file. Read the full SKILL.md on GitHub.

Security

  • Security scanPassed, 90 of 100Pattern checks on the skill's files.
  • Model reviewPassed

Quality evaluation

  • Task evaluationNot runNo evaluation yet. Run one in Skill Studio.

Source

Popularity

Repository stars
115
Repository forks
13
7-day trend score
24

Stars and forks are for the whole GitHub repository, not this skill alone. Refreshed 20 Mar 2026, 7 months ago.

Works with

Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.

  • Claude Code
  • Cursor
  • GitHub Copilot
  • Windsurf
  • Codex
  • Gemini CLI
  • Cline
  • Amp
  • Roo Code
  • Goose
  • Continue
  • Kilo Code
  • Junie
  • Trae
  • OpenHands
  • Qwen Code
  • AI Agent
  • Tabnine Chat
  • Sourcegraph Cody
  • Amazon Q
  • Firebase Genkit
  • Sweep
  • Devin
  • Phind
  • Mentat
  • Claude Desktop
  • Aider
  • GPT Pilot
  • Plandex
  • bolt.new
  • v0
  • Replit Agent
  • Anse
  • TypingMind
  • BetterChatGPT
  • LibreChat
  • Warp AI
  • Pieces
  • Fig AI
Embed badge
vskill VERIFIED badge
[![vskill VERIFIED](https://verified-skill.com/api/v1/skills/team-attention/hoyeon/dev-scan/badge)](https://verified-skill.com/skills/team-attention/hoyeon/dev-scan)

Something wrong with this skill or its page? Tell us.