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"

English ยท ไธญๆ–‡

SkiLens evaluating a Coursera ML course in PowerShell

๐Ÿ˜ค 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.2.0.tar.gz (150.1 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.2.0-py3-none-any.whl (55.7 kB view details)

Uploaded Python 3

File details

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

File metadata

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

File hashes

Hashes for skillens-0.2.0.tar.gz
Algorithm Hash digest
SHA256 d508358d7d07e6861177099a67a9f492d4f29bcca00aa4e7b3e0176dc2e25228
MD5 77a8394197f3bd44bfc0bc6c43b04a20
BLAKE2b-256 89b46fde4d0d942308b6e38e09e12204ac9853ecbd03d41ef934c507ae21d8de

See more details on using hashes here.

File details

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

File metadata

  • Download URL: skillens-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 55.7 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.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 0332a1786b5e7735cd33db08eaf7fcf8d7acad2456fff6bcc27e74a1761a5fcd
MD5 4ff9ccde0f0478f88024e99eab2bfd16
BLAKE2b-256 fbbe30bb25afc51513b584d3115fad9b51adb8b6de2bfcd54a920551a52ca26f

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