One command. Instant verdict: LEARN ยท SKIP ยท CONSIDER ALTERNATIVES.
pip install skillens
skillens "https://www.coursera.org/learn/machine-learning"English ยท ไธญๆ
You find a course. It looks promising. 40 hours later:
- ๐ฐ๏ธ Content is 3 years outdated, pre-transformer era
- ๐ The framework it teaches is getting automated away
- ๐ The same material exists in a 2-hour YouTube video
- ๐ฏ It doesn't match where your career is actually heading
"The hardest part of learning isn't learning โ it's deciding what to learn."
SkiLens answers "should I learn this?" before you commit. Paste a URL. Get a verdict in 3 seconds. Optionally find better alternatives.
$ skillens "https://www.coursera.org/learn/machine-learning"โญโโโโโโโโโโโโโโโโโโโโโโโโ ๐ SkiLens โโโโโโโโโโโโโโโโโโโโโโโโโโฎ
โ โ
โ Machine Learning โ Stanford (coursera) โ
โ by Andrew Ng ยท Updated: 2024-03 ยท 60h โ
โ โ
โ Market Demand โโโโโโโโโโ 78 โ growing โ
โ Skill Half-life โโโโโโโโโโ ~10y โฆ evergreen โ
โ Info Density โโโโโโโโโโ 62 โ moderate โ
โ Freshness โโโโโโโโโโ 48 โ aging โ
โ Effort vs Return โโโโโโโโโโ 71 โ solid โ
โ โ
โ Overall โโโโโโโโโโ 68 โ
โ โ
โ โก Verdict: LEARN (with caveats) โ
โ โ Foundational ML is timeless, but content predates โ
โ the transformer era โ
โ โ
โ โ
Strengths โ
โ ยท Exceptional pedagogy from Andrew Ng โ
โ ยท Covers math foundations thoroughly โ
โ โ
โ โ ๏ธ Concerns โ
โ ยท No coverage of LLMs / transformers โ
โ ยท TensorFlow 1.x examples are outdated โ
โ โ
โ ๐ก Better Alternatives Found โ
โ โ
โ 1. Deep RL Course (Hugging Face) 82 +14 โ โ
โ โโ Fresher (2025), hands-on code โ
โ โโ youtube.com/... โ
โ โ
โ 2. Spinning Up in Deep RL (OpenAI) 79 +11 โ โ
โ โโ Excellent info density, free โ
โ โโ github.com/openai/spinningup โ
โ โ
โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ
Zero config. No API key needed. The killer feature โ discovering better alternatives โ works out of the box.
# 1. install
pip install skillens
# 2. point it at anything
skillens "https://..."
# 3. there is no step 3SkiLens auto-detects the platform and extracts the right metadata. No flags, no setup.
| Dimension | What it measures | How |
|---|---|---|
| Market Demand | Is this skill actually in demand? | Bundled skill-demand dataset + popularity proxies |
| Skill Half-life | How long until this knowledge is stale? | Topic classification (foundational / established / fast-moving) |
| Info Density | How much signal per hour invested? | Syllabus analysis, unique-topic ratio |
| Freshness | Is the content up-to-date? | Published / last-updated dates, deprecation detection |
| Effort vs Return | Is the time investment justified? | Duration ร demand cross-reference |
| Profile Match (optional) | How well does it fit your background? | Token-overlap scoring against your skills / target role |
Scores are combined into a single 0โ100 overall, mapped to one of three verdicts: LEARN, SKIP, CONSIDER ALTERNATIVES.
# URLs โ platform auto-detected
skillens "https://www.coursera.org/learn/machine-learning"
skillens "https://youtube.com/watch?v=..."
skillens "https://github.com/openai/gym"
skillens "https://arxiv.org/abs/2301.00001"
skillens "https://any-blog-or-tutorial.com/..."
# Skill / topic โ market analysis via web search
skillens topic "reinforcement learning"
skillens topic "rust programming"
# Side-by-side comparison
skillens "https://courseA" --compare "https://courseB"
# JSON output for scripting
skillens "https://..." --json | jq .verdict| Platform | Status | What's extracted |
|---|---|---|
| ๐ Coursera | โ | Syllabus, rating, enrollment, instructor, institution (via JSON-LD) |
| ๐บ YouTube | โ | Title, views, duration, description, tags (via yt-dlp) |
| ๐ป GitHub | โ | Stars, activity, topics, README, language |
| ๐ arXiv | โ | Abstract, authors, categories, dates |
| ๐ Generic webpage | โ | Open Graph / JSON-LD / meta fallback |
| ๐จ Plugins | โ | Third-party providers via entry points โ see below |
Quick mode (default) needs zero config. For nuanced analysis, plug in any LLM:
# OpenAI (default)
skillens config set llm openai
skillens config set api-key sk-...
skillens "https://..." --deep
# Anthropic Claude
skillens config set llm anthropic
skillens config set api-key sk-ant-...
# Local Ollama (100% private, $0)
skillens config set llm ollama
skillens config set model llama3.2All three backends use structured outputs (OpenAI tool-calling, Anthropic tool_use, Ollama JSON schema) โ the LLM can't go off-rails and the scores always validate against a Pydantic schema.
Deep mode falls back to quick-mode scoring automatically if the LLM call fails, so --deep is always safe to enable.
Tell SkiLens who you are once, and every evaluation gets a personal-fit score:
skillens profile set --skills "python,pytorch,rl,robotics" \
--role "ML engineer" \
--years 5Market Demand โโโโโโโโโโ 78
Freshness โโโโโโโโโโ 48
Profile Match โโโโโโโโโโ 85 โ new: strong alignment with your stack
The matcher lives at skillens/profile/matcher.py โ it's pure Python, no LLM needed. Sweet spot is 10โ15% token overlap (new but not redundant); heavy overlap gets penalized as "you already know this".
Add a provider for any platform without forking SkiLens. Third-party packages register via entry points:
# your-package/pyproject.toml
[project.entry-points."skillens.providers"]
udemy = "my_package.udemy:UdemyProvider"# my_package/udemy.py
from skillens.providers.base import BaseProvider
from skillens.core.models import ResourceMeta, SourceType
class UdemyProvider(BaseProvider):
@property
def name(self) -> str:
return "udemy"
@staticmethod
def can_handle(url: str) -> bool:
return "udemy.com/course/" in url
async def extract(self, url: str) -> ResourceMeta:
# fetch, parse, return ResourceMeta(...)
...pip install the package โ SkiLens auto-discovers it at runtime. Broken plugins fail silently with a stderr warning; they can't crash the CLI.
Use SkiLens as a tool inside Claude Desktop, Cursor, or any MCP client:
pip install "skillens[mcp]"
skillens mcp # speaks stdio by defaultThree tools are exposed: evaluate_url(url), analyze_topic(skill), get_profile(). Drop this into your Claude Desktop config:
{
"mcpServers": {
"skillens": { "command": "skillens", "args": ["mcp"] }
}
}Now your agent can ask "is this course worth it?" mid-conversation and get a structured verdict back.
skillens "https://bilibili.com/video/BV1..." --lang zhโ ๅธๅบ้ๆฑ โโโโโโโโโโ 78 โ
โ ๆ่ฝๅ่กฐๆ โโโโโโโโโโ ~10y โ
โ ไฟกๆฏๅฏๅบฆ โโโโโโโโโโ 62 โ
โ โ
โ โก ็ป่ฎบ: ๅผๅพๅญฆ โ
Currently en and zh. Auto-detects Chinese from .bilibili.com / .zhihu.com / .cn URLs when --lang auto is set.
skillens/
โโโ cli.py Typer CLI with bare-URL injection
โโโ core/
โ โโโ evaluator.py Pipeline orchestrator
โ โโโ scorer.py Rule-based + LLM scoring engine
โ โโโ dataset.py Bundled skill-demand dataset
โ โโโ config.py ~/.skillens/config.toml
โ โโโ models.py Pydantic data models
โโโ providers/ Coursera ยท YouTube ยท GitHub ยท arXiv ยท Webpage + plugins
โโโ llm/ OpenAI ยท Anthropic ยท Ollama backends + factory
โโโ discovery/ โ
Alternative-resource discovery via DDG
โโโ market/ Skill/topic trend analysis
โโโ profile/ Profile storage + token-overlap matcher
โโโ display/ Rich panels ยท JSON ยท compare table ยท i18n
โโโ mcp_server.py FastMCP server exposing evaluate_url / analyze_topic
โโโ data/
โโโ skill_demand.json 2026.04 curated keyword โ demand map
pip install skillens # base โ zero config, works immediately
pip install "skillens[youtube]" # adds yt-dlp for rich YouTube metadata
pip install "skillens[llm]" # adds openai + anthropic
pip install "skillens[discover]" # adds DuckDuckGo search for alternatives
pip install "skillens[mcp]" # adds MCP server support
pip install "skillens[pdf]" # adds PyMuPDF for local PDFs
pip install "skillens[all]" # everythinggit clone https://github.com/YixiaJack/skillens
cd skillens
python -m venv .venv && . .venv/Scripts/activate # Windows
pip install -e ".[dev]"
pytest # 67 tests, ~0.4sPass rate: 67 / 67 โ
(1 MCP test skips when the optional mcp extra isn't installed, as designed).
The easiest contribution is a new provider. The Plugin ecosystem section shows the full template โ you don't even need to fork SkiLens, just ship your own package with the right entry point.
Other welcome contributions:
- New language packs in
display/i18n.py - Skill-demand dataset updates in
data/skill_demand.json - New LLM backends in
llm/
See CONTRIBUTING.md for full details.
- Core CLI + rule-based scoring engine
- YouTube ยท Coursera ยท GitHub ยท arXiv ยท Webpage providers
- Rich terminal output with score bars
- JSON output mode
- Alternative-resource discovery (the โ killer feature)
- OpenAI / Anthropic / Ollama deep mode
- Profile management + personal match scoring
-
--compareside-by-side mode - Bundled skill-demand dataset
- MCP server mode
- Chinese output (
--lang zh) - Provider plugin system via entry points
- VS Code extension wrapper
- Browser extension (evaluate as you browse)
- Obsidian plugin integration
- Auto-updating dataset via scheduled GitHub Action
In a world with infinite content, curation is the bottleneck.
SkiLens shifts evaluation from "after 40 hours" to "before the first hour."
Three invariants the project will never break:
- 5-second first result. Rule-based scoring always beats the LLM to the punch.
- Zero config for basic use.
pip install && skillens URLmust just work. - The terminal is the product. No web dashboard. No SaaS. Forever.
MIT โ do whatever you want with it.
If SkiLens saved you from a bad course, give it a โญ
Built with ๐ฅ by @YixiaJack