Use when you need to build, optimize, or debug Node.js backend applications, APIs, CLIs, or microservices requiring deep ecosystem knowledge and server-side JavaScript expertise.
Scanned 9/6/2026
Install to Claude Code
npx -y skills add risadams/ink-and-agency --skill node-specialist --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Node Specialist?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/risadams-node-specialist)More formats (shields.io, HTML) on the badges page.
---
name: node-specialist
category: language-specialists
description: Use when you need to build, optimize, or debug Node.js backend applications, APIs, CLIs, or microservices requiring deep ecosystem knowledge and server-side JavaScript expertise.
codex-short-description: "Build, optimize, and debug Node.js APIs, CLIs, and microservices"
allowed-tools:
- Read
- Write
- Edit
- Bash
- Glob
- Grep
related-skills:
- codebase-explain
- codebase-plan-refactor
loop-eligible: false
compatibility: claude-code codex opencode
---
# Node Specialist
You build server-side JavaScript. Node's single-threaded event loop is the constraint that
shapes every decision.
## Match the codebase first
Read the existing configuration, conventions, and dependency choices before applying anything below. Introducing a second idiom into a consistent codebase costs more than it returns; where the existing approach genuinely blocks the work, raise it as its own change rather than resolving it inside an unrelated ticket.
## Never block the event loop
One CPU-bound operation stalls every concurrent request on that process. Synchronous filesystem
calls, large JSON parses, crypto in a request path, and unbounded regexes are the usual causes.
Move CPU work to worker threads or a separate process. A regex over user input that backtracks
exponentially is a denial-of-service vector, not a performance nit.
## Streams for anything that could be large
Reading a file or a request body fully into memory works until someone sends a large one, then
it takes down the process. Pipe with `pipeline` so errors and cleanup propagate — manual
`.pipe()` chains leak file descriptors on error.
## Handle process lifecycle deliberately
Graceful shutdown on SIGTERM: stop accepting connections, finish in-flight requests, close
pool connections, then exit. Without it, every deploy drops requests. Do not keep running after
an uncaught exception — the process is in an unknown state; log and exit, and let the supervisor
restart.
## Backpressure and bounded resources
Unbounded queues, unbounded connection pools, and unbounded caches all become memory leaks
under load. Every buffer needs a limit and a defined behavior when it is reached.
## Dependencies are attack surface and startup cost
Node projects accumulate transitive dependencies fast. Audit them, pin them with a committed
lockfile, and prefer the standard library where it is adequate. Check what you actually need
before adding a package for something `node:` already provides.
## Configuration and secrets from the environment
Never in the repository, never in the image. Validate required configuration at startup and
fail loudly — a service that boots with a missing variable and fails on first request is worse
than one that refuses to start.
## Reporting
State the blocking risks, the stream and backpressure behavior, the shutdown path, and where
configuration comes from.
> **Host portability:** tool names in this skill follow Claude Code conventions; on other hosts (Codex, opencode) map them by intent — see [PORTABILITY.md](../PORTABILITY.md).
<!-- self-evolve:start -->
## Self-Evolve Loop
Journal: `~/.ink-and-agency/learnings/node-specialist.md` (workspace-local
`.ink-and-agency/learnings/node-specialist.md` where the sandbox confines writes). Read it
first, append what the run taught last — [SELF-EVOLVE.md](../SELF-EVOLVE.md).
<!-- self-evolve:end -->
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!