kr-naver-blogger
Skill2 starsChanged 10 days agoMITView on GitHub
Discover Naver bloggers who consistently cover a specific KRX-listed company. Use before drafting a full memo to identify independent long-form voices for the Street / Alternative Views section. Builds dynamic search queries from Naver News trends and optional DART product keywords, ranks candidates by in-blog search hit count and coverage depth, and writes a dated JSON file under the cache directory. Requires `kr-naver-browse`. Do not use for general sell-side coverage or broker-list discovery.
In this repository42 other files it gives its agents.
- AGENTS.mdAGENTS.md
- CLAUDE.mdCLAUDE.md
- kr-analyst-report-discoverSkill
- kr-analyst-report-fetchSkill
- kr-analyst-report-insightSkill
- kr-analyst-report-watchSkill
- kr-article-readabilitySkill
- kr-chatgpt-reviewSkill
- kr-daily-market-newsSkill
- kr-earnings-reviewSkill
- kr-finance-slide-claritySkill
- kr-foreign-analystSkill
- kr-market-leadersSkill
- kr-market-sentimentSkill
- kr-naver-blog-publishSkill
- kr-naver-browseSkill
- kr-naver-insightSkill
- kr-order-backlog-analysisSkill
- kr-portfolio-guardSkill
- kr-portfolio-monitorSkill
- kr-research-siteSkill
- kr-sector-analysisSkill
- kr-sector-auditSkill
- kr-sector-compareSkill
- kr-sector-data-packSkill
- kr-sector-planSkill
- kr-sector-updateSkill
- kr-stock-analysisSkill
- kr-stock-chartSkill
- kr-stock-dart-analysisSkill
- kr-stock-data-packSkill
- kr-stock-planSkill
- kr-stock-updateSkill
- kr-strategy-backtestSkill
- kr-trade-flow-analysisSkill
- kr-web-browseSkill
- telegram-report-senderSkill
- us-daily-market-newsSkill
- us-earnings-reviewSkill
- us-sec-analysisSkill
- us-stock-analysisSkill
- us-strategy-backtestSkill
The file
We split this skill into the rules it gives an agent
8 rules. About 0 are common, 2 are distinctive, and 6 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈2
Distinctive · estimate
This author's own choices. Worth a look.
6
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 14
Before writing a full memo, when the user wants independent viewpoints in the Street / Alternative Views section.
- Distinctive: line 16
Before a refresh pass, to check whether new bloggers have started covering a stock the user is tracking.
- Distinctive: line 21
Do not use for:
- Very specific: line 30
Check cache: If .tmp/naver-blog-cache/bloggers/<ticker>/<YYYY-MM-DD>.json exists for today, prefer it unless --no-cache is set.
- Very specific: line 38
Pass 1 — Keyword search: Run every query through kr-naver-browse.searchNaverBlog and accumulate hits by blogId.
- Very specific: line 40
Pass 2 — Nickname anchor: Call fetchRelatedQueries(company) to scrape the blog search page's 연관검색어 block.
- Very specific: line 59
Detect trading-shop blogs: if 50%+ of the blog's page-1 post titles are TA-flavored, mark isTradingBlog: true and exclude — including …
- Very specific: line 133
Fail loud: if browse-naver.js cannot be required or the browse binary is missing.
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Korean Naver Blogger Discovery
Find Naver bloggers who post deeply and repeatedly about a given KRX stock.
Feeds kr-naver-insight with a ranked candidate list. The goal is to surface
independent long-form voices — not to scrape personal data.
When To Use
- Before writing a
full memo, when the user wants independent viewpoints in theStreet / Alternative Viewssection. - Before a refresh pass, to check whether new bloggers have started covering a stock the user is tracking.
- As input to
kr-naver-insight, which reads the output JSON and fetches the actual post bodies.
Do not use for:
- Sell-side broker list discovery — use DART/news skills instead.
- ETF or sector-wide coverage — bloggers cluster per stock, not per sector.
- Any task where the user does not need Naver voices specifically.
Workflow
- Read the request. Confirm company + ticker + optional
--min-posts. - Check cache. If
.tmp/naver-blog-cache/bloggers/<ticker>/<YYYY-MM-DD>.jsonexists for today, prefer it unless--no-cacheis set. - Build dynamic queries via
build-query-set.js:- Base:
<company> 투자 분석,<company> 실적 - DART products (if
--dart-file): top nouns from 사업의 내용 section - News trends: top keywords from Naver News headline frequency analysis
- Context (if
--context-file): terms from 핵심 논점 / 투자 포인트 sections - Capped at 8 queries. Use
--no-auto-queriesfor legacy 3-query mode.
- Base:
- Pass 1 — Keyword search. Run every query through
kr-naver-browse.searchNaverBlogand accumulate hits byblogId. - Pass 2 — Nickname anchor. Call
fetchRelatedQueries(company)to scrape the blog search page's 연관검색어 block. Strip generic tails (주가,전망,배당, ...) viaextractNicknameQueries. Fire each surviving suggestion as asearchNaverBlogcall; hits are tagged with the surfacing nickname (nicknameHitCount,nicknameAnchors). - Pass 3 — Roundup-post body mining. Scan all pass 1 + pass 2 hits
for titles matching
isRoundupTitle(N인 N색, bracketed nickname lists). Fetch up to 3 matching posts' full page text viabrowseTextand callextractBlogIdRefsto pull everyblog.naver.com/<blogId>reference out of the body. Each referenced blogId is injected as an anchored candidate withroundupMentioned: true. - Select candidates: keyword-only candidates are capped at
--max-candidates; anchored candidates (nickname OR roundup) are uncapped. - Per-blog search each candidate via
PostSearchList.naver. Count posts whose title contains the company name or ticker (relevantPostCount). Classify each match as trading / listicle / dedicated via the shared title-filter lib.dedicatedPostCountis the primary depth signal. - Detect trading-shop blogs: if 50%+ of the blog's page-1 post titles
are TA-flavored, mark
isTradingBlog: trueand exclude — including anchored candidates. A trading shop is a trading shop. - Rank by anchored-status desc →
dedicatedPostCountdesc →inBlogPaginationPagesdesc. - Qualify: anchored OR
dedicatedPostCount >= --min-posts, ANDisTradingBlog === false. Anchored candidates bypass the min-posts floor because the anchor IS the quality signal. - Write a dated JSON file — the schema is documented in
references/workflow.md.
Output Contract
- Output path:
--output(required). Typical value:.tmp/naver-blog-cache/bloggers/<ticker>/<YYYY-MM-DD>.json. - JSON shape:
{
"company": "엘앤에프",
"ticker": "066970",
"discoveredAt": "2026-04-12",
"bloggers": [
{
"blogId": "mooyoung_2022",
"displayName": null,
"blogTitle": null,
"subscriberCount": null,
"relevantPostCount": 6,
"dedicatedPostCount": 5,
"tradingTitleCount": 0,
"listicleTitleCount": 1,
"isTradingBlog": false,
"searchHitCount": 1,
"nicknameHitCount": 4,
"nicknameAnchors": ["무영"],
"roundupMentioned": true,
"roundupSources": ["bosbos2"],
"inBlogPage1Total": 10,
"inBlogPaginationPages": 11,
"latestPostDate": null,
"categories": [],
"profileSnippet": null
}
],
"meta": {
"searchQueries": 7,
"candidatesFound": 50,
"qualified": 8,
"querySet": { "..." : "..." },
"relatedQueries": [{ "text": "엘앤에프 무영", "nickname": "무영", "wholeQuery": false }],
"nicknameQueries": [{ "text": "엘앤에프 무영", "nickname": "무영", "hits": 10 }],
"nicknameAnchoredCount": 9,
"roundupFetched": [
{ "sourceBlogId": "bosbos2", "logNo": "224125884833", "refs": ["mooyoung_2022", "naburo", "shmoon305"] }
]
}
}Fields that cannot be extracted are set to null / [], never fabricated.
Operating Rules
- Never invent blogger names, subscriber counts, or blog titles. If the
page didn't yield it, the field stays
null. - Respect the 1 s delay between browse requests (handled by
kr-naver-browse). - Cap keyword-only candidates at
--max-candidates(default 10). Anchored candidates (nickname / roundup) are uncapped — they are rare and the whole point of Phase 3 was fixing recall. - Never scrape personal info — only public post metadata.
- Keep the output deterministic given the same inputs: rank by
(anchored desc, dedicatedPostCount desc, relevantPostCount desc, inBlogPaginationPages desc, latestPostDate desc, blogId asc). - Fail loud if
browse-naver.jscannot be required or the browse binary is missing. Do not fall back to a non-Naver source.
Scripts
discover-bloggers.js
node skills/kr-naver-blogger/scripts/discover-bloggers.js \
--company "엘앤에프" --ticker 066970 \
--output .tmp/naver-blog-cache/bloggers/066970/2026-04-13.jsonOptional flags: --min-posts N, --cache-dir path, --no-cache, --verbose,
--queries-file PATH, --dart-file PATH, --context-file PATH,
--no-auto-queries, --no-quality-filter.
build-query-set.js
Build a dynamic query set independently (useful for inspection/debugging):
node skills/kr-naver-blogger/scripts/build-query-set.js \
--company "엘앤에프" --ticker 066970 --output /tmp/queries.json --verboseOptional flags: --dart-file PATH, --context-file PATH, --max-queries N.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

