# Learn

> Tworzy gamifikowane plany nauki z filmów YouTube przez NotebookLM — questy z achievementami, checkboxami i feedback loop (quiz + Feynman). Używaj gdy ktoś chce się nauczyć tematu z YouTube, potrzebuje planu nauki, kursu z filmów, questów do nauki, NotebookLM. Triggers: 'naucz mnie', 'chcę się nauczyć', 'plan nauki', 'learn', 'YouTube kurs', 'quest do nauki', 'learn from YouTube', 'kurs z filmów'.

- **Type:** Skill
- **Install:** `agentstack add skill-szewowsky-learn-skill-learn`
- **Verified:** Yes — security-reviewed for prompt injection and unsafe behavior
- **Seller:** [Szewowsky](https://agentstack.voostack.com/s/szewowsky)
- **Installs:** 0
- **Category:** [Content & Media](https://agentstack.voostack.com/c/content-and-media)
- **Latest version:** 0.1.0
- **License:** MIT
- **Upstream author:** [Szewowsky](https://github.com/Szewowsky)
- **Source:** https://github.com/Szewowsky/learn-skill/tree/main/learn

## Install

```sh
agentstack add skill-szewowsky-learn-skill-learn
```

Requires the [AgentStack CLI](https://agentstack.voostack.com/docs/cli). Works with Claude Code, Cursor, and any MCP-compatible agent.

## About

# Skill: Learn — YouTube → NotebookLM → Plan nauki → Questy

## Dlaczego ten skill istnieje

Nauka z YouTube to chaos — 50 filmów, zero struktury, nie wiadomo od czego zacząć. Ten skill zamienia ten chaos w grę: szuka filmów, wrzuca do NotebookLM, generuje plan nauki, a potem rozbija go na questy z achievementami i checkboxami. Na końcu feedback loop sprawdza czy faktycznie rozumiesz temat (quiz + Feynman probe), nie tylko czy obejrzałeś filmik.

## Wymagania

- `yt-dlp` — szukanie filmów na YouTube (`brew install yt-dlp`)
- `notebooklm` CLI — interakcja z Google NotebookLM (`pipx install "notebooklm-py[browser]"`)
- Jednorazowa autoryzacja: `notebooklm login` (otwiera przeglądarkę → Google login)
- Sprawdzenie auth: `notebooklm auth check`

## Flow

### Krok 0: Konfiguracja output

Sprawdź zmienną środowiskową `LEARN_OUTPUT_DIR`. Jeśli ustawiona — użyj jej jako katalogu wyjściowego.
Fallback: `./learn-output/` w katalogu projektu.

Utwórz katalog jeśli nie istnieje.

### Krok 1: Szukaj filmów na YouTube

Uruchom skrypt bundlowany w skillu:

```bash
python3 scripts/youtube_search.py --topic "[TEMAT]" --max-results 10
```

Skrypt filtruje po: min 1000 views, min 5 min, sortuje po popularności.

**WAŻNE:** Bash output może być zwinięty w UI — user go nie widzi!
Przepisz wyniki jako sformatowaną tabelę markdown w odpowiedzi do usera.
Kolumny: #, Tytuł, Views, Czas, Kanał.
Zapytaj które filmy dodać — np. "1,2,5" lub "all".

### Krok 2: Nowy notebook czy istniejący?

Zapytaj:
- **Nowy** — stwórz notebook o nazwie tematu
- **Istniejący** — pokaż listę

Dla nowego:
```bash
notebooklm create "[TEMAT]"
```
Zwraca notebook_id. Ustaw jako aktywny:
```bash
notebooklm use [NOTEBOOK_ID]
```

Dla istniejącego:
```bash
notebooklm list
notebooklm use [NOTEBOOK_ID]
```

### Krok 3: Dodaj filmy jako źródła

Dodawaj po jednym z 3-sekundowym delay (rate limiting Google):
```bash
notebooklm source add "https://youtube.com/watch?v=VIDEO_ID_1"
sleep 3
notebooklm source add "https://youtube.com/watch?v=VIDEO_ID_2"
```

Po dodaniu — poczekaj na przetworzenie (zbieraj source_id z outputu):
```bash
notebooklm source wait [SOURCE_ID] --timeout 120
```

Informuj o postępie (X/Y dodane, przetwarzanie...).

### Krok 4: Odpytanie promptem do nauki

Zaproponuj prompty z `references/learning-prompts.md` (przeczytaj plik w tym momencie):

1. Plan nauki krok po kroku
2. **Plan nauki na X dni** — zapytaj ile dni (domyślnie 7 lub 14)
3. Trend Extraction
4. FAQ — 15 pytań z odpowiedziami
5. Syntetyzator wielu filmów
6. Contrarian Finder
7. Pomiń (porozmawiam sam później)

**Dla opcji 2:** Zapytaj o liczbę dni. Wczytaj prompt #2 i zamień `{DAYS}` na wybraną liczbę.

Po wyborze:
```bash
notebooklm ask "[WYBRANY PROMPT]"
```

### Krok 5: Quest Generation (opcjonalny)

Po wyświetleniu planu nauki, zapytaj:

> Chcesz wygenerować quest chain? Questy z achievementami, checkboxami i estymacją czasu — jak w grze.

Jeśli tak:

#### 5a. Przeczytaj szablon

Przeczytaj `references/quest-template.md` — pełny format questów, zasady achievementów i mapowanie plan → questy.

#### 5b. Wygeneruj quest chain

Weź plan nauki z NotebookLM (output z Kroku 4) i transformuj w questy:

- Każdy major topic / faza / dzień = osobny Quest
- Prerequisites → wpleć w Quest 1
- Quick wins → wcześniejsze questy (1-2)
- Deep dives → ostatnie questy
- Checkboxy `- [ ]` do trackowania progresu
- Achievementy: kreatywne, tematyczne, po polsku
- "Sukces wygląda tak:" = weryfikowalne kryterium
- Estymacje: realistyczne (oglądanie = 1.3x film, zadanie = 10-20 min)
- Tabela podsumowująca na końcu

#### 5c. Zapisz do pliku

Ustal slug tematu (lowercase, polskie znaki → ASCII: ą→a, ć→c, ę→e, ł→l, ń→n, ó→o, ś→s, ź→z, ż→z, spacje → `-`, max 50 znaków).

Nazwa pliku: `YYYY-MM-DD_[slug].md`
Katalog: output dir z Kroku 0.

Jeśli plik istnieje → dodaj suffix `-v2`, `-v3` etc.

YAML front matter:
```yaml
---
type: quest-chain
topic: "[TEMAT]"
slug: "[slug]"
created: YYYY-MM-DD
notebook_id: "[notebook_id z Kroku 2]"
version: 1
quests: [liczba questów]
source: learn-skill
---
```

Pokaż ścieżkę do pliku.

### Krok 6: Feedback Loop Setup (po quest generation)

**Warunek:** Tylko jeśli quest chain powstał w Kroku 5.

#### 6a. Wygeneruj pytania per quest

Dla KAŻDEGO questa użyj NotebookLM:

```bash
notebooklm ask "[QUIZ_GENERATOR_PROMPT z references/learning-prompts.md — podmień QUEST_TOPIC]"
```

Powtórz dla Feynman probe (prompt #8 z learning-prompts.md).

Jeśli NotebookLM nie odpowie → wygeneruj pytania sam (Claude) na podstawie materiału questa.

#### 6b. Wygeneruj feedback-loop.md

Przeczytaj `references/feedback-loop-template.md`. Wypełnij szablon:
- Quest rows: Quest 1 = `pending`, reszta = `-`
- Pre-generowane pytania quiz + feynman per quest
- Notebook ID zachowany

#### 6c. Zapisz obok quest chain

Nazwa pliku: `YYYY-MM-DD_[slug]_feedback-loop.md`
Katalog: ten sam co quest chain (output dir).

YAML front matter:
```yaml
---
type: feedback-loop
topic: "[TEMAT]"
slug: "[slug]"
created: YYYY-MM-DD
notebook_id: "[notebook_id]"
quest_file: "[nazwa pliku quest chain]"
version: 1
status: active
source: learn-skill
---
```

#### 6d. Podsumowanie

```
Feedback loop wygenerowany:
- Plik: [ścieżka]
- Questów: X (z pre-generowanymi pytaniami)
- Pierwszy do review: Quest 1 — [nazwa]
- Komenda: /learn-review [slug]
```

## Failure Handling

| Sytuacja | Co robić |
|----------|----------|
| yt-dlp: 0 wyników | Zaproponuj szerszy temat lub angielskie keywords |
| yt-dlp: timeout | Retry raz, potem poinformuj |
| NotebookLM: auth expired | `notebooklm auth check` → `notebooklm login` |
| NotebookLM: source add fail | Pomiń film, kontynuuj z resztą, poinformuj |
| NotebookLM: query fail | Retry raz, potem fallback — wygeneruj plan sam (Claude) |
| Partial success | Zapisz co masz, powiedz co brakuje |
| Plik już istnieje | Suffix `-v2` lub zapytaj |
| notebooklm not found | Instrukcja: `pipx install "notebooklm-py[browser]"` |
| yt-dlp not found | Instrukcja: `brew install yt-dlp` |

## Debugowanie

```bash
notebooklm auth check          # Sprawdź auth
notebooklm login               # Ponowna autoryzacja
notebooklm -vv ask "test"      # Verbose mode
```

## Ograniczenia

- Przetwarzanie YouTube w NotebookLM: 30-90s per film
- Max 50 źródeł per notebook (NotebookLM Free)
- Auth Google wygasa co kilka dni/tygodni — `notebooklm login`
- notebooklm-py korzysta z undocumented Google RPC API (3k+ stars, aktywny maintenance, ale może się zmienić)
- yt-dlp search zwraca wyniki bez rankingu jakości — filtrujemy po views/duration
- Delay 3s między `source add` — Google rate limiting

## Source & license

This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.

- **Author:** [Szewowsky](https://github.com/Szewowsky)
- **Source:** [Szewowsky/learn-skill](https://github.com/Szewowsky/learn-skill)
- **License:** MIT

Install and usage instructions live in the source repository linked above.

## Pricing

- **Free** — Free

## Security capabilities

Automated source analysis of v0.1.0 — what this tool can access:

- **Network access:** no
- **Filesystem access:** no
- **Shell / process execution:** no
- **Environment & secrets:** no
- **Dynamic code execution:** no

*"Yes" means the capability is present in the source — more access means more to trust, not that it is unsafe.*


## Versions

- **0.1.0** — security scan: passed — Imported from the upstream source.

## Links

- Listing page: https://agentstack.voostack.com/l/skill-szewowsky-learn-skill-learn
- Seller: https://agentstack.voostack.com/s/szewowsky
- Browse the marketplace: https://agentstack.voostack.com/browse

---
Listed on AgentStack — the marketplace for AI agent skills and MCP servers. Every listing is security-reviewed. Creators keep 70%.
