[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6C5SPWNXT6YZD7V44MFCGRP":3,"skill-same:01M6C5SPWNXT6YZD7V44MFCGRP":78},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":18,"publishedAt":42,"linkOnly":43,"markdownContent":44,"markdownBody":45,"frontMatter":46,"refName":50,"commitSha":51,"skillDirectory":52,"forksCount":53,"repositoryHtmlUrl":54,"repositoryHomepageUrl":6,"ownerHtmlUrl":55,"ownerBlogUrl":6,"ownerDescription":56,"updatedAt":57,"install":58,"resources":71},"01M6C5SPWNXT6YZD7V44MFCGRP","nodejs-containers",null,"Node.js container optimization — Alpine, multi-stage builds, node_modules caching, BuildKit mounts (900MB to ~100MB). Use when working with Node.js containers or optimizing image sizes.","laurigates\u002Fclaude-plugins","laurigates","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F13014001?v=4","01M6C59YHWS9C7KMXKSRX1YXNP","Lauri Gates","01M6C59YP2APG9YAM4DWYQYGFJ",60,"MIT","https:\u002F\u002Fgithub.com\u002Flaurigates\u002Fclaude-plugins\u002Fblob\u002Fmain\u002Fcontainer-plugin\u002Fskills\u002Fnodejs-containers\u002FSKILL.md",[],[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41],"containers","nodejs","nodejs containers","2026","image","when","websearch","sep","false","stage","caching","modules","container","use","webfetch","edit","write","read","node","grep","js","Bash","Optimization","2026-11-10 10:12:30",false,"---\ncreated: 2026-01-15\nmodified: 2026-09-24\nreviewed: 2026-01-15\nname: nodejs-containers\ndescription: \"Node.js container optimization — Alpine, multi-stage builds, node_modules caching, BuildKit mounts (900MB to ~100MB). Use when working with Node.js containers or optimizing image sizes.\"\nuser-invocable: false\nallowed-tools: Bash, Read, Grep, Glob, Edit, Write, TodoWrite, WebSearch, WebFetch\n---\n\n# Node.js Container Optimization\n\nExpert knowledge for building optimized Node.js container images using Alpine variants, multi-stage builds, and Node.js-specific dependency management patterns.\n\n## When to Use This Skill\n\n| Use this skill when... | Use `container-development` instead when... |\n|------------------------|---------------------------------------------|\n| Building Node.js-specific Dockerfiles | General multi-stage build patterns |\n| Optimizing Node.js image sizes | Language-agnostic container security |\n| Handling npm\u002Fyarn\u002Fpnpm in containers | Docker Compose configuration |\n| Dealing with native module builds | Non-Node.js container optimization |\n\n## Core Expertise\n\n**Node.js Container Challenges**:\n- Large node_modules directories (100-500MB)\n- Full base images include build tools (~900MB)\n- Separate dev and production dependencies\n- Different package managers (npm, yarn, pnpm)\n- Native modules requiring build tools\n\n**Key Capabilities**:\n- Alpine-based images (~100MB vs ~900MB full)\n- Multi-stage builds separating build and runtime\n- BuildKit cache mounts for node_modules\n- Production-only dependency installation\n- Non-root user configuration\n\n## Optimized Multi-Stage Pattern (Node Servers)\n\nThe recommended pattern achieves ~100-150MB images:\n\n```dockerfile\n# Dependencies stage - production only\nFROM node:20-alpine AS deps\nWORKDIR \u002Fapp\nCOPY package*.json .\u002F\nRUN npm ci --only=production\n\n# Build stage - includes devDependencies\nFROM node:20-alpine AS build\nWORKDIR \u002Fapp\nCOPY package*.json .\u002F\nRUN npm ci\nCOPY . .\nRUN npm run build\n\n# Runtime stage - minimal\nFROM node:20-alpine\nWORKDIR \u002Fapp\n\n# Create non-root user\nRUN addgroup -g 1001 -S nodejs && \\\n    adduser -u 1001 -S nodejs -G nodejs\n\n# Copy dependencies and built app\nCOPY --from=deps --chown=nodejs:nodejs \u002Fapp\u002Fnode_modules .\u002Fnode_modules\nCOPY --from=build --chown=nodejs:nodejs \u002Fapp\u002Fdist .\u002Fdist\nCOPY --chown=nodejs:nodejs package.json .\u002F\n\nUSER nodejs\nEXPOSE 3000\n\nHEALTHCHECK --interval=30s CMD node healthcheck.js || exit 1\n\nCMD [\"node\", \"dist\u002Fserver.js\"]\n```\n\n## BuildKit Cache Mounts (Fastest Builds)\n\n```dockerfile\n# syntax=docker\u002Fdockerfile:1\n\nFROM node:20-alpine AS build\nWORKDIR \u002Fapp\n\n# Cache mount for npm cache\nRUN --mount=type=cache,target=\u002Froot\u002F.npm \\\n    --mount=type=bind,source=package.json,target=package.json \\\n    --mount=type=bind,source=package-lock.json,target=package-lock.json \\\n    npm ci\n\nCOPY . .\nRUN npm run build\n\nFROM node:20-alpine\nWORKDIR \u002Fapp\nCOPY --from=build \u002Fapp\u002Fdist .\u002Fdist\nUSER node\nCMD [\"node\", \"dist\u002Fserver.js\"]\n```\n\n**Build performance**:\n- First build: ~2-3 minutes\n- Subsequent builds (no package changes): ~10-20 seconds\n- Subsequent builds (package changes): ~30-60 seconds\n\n## Package Manager Patterns\n\n### npm\n\n```dockerfile\nCOPY package*.json .\u002F\nRUN npm ci --only=production\nRUN npm cache clean --force\n```\n\n### yarn\n\n```dockerfile\nCOPY package.json yarn.lock .\u002F\nRUN yarn install --frozen-lockfile --production\nRUN yarn cache clean\n```\n\n### pnpm\n\n```dockerfile\nRUN npm install -g pnpm\nCOPY package.json pnpm-lock.yaml .\u002F\nRUN pnpm install --frozen-lockfile --prod\n# pnpm creates smaller node_modules with hard links (20-30% smaller)\n```\n\n## Next.js on Bun: build with Bun, run with Node\n\nBun works for the dependency and build stages of a Next.js image, but the\nruntime stage that serves `.next\u002Fstandalone` must be **Node.js**. The standalone\noutput targets Node, and Bun does not resolve the React Server Components SSR\nmodules it loads (`react-dom\u002Fserver.edge`, `react-dom\u002Fserver-rendering-stub`,\n`react-server-dom-webpack\u002Fclient.edge`), so it fails at runtime with\n\"Could not resolve\" errors.\n\n```dockerfile\nFROM oven\u002Fbun:1-debian AS deps        # install\nFROM oven\u002Fbun:1-debian AS builder     # next build\nFROM gcr.io\u002Fdistroless\u002Fnodejs22-debian12 AS runner\nCMD [\"server.js\"]\n```\n\n## Distroless runtime: no shell, so no `child_process` to CLI tools\n\nA distroless Node image contains Node and nothing else: no `\u002Fbin\u002Fsh`, `gzip`,\n`pg_dump`, or `psql`. Application code that shells out through\n`node:child_process` (`exec`, `execSync`, `spawn` of a CLI) works in local dev\nand fails only in production, with `spawn \u002Fbin\u002Fsh ENOENT`. Use Node built-ins\nor a library instead:\n\n| Shell tool | In-process replacement |\n|------------|------------------------|\n| `gzip` \u002F `gunzip` | `node:zlib` (`gzipSync`, `createGzip`, `gunzipSync`) |\n| `cat`, `cp`, file writes | `node:fs` |\n| `pg_dump` \u002F `psql` | export\u002Fimport through the app's database client or ORM |\n\nThe same constraint means ops scripts cannot be `kubectl exec`'d into the\nrunning app pod. Ship them in a separate image and run them as a Job. To stop\nthe mistake before review, ban the import with a lint rule (for example Biome\n`noRestrictedImports` on `node:child_process` for server source).\n\n## Performance Impact\n\n| Metric | Full Node (900MB) | Alpine (350MB) | Multi-Stage (100MB) | Improvement |\n|--------|-------------------|----------------|---------------------|-------------|\n| **Image Size** | 900MB | 350MB | 100MB | 89% reduction |\n| **Pull Time** | 3m 20s | 1m 10s | 25s | 87% faster |\n| **Build Time** | 4m 30s | 3m 15s | 2m 30s | 44% faster |\n| **Rebuild (cached)** | 2m 10s | 1m 30s | 15s | 88% faster |\n| **Memory Usage** | 512MB | 256MB | 180MB | 65% reduction |\n\n## Security Impact\n\n| Image Type | Vulnerabilities | Size | Risk |\n|------------|-----------------|------|------|\n| **node:20 (Debian)** | 45-60 CVEs | 900MB | High |\n| **node:20-alpine** | 8-12 CVEs | 350MB | Medium |\n| **Multi-stage Alpine** | 4-8 CVEs | 100MB | Low |\n| **Distroless Node** | 2-4 CVEs | 120MB | Very Low |\n\n## Agentic Optimizations\n\n| Context | Command | Purpose |\n|---------|---------|---------|\n| **Fast rebuild** | `DOCKER_BUILDKIT=1 docker build --target build .` | Build only build stage |\n| **Size check** | `docker images app --format \"table {{.Repository}}\\t{{.Size}}\"` | Compare sizes |\n| **Layer analysis** | `docker history app:latest --human --no-trunc \\| head -20` | Find large layers |\n| **Dependency audit** | `docker run --rm app npm audit --production` | Check vulnerabilities |\n| **Cache clear** | `docker builder prune --filter type=exec.cachemount` | Clear BuildKit cache |\n| **Test locally** | `docker run --rm -p 3000:3000 app` | Quick local test |\n\n## Best Practices\n\n- Use Alpine variants for smaller images\n- Use `npm ci` not `npm install` (reproducible builds)\n- Separate dev and production dependencies\n- Run as non-root user\n- Use multi-stage builds for production\n- Layer package.json separately from source code\n- Add .dockerignore to exclude node_modules, tests\n\nFor detailed examples, advanced patterns, and best practices, see [REFERENCE.md](REFERENCE.md).\n\n## Related Skills\n\n- `container-development` - General container patterns, multi-stage builds, security\n- `go-containers` - Go-specific container optimizations\n- `python-containers` - Python-specific container optimizations\n","# Node.js Container Optimization\n\nExpert knowledge for building optimized Node.js container images using Alpine variants, multi-stage builds, and Node.js-specific dependency management patterns.\n\n## When to Use This Skill\n\n| Use this skill when... | Use `container-development` instead when... |\n|------------------------|---------------------------------------------|\n| Building Node.js-specific Dockerfiles | General multi-stage build patterns |\n| Optimizing Node.js image sizes | Language-agnostic container security |\n| Handling npm\u002Fyarn\u002Fpnpm in containers | Docker Compose configuration |\n| Dealing with native module builds | Non-Node.js container optimization |\n\n## Core Expertise\n\n**Node.js Container Challenges**:\n- Large node_modules directories (100-500MB)\n- Full base images include build tools (~900MB)\n- Separate dev and production dependencies\n- Different package managers (npm, yarn, pnpm)\n- Native modules requiring build tools\n\n**Key Capabilities**:\n- Alpine-based images (~100MB vs ~900MB full)\n- Multi-stage builds separating build and runtime\n- BuildKit cache mounts for node_modules\n- Production-only dependency installation\n- Non-root user configuration\n\n## Optimized Multi-Stage Pattern (Node Servers)\n\nThe recommended pattern achieves ~100-150MB images:\n\n```dockerfile\n# Dependencies stage - production only\nFROM node:20-alpine AS deps\nWORKDIR \u002Fapp\nCOPY package*.json .\u002F\nRUN npm ci --only=production\n\n# Build stage - includes devDependencies\nFROM node:20-alpine AS build\nWORKDIR \u002Fapp\nCOPY package*.json .\u002F\nRUN npm ci\nCOPY . .\nRUN npm run build\n\n# Runtime stage - minimal\nFROM node:20-alpine\nWORKDIR \u002Fapp\n\n# Create non-root user\nRUN addgroup -g 1001 -S nodejs && \\\n    adduser -u 1001 -S nodejs -G nodejs\n\n# Copy dependencies and built app\nCOPY --from=deps --chown=nodejs:nodejs \u002Fapp\u002Fnode_modules .\u002Fnode_modules\nCOPY --from=build --chown=nodejs:nodejs \u002Fapp\u002Fdist .\u002Fdist\nCOPY --chown=nodejs:nodejs package.json .\u002F\n\nUSER nodejs\nEXPOSE 3000\n\nHEALTHCHECK --interval=30s CMD node healthcheck.js || exit 1\n\nCMD [\"node\", \"dist\u002Fserver.js\"]\n```\n\n## BuildKit Cache Mounts (Fastest Builds)\n\n```dockerfile\n# syntax=docker\u002Fdockerfile:1\n\nFROM node:20-alpine AS build\nWORKDIR \u002Fapp\n\n# Cache mount for npm cache\nRUN --mount=type=cache,target=\u002Froot\u002F.npm \\\n    --mount=type=bind,source=package.json,target=package.json \\\n    --mount=type=bind,source=package-lock.json,target=package-lock.json \\\n    npm ci\n\nCOPY . .\nRUN npm run build\n\nFROM node:20-alpine\nWORKDIR \u002Fapp\nCOPY --from=build \u002Fapp\u002Fdist .\u002Fdist\nUSER node\nCMD [\"node\", \"dist\u002Fserver.js\"]\n```\n\n**Build performance**:\n- First build: ~2-3 minutes\n- Subsequent builds (no package changes): ~10-20 seconds\n- Subsequent builds (package changes): ~30-60 seconds\n\n## Package Manager Patterns\n\n### npm\n\n```dockerfile\nCOPY package*.json .\u002F\nRUN npm ci --only=production\nRUN npm cache clean --force\n```\n\n### yarn\n\n```dockerfile\nCOPY package.json yarn.lock .\u002F\nRUN yarn install --frozen-lockfile --production\nRUN yarn cache clean\n```\n\n### pnpm\n\n```dockerfile\nRUN npm install -g pnpm\nCOPY package.json pnpm-lock.yaml .\u002F\nRUN pnpm install --frozen-lockfile --prod\n# pnpm creates smaller node_modules with hard links (20-30% smaller)\n```\n\n## Next.js on Bun: build with Bun, run with Node\n\nBun works for the dependency and build stages of a Next.js image, but the\nruntime stage that serves `.next\u002Fstandalone` must be **Node.js**. The standalone\noutput targets Node, and Bun does not resolve the React Server Components SSR\nmodules it loads (`react-dom\u002Fserver.edge`, `react-dom\u002Fserver-rendering-stub`,\n`react-server-dom-webpack\u002Fclient.edge`), so it fails at runtime with\n\"Could not resolve\" errors.\n\n```dockerfile\nFROM oven\u002Fbun:1-debian AS deps        # install\nFROM oven\u002Fbun:1-debian AS builder     # next build\nFROM gcr.io\u002Fdistroless\u002Fnodejs22-debian12 AS runner\nCMD [\"server.js\"]\n```\n\n## Distroless runtime: no shell, so no `child_process` to CLI tools\n\nA distroless Node image contains Node and nothing else: no `\u002Fbin\u002Fsh`, `gzip`,\n`pg_dump`, or `psql`. Application code that shells out through\n`node:child_process` (`exec`, `execSync`, `spawn` of a CLI) works in local dev\nand fails only in production, with `spawn \u002Fbin\u002Fsh ENOENT`. Use Node built-ins\nor a library instead:\n\n| Shell tool | In-process replacement |\n|------------|------------------------|\n| `gzip` \u002F `gunzip` | `node:zlib` (`gzipSync`, `createGzip`, `gunzipSync`) |\n| `cat`, `cp`, file writes | `node:fs` |\n| `pg_dump` \u002F `psql` | export\u002Fimport through the app's database client or ORM |\n\nThe same constraint means ops scripts cannot be `kubectl exec`'d into the\nrunning app pod. Ship them in a separate image and run them as a Job. To stop\nthe mistake before review, ban the import with a lint rule (for example Biome\n`noRestrictedImports` on `node:child_process` for server source).\n\n## Performance Impact\n\n| Metric | Full Node (900MB) | Alpine (350MB) | Multi-Stage (100MB) | Improvement |\n|--------|-------------------|----------------|---------------------|-------------|\n| **Image Size** | 900MB | 350MB | 100MB | 89% reduction |\n| **Pull Time** | 3m 20s | 1m 10s | 25s | 87% faster |\n| **Build Time** | 4m 30s | 3m 15s | 2m 30s | 44% faster |\n| **Rebuild (cached)** | 2m 10s | 1m 30s | 15s | 88% faster |\n| **Memory Usage** | 512MB | 256MB | 180MB | 65% reduction |\n\n## Security Impact\n\n| Image Type | Vulnerabilities | Size | Risk |\n|------------|-----------------|------|------|\n| **node:20 (Debian)** | 45-60 CVEs | 900MB | High |\n| **node:20-alpine** | 8-12 CVEs | 350MB | Medium |\n| **Multi-stage Alpine** | 4-8 CVEs | 100MB | Low |\n| **Distroless Node** | 2-4 CVEs | 120MB | Very Low |\n\n## Agentic Optimizations\n\n| Context | Command | Purpose |\n|---------|---------|---------|\n| **Fast rebuild** | `DOCKER_BUILDKIT=1 docker build --target build .` | Build only build stage |\n| **Size check** | `docker images app --format \"table {{.Repository}}\\t{{.Size}}\"` | Compare sizes |\n| **Layer analysis** | `docker history app:latest --human --no-trunc \\| head -20` | Find large layers |\n| **Dependency audit** | `docker run --rm app npm audit --production` | Check vulnerabilities |\n| **Cache clear** | `docker builder prune --filter type=exec.cachemount` | Clear BuildKit cache |\n| **Test locally** | `docker run --rm -p 3000:3000 app` | Quick local test |\n\n## Best Practices\n\n- Use Alpine variants for smaller images\n- Use `npm ci` not `npm install` (reproducible builds)\n- Separate dev and production dependencies\n- Run as non-root user\n- Use multi-stage builds for production\n- Layer package.json separately from source code\n- Add .dockerignore to exclude node_modules, tests\n\nFor detailed examples, advanced patterns, and best practices, see [REFERENCE.md](REFERENCE.md).\n\n## Related Skills\n\n- `container-development` - General container patterns, multi-stage builds, security\n- `go-containers` - Go-specific container optimizations\n- `python-containers` - Python-specific container optimizations\n",{"name":5,"created":47,"modified":48,"reviewed":47,"description":7,"allowed-tools":49,"user-invocable":43},1768435200000,1790208000000,"Bash, Read, Grep, Glob, Edit, Write, TodoWrite, WebSearch, WebFetch","main","bdd0582f1a2ba53d21061835bfd72d45f2f954f4","container-plugin\u002Fskills\u002Fnodejs-containers",6,"https:\u002F\u002Fgithub.com\u002Flaurigates\u002Fclaude-plugins","https:\u002F\u002Fgithub.com\u002Flaurigates","Linux enthusiast, cloud engineer, neovim addict, electronics hobbyist.","2026-11-13 20:24:11",{"source":8,"skillName":5,"commands":59,"prompt":69,"zipAvailable":70},[60,63,66],{"tool":61,"command":62},"npx","npx skills add laurigates\u002Fclaude-plugins --skill nodejs-containers",{"tool":64,"command":65},"bunx","bunx skills add laurigates\u002Fclaude-plugins --skill nodejs-containers",{"tool":67,"command":68},"pnpm","pnpm dlx skills add laurigates\u002Fclaude-plugins --skill nodejs-containers","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Flaurigates\u002Fclaude-plugins\u002Fblob\u002Fmain\u002Fcontainer-plugin\u002Fskills\u002Fnodejs-containers\u002FSKILL.md",true,[72],{"path":73,"resourceType":74,"resourceTypeDesc":75,"sizeBytes":76,"sourceHtmlUrl":77},"REFERENCE.md","REFERENCE","参考文档",6242,"https:\u002F\u002Fgithub.com\u002Flaurigates\u002Fclaude-plugins\u002Fblob\u002Fmain\u002Fcontainer-plugin\u002Fskills\u002Fnodejs-containers\u002FREFERENCE.md",[79,105,123,139,162,192],{"skillNo":80,"name":81,"nameZh":6,"description":82,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":83,"categories":84,"keywords":90,"publishedAt":42},"01M70PFHMH9ADY0CRE6047Y4B2","kitty-show-image","Show the user an image with a note on what to judge, via a file send or a labelled kitty tab. Use when the user must see an image, or icat fails with no \u002Fdev\u002Ftty.","https:\u002F\u002Fgithub.com\u002Flaurigates\u002Fclaude-plugins\u002Fblob\u002Fmain\u002Fkitty-plugin\u002Fskills\u002Fkitty-show-image\u002FSKILL.md",[85],{"categoryNo":86,"categoryName":87,"taxonomyType":88,"taxonomyTypeDesc":89},"01JBSEEDCAT000000000000016","图像与多媒体","SCENARIO","使用场景",[91,92,23,93,94,95,96,97,98,99,32,24,40,100,101,102,103,104,22,36],"show","kitty show image","kitty","show image","ls","get","send","open","dev","file","text","with","xdg","via",{"skillNo":106,"name":107,"nameZh":6,"description":108,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":109,"categories":110,"keywords":111,"publishedAt":42},"01M70PFEN18HKQ4RCQ1VPGMPTB","kitty-session-persistence","Snapshot and restore kitty terminal sessions on macOS. Use when surviving WindowServer hangs without losing tabs, configuring snapshots, or restoring after a force-reboot.","https:\u002F\u002Fgithub.com\u002Flaurigates\u002Fclaude-plugins\u002Fblob\u002Fmain\u002Fkitty-plugin\u002Fskills\u002Fkitty-session-persistence\u002FSKILL.md",[],[93,112,113,114,27,115,24,40,116,117,118,22,36,35,34,119,120,121,122,32],"kitty session persistence","session","persistence","snapshots","uname","reboot","terminal","snapshot","macos","sessions","restore",{"skillNo":124,"name":125,"nameZh":6,"description":126,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":127,"categories":128,"keywords":129,"publishedAt":42},"01M70PFC77XGXCVQ1543VGZHYR","kitty-remote-control","Safe kitty remote control from an agent — read panes with kitty @ ls\u002Fget-text, notify, and never mutate the live terminal unasked. Use when running inside kitty.","https:\u002F\u002Fgithub.com\u002Flaurigates\u002Fclaude-plugins\u002Fblob\u002Fmain\u002Fkitty-plugin\u002Fskills\u002Fkitty-remote-control\u002FSKILL.md",[],[130,131,93,132,133,95,134,135,96,136,137,32,24,138,40,101,102,118,22,36],"kitty remote control","remote","control","remote control","running","never","panes","notify","query",{"skillNo":140,"name":141,"nameZh":6,"description":142,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":143,"categories":144,"keywords":145,"publishedAt":42},"01M70P6WVMCT5JG4SACTM69AF9","docs-reference-check","Dangling doc-reference gate: flag markdown naming repo paths or relative links that no longer exist. Use when docs cite moved\u002Fdeleted files, or wiring a doc-drift lint.","https:\u002F\u002Fgithub.com\u002Flaurigates\u002Fclaude-plugins\u002Fblob\u002Fmain\u002Fdocumentation-plugin\u002Fskills\u002Fdocs-reference-check\u002FSKILL.md",[],[146,147,148,149,150,151,152,153,154,155,32,24,40,156,100,157,158,159,160,161],"docs reference check","check","reference check","reference","docs","links","python3","repo","files","auto","drift","lint","wiring","chezmoi","references","cp",{"skillNo":163,"name":164,"nameZh":6,"description":165,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":166,"categories":167,"keywords":177,"publishedAt":42},"01M6C6NDE7DAQGNWSF22J5CJ0Z","youtube-upload","Upload a video to YouTube via the Data API v3 and edit its title, description, tags or thumbnail afterwards. Use when publishing or retitling a YouTube video.","https:\u002F\u002Fgithub.com\u002Flaurigates\u002Fclaude-plugins\u002Fblob\u002Fmain\u002Fyoutube-plugin\u002Fskills\u002Fyoutube-upload\u002FSKILL.md",[168,171,172],{"categoryNo":169,"categoryName":170,"taxonomyType":88,"taxonomyTypeDesc":89},"01JBSEEDCAT000000000000010","后端与接口",{"categoryNo":86,"categoryName":87,"taxonomyType":88,"taxonomyTypeDesc":89},{"categoryNo":173,"categoryName":174,"taxonomyType":175,"taxonomyTypeDesc":176},"01JBSEEDCAT000000000000030","开发工程师","PROFESSION","适用职业",[178,179,180,181,152,182,36,183,34,184,185,186,32,40,100,187,188,24,189,190,191,104,22],"youtube upload","upload","youtube","Video","run","uv run","publishing","data","uv","api","v3","tags","id","title",{"skillNo":193,"name":194,"nameZh":6,"description":195,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":196,"categories":197,"keywords":201,"publishedAt":42},"01M6C6NABWW1X58KJJM4F6GQMQ","youtube-studio-share","Share a private YouTube video with a whole Google Workspace organization by scripting YouTube Studio in the browser. Use when a video must be org-only.","https:\u002F\u002Fgithub.com\u002Flaurigates\u002Fclaude-plugins\u002Fblob\u002Fmain\u002Fyoutube-plugin\u002Fskills\u002Fyoutube-studio-share\u002FSKILL.md",[198],{"categoryNo":199,"categoryName":200,"taxonomyType":88,"taxonomyTypeDesc":89},"01JBSEEDCAT000000000000023","Skill与智能体开发",[202,203,204,205,180,181,206,207,208,209,210,36,211,212,213,214,32,215,24,102,216,22],"youtube studio share","share","youtube studio","studio","browser","javascript","scripting","google workspace","workspace","tool","google","only","MCP","chrome","organization"]