[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"$fmd7i7yo92qwb":3,"$fxzbqtmx0lymk":60,"nuxt:README.md":64},{"sha":4,"committedAt":5,"fetchedAt":6,"source":7,"skill":8},"8af4ee670508dae7458cbaff5cb8878605232cae","2026-09-03T21:16:57.000Z","2026-09-03T21:17:26.126Z","github",{"slug":9,"name":10,"description":11,"tags":12,"author":15,"authorUrl":16,"requires":17,"badges":19,"fileCount":23,"totalBytes":24,"tree":25,"errors":59},"nuxt","Nuxt","Nuxt 4 framework docs fetcher and the rule that makes Claude Code check it before guessing a composable.",[9,13,14],"vue","docs","Patrity","https:\u002F\u002Fgithub.com\u002FPatrity",[18],"python3",[20,21,22],"skills","rules","claude-md",6,14919,[26,35,53,56],{"name":21,"path":21,"type":27,"children":28},"dir",[29],{"name":30,"path":31,"type":32,"size":33,"kind":34},"web-nuxt.md","rules\u002Fweb-nuxt.md","file",836,"text",{"name":20,"path":20,"type":27,"children":36},[37],{"name":38,"path":39,"type":27,"children":40},"nuxt-docs","skills\u002Fnuxt-docs",[41,45,49],{"name":42,"path":43,"type":32,"size":44,"kind":34},"fetch.py","skills\u002Fnuxt-docs\u002Ffetch.py",8980,{"name":46,"path":47,"type":32,"size":48,"kind":34},"manifest.json","skills\u002Fnuxt-docs\u002Fmanifest.json",1441,{"name":50,"path":51,"type":32,"size":52,"kind":34},"SKILL.md","skills\u002Fnuxt-docs\u002FSKILL.md",1450,{"name":54,"path":54,"type":32,"size":55,"kind":34},"CLAUDE.md",545,{"name":57,"path":57,"type":32,"size":58,"kind":34},"README.md",1667,[],{"path":57,"language":61,"size":58,"kind":34,"content":62,"frontmatterRaw":63},"markdown","---\nname: Nuxt\ndescription: Nuxt 4 framework docs fetcher and the rule that makes Claude Code check it before guessing a composable.\ntags: [nuxt, vue, docs]\nauthor: Patrity\nauthorUrl: https:\u002F\u002Fgithub.com\u002FPatrity\nrequires: [python3]\n---\n\n# Nuxt\n\nOne doc-fetching skill plus one path-scoped rule. The rule fires when Claude touches `.ts`\u002F`.vue` files under `app\u002F`, anything under `server\u002F`, or `nuxt.config.ts`, and tells it to consult the docs before guessing a composable signature or a config key.\n\n## What's inside\n\n| Path | Purpose |\n| --- | --- |\n| `skills\u002Fnuxt-docs\u002F` | Fetches Nuxt 4 docs from GitHub by topic (`python3 .claude\u002Fskills\u002Fnuxt-docs\u002Ffetch.py useFetch`). |\n| `rules\u002Fweb-nuxt.md` | Nuxt 4 conventions: `app\u002F` layout, `runtimeConfig` for secrets, invoke `nuxt-docs` first. |\n| `CLAUDE.md` | A pointer block to paste into your project's `CLAUDE.md`. |\n\n## Install\n\n```bash\nunzip nuxt.zip\nmkdir -p .claude\ncp -R nuxt\u002Fskills nuxt\u002Frules .claude\u002F\ncat nuxt\u002FCLAUDE.md >> CLAUDE.md\necho '.claude\u002Fskills\u002F*\u002Fcache\u002F' >> .gitignore\n```\n\nThe fetcher caches what it downloads under `skills\u002Fnuxt-docs\u002Fcache\u002F`, hence the `.gitignore` line. Caches are safe to delete at any time; the next fetch rebuilds them.\n\n## Requirements\n\n- `python3` on PATH (standard library only, no pip installs).\n- Network access to `raw.githubusercontent.com` the first time a topic is fetched.\n\n## Companion bundles\n\n- **[`nuxt-ui`](\u002Fskill\u002Fnuxt-ui)** — the Nuxt UI v4 component and template fetchers plus their rule. Install it alongside this one when the project uses Nuxt UI.\n- **[`browser-testing`](\u002Fskill\u002Fbrowser-testing)** — proving UI changes in a real browser with playwright-cli.\n","name: Nuxt\ndescription: Nuxt 4 framework docs fetcher and the rule that makes Claude Code check it before guessing a composable.\ntags: [nuxt, vue, docs]\nauthor: Patrity\nauthorUrl: https:\u002F\u002Fgithub.com\u002FPatrity\nrequires: [python3]",{"data":65,"body":68},{"name":10,"description":11,"tags":66,"author":15,"authorUrl":16,"requires":67},[9,13,14],[18],{"type":69,"children":70},"root",[71,77,124,131,245,251,389,410,416,444,450,491],{"type":72,"tag":73,"props":74,"children":75},"element","h1",{"id":9},[76],{"type":34,"value":10},{"type":72,"tag":78,"props":79,"children":80},"p",{},[81,83,90,92,98,100,106,108,114,116,122],{"type":34,"value":82},"One doc-fetching skill plus one path-scoped rule. The rule fires when Claude touches ",{"type":72,"tag":84,"props":85,"children":87},"code",{"className":86},[],[88],{"type":34,"value":89},".ts",{"type":34,"value":91},"\u002F",{"type":72,"tag":84,"props":93,"children":95},{"className":94},[],[96],{"type":34,"value":97},".vue",{"type":34,"value":99}," files under ",{"type":72,"tag":84,"props":101,"children":103},{"className":102},[],[104],{"type":34,"value":105},"app\u002F",{"type":34,"value":107},", anything under ",{"type":72,"tag":84,"props":109,"children":111},{"className":110},[],[112],{"type":34,"value":113},"server\u002F",{"type":34,"value":115},", or ",{"type":72,"tag":84,"props":117,"children":119},{"className":118},[],[120],{"type":34,"value":121},"nuxt.config.ts",{"type":34,"value":123},", and tells it to consult the docs before guessing a composable signature or a config key.",{"type":72,"tag":125,"props":126,"children":128},"h2",{"id":127},"whats-inside",[129],{"type":34,"value":130},"What's inside",{"type":72,"tag":132,"props":133,"children":134},"table",{},[135,154],{"type":72,"tag":136,"props":137,"children":138},"thead",{},[139],{"type":72,"tag":140,"props":141,"children":142},"tr",{},[143,149],{"type":72,"tag":144,"props":145,"children":146},"th",{},[147],{"type":34,"value":148},"Path",{"type":72,"tag":144,"props":150,"children":151},{},[152],{"type":34,"value":153},"Purpose",{"type":72,"tag":155,"props":156,"children":157},"tbody",{},[158,184,222],{"type":72,"tag":140,"props":159,"children":160},{},[161,171],{"type":72,"tag":162,"props":163,"children":164},"td",{},[165],{"type":72,"tag":84,"props":166,"children":168},{"className":167},[],[169],{"type":34,"value":170},"skills\u002Fnuxt-docs\u002F",{"type":72,"tag":162,"props":172,"children":173},{},[174,176,182],{"type":34,"value":175},"Fetches Nuxt 4 docs from GitHub by topic (",{"type":72,"tag":84,"props":177,"children":179},{"className":178},[],[180],{"type":34,"value":181},"python3 .claude\u002Fskills\u002Fnuxt-docs\u002Ffetch.py useFetch",{"type":34,"value":183},").",{"type":72,"tag":140,"props":185,"children":186},{},[187,195],{"type":72,"tag":162,"props":188,"children":189},{},[190],{"type":72,"tag":84,"props":191,"children":193},{"className":192},[],[194],{"type":34,"value":31},{"type":72,"tag":162,"props":196,"children":197},{},[198,200,205,207,213,215,220],{"type":34,"value":199},"Nuxt 4 conventions: ",{"type":72,"tag":84,"props":201,"children":203},{"className":202},[],[204],{"type":34,"value":105},{"type":34,"value":206}," layout, ",{"type":72,"tag":84,"props":208,"children":210},{"className":209},[],[211],{"type":34,"value":212},"runtimeConfig",{"type":34,"value":214}," for secrets, invoke ",{"type":72,"tag":84,"props":216,"children":218},{"className":217},[],[219],{"type":34,"value":38},{"type":34,"value":221}," first.",{"type":72,"tag":140,"props":223,"children":224},{},[225,233],{"type":72,"tag":162,"props":226,"children":227},{},[228],{"type":72,"tag":84,"props":229,"children":231},{"className":230},[],[232],{"type":34,"value":54},{"type":72,"tag":162,"props":234,"children":235},{},[236,238,243],{"type":34,"value":237},"A pointer block to paste into your project's ",{"type":72,"tag":84,"props":239,"children":241},{"className":240},[],[242],{"type":34,"value":54},{"type":34,"value":244},".",{"type":72,"tag":125,"props":246,"children":248},{"id":247},"install",[249],{"type":34,"value":250},"Install",{"type":72,"tag":252,"props":253,"children":258},"pre",{"className":254,"code":255,"language":256,"meta":257,"style":257},"language-bash shiki shiki-themes material-theme-lighter github-light github-dark","unzip nuxt.zip\nmkdir -p .claude\ncp -R nuxt\u002Fskills nuxt\u002Frules .claude\u002F\ncat nuxt\u002FCLAUDE.md >> CLAUDE.md\necho '.claude\u002Fskills\u002F*\u002Fcache\u002F' >> .gitignore\n","bash","",[259],{"type":72,"tag":84,"props":260,"children":261},{"__ignoreMap":257},[262,280,300,329,354],{"type":72,"tag":263,"props":264,"children":267},"span",{"class":265,"line":266},"line",1,[268,274],{"type":72,"tag":263,"props":269,"children":271},{"style":270},"--shiki-light:#E2931D;--shiki-default:#6F42C1;--shiki-dark:#B392F0",[272],{"type":34,"value":273},"unzip",{"type":72,"tag":263,"props":275,"children":277},{"style":276},"--shiki-light:#91B859;--shiki-default:#032F62;--shiki-dark:#9ECBFF",[278],{"type":34,"value":279}," nuxt.zip\n",{"type":72,"tag":263,"props":281,"children":283},{"class":265,"line":282},2,[284,289,295],{"type":72,"tag":263,"props":285,"children":286},{"style":270},[287],{"type":34,"value":288},"mkdir",{"type":72,"tag":263,"props":290,"children":292},{"style":291},"--shiki-light:#91B859;--shiki-default:#005CC5;--shiki-dark:#79B8FF",[293],{"type":34,"value":294}," -p",{"type":72,"tag":263,"props":296,"children":297},{"style":276},[298],{"type":34,"value":299}," .claude\n",{"type":72,"tag":263,"props":301,"children":303},{"class":265,"line":302},3,[304,309,314,319,324],{"type":72,"tag":263,"props":305,"children":306},{"style":270},[307],{"type":34,"value":308},"cp",{"type":72,"tag":263,"props":310,"children":311},{"style":291},[312],{"type":34,"value":313}," -R",{"type":72,"tag":263,"props":315,"children":316},{"style":276},[317],{"type":34,"value":318}," nuxt\u002Fskills",{"type":72,"tag":263,"props":320,"children":321},{"style":276},[322],{"type":34,"value":323}," nuxt\u002Frules",{"type":72,"tag":263,"props":325,"children":326},{"style":276},[327],{"type":34,"value":328}," .claude\u002F\n",{"type":72,"tag":263,"props":330,"children":332},{"class":265,"line":331},4,[333,338,343,349],{"type":72,"tag":263,"props":334,"children":335},{"style":270},[336],{"type":34,"value":337},"cat",{"type":72,"tag":263,"props":339,"children":340},{"style":276},[341],{"type":34,"value":342}," nuxt\u002FCLAUDE.md",{"type":72,"tag":263,"props":344,"children":346},{"style":345},"--shiki-light:#39ADB5;--shiki-default:#D73A49;--shiki-dark:#F97583",[347],{"type":34,"value":348}," >>",{"type":72,"tag":263,"props":350,"children":351},{"style":276},[352],{"type":34,"value":353}," CLAUDE.md\n",{"type":72,"tag":263,"props":355,"children":357},{"class":265,"line":356},5,[358,364,370,375,380,384],{"type":72,"tag":263,"props":359,"children":361},{"style":360},"--shiki-light:#6182B8;--shiki-default:#005CC5;--shiki-dark:#79B8FF",[362],{"type":34,"value":363},"echo",{"type":72,"tag":263,"props":365,"children":367},{"style":366},"--shiki-light:#39ADB5;--shiki-default:#032F62;--shiki-dark:#9ECBFF",[368],{"type":34,"value":369}," '",{"type":72,"tag":263,"props":371,"children":372},{"style":276},[373],{"type":34,"value":374},".claude\u002Fskills\u002F*\u002Fcache\u002F",{"type":72,"tag":263,"props":376,"children":377},{"style":366},[378],{"type":34,"value":379},"'",{"type":72,"tag":263,"props":381,"children":382},{"style":345},[383],{"type":34,"value":348},{"type":72,"tag":263,"props":385,"children":386},{"style":276},[387],{"type":34,"value":388}," .gitignore\n",{"type":72,"tag":78,"props":390,"children":391},{},[392,394,400,402,408],{"type":34,"value":393},"The fetcher caches what it downloads under ",{"type":72,"tag":84,"props":395,"children":397},{"className":396},[],[398],{"type":34,"value":399},"skills\u002Fnuxt-docs\u002Fcache\u002F",{"type":34,"value":401},", hence the ",{"type":72,"tag":84,"props":403,"children":405},{"className":404},[],[406],{"type":34,"value":407},".gitignore",{"type":34,"value":409}," line. Caches are safe to delete at any time; the next fetch rebuilds them.",{"type":72,"tag":125,"props":411,"children":413},{"id":412},"requirements",[414],{"type":34,"value":415},"Requirements",{"type":72,"tag":417,"props":418,"children":419},"ul",{},[420,431],{"type":72,"tag":421,"props":422,"children":423},"li",{},[424,429],{"type":72,"tag":84,"props":425,"children":427},{"className":426},[],[428],{"type":34,"value":18},{"type":34,"value":430}," on PATH (standard library only, no pip installs).",{"type":72,"tag":421,"props":432,"children":433},{},[434,436,442],{"type":34,"value":435},"Network access to ",{"type":72,"tag":84,"props":437,"children":439},{"className":438},[],[440],{"type":34,"value":441},"raw.githubusercontent.com",{"type":34,"value":443}," the first time a topic is fetched.",{"type":72,"tag":125,"props":445,"children":447},{"id":446},"companion-bundles",[448],{"type":34,"value":449},"Companion bundles",{"type":72,"tag":417,"props":451,"children":452},{},[453,473],{"type":72,"tag":421,"props":454,"children":455},{},[456,471],{"type":72,"tag":457,"props":458,"children":459},"strong",{},[460],{"type":72,"tag":461,"props":462,"children":464},"a",{"href":463},"\u002Fskill\u002Fnuxt-ui",[465],{"type":72,"tag":84,"props":466,"children":468},{"className":467},[],[469],{"type":34,"value":470},"nuxt-ui",{"type":34,"value":472}," — the Nuxt UI v4 component and template fetchers plus their rule. Install it alongside this one when the project uses Nuxt UI.",{"type":72,"tag":421,"props":474,"children":475},{},[476,489],{"type":72,"tag":457,"props":477,"children":478},{},[479],{"type":72,"tag":461,"props":480,"children":482},{"href":481},"\u002Fskill\u002Fbrowser-testing",[483],{"type":72,"tag":84,"props":484,"children":486},{"className":485},[],[487],{"type":34,"value":488},"browser-testing",{"type":34,"value":490}," — proving UI changes in a real browser with playwright-cli.",{"type":72,"tag":492,"props":493,"children":494},"style",{},[495],{"type":34,"value":496},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}"]