Source: mcollina/skills · Maintainer: community: Matteo Collina · License: MIT · Checked: 24 October 2026
What is the Node.js skill?
The node skill is an Agent Skill that gives Claude Code, Codex, Cursor and other agents Node.js best practices for TypeScript projects: run .ts files with native type stripping, compose streams with pipeline(), shut down gracefully, and diagnose flaky or hanging tests with the built-in test runner.
It lives in mcollina/skills, the MIT-licensed collection of Matteo Collina, who is listed as a Technical Steering Committee voting member in the Node.js README, alongside his Fastify skill and OAuth skill. The README describes the node skill in one line: "Best practices for Node.js development."
The SKILL.md description is long and trigger-heavy. It starts: "Provides domain-specific best practices for Node.js development with TypeScript, covering type stripping, async patterns, error handling, streams, modules, testing, performance, caching, logging, and more." It then lists phrases such as "native TypeScript in Node", "strip types" and "ts-node alternative" so the agent loads the skill when you use them.
As of 24 October 2026, its skills.sh page listed 5.8K installs (snapshot, 24 October 2026), and the repo had about 2.0K stars.
What does it do?
The SKILL.md has four parts: type stripping, common workflows, a streams and caching checklist, and an index of rule files.
TypeScript with type stripping. The skill says to use type stripping "instead of build tools like ts-node or tsx." For that to work, code must use import type for type-only imports, const objects instead of enums, no namespaces or parameter properties, and .ts extensions in imports. Those constraints match the Node.js TypeScript docs, which say enums, namespaces with runtime code and parameter properties need transformation, and that file extensions are mandatory in imports.
Common workflows. Short step sequences for five jobs:
- Graceful shutdown: handle SIGTERM and SIGINT, stop new work, drain requests, close connections, exit.
- Error handling: a shared error base class, operational vs programmer errors,
unhandledRejectionhandlers. - Flaky tests: isolate the test, check shared state and timers, inspect teardown order.
- Stuck processes and tests: run with a timeout, then find open handles with
why-is-node-running. - Profiling: reproduce under load, capture a CPU profile, find hot functions, then benchmark.
Streams and caching checklist. When a task mentions CSV, ETL, large files, backpressure or repeated lookups, the agent should use await pipeline(...) from node:stream/promises, include an async function* transform, and pick lru-cache for bounded in-process reuse or async-cache-dedupe to collapse concurrent calls for the same key.
Rule files. The rules/ folder holds 15 Markdown files plus a sample graceful-server.ts with a test:
| Rule file | Main recommendation |
|---|---|
typescript.md |
Type stripping setup and tsconfig |
async-patterns.md |
Promise.all, controlled concurrency, AbortController |
error-handling.md |
Coded errors with @fastify/create-error or a minimal pattern |
streams.md |
pipeline, async generators, backpressure |
modules.md |
Prefer ES Modules, file extensions, dynamic imports |
testing.md |
Built-in node:test runner |
flaky-tests.md, stuck-processes-and-tests.md |
--test-reporter, --test-timeout, why-is-node-running |
performance.md |
Don't block the event loop, worker threads with Piscina |
caching.md |
lru-cache, async-cache-dedupe, mnemonist |
profiling.md |
Flame graphs with @platformatic/flame, load tests with autocannon |
logging.md |
Structured JSON logs with pino |
environment.md |
--env-file and process.loadEnvFile() |
graceful-shutdown.md |
close-with-grace |
node-modules-exploration.md |
Navigating node_modules |
The folder also has a tile.json manifest that names the package mcollina/node-best-practices.
How do you install the node skill?
The repo README lists the skills but has no install section and the repo has no Claude Code plugin marketplace. The skills.sh page gives this command for the skills CLI:
npx skills add https://github.com/mcollina/skills --skill node
Add -g to make it available across projects, or -a claude-code to target Claude Code. Claude Code reads standalone skills from .claude/skills/ in a project or ~/.claude/skills/ for all projects, per the Claude Code skills docs. Codex and Cursor read the same SKILL.md format; see Codex skills and Cursor skills.
If you build on Fastify, consider installing fastify-best-practices too; both skills recommend the same type stripping setup and several of the same libraries.
How do you use it?
The skill is model-invoked, so the agent can load it whenever you work on Node.js code, or you can call it with /node in Claude Code.
Example prompts (suggestions, not quotes from the repo):
Set up this new service to run TypeScript with Node type stripping, no build step. Update tsconfig and package.json scripts.Our CSV import loads the whole file into memory. Rewrite it as a stream pipeline with backpressure and cached lookups.node --test hangs in CI after the last test. Find what keeps the process alive and fix the teardown.Add graceful shutdown to server.ts so deploys drain in-flight requests.Profile the /search endpoint under load and tell me where time goes.
Expect answers that reach for Node built-ins first (node:test, --env-file, node:stream/promises) and for specific libraries where the rules name one.
Tips and limits
From the repo and Node's docs, not from testing:
- Version numbers differ slightly. The rule file
typescript.mdsays type stripping runs without flags on Node.js 22.19+, 23.6+ and 24+. Node's docs say it is enabled by default from v22.18.0 and v23.6.0. If you are on 22.18, you don't need the flag. - Opinionated library choices. The rules recommend pino, close-with-grace, Piscina, autocannon and
@fastify/create-error, several from the Fastify and Pino ecosystem Collina works on. If your team uses other tools, say so in your prompt or CLAUDE.md. - Broad trigger. The skill says to use it "whenever you are dealing with Node.js code". In a repo where you don't want TypeScript-first advice, install it per project instead of with
-g. - Not Node internals. C++ addons, V8 and libuv belong to the separate
nodejs-coreskill in the same repo. - Security audits. On 24 October 2026, skills.sh showed Pass from Gen Agent Trust Hub, Socket and Snyk. The skill runs no scripts; the
.tsfiles are examples.
Under the MIT License you can copy and change the skill as long as you keep the copyright notice.
Save it in your Kipt library
Kipt keeps your prompts and skills as Markdown in a private GitHub repo you own. In Kipt, open Skills and paste the skills/node folder link into the import box; Kipt reads the SKILL.md and the rules/ files. Paste the repo link instead and Kipt shows a list of Collina's skills to pick from. Everything you save installs into Claude Code or Codex with one command:
npx skills add https://github.com/<you>/<repo>.git --all -g
Kipt is not affiliated with Matteo Collina or mcollina/skills.
Similar skills
- Fastify skill: Collina's skill for Fastify servers, routes, schemas and testing.
- OAuth skill: OAuth 2.0 and 2.1 flows in Fastify, from the same repo.
- API design principles skill: REST and GraphQL design guidance for the endpoints you build.
- Postgres best practices skill: database rules for the service behind your Node.js API.