CtrlK
BlogDocsLog inGet started
Tessl Logo
SkillPublic

finnhub-api

FinnHub financial data API integration for stocks, forex, crypto, news, and fundamentals. Use when fetching real-time quotes, company profiles, financial statements, insider trading, earnings calendars, or market news.

Quality

75%

Does it follow best practices?

Run evals on this skill

Adds up to 20 points to the overall score

View guide
SecuritybySnyk

Low

Low-risk findings worth noting

Fix and improve this skill with Tessl

tessl review fix ./.claude/skills/finnhub-api/SKILL.md

The canonical home for this skill is finnhub-api in fernandezbaptiste/Skrillz

SKILL.md
Quality
Evals
Security

Quality

Content

52%Weight 40%Scale 1-5

Reviews the quality of instructions and guidance provided to agents. Good implementation is clear, handles edge cases, and produces reliable results.

The body is highly actionable with executable examples for all common tasks, but it functions as a monolithic API document: it duplicates the existing references/ENDPOINTS.md endpoint data inline and entirely ignores both bundle files, leaving the reference file and the production-ready client script undiscoverable from SKILL.md. Restructuring around the existing bundle would fix both the conciseness and progressive-disclosure weaknesses.

Suggestions

Replace the four inline 'API Endpoints Reference' tables and the duplicated Rate Limits / Free vs Premium sections with short pointers to references/ENDPOINTS.md (e.g., 'Full endpoint reference: See [ENDPOINTS.md](references/ENDPOINTS.md)'), keeping only a handful of key endpoints in Quick Start.

Add a 'Production client' section pointing to scripts/finnhub_client.py (FinnHubClient with built-in rate limiting and error handling) instead of re-implementing rate limiting and error handling inline, and reference it from Quick Start.

Note the `pip install websocket-client` dependency in the Installation section, and bound the 429 retry in the error-handling example (e.g., max 2 retries with exponential backoff) instead of unbounded recursion.

DimensionReasoningScore

Conciseness

Roughly 90 of ~355 lines are padded: the four endpoint reference tables, the Rate Limits section, and the Free vs Premium list all duplicate content that already exists in references/ENDPOINTS.md (endpoint tables, rate limits, premium endpoints). This is 'noticeably verbose; several padded sections' (anchor 2); it is not anchor 3 because the duplication is not a marginal tightening issue but wholesale redundant sections, while the code examples themselves are lean.

2 / 5

Actionability

Code is concrete and executable throughout (get_quote, get_candles, get_earnings_calendar, get_company_news, get_financials, WebSocket subscribe, safe_api_call), covering the common cases — close to anchor 5. Minor gaps keep it at anchor 4: the WebSocket example requires the unstated `websocket-client` dependency (Installation only covers finnhub-python and npm finnhub), and the error handler's 429 path recurses without a retry cap or an `import time` visible in that snippet.

4 / 5

Workflow Clarity

The usage flow is coherent and well-ordered (Authentication → Basic Usage/SDK → Common Tasks → Error Handling) and includes a retry-on-429 feedback loop, so the single action path is unambiguous. It sits at anchor 4 rather than 5 because there is no explicit sequenced guidance (e.g., 'use safe_api_call for all requests') tying the pieces into one stated workflow; there are no destructive or batch operations that would impose a cap.

4 / 5

Progressive Disclosure

The bundle contains references/ENDPOINTS.md and scripts/finnhub_client.py, but neither is mentioned anywhere in the body — the References section lists only external URLs, and the endpoint data plus rate-limiting/error-handling logic are re-implemented inline instead of pointing to the existing files. This matches anchor 2 (content that clearly belongs in separate files is inlined; references undiscoverable/buried) despite the body's good internal section headers, which is what keeps it above anchor 1.

2 / 5

Total

12

/

20

Passed

Description

87%Weight 40%Scale 1-5

Based on the skill's description, can an agent find and select it at the right time? Clear, specific descriptions lead to better discovery.

A strong description: concrete, third-person, with an explicit 'Use when' clause enumerating natural trigger phrases and a clearly named niche. Only minor improvements possible — adding a few more synonyms (stock prices, tickers) and varying the action verbs beyond fetching.

DimensionReasoningScore

Specificity

The description lists several specific data items ("real-time quotes, company profiles, financial statements, insider trading, earnings calendars, or market news") across named markets ("stocks, forex, crypto, news, and fundamentals"), but the action itself is a single uniform verb ("integration" / "fetching"). It matches anchor 4 (several specific actions with minor gaps) rather than 5, which expects multiple distinct concrete actions; it is clearly above anchor 3, which expects only 1-2 concrete actions.

4 / 5

Completeness

Both questions are explicitly answered: the what ("FinnHub financial data API integration for stocks, forex, crypto, news, and fundamentals") and the when ("Use when fetching real-time quotes, company profiles, financial statements, insider trading, earnings calendars, or market news"). This mirrors the anchor-5 example structure of a concrete capability list followed by an explicit 'Use when' clause with concrete trigger phrases.

5 / 5

Trigger Term Quality

Natural phrases users would actually say are present ("real-time quotes", "company profiles", "insider trading", "earnings calendars", "market news", "financial statements"), giving good keyword coverage. Not 5 because common synonyms and variations are missing (e.g., "stock prices", "ticker", "symbol", "candlestick/OHLCV", "analyst ratings"); clearly above anchor 3's 'some relevant keywords but missing common variations'.

4 / 5

Distinctiveness Conflict Risk

The description names the specific vendor ("FinnHub") and a clear niche (financial data API for stocks/forex/crypto), so it would not trigger for unrelated skills. Even against similar market-data skills (twelvedata, alphavantage), the explicit vendor name gives it distinct triggers with minimal conflict risk, matching anchor 5.

5 / 5

Total

18

/

20

Passed

Validation

93%

Checks the skill against the spec for correct structure and formatting. All validation checks must pass before discovery and implementation can be scored.

Validation — 15 / 16 Passed

Validation for skill structure

CriteriaDescriptionResult

frontmatter_unknown_keys

Unknown frontmatter key(s) found; consider removing or moving to metadata

Warning

Total

15

/

16

Passed

Repository

fernandezbaptiste/Skrillz

Path

.claude/skills/finnhub-api/SKILL.md

Reviewed

Table of Contents

Is this your skill?

If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.