Agent skill

Node Modern

by WrongStack in WrongStack/WrongStack

A skill your agent uses when writing, reviewing, or refactoring Node.js code — modules, async flow, cancellation, file and process I/O, HTTP — on a current Node.js release.

MITAuto-check passedDevelopment

Install Node Modern

skills CLI
$ npx skills add WrongStack/WrongStack --skill node-modern -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install WrongStack/WrongStack node-modern --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/WrongStack/WrongStack.git skills-src && mkdir -p .claude/skills && cp -r skills-src/packages/core/skills/node-modern .claude/skills/node-modern && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
node-modern
GitHub stars
370
Token cost
~1.3k tokens
SKILL.md length
404 words
Files
2
Skills in repo
38
Repo updated
First seen
Licence
MIT

At a glance

A skill your agent uses when writing, reviewing, or refactoring Node.js code — modules, async flow, cancellation, file and process I/O, HTTP — on a current Node.js release.

  • Works in 8 steps: Match the module system. In an ESM… → Import built-ins with the node: prefix… → Give every operation that can wait a… → …
  • Refactoring Node.js code — modules
  • SKILL.md covers Overview, Rules, Patterns and Anti-patterns, plus 2 more sections
  • Instructions only: no scripts, shell commands, URLs or credentials in SKILL.md

What it does

Node Modern is an agent skill from WrongStack/WrongStack. Use this skill when writing, reviewing, or refactoring Node.js code — modules, async flow, cancellation, file and process I/O, HTTP — on a current Node.js release. Triggers: user mentions "Node", "Node.js", "ESM", "CommonJS", "require", "import", "fetch", "AbortSignal", "AbortController", "stream", "childprocess", "spawn", "fs", "event loop".

Its SKILL.md is about 1.3k tokens, which your agent loads only when the skill is triggered. The skill folder holds 1 other file (for example `SKILL.save.md`).

It sits in Development, covering Async programming and Refactoring. It works with Node.js. The repository describes itself as: An AI coding agent that reads your code, edits files, runs commands, and reasons through bugs — across a terminal REPL, a full-screen TUI, and a browser UI, while you keep your… The licence is MIT.

When your agent uses it

  • Refactoring Node.js code — modules
  • File and process I/O
  • HTTP — on a current Node.js release

Example prompts

  • “Node.js”
  • “CommonJS”
  • “require”
  • “/node-modern”

Requirements

  • Node.js

Workflow steps

8 steps, taken from the first numbered list in SKILL.md.

  1. Match the module system. In an ESM package ("type": "module" or .mjs)
  2. Import built-ins with the node: prefix (node:fs/promises, node:path).
  3. Give every operation that can wait a deadline: pass an AbortSignal to
  4. Prefer built-ins over dependencies — global fetch over axios/node-fetch,
  5. Handle ENOENT by reading inside try/catch and branching on err.code;
  6. Never block the event loop in a server or CLI hot path: no *Sync fs calls
  7. Pass arguments to child processes as an array (execFile/spawn), never by
  8. Every promise is awaited, returned, or explicitly handled; let entry points

What it can do on your machine

Read from SKILL.md and the folder at commit 57f6018. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    No scripts in the folder and no shell commands in SKILL.md (its code samples are typescript).

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Node Modern loads about 1.3k tokens when it runs. Until then it costs about 89 tokens; SKILL.md has 404 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~89
When it runs · the whole SKILL.md, loaded when a task matches
~1.3k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from WrongStack/WrongStack at commit 57f6018, republished under its MIT licence (© WrongStack). 404 words, ~1,327 tokens.

Download SKILL.mdSave it as .claude/skills/node-modern/SKILL.md (or your agent's skills folder). This skill also uses 1 other file; get the full folder from GitHub.
name
node-modern
description
Use this skill when writing, reviewing, or refactoring Node.js code — modules, async flow, cancellation, file and process I/O, HTTP — on a current Node.js release. Triggers: user mentions "Node", "Node.js", "ESM", "CommonJS", "require", "import", "fetch", "AbortSignal", "AbortController", "stream", "child_process", "spawn", "fs", "event loop".
version
2.0.0
required-capabilities
filesystem.read, filesystem.write
optional-capabilities
verification.run

Modern Node.js

Overview

Current Node.js ships most of what older code pulled from npm: global fetch, AbortSignal.timeout, node:test, Web Streams, promise-based fs and timers. Use the platform first, and match the module system and Node version the project declares ("type" and "engines" in package.json, .nvmrc, CI config).

Rules

  1. Match the module system. In an ESM package ("type": "module" or .mjs) write ES import statements, with explicit file extensions on relative imports when the project compiles with NodeNext. Don't convert a CommonJS package to ESM as a side effect of another change.
  2. Import built-ins with the node: prefix (node:fs/promises, node:path).
  3. Give every operation that can wait a deadline: pass an AbortSignal to fetch calls, child processes, and timers; combine user cancellation with a timeout using AbortSignal.any.
  4. Prefer built-ins over dependencies — global fetch over axios/node-fetch, node:crypto randomUUID over uuid — unless the project already standardizes on the dependency.
  5. Handle ENOENT by reading inside try/catch and branching on err.code; checking access first is a race (TOCTOU).
  6. Never block the event loop in a server or CLI hot path: no *Sync fs calls or CPU-heavy loops on request paths.
  7. Pass arguments to child processes as an array (execFile/spawn), never by interpolating into a shell string.
  8. Every promise is awaited, returned, or explicitly handled; let entry points report unhandled rejections instead of swallowing them.

Patterns

ts
import { execFile } from 'node:child_process';
import { randomBytes } from 'node:crypto';
import { readFile, rename, writeFile } from 'node:fs/promises';
import { setTimeout as delay } from 'node:timers/promises';
import { promisify } from 'node:util';

const execFileAsync = promisify(execFile);

// Deadline plus user cancellation.
export async function getJson(url: string, signal?: AbortSignal): Promise<unknown> {
  const deadline = AbortSignal.timeout(10_000);
  const res = await fetch(url, { signal: signal ? AbortSignal.any([signal, deadline]) : deadline });
  if (!res.ok) throw new Error(`GET ${url} failed with ${res.status}`);
  return res.json();
}

// Missing file is an expected outcome, not an exception.
export async function readOptional(path: string): Promise<string | undefined> {
  try {
    return await readFile(path, 'utf8');
  } catch (err) {
    if ((err as NodeJS.ErrnoException).code === 'ENOENT') return undefined;
    throw err;
  }
}

// Atomic replace: readers never observe a half-written file.
export async function writeAtomic(target: string, data: string): Promise<void> {
  const tmp = `${target}.${randomBytes(4).toString('hex')}.tmp`;
  await writeFile(tmp, data);
  await rename(tmp, target);
}

// Cancellable delay — the promise API takes a signal; the global setTimeout does not.
await delay(500, undefined, { signal: AbortSignal.timeout(5_000) });

// Arguments as an array — no shell, no injection.
const { stdout } = await execFileAsync('git', ['log', '--oneline', '-5'], {
  signal: AbortSignal.timeout(15_000),
});

// Partial failure is acceptable: collect every outcome.
const results = await Promise.allSettled(urls.map((url) => getJson(url)));
const failed = results.filter((r) => r.status === 'rejected');

In ESM, __dirname doesn't exist: use import.meta.dirname on current Node, or path.dirname(fileURLToPath(import.meta.url)) on older releases.

Show full SKILL.md (162 more words)Show less

Anti-patterns

Anti-patternWhy it hurtsInstead
fetch(url) with no signalHangs forever on a stalled serverAbortSignal.timeout()
exec(\cmd ${input}`)`Shell injectionexecFile with an argument array
existsSync then readFileRace between check and usetry/catch on the read
readFileSync in a request handlerBlocks every other requestnode:fs/promises
Catching an AbortError and continuing silentlyHides timeouts and cancellationsRethrow, or report it as a timeout
writeFile directly over a config or state fileA crash leaves it truncatedWrite to a temp file, then rename

Before returning

  • Module system and Node version match what the project declares
  • Built-ins imported with node:; no new dependency the platform covers
  • Every network call, child process, and delay is cancellable or bounded
  • Child-process arguments passed as arrays
  • Missing-file and abort cases handled deliberately; no floating promises

Skills in scope

  • typescript-strict — for typing Node.js APIs and boundaries
  • security-scanner — for shell, path, and SSRF exposure in I/O code
  • testing — for testing async and time-based logic with fake timers

© WrongStack, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 1 other file in packages/core/skills/node-modern of WrongStack/WrongStack.

  • SKILL.md
  • SKILL.save.md

Open the folder on GitHubat commit 57f6018

Compare with similar skills

Node Modern next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Node Modern compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Node Modern this skillWrongStack/WrongStack370—~1.3kAutomated safety check: PassMIT
JavaScript ProJeffallan/claude-skills12k—~1.2kAutomated safety check: PassMIT
Code Simplification for ego-litecitrolabs/ego-lite17k—~1.2kAutomated safety check: PassMIT
ast-grep Codemod Referencewarp-drive-data/warp-drive3.2k—~2.6kAutomated safety check: PassMIT
Migrate Componentasyncapi/generator1.1k—~3kAutomated safety check: PassApache-2.0
Swift Concurrencysupabitapp/supaterm172—~3.3kAutomated safety check: PassCustom licence

Similar skills

  • JavaScript Pro

    Jeffallan/claude-skills

    Writes and reviews modern JavaScript: ES2023+ syntax, async/await, ESM modules, Node.js and browser APIs, with linting, leak checks and Jest tests.

    12k GitHub stars~1.2k tokensUpdated 5 days ago
    DevelopmentAuto-check passed
  • Finds and implements evidence-backed simplifications in the ego-lite repository, such as dead code, duplicated state and speculative abstractions, without hiding behavior changes.

    17k GitHub stars~1.2k tokensUpdated 15 days ago
    DevelopmentAuto-check passed
  • ast-grep Codemod Reference

    warp-drive-data/warp-drive

    Reference for writing and debugging TypeScript and JavaScript codemods with @ast-grep/napi: parsing, node queries, meta-variables, rule objects and editing.

    3.2k GitHub stars~2.6k tokensUpdated today
    DevelopmentAuto-check passed
  • Migrate Component

    asyncapi/generator

    Promote a duplicated React/JSX template-local component into the shared @asyncapi/generator-components package.

    1.1k GitHub stars~3k tokensUpdated 3 days ago
    DevelopmentAuto-check passed
  • Swift Concurrency

    supabitapp/supaterm

    Diagnose data races, convert callback-based code to async/await, implement actor isolation patterns, resolve Sendable conformance issues, and guide Swift 6 migration.

    172 GitHub stars~3.3k tokensUpdated 14 days ago
    DevelopmentAuto-check passed
  • Covers ES6+ syntax and functional patterns for refactoring older JavaScript: async/await, destructuring, spread, modules, generators and data pipelines.

    40k GitHub starsUsed in 12 repos~548 tokens
    DevelopmentAuto-check passed

More from WrongStack/WrongStack

All 38 skills in this repo
  • Design Craft

    WrongStack/WrongStack

    Design or substantially improve user-facing interfaces with a product-specific visual direction, content hierarchy, and rendered critique.

    370 GitHub stars~2k tokensUpdated today
    Auto-check passed
  • Design Critique

    WrongStack/WrongStack

    A skill your agent uses to audit an interface that already exists and say precisely why it looks generated, templated, or unfinished — a scored rubric across composition, typography, color, states…

    370 GitHub stars~3k tokensUpdated today
    Auto-check passed
  • Mailbox Bridge

    WrongStack/WrongStack

    A skill your agent uses when external coding agents (Claude Code, Aider, custom scripts) need to participate in the project's shared WrongStack mailbox, or when a user asks to "expose the mailbox"…

    370 GitHub stars~3.9k tokensUpdated today
    Auto-check passed
  • Multi Agent

    WrongStack/WrongStack

    A skill your agent uses whenever work can be split across multiple AI agents running in parallel, or when orchestrating leader/worker patterns in WrongStack.

    370 GitHub stars~3.6k tokensUpdated today
    Auto-check passed
  • Web Platform Baseline

    WrongStack/WrongStack

    Use this skill before asserting that a CSS, HTML or accessibility capability is available, unavailable, or the right tool — it carries dated, refreshable platform facts and refuses to let stale…

    370 GitHub stars~1.6k tokensUpdated today
    Auto-check passed
  • Wrongstack Mailbox

    WrongStack/WrongStack

    A skill your agent uses when the user wants to communicate with WrongStack's shared project mailbox from outside WrongStack — read messages sent by WrongStack agents, send replies, broadcast to all…

    370 GitHub stars~3.5k tokensUpdated today
    Auto-check passed

Works with

Categories

Questions about Node Modern

What does Node Modern do?

A skill your agent uses when writing, reviewing, or refactoring Node.js code — modules, async flow, cancellation, file and process I/O, HTTP — on a current Node.js release. Node Modern is an agent skill from WrongStack/WrongStack.js release.

When should I use Node Modern?

Node Modern fits situations like: refactoring Node.js code — modules; file and process I/O; HTTP — on a current Node.js release.

How do I install Node Modern in Claude Code?

Run `npx skills add WrongStack/WrongStack --skill node-modern -a claude-code`. Or copy the skill folder (packages/core/skills/node-modern in WrongStack/WrongStack) into .claude/skills/node-modern in your project. Claude Code loads it when a task matches its description.

How do I install Node Modern in Codex?

Run `npx skills add WrongStack/WrongStack --skill node-modern -a codex`. Or copy the skill folder (packages/core/skills/node-modern in WrongStack/WrongStack) into .agents/skills/node-modern in your project. Codex loads it when a task matches its description.

Can I use Node Modern in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add WrongStack/WrongStack --skill node-modern -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/node-modern, .gemini/skills/node-modern, .github/skills/node-modern and .opencode/skills/node-modern in your project.

What does Node Modern need to run?

SKILL.md names no scripts, command-line tools or credentials: Node Modern is instructions for the agent only. Our summary lists: Node.js.

Does Node Modern access the network?

SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.

Is Node Modern safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Node Modern use?

Node Modern is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Node Modern use?

About 1.3k tokens (SKILL.md is roughly 5.3k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Node Modern?

Skills that share tags, products or a category with Node Modern: JavaScript Pro (Jeffallan/claude-skills, 12k stars), Code Simplification for ego-lite (citrolabs/ego-lite, 17k stars), ast-grep Codemod Reference (warp-drive-data/warp-drive, 3.2k stars) and Migrate Component (asyncapi/generator, 1.1k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Node Modern?

WrongStack (a GitHub organization) maintains it in WrongStack/WrongStack, which has 370 GitHub stars. The repository holds 38 skills in this directory. The repository was last updated on October 7, 2026.

Source: WrongStack/WrongStack on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.