Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
npx skills add vinnie357/claude-skills --skill nodegit clone --depth 1 https://github.com/vinnie357/claude-skillsWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/skills/vinnie357/claude-skills/node)<a href="https://agentmods.dev/skills/vinnie357/claude-skills/node"><img src="https://agentmods.dev/badge/skills/vinnie357/claude-skills/node/github.svg" alt="Measured on agentmods" height="20"></a>Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.
<a href="https://agentmods.dev/skills/vinnie357/claude-skills/node"><img src="https://agentmods.dev/badge/skills/vinnie357/claude-skills/node.svg" alt="Reviewed on agentmods" width="80" height="20"></a>- NVIDIA SkillSpector pass
What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.00061 | $0.02309 |
| Opus 5.5 | $0.00024 | $0.00924 |
| Sonnet 5.5 | $0.00012 | $0.00462 |
| Haiku 4.5 | $0.00006 | $0.00231 |
Grade A, and why
node scanned grade A with 1 finding against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 2mo ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Runs shell commandslowCapability
Expected in a hook, worth knowing in a rule or an instructions file.
Node's `EventEmitter` is the base of most non-stream async Node APIs (`process`, `net.Server`, `child_process`) — extend it for a custom object that fires multiple named events over its lifetime, as opposed to a Promise' How it starts
The opening of the file, as written. The whole thing — 190 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Node.js Runtime
Async patterns, streams, module systems, package managers, and mise/CI integration for Node.js TypeScript projects.
Async Patterns
async/await over raw Promise chains
async function fetchUserAndPosts(userId: string) {
const user = await fetchUser(userId);
const posts = await fetchPosts(user.id);
return { user, posts };
}
Prefer await in sequence over .then() chains for anything with more than one step — the stack trace on a rejected await points at the actual failing line, where a long .then() chain's error frequently doesn't.
Concurrency with Promise.all / Promise.allSettled
Sequential await calls that don't depend on each other's results waste wall-clock time — run independent async work concurrently:
// Sequential — unnecessarily slow if these don't depend on each other
const user = await fetchUser(id);
const settings = await fetchSettings(id);
// Concurrent — same total work, shorter wall time
const [user, settings] = await Promise.all([fetchUser(id), fetchSettings(id)]);
Promise.all rejects as soon as any one input rejects, discarding the other results. Promise.allSettled never rejects — it resolves with a { status: "fulfilled" | "rejected", ... } record per input, appropriate when partial failure is an expected, handled case (e.g. "notify five webhooks, report which ones failed") rather than a hard error.
EventEmitter
Node's EventEmitter is the base of most non-stream async Node APIs (process, net.Server, child_process) — extend it for a custom object that fires multiple named events over its lifetime, as opposed to a Promise's single resolve/reject:
import { EventEmitter } from "node:events";
class JobQueue extends EventEmitter {
enqueue(job: Job) {
// ...
this.emit("enqueued", job);
}
}
const queue = new JobQueue();
queue.on("enqueued", (job: Job) => console.log(`queued ${job.id}`));
Reach for EventEmitter for "zero or more things will happen over time, listeners subscribe/unsubscribe" — reach for a Promise for "exactly one thing happens once." Mixing the two (a Promise that also emits progress events) is a common source of Node API confusion; if progress reporting is needed, an EventEmitter combined with a distinct completion Promise (or an async generator) is clearer than overloading one Promise for both jobs.
What ships with it
1 file beside SKILL.md in the same directory: the scripts, references and assets a skill reads on demand. Not counted in the per-session cost; read them before you install if any of them is executable.
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 2mo ago First seen · 190 lines · 61 tokens per session scan A 867d2319d486
node is a skill published in the GitHub repository vinnie357/claude-skills (27 stars, last pushed 14d ago), licensed MIT. It adds 61 tokens to every session and 2,309 once invoked, about $0.0002 per session on Opus 5.5. A static security scan graded it A with 1 finding (runs shell commands). No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-30.
node compared with skills from other repositories
| Mod | Type | Stars | Last push | Licence | Scan | Tokens | Works with |
|---|---|---|---|---|---|---|---|
| nodevinnie357/claude-skills | Skill | 27 | 14d ago | MIT | A | 61 | Claude Code |
| mem0-oss-to-platformmem0ai/mem0 | Skill | 69k | 3d ago | Apache-2.0 | A | 217 | Claude Code, Codex |
| azure-mgmt-botservice-dotnetmicrosoft/skills | Skill | 3.2k | today | MIT | A | 78 | Claude Code |
| fastapi-router-pymicrosoft/skills | Skill | 3.2k | today | MIT | A | 46 | Claude Code |
| api-designericrisco/rsc-harness | Skill | 573 | today | MIT | A | 105 | Claude Code, Codex |
| migrate-segw-to-raparc-mcp/arc-1 | Skill | 254 | today | MIT | A | 106 | Claude Code |
| telnyx-messaging-hosted-curlteam-telnyx/ai | Skill | 225 | today | MIT | A | 45 | Claude Code |