learn
/learn
Prowadzi naukę kursu na poziomie doktoranckim z materiałów w folderze: indeksuje wykłady i odpowiada z głębią dopasowaną do miejsca w programie.
- Autor
- hadong1502 ↗
- Repozytorium
- learning-skills ↗
- Licencja
- MIT
- Ostatnia zmiana repozytorium
- 31.10.2026
Ocena i bezpieczeństwo
- Pliki w paczce
- 5
- Skrypty
- 3
- Komentarze HTML
- 0
- Adresy URL w SKILL.md
- 0
Brak sygnałów. Repozytorium zmienione 31.10.2026, bez odwołań do wycofanych modeli i API.
MIT, otwarta: można używać i zmieniać, z zachowaniem informacji o autorze.
- 3 skrypty w paczce. Przejrzyj je przed instalacją, bo Claude może je uruchomić.
Skrypty: scripts/learn_hooks.py, scripts/learnctl.py, scripts/marker_convert.py
Co robi i kiedy
Prowadzi naukę kursu na poziomie doktoranckim z materiałów w folderze: indeksuje wykłady i odpowiada z głębią dopasowaną do miejsca w programie.
Wyzwalacze z opisu
Argumenty
/learn <question> | status | where L05 | sync | profile
Oryginalny opis (EN)
Tutor for learning a new course or concept in depth (PhD-level study), usually math-heavy, from the materials in the current folder (lecture slides, LaTeX notes, textbook/paper PDFs). The first call indexes the folder into .learn/ (Marker PDF→LaTeX-markdown, course order, a first-introduced concept index); later calls sync changed files, then answer at the depth the question's phrasing shows, scoped to where the learner is in the curriculum. Use for /learn, questions about course material ("in lecture 5, why…", "I don't get X"), "where am I in the course", or setting up a course folder for stu
Jak działa
- 0. Every invocation
- 1. First run: build the course index
- 2. Sync
- 3. Answering a question
- 4. Status
- 5. Profile (~/.claude/learning/profile.md)
Podgląd SKILL.md
---
name: learn
description: >-
Tutor for learning a new course or concept in depth (PhD-level study), usually
math-heavy, from the materials in the current folder (lecture slides, LaTeX
notes, textbook/paper PDFs). The first call indexes the folder into .learn/
(Marker PDF→LaTeX-markdown, course order, a first-introduced concept index);
later calls sync changed files, then answer at the depth the question's
phrasing shows, scoped to where the learner is in the curriculum. Use for
/learn, questions about course material ("in lecture 5, why…", "I don't get
X"), "where am I in the course", or setting up a course folder for study.
argument-hint: "<question> | status | where L05 | sync | profile"
---
# Learn
The goal is real understanding, not tips. The learner is a serious adult who
wants mechanisms and derivations. Their actual level comes from
`~/.claude/learning/profile.md` and from each question's phrasing, never from
assumption. Where the profile says rusty, refresh the tool before relying on it;
where it says strong, use it as a bridge. Course state lives in `<course>/.learn/`.
```bash
L="python -I $HOME/.claude/skills/learn/scripts/learnctl.py" # stdlib only, any python
```
**Every write to `.learn/*.json` goes through `$L`.** Never edit those files
by hand: the script validates the schema and keeps the history. `index.md` is
generated with `$L render`. `log.md` is written with `$L log`.
## 0. Every invocation
1. Run `$L status`.
- If it says there is no `.learn/`, go to **1. First run**.
- If it lists pending or removed sources, go to **2. Sync** first. Say in one line what changed.
2. Read `~/.claude/learning/profile.md`. If it is missing, run the short interview in **5. Profile** before anything else, then continue.
3. Read `.learn/index.md`. It is the map of the course; don't re-read whole sources.
4. Subcommands:
| Command | Action |
|---|---|
| `status` | Print status plus open misconceptions. |
| `where L05` | `$L position set L05`. |
| `sync` | Section 2. |
| `profile` | Show and edit the profile. |
| anything else | A question: section 3. |
## 1. First run: build the course index
1. **Find the files.** Run `$L init --title "<course name>"`, then `$L scan`.
- Show what was found, grouped by folder and type.
- Ask once which folders count as course material (for example, solutions in or out).
- Move any excluded folder outside the course folder, or start its name with a dot; the scanner skips dot-folders.
2. **Convert.** Run `$L convert --pending`.
- PDFs go through Marker 1.10 on the GPU with OCR on, so inline math also comes out as LaTeX. That costs about 7 s per page plus a few seconds of model load; a 300-page textbook takes about 35 min.
- With more than ~20 pages, run it in the background. Never cancel it partway.
- Speed over inline math, for long prose-heavy texts: set `LEARN_MARKER_FORCE_OCR=0`. That's about 2.5 s per page; display math stays LaTeX, but inline math becomes Unicode text.
- Figure-heavy slides are much slower (30–55 s per page; one 23-slide deck took 24 min).
- Batches are sized for an 8 GB GPU (`LEARN_MARKER_BATCH=16`). If a file makes no progress for many minutes, GPU memory is probably paging to system RAM: stop the run and lower the batch size. Interrupted batches resume.
- `.pptx` decks are exported to PDF through the installed PowerPoint and cached in `.learn/cache/`. `.ipynb` notebooks become markdown. `.tex`, `.md`, `.txt` and `.csv` files are copied as they are.
- **Then run `$L audit`.** Marker drops minus signs systematically. The audit compares each page's converted math with the PDF's own text layer and flags pages to distrust. `context` repeats those warnings next to the affected concepts.
- `.tex`, `.md` and `.txt` files are copied as they are.
- Output goes to `.learn/sources/…`; `$L` records each path in the manifest.
3. **Order the course.** Propose units in teaching order from the syllabus, the file names and numbers, the dates, and the content. A unit is usually one lecture or one chapter; it may own several sources (slides + notes).
- Show the order as a table and get one confirmation.
- Then run `$L unit add --id L01 --order 1 --title "…" --sources <rel paths>` for each unit.
4. **Extract concepts, unit by unit.** For each unit, read its converted source and write `.learn/tmp/<unit>.json`, then run `$L concept import .learn/tmp/<unit>.json`. Each entry:
```json
{"id": "jacobian", "name": "Jacobian at a fixed point", "kind": "definition",
"unit": "L02", "loc": "p.7", "uses": ["fixed-point"],
"notation": "$J = Df(x^*)$", "aliases": ["linearization matrix"],
"statement": "one line, in the course's notation"}
```
- The allowed `kind` values are listed in learnctl's `CONCEPT_KINDS`.
- **Only concepts the unit introduces** go in: definitions, theorems, methods, notation. Leave out concepts it merely uses. Those go in `uses` as ids of concepts from earlier units (`$L concept list --grep …`).
- Ids are short kebab-case and stable. `loc` is a page anchor (`p.7`) or a section.
- Prefer LaTeX structure where it exists (`\begin{definition}`, `\label`).
- A dozen or so concepts per lecture is typical. Precision beats coverage.
- **Slides and figure-heavy pages** keep much of their math in images. Render the thin pages with `$L page` and read them. When a deck's text is nearly empty, write a slide-by-slide math transcript to `.learn/sources/<source>/image_transcript.md` and point to it in the unit summary.
- **Non-lecture units:** give them `--kind pset|exam|project|reading|admin` and a summary, but no concepts. Mark live assignments `--status "active: …"`, and record the course AI policy with `$L course set --policy "…"`.
- **Check what each file actually contains against the syllabus.** A file name can promise topics the deck doesn't have. Add lectures that have no materials as units with an empty `--sources` and a summary saying so. Tell the learner, especially when an exam covers them.
5. **Large courses** (more than ~6 units or long textbooks): extract in parallel with subagents, one per unit or small batch.
- Give each agent the ids already known from earlier units, and follow the `subagent-reports` skill.
- Afterwards, do one merge pass: same concept under two ids → keep the earliest unit's id and move the other name into `aliases`.
6. **Finish.**
- Add a one-line summary per unit with `$L unit update --id L01 --summary "…"`.
- Run `$L render` and `$L log --kind ingest --text "…"`.
- Tell me what was built, and ask where I am in the course (`where`).
## 2. Sync
- Run `$L convert --pending`.
- For each new source, assign it to a unit:
- an existing unit (`unit update --sources …`, which **replaces** the list, so include the old ones), or
- a new unit at the right `--order`.
- Extract concepts for the new or changed material only, then run `$L render` and log.
- **Removed sources:** say so. Don't delete concepts silently; ask.
- **Generated files** (figure PDFs, build output) are not course material. Before converting, add glob patterns to `.learn/ignore`, e.g. `psets/*_figs/`. Ignored files are skipped and dropped from the manifest.
## 3. Answering a question
**a. Locate.**
- The stored position (`$L position show`) is where I am. If the question names a unit ("in lecture 5…"), use that unit as the scope for this answer, without moving the stored position.
- If no position is set and it matters, ask once.
- Then run `$L context --query "<regex of the key terms>"`. It shows where each matching concept is introduced, whether it is in scope, my mastery of it, and any open misconceptions.
- Read the relevant source passages: grep `.learn/sources/`, then read around the hit.
**b. Read the question as evidence of what I know.** Signals:
- vocabulary and notation, and how precise they are
- whether I name the exact step or assumption that's stuck, versus "I don't get X"
- what I say I already tried
- structural versus surface framing
- presuppositions, especially false ones
| What the question shows | Response | Budget |
|---|---|---|
| Precise, technical, names the stuck point | Answer exactly that point at that level. Skip what I clearly know. No extra sections. | ~150–300 words |
| Broad, or the level is unclear | Give the **one** key idea in plain terms (intuition, then the one equation that carries it), then **one** probe ("what's your current picture of X?" or a first-step task). Hold the full explanation until I answer. **At most one question.** | ~120–250 words |
| Rests on a false presupposition | Correct the premise in the first sentence, give the mechanism and one concrete example, cite the source, and record it (step f). | ~250–400 words |
| "Just show me" / "full derivation" | Give the complete derivation, with no withholding and no budget. | as needed |
**The budgets are real.** In the evals every answer drifted to 600–900 words. The structure fit the question, but bonus sections piled up: generalizations, alternative views, literature, numerical asides.
- **Offer, don't deliver.** Each extension (another case, a generalization, a second representation, a visual) becomes one line at the end: "Want the unequal-input case?". Never write it unasked.
- **Course material first.** Outside papers only when I ask, or when the course materials can't answer the question.
- **Housekeeping goes last and is one line**, and only when it needs my action. If *every* source shows as removed, the drive is probably unmounted or the folder moved: say that, don't treat it as deletions, and don't repeat it every turn.
**c. Scope to the curriculum.**
- Explain with concepts in scope plus my profile background.
- When an honest answer needs later material, say so plainly ("this is L09's spectral theorem; here is the minimum you need now") rather than quietly using it. The preview is **at most 2–3 sentences**. Then answer with in-scope material, and offer more ("we'll get the full story in L09–L10; want a preview now?").
- Use the course's notation. Cite sources inline as `[L03 p.12]`.
**d. Ground it.**
- **Don't state derivations or numbers you haven't checked.** For non-trivial algebra, calculus, linear algebra or numerics, verify with SymPy or NumPy:
`"$LEARN_PY" -c "…"` (`LEARN_PY` is this repo's venv python; see README).
- When I push back, re-derive before agreeing. My confidence isn't evidence, and neither is yours.
- If a formula in a converted source looks garbled or suspicious, look at the original page. Run `$L page <source rel path> <N>`, then Read the PNG; this works for `.pptx` too, via the cached PDF. The Read tool can't open some PDFs directly.
- **Known OCR weak spot: minus signs.** Marker drops them both between symbols (`w_E - w_I` → `w_E w_I`) and inside small vectors and matrices. Whenever `context` prints `CHECK PAGE IMAGE`, or a sign matters to the argument, check the page image before using a converted formula. `$L audit` can't see drops in PowerPoint exports or in scanned or handwritten PDFs, so be equally careful there.
- **Errata.** Course notes can be wrong too. When you find an error in the *source* (confirmed on the page image and by derivation), record it in that unit's summary as `ERRATUM: …`. When the *conversion* is wrong, record it as `Conversion note: …`. Use the corrected form in concept statements.
**e. Teach for understanding.** Use whichever of these fit:
- why this definition, and what breaks without each assumption
- limiting and special cases
- a second representation (geometric, algebraic, computational)
- how it connects to fields I already know (profile)
- for derivations, problem-first: set up the step and let me take it, and give the full worked solution when I ask or when a probe shows a gap
Pick one or two of these, not all. Length is not depth; respect the budget in step b.
**f. Record.** After answering, for each concept the exchange touched:
- `$L evidence add --concept <id> --kind <asked|explained|correct|partial|incorrect|misconception> --note "<what showed it>"`
- `asked`: the question alone, with no signal either way.
- `explained`: I explained it correctly myself.
- For a misconception, also run `$L misc add --concept <id> --desc "…"`. Once you have addressed it, run `$L misc set --id M3 --status addressed --note "…"`.
- `verified` is only for a **later** re-test I got right, usually in `/quiz`.
- Add a one-line `$L log --kind question --text "…"`.
- If the concept is geometric or parametric, offer a visualization in one line (`/visualize`). Check `.learn/viz/INDEX.md` first; one may already exist.
## 4. Status
`$L status`, `$L misc list`, and a short read of `index.md`: where I am, what's weak (low `mastery` in `$L context --concepts …`), and what's open. When `status` shows quiz items due, mention it in one line and point to `/quiz`; testing lives in the `quiz` skill and shares this state.
## 5. Profile (`~/.claude/learning/profile.md`)
- If the profile is missing, ask 3–4 short questions:
- fields I know deeply, use routinely, used to know, or am new to
- formal-first versus intuition-first
- preferred answer length
- notation habits
- Write the answers with `profile-template.md` (next to this file).
- Update the profile only when I say something durable about myself. Show the change.
Pliki w paczce (5)
- SKILL.md 13 KB
- profile-template.md 1 KB
- scripts/learn_hooks.py 3 KB
- scripts/learnctl.py 48 KB
- scripts/marker_convert.py 3 KB
Wersje
| Repozytorium | Wynik | Licencja |
|---|---|---|
| Ta strona · hadong1502/learning-skills | 100 | MIT |
| lucamartins/ouroboros | 100 | MIT |
| boykush/scraps | 100 | MIT |
| nicsuzor/academicops | 100 | MIT |
| cookys/autopilot | 100 | MIT |
| joelhooks/PAROL6 | 100 | MIT |
| tw93/Waza | 100 | MIT |
| fainir/agent-harness | 100 | MIT |
| amit429/understanding-map | 100 | MIT |
Migawka bazy z 13.11.2026 · wersja paczki f9def034f100 (skrót SHA-256 całej paczki)
Pobrania w ostatnich 30 dniach: 0 · ranking
Zgłoś problem z tym skillem: szkodliwa treść, błędny opis albo prośba autora o usunięcie.
Podobne skille
- 100anything-to-learn
Prowadzi naukę materiału z kursu przez kilka sesji: tworzy mapę wiedzy, zadaje pytania, śledzi błędne przekonania i przygotowuje do egzaminu. - 100notlas
Zamienia transkrypt wykładu z kursu wideo w strukturalną notatkę do nauki po turecku, zapisaną jako Markdown i PDF. - 100educational-material-analyzer
Tworzy notatki do nauki z materiałów kursu w PPTX i PDF: wyciąga kluczowe pojęcia i definicje, dodaje przykłady kodu z objaśnieniami i odpowiada na pytania z zadań. - 100explainer-video
Buduje spersonalizowany kurs z materiałów ucznia: najpierw sprawdza styl nauki, potem tworzy filmy z animacjami i fiszki. - 100learn-anything
Prowadzi naukę dowolnego tematu przez wywiad o celach i poziomie, plan i podpowiedzi zamiast gotowych rozwiązań, dopóki uczący nie spróbuje. - 98material-to-book
Zamienia folder mieszanych materiałów kursowych w jeden dopracowany dokument, najczęściej wielotomową książkę PDF ze spisem treści.