{"id":"4ede6830-7a50-4861-9030-eb891cfe605c","shortId":"pYAqpX","kind":"skill","title":"tutor-setup","tagline":"Transforms knowledge sources into an Obsidian StudyVault. Two modes: (1) Document Mode — PDF/text/web sources → study notes with practice questions. (2) Codebase Mode — source code project → onboarding vault for new developers. Mode is auto-detected based on project markers in CW","description":"# Tutor Setup — Knowledge to Obsidian StudyVault\n\n## CWD Boundary Rule (ALL MODES)\n\n> **NEVER access files outside the current working directory (CWD).**\n> All source scanning, reading, and vault output MUST stay within CWD and its subdirectories.\n> If the user provides an external path, ask them to copy the files into CWD first.\n\n## Mode Detection\n\nOn invocation, detect mode automatically:\n\n1. **Check for project markers** in CWD:\n   - `package.json`, `pom.xml`, `build.gradle`, `Cargo.toml`, `go.mod`, `Makefile`,\n     `*.sln`, `pyproject.toml`, `setup.py`, `Gemfile`\n2. **If any marker found** → **Codebase Mode**\n3. **If no marker found** → **Document Mode**\n4. **Tie-break**: If `.git/` is the sole indicator and no source code files (`*.ts`, `*.py`, `*.java`, `*.go`, `*.rs`, etc.) exist, default to Document Mode.\n5. Announce detected mode and ask user to confirm or override.\n\n---\n\n## Document Mode\n\n> Transforms knowledge sources (PDF, text, web, epub) into study notes.\n> Templates: [templates.md](references/templates.md)\n\n### Phase D1: Source Discovery & Extraction\n\n1. **Auto-scan CWD** for `**/*.pdf`, `**/*.txt`, `**/*.md`, `**/*.html`, `**/*.epub` (exclude `node_modules/`, `.git/`, `dist/`, `build/`, `StudyVault/`). Present for user confirmation.\n2. **Extract text (MANDATORY tools)**:\n   - **PDF → `pdftotext` CLI ONLY** (run via Bash tool). NEVER use the Read tool directly on PDF files — it renders pages as images and wastes 10-50x more tokens. Convert to `.txt` first, then Read the `.txt` file.\n     ```bash\n     pdftotext \"source.pdf\" \"/tmp/source.txt\"\n     ```\n   - If `pdftotext` is not installed, install it first: `brew install poppler` (macOS) or `apt-get install poppler-utils` (Linux).\n   - URL → WebFetch\n   - Other formats (`.md`, `.txt`, `.html`) → Read directly.\n3. **Read extracted `.txt` files** — understand scope, structure, depth. Work exclusively from the converted text, never from the raw PDF.\n4. **Source Content Mapping (MANDATORY for multi-file sources)**:\n   - Read **cover page + TOC + 3+ sample pages from middle/end** for EVERY source file\n   - **NEVER assume content from filename** — file numbering often ≠ chapter numbering\n   - Build verified mapping: `{ source_file → actual_topics → page_ranges }`\n   - Flag non-academic files and missing sources\n   - Present mapping to user for verification before proceeding\n\n### Phase D2: Content Analysis\n\n1. Identify topic hierarchy — sections, chapters, domain divisions.\n2. Separate concept content vs practice questions.\n3. Map dependencies between topics.\n4. Identify key patterns — comparisons, decision trees, formulas.\n5. **Full topic checklist (MANDATORY)** — every topic/subtopic listed. Drives all subsequent phases.\n\n> **Equal Depth Rule**: Even a briefly mentioned subtopic MUST get a full dedicated note supplemented with textbook-level knowledge.\n\n6. **Classification completeness**: When source enumerates categories (\"3 types of X\"), every member gets a dedicated note. Scan for: \"types of\", \"N가지\", \"categories\", \"there are N\".\n7. **Source-to-note cross-verification (MANDATORY)**: Record which source file(s) and page range(s) cover each topic. Flag untraceable topics as \"source not available\".\n\n### Phase D3: Tag Standard\n\nDefine tag vocabulary before creating notes:\n- **Format**: English, lowercase, kebab-case (e.g., `#data-hazard`)\n- **Hierarchy**: top-level → domain → detail → technique → note-type\n- **Registry**: Only registered tags allowed. Detail tags co-attach parent domain tag.\n\n### Phase D4: Vault Structure\n\nCreate `StudyVault/` with numbered folders per [templates.md](references/templates.md). Group 3-5 related concepts per file.\n\n### Phase D5: Dashboard Creation\n\nCreate `00-Dashboard/`: MOC, Quick Reference, Exam Traps. See [templates.md](references/templates.md).\n\n- **MOC**: Topic Map + Practice Notes + Study Tools + Tag Index (with rules) + Weak Areas (with links) + Non-core Topic Policy\n- **Quick Reference**: every heading includes `→ [[Concept Note]]` link; all key formulas\n- **Exam Traps**: per-topic trap points in fold callouts, linked to concept notes\n\n### Phase D6: Concept Notes\n\nPer [templates.md](references/templates.md). Key rules:\n- YAML frontmatter: `source_pdf`, `part`, `keywords` (MANDATORY)\n- **source_pdf MUST match verified Phase D1 mapping** — never guess from filename\n- If unavailable: `source_pdf: 원문 미보유`\n- `[[wiki-links]]`, callouts (`[!tip]`, `[!important]`, `[!warning]`), comparison tables > prose\n- ASCII diagrams for processes/flows/sequences\n- **Simplification-with-exceptions**: general statements must note edge cases\n\n### Phase D7: Practice Questions\n\nPer [templates.md](references/templates.md). Key rules:\n- Every topic folder MUST have a practice file (8+ questions)\n- **Active recall**: answers use `> [!answer]- 정답 보기` fold callout\n- Patterns use `> [!hint]-` / `> [!summary]-` fold callouts\n- **Question type diversity**: ≥60% recall, ≥20% application, ≥2 analysis per file\n- `## Related Concepts` with `[[wiki-links]]`\n\n### Phase D8: Interlinking\n\n1. `## Related Notes` on every concept note\n2. MOC links to every concept + practice note\n3. Cross-link concept ↔ practice; siblings reference each other\n4. Quick Reference sections → `[[Concept Note]]` links\n5. Weak Areas → relevant note + Exam Traps; Exam Traps → concept notes\n\n### Phase D9: Self-Review (MANDATORY)\n\nVerify against [quality-checklist.md](references/quality-checklist.md) **Document Mode** section. Fix and re-verify until all checks pass.\n\n---\n\n## Codebase Mode\n\n> Generates a new-developer onboarding StudyVault from a source code project.\n> Full workflow: [codebase-workflow.md](references/codebase-workflow.md)\n> Templates: [codebase-templates.md](references/codebase-templates.md)\n\n### Phase Summary\n\n| Phase | Name | Key Action |\n|-------|------|------------|\n| C1 | Project Exploration | Scan files, detect tech stack, read entry points, map directory layout |\n| C2 | Architecture Analysis | Identify patterns, trace request flow, map module boundaries and data flow |\n| C3 | Tag Standard | Define `#arch-*`, `#module-*`, `#pattern-*`, `#api-*` tag registry |\n| C4 | Vault Structure | Create `StudyVault/` with Dashboard, Architecture, per-module, DevOps, Exercises folders |\n| C5 | Dashboard | MOC (Module Map + API Surface + Getting Started + Onboarding Path) + Quick Reference |\n| C6 | Module Notes | Per-module notes: Purpose, Key Files, Public Interface, Internal Flow, Dependencies |\n| C7 | Onboarding Exercises | Code reading, configuration, debugging, extension exercises (5+ per major module) |\n| C8 | Interlinking | Cross-link modules, architecture ↔ implementations, exercises ↔ modules |\n| C9 | Self-Review | Verify against [quality-checklist.md](references/quality-checklist.md) **Codebase Mode** section |\n\nSee [codebase-workflow.md](references/codebase-workflow.md) for detailed per-phase instructions.\n\n---\n\n## Language\n\n- Match source material language (Korean → Korean notes, etc.)\n- **Tags/keywords**: ALWAYS English","tags":["tutor","setup","skills","bevibing","agent-skills","claude","claude-code","claude-skills","skill","skillsmp"],"capabilities":["skill","source-bevibing","skill-tutor-setup","topic-agent-skills","topic-claude","topic-claude-code","topic-claude-skills","topic-skill","topic-skills","topic-skillsmp"],"categories":["tutor-skills"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/bevibing/tutor-skills/tutor-setup","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add bevibing/tutor-skills","source_repo":"https://github.com/bevibing/tutor-skills","install_from":"skills.sh"}},"qualityScore":"0.700","qualityRationale":"deterministic score 0.70 from registry signals: · indexed on github topic:agent-skills · 822 github stars · SKILL.md body (6,999 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-05-02T18:52:58.312Z","embedding":null,"createdAt":"2026-04-18T21:56:58.725Z","updatedAt":"2026-05-02T18:52:58.312Z","lastSeenAt":"2026-05-02T18:52:58.312Z","tsv":"'-5':542 '-50':242 '/tmp/source.txt':258 '00':552 '1':13,102,190,371,719 '10':241 '2':23,119,212,379,706,726 '20':704 '3':126,289,323,386,438,541,734 '4':133,309,391,744 '5':159,399,751,900 '6':431 '60':702 '7':457 '8':682 'academ':354 'access':57 'action':810 'activ':684 'actual':347 'allow':519 'alway':944 'analysi':370,707,827 'announc':160 'answer':686,688 'api':846,868 'applic':705 'apt':273 'apt-get':272 'arch':843 'architectur':826,856,910 'area':574,753 'ascii':651 'ask':86,164 'assum':333 'attach':524 'auto':37,192 'auto-detect':36 'auto-scan':191 'automat':101 'avail':484 'base':39 'bash':223,255 'boundari':52,835 'break':136 'brew':267 'briefli':416 'build':206,342 'build.gradle':111 'c1':811 'c2':825 'c3':839 'c4':849 'c5':863 'c6':876 'c7':891 'c8':904 'c9':914 'callout':602,644,692,698 'cargo.toml':112 'case':500,664 'categori':437,453 'chapter':340,376 'check':103,782 'checklist':402 'classif':432 'cli':219 'co':523 'co-attach':522 'code':27,146,796,894 'codebas':24,124,784,922 'codebase-templates.md':803 'codebase-workflow.md':800,926 'comparison':395,648 'complet':433 'concept':381,544,587,605,609,711,724,731,738,748,760 'configur':896 'confirm':167,211 'content':311,334,369,382 'convert':246,302 'copi':89 'core':579 'cover':320,475 'creat':493,532,551,852 'creation':550 'cross':463,736,907 'cross-link':735,906 'cross-verif':462 'current':61 'cw':44 'cwd':51,64,75,93,108,194 'd1':186,629 'd2':368 'd3':486 'd4':529 'd5':548 'd6':608 'd7':666 'd8':717 'd9':763 'dashboard':549,553,855,864 'data':503,837 'data-hazard':502 'debug':897 'decis':396 'dedic':423,446 'default':155 'defin':489,842 'depend':388,890 'depth':297,412 'detail':510,520,929 'detect':38,96,99,161,816 'develop':33,790 'devop':860 'diagram':652 'direct':230,288 'directori':63,823 'discoveri':188 'dist':205 'divers':701 'divis':378 'document':14,131,157,170,772 'domain':377,509,526 'drive':407 'e.g':501 'edg':663 'english':496,945 'entri':820 'enumer':436 'epub':178,200 'equal':411 'etc':153,942 'even':414 'everi':329,404,442,584,674,723,730 'exam':557,593,756,758 'except':658 'exclud':201 'exclus':299 'exercis':861,893,899,912 'exist':154 'explor':813 'extens':898 'extern':84 'extract':189,213,291 'file':58,91,147,233,254,293,317,331,337,346,355,469,546,681,709,815,885 'filenam':336,634 'first':94,249,266 'fix':775 'flag':351,478 'flow':832,838,889 'fold':601,691,697 'folder':536,676,862 'format':283,495 'formula':398,592 'found':123,130 'frontmatt':617 'full':400,422,798 'gemfil':118 'general':659 'generat':786 'get':274,420,444,870 'git':138,204 'go':151 'go.mod':113 'group':540 'guess':632 'hazard':504 'head':585 'hierarchi':374,505 'hint':695 'html':199,286 'identifi':372,392,828 'imag':238 'implement':911 'import':646 'includ':586 'index':570 'indic':142 'instal':263,264,268,275 'instruct':933 'interfac':887 'interlink':718,905 'intern':888 'invoc':98 'java':150 'kebab':499 'kebab-cas':498 'key':393,591,614,672,809,884 'keyword':621 'knowledg':5,47,173,430 'korean':939,940 'languag':934,938 'layout':824 'level':429,508 'link':576,589,603,643,715,728,737,750,908 'linux':279 'list':406 'lowercas':497 'maco':270 'major':902 'makefil':114 'mandatori':215,313,403,465,622,767 'map':312,344,360,387,564,630,822,833,867 'marker':42,106,122,129 'match':626,935 'materi':937 'md':198,284 'member':443 'mention':417 'middle/end':327 'miss':357 'moc':554,562,727,865 'mode':12,15,25,34,55,95,100,125,132,158,162,171,773,785,923 'modul':203,834,844,859,866,877,881,903,909,913 'multi':316 'multi-fil':315 'must':72,419,625,661,677 'n':456 'name':808 'never':56,225,304,332,631 'new':32,789 'new-develop':788 'node':202 'non':353,578 'non-academ':352 'non-cor':577 'note':19,181,424,447,461,494,513,566,588,606,610,662,721,725,733,749,755,761,878,882,941 'note-typ':512 'number':338,341,535 'n가지':452 'obsidian':9,49 'often':339 'onboard':29,791,872,892 'output':71 'outsid':59 'overrid':169 'package.json':109 'page':236,321,325,349,472 'parent':525 'part':620 'pass':783 'path':85,873 'pattern':394,693,829,845 'pdf':175,196,217,232,308,619,624,638 'pdf/text/web':16 'pdftotext':218,256,260 'per':537,545,596,611,669,708,858,880,901,931 'per-modul':857,879 'per-phas':930 'per-top':595 'phase':185,367,410,485,528,547,607,628,665,716,762,805,807,932 'point':599,821 'polici':581 'pom.xml':110 'poppler':269,277 'poppler-util':276 'practic':21,384,565,667,680,732,739 'present':208,359 'proceed':366 'processes/flows/sequences':654 'project':28,41,105,797,812 'prose':650 'provid':82 'public':886 'purpos':883 'py':149 'pyproject.toml':116 'quality-checklist.md':770,920 'question':22,385,668,683,699 'quick':555,582,745,874 'rang':350,473 'raw':307 're':778 're-verifi':777 'read':68,228,251,287,290,319,819,895 'recal':685,703 'record':466 'refer':556,583,741,746,875 'references/codebase-templates.md':804 'references/codebase-workflow.md':801,927 'references/quality-checklist.md':771,921 'references/templates.md':184,539,561,613,671 'regist':517 'registri':515,848 'relat':543,710,720 'relev':754 'render':235 'request':831 'review':766,917 'rs':152 'rule':53,413,572,615,673 'run':221 'sampl':324 'scan':67,193,448,814 'scope':295 'section':375,747,774,924 'see':559,925 'self':765,916 'self-review':764,915 'separ':380 'setup':3,46 'setup.py':117 'sibl':740 'simplif':656 'simplification-with-except':655 'skill' 'skill-tutor-setup' 'sln':115 'sole':141 'sourc':6,17,26,66,145,174,187,310,318,330,345,358,435,459,468,482,618,623,637,795,936 'source-bevibing' 'source-to-not':458 'source.pdf':257 'stack':818 'standard':488,841 'start':871 'statement':660 'stay':73 'structur':296,531,851 'studi':18,180,567 'studyvault':10,50,207,533,792,853 'subdirectori':78 'subsequ':409 'subtop':418 'summari':696,806 'supplement':425 'surfac':869 'tabl':649 'tag':487,490,518,521,527,569,840,847 'tags/keywords':943 'tech':817 'techniqu':511 'templat':182,802 'templates.md':183,538,560,612,670 'text':176,214,303 'textbook':428 'textbook-level':427 'tie':135 'tie-break':134 'tip':645 'toc':322 'token':245 'tool':216,224,229,568 'top':507 'top-level':506 'topic':348,373,390,401,477,480,563,580,597,675 'topic-agent-skills' 'topic-claude' 'topic-claude-code' 'topic-claude-skills' 'topic-skill' 'topic-skills' 'topic-skillsmp' 'topic/subtopic':405 'trace':830 'transform':4,172 'trap':558,594,598,757,759 'tree':397 'ts':148 'tutor':2,45 'tutor-setup':1 'two':11 'txt':197,248,253,285,292 'type':439,450,514,700 'unavail':636 'understand':294 'untrac':479 'url':280 'use':226,687,694 'user':81,165,210,362 'util':278 'vault':30,70,530,850 'verif':364,464 'verifi':343,627,768,779,918 'via':222 'vocabulari':491 'vs':383 'warn':647 'wast':240 'weak':573,752 'web':177 'webfetch':281 'wiki':642,714 'wiki-link':641,713 'within':74 'work':62,298 'workflow':799 'x':243,441 'yaml':616 '미보유':640 '보기':690 '원문':639 '정답':689","prices":[{"id":"b8995761-3af1-44c2-9c40-2fb7276a1962","listingId":"4ede6830-7a50-4861-9030-eb891cfe605c","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"bevibing","category":"tutor-skills","install_from":"skills.sh"},"createdAt":"2026-04-18T21:56:58.725Z"}],"sources":[{"listingId":"4ede6830-7a50-4861-9030-eb891cfe605c","source":"github","sourceId":"bevibing/tutor-skills/tutor-setup","sourceUrl":"https://github.com/bevibing/tutor-skills/tree/main/skills/tutor-setup","isPrimary":false,"firstSeenAt":"2026-04-18T21:56:58.725Z","lastSeenAt":"2026-05-02T18:52:58.312Z"}],"details":{"listingId":"4ede6830-7a50-4861-9030-eb891cfe605c","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"bevibing","slug":"tutor-setup","github":{"repo":"bevibing/tutor-skills","stars":822,"topics":["agent-skills","claude","claude-code","claude-skills","skill","skills","skillsmp"],"license":"mit","html_url":"https://github.com/bevibing/tutor-skills","pushed_at":"2026-02-28T14:41:09Z","description":"A Claude Code skill that turns PDFs, docs, and codebases into Obsidian study vaults","skill_md_sha":"5f41b885b2a7831e8e8154bad5a4c139ad6b5223","skill_md_path":"skills/tutor-setup/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/bevibing/tutor-skills/tree/main/skills/tutor-setup"},"layout":"multi","source":"github","category":"tutor-skills","frontmatter":{"name":"tutor-setup","description":"Transforms knowledge sources into an Obsidian StudyVault. Two modes: (1) Document Mode — PDF/text/web sources → study notes with practice questions. (2) Codebase Mode — source code project → onboarding vault for new developers. Mode is auto-detected based on project markers in CWD."},"skills_sh_url":"https://skills.sh/bevibing/tutor-skills/tutor-setup"},"updatedAt":"2026-05-02T18:52:58.312Z"}}