kr-analyst-report-discover
Skill2 starsChanged 8 days agoMITView on GitHub
Discover recent sell-side analyst reports for a KRX-listed company from Hankyung Consensus (primary) and Naver Pay Research (fallback). Default lookback is 365 days. Returns a dated JSON index with broker, analyst, date, title, rating, target price, landing URL, and direct PDF URL per report. Reports behind login walls are kept in the index with `requiresAuth: true` and skipped by downstream `kr-analyst-report-fetch`. Requires `kr-web-browse` (which in turn reuses `kr-naver-browse`'s gstack binary). Do not use for generic news articles, IR decks, or non-Korean broker reports.
In this repository42 other files it gives its agents.
- AGENTS.mdAGENTS.md
- CLAUDE.mdCLAUDE.md
- 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-bloggerSkill
- 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
9 rules. About 0 are common, 5 are distinctive, and 4 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈5
Distinctive · estimate
This author's own choices. Worth a look.
4
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 25
Before writing a full memo or pre-earnings note where sell-side framing is relevant.
- Very specific: line 27
Before a post-earnings note where consensus-vs-print matters.
- Distinctive: line 29
Do not use this skill to:
- Very specific: line 65
When --source both, run both and dedupe by (broker, publishedDate, title).
- Distinctive: line 74
Read references/workflow.md for source-specific URL shapes and row-parsing rules.
- Distinctive: line 76
Read references/output-format.md for the JSON schema.
- Very specific: line 81
Never invent a target price, rating, or analyst name: If the row didn't yield it, the field is null.
- Distinctive: line 98
Fail loud: if neither source returns any rows and no cache exists.
- Distinctive: line 99
Do not silently produce an empty index.
≈ “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 Analyst Report Discovery
Find sell-side broker reports for a given KRX ticker, extract structured
metadata per report (broker, analyst, date, rating, target price, PDF URL),
and write a dated JSON file for downstream kr-analyst-report-fetch to
consume.
When To Use
- User asks about street consensus / target prices / broker coverage for a KRX stock (증권사 리포트, 컨센서스, 애널리스트 TP).
- Before writing a
full memoorpre-earnings notewhere sell-side framing is relevant. - Before a
post-earnings notewhere consensus-vs-print matters.
Do not use this skill to:
- Fetch generic financial news or company IR decks.
- Discover non-Korean broker coverage.
- Produce a thesis — that belongs downstream in
kr-stock-analysis.
Source Policy
- Hankyung Consensus (
consensus.hankyung.com) is the primary source. Richer metadata (analyst name, target-price deltas, broker list) and the direct PDF links are usually unauthenticated. - Naver Pay Research (
finance.naver.com/research/company_list.naver) is the fallback when Hankyung returns an empty list or fails. - Login-gated reports stay in the index with
pdfUrl: null,requiresAuth: true, and are counted but not downloaded downstream.
Workflow
- Parse inputs. Require
--companyand--ticker. Default--lookback-days 365,--source hankyung(other values:naver,both),--max-reports 0(unlimited). - Check cache. If
.tmp/analyst-report-cache/index/<ticker>/<YYYY-MM-DD>.jsonexists for today, prefer it unless--no-cache. - Compute window.
endDate = today,startDate = today - lookbackDays. - Scrape primary source via
lib/hankyung.js:- Build list URL with the date window and ticker/company as filters.
- Paginate by
now_page=1..Nuntil no new rows appear or the earliest row crossesstartDate. - Parse each row into
{reportId, broker, analyst, publishedDate, title, rating, targetPrice, currency, pdfUrl, landingUrl}. - Probe PDF URLs with a HEAD-like
downloadFiletrial (or a cheapbrowseText) to detect login walls; setrequiresAuth: truewhere appropriate.
- Fallback to Naver Pay Research via
lib/naver-research.jsif the primary returned zero usable rows OR the caller passed--source naver. When--source both, run both and dedupe by(broker, publishedDate, title). - Deduplicate by
(broker, publishedDate, title). When two sources disagree on target price, prefer Hankyung (closer to the original filing). - Filter by window. Drop any row older than
startDate. - Sort by
publishedDatedescending, then by broker ascending. - Write a dated JSON file to the
--outputpath.
Read references/workflow.md for source-specific URL shapes and row-parsing rules. Read references/output-format.md for the JSON schema.
Operating Rules
- Never invent a target price, rating, or analyst name. If the row
didn't yield it, the field is
null. - Currencies: assume
KRWfor KOSPI/KOSDAQ tickers. If the row explicitly showsUSD, setcurrency: "USD"and keep the numeric TP as-is. - Target prices are normalized to integer KRW when the source uses 원 units. Strip commas and currency symbols before parsing.
- Rating normalization: map Korean ratings to canonical English
tokens:
매수/BUY → BUY,시장수익률/Market Perform → HOLD,비중확대/OVERWEIGHT → BUY,중립/Neutral → HOLD,매도/SELL → SELL. Preserve the original string underratingRaw. - Respect a 1-second inter-request delay (enforced by
kr-web-browse). - Never scrape analyst emails, phone numbers, or affiliated-firm internal IDs — just the public metadata.
- Keep the output deterministic: same inputs, same list. Rank by
(publishedDate desc, broker asc, reportId asc). - Fail loud if neither source returns any rows and no cache exists. Do not silently produce an empty index.
Scripts
discover-reports.js
node skills/kr-analyst-report-discover/scripts/discover-reports.js \
--company "엘앤에프" --ticker 066970 \
--lookback-days 365 \
--output .tmp/analyst-report-cache/index/066970/2026-04-18.jsonOptional flags: --source hankyung|naver|both (default hankyung),
--max-reports N (default 0 = unlimited), --cache-dir PATH, --no-cache,
--verbose, --no-probe-auth (skip the per-PDF auth probe for speed).
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.

