npx skills add ...
npx skills add ulpi-io/skills --skill nodejs
Write Node.js and Bun backend code the way THIS project already does it, not by generic defaults — a TypeScript-first reference that detects the runtime and carries the real conventions for HTTP servers, Zod boundary validation, typed error handling, pino logging, database access, auth, BullMQ queues, caching, async and graceful-shutdown patterns, security, CLI tooling, testing, and observability, so a change lands idiomatic and review-ready instead of merely running. Use when a task touches this project's Node.js or Bun backend and should follow its conventions rather than generic defaults.
npx skills add ulpi-io/skills --skill nodejs
Non-negotiable rules:
references/stack.md first to determine the runtime (Node.js or Bun), framework, and locked decisions.any, no implicit returns, no unchecked index access..catch() at every boundary.req.body.console.log in production code. JSON to stdout, parsed by log aggregators.$request: The backend task, subsystem, bug, or feature being worked onRoute Node.js/Bun backend work through the project's conventions so implementation follows the established patterns for server architecture, data access, error handling, and deployment.
Always start with:
references/stack.mdThat establishes: runtime (Node.js or Bun), framework (Express/Fastify/Hono/none), ORM, test runner, package manager, and locked dependency choices.
If bun.lockb or bunfig.toml exists, the runtime is Bun — also load references/bun-runtime.md for native API differences.
Success criteria: The project's runtime, framework, and toolchain choices are explicit before implementation starts.
Use the routing table to pick reference files. Do not bulk-load the full reference tree.
| Task | Read |
|---|---|
| Runtime, TypeScript, package manager, locked deps | references/stack.md |
| Folder conventions, entry points, monorepo layout | references/project-structure.md |
| Express/Fastify/Hono patterns, middleware, routing | references/http-server.md |
| REST conventions, versioning, pagination, error responses | references/api-design.md |
| Zod/AJV input validation, DTO patterns | references/validation.md |
| Prisma/Drizzle/Knex, migrations, connection pooling | references/database.md |
| JWT, sessions, OAuth2, RBAC, middleware guards | references/auth.md |
| Error classes, async error boundaries, HTTP error responses | references/error-handling.md |
| pino structured logging, request correlation, log levels | references/logging.md |
| vitest/jest/bun test, supertest, test factories, coverage | references/testing.md |
| Promises, streams, worker threads, AbortController, shutdown | references/async-patterns.md |
| helmet, CORS, rate limiting, input sanitization, dep audit | references/security.md |
| Redis, in-memory caching, cache invalidation patterns | references/caching.md |
| BullMQ, job patterns, retry strategies, dead-letter queues | references/queues-jobs.md |
| Env validation, dotenv, config modules, secrets management | references/config.md |
| OpenTelemetry, health checks, metrics, distributed tracing | references/observability.md |
| Multi-stage Dockerfile, .dockerignore, prod vs dev images | references/docker.md |
| ws/Socket.io, connection lifecycle, scaling, rooms | references/websockets.md |
| commander/yargs, argument parsing, exit codes, stdin/stdout | references/cli.md |
| Bun-native APIs, bun test, bun build, Bun.serve, Bun.$ | references/bun-runtime.md |
Multiple tasks? Read multiple files. The references are self-contained.
Success criteria: Only the task-relevant backend conventions are in play.
Keep these rules active:
noUncheckedIndexedAccessany, no as type assertions unless justified with a commentBun.serve(), Bun.file(), bun test over Node.js equivalentsSuccess criteria: The change matches the project's backend architecture instead of generic defaults.
Use the narrowest relevant verification:
vitest run, jest, or bun test)tsc --noEmit)eslint .)Success criteria: The changed backend surface still builds, type-checks, and passes tests.
SKILL.md.references/stack.md.console.log in production code — use pino.disable-model-invocation; this is a normal domain skill.references/stack.md
Always.
references/bun-runtime.md
When the project uses Bun (detected via bun.lockb or bunfig.toml).
then only the task-relevant files under references/
Report: