Skip to main content

AI-powered CLI tool that evaluates whether a learning resource is worth your time

Project description

๐Ÿ” SkiLens

Is this worth learning? Ask before you invest 40 hours.

One command. Instant verdict: LEARN ยท SKIP ยท CONSIDER ALTERNATIVES.

PyPI Python License Tests Stars

pip install skillens
skillens "https://www.coursera.org/learn/machine-learning"

๐Ÿ˜ค The problem

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.


โšก 30-second demo

$ 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.


๐Ÿš€ Quick start

# 1. install
pip install skillens

# 2. point it at anything
skillens "https://..."

# 3. there is no step 3

SkiLens auto-detects the platform and extracts the right metadata. No flags, no setup.


๐ŸŽฏ What gets evaluated

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.


๐ŸŒ Works on everything

# 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

Supported platforms

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

๐Ÿง  Deep mode (optional LLM)

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.2

All 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.


๐Ÿ‘ค Personalize

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 5
Market 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".


๐Ÿ”Œ Plugin ecosystem

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.


๐Ÿค– MCP server mode

Use SkiLens as a tool inside Claude Desktop, Cursor, or any MCP client:

pip install "skillens[mcp]"
skillens mcp   # speaks stdio by default

Three 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.


๐ŸŒ ไธญๆ–‡ / i18n

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.


๐Ÿ› ๏ธ Architecture

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

๐Ÿ“ฆ Install options

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]"             # everything

๐Ÿงช Development

git clone https://github.com/YixiaJack/skillens
cd skillens
python -m venv .venv && . .venv/Scripts/activate   # Windows
pip install -e ".[dev]"
pytest                                               # 67 tests, ~0.4s

Pass rate: 67 / 67 โœ… (1 MCP test skips when the optional mcp extra isn't installed, as designed).


๐Ÿค Contributing

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:

See CONTRIBUTING.md for full details.


๐Ÿ—บ๏ธ Roadmap

  • 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
  • --compare side-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

๐Ÿงญ Philosophy

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:

  1. 5-second first result. Rule-based scoring always beats the LLM to the punch.
  2. Zero config for basic use. pip install && skillens URL must just work.
  3. The terminal is the product. No web dashboard. No SaaS. Forever.

๐Ÿ“„ License

MIT โ€” do whatever you want with it.


If SkiLens saved you from a bad course, give it a โญ

Built with ๐Ÿ”ฅ by @YixiaJack

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

skillens-0.1.0.tar.gz (48.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

skillens-0.1.0-py3-none-any.whl (48.4 kB view details)

Uploaded Python 3

File details

Details for the file skillens-0.1.0.tar.gz.

File metadata

  • Download URL: skillens-0.1.0.tar.gz
  • Upload date:
  • Size: 48.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.5

File hashes

Hashes for skillens-0.1.0.tar.gz
Algorithm Hash digest
SHA256 bc8a4c0251c99edbea4cc17324e5d4c45c50747840204855d62c1b072c6e7a4f
MD5 b0e388a6a27f9a4d6339aaaf31b0d7c9
BLAKE2b-256 5de003312cf50fbde542524703759610d4381bb4964325567363ade1cbd7aa28

See more details on using hashes here.

File details

Details for the file skillens-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: skillens-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 48.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.5

File hashes

Hashes for skillens-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 a9d46ac9d47701748d27eadb7e02fcaba019616fd51c9ed666210933fbbd5327
MD5 27a063ea33f911d045e1fb9a4e953599
BLAKE2b-256 5935cc96d89a13575b8574f750da8c4db9e6031d5070b840525a4a0e1317c105

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page