plugins/typescript-expert/skills/ts-runtime-node/SKILL.md
Use when running TypeScript directly on Node.js without a build step — native type stripping, its limits, when to reach for tsx, ESM setup, watch mode, and node:test. Covers Node 24 LTS. Do NOT use for Bun runtime specifics (ts-runtime-bun) or tsconfig details (ts-config).
npx skillsauth add fusengine/agents ts-runtime-nodeInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Before ANY implementation, use TeamCreate to spawn 3 agents:
package.json, tsconfig.json, entry scriptsModules: TypeScript and CLI flag docsAfter implementation, run fuse-ai-pilot:sniper for validation.
.ts/.mts/.cts files directly with node file.ts (no bundler)tsx)--watch mode, or node:testts-node to Node's built-in supportbun test → use ts-runtime-buntsc --noEmit separately for safety.tsconfig.json is ignored at runtime - paths, downleveling, and JS target lowering do not apply. Native stripping only erases inline types.enum, namespace with runtime code, parameter properties, and import aliases throw ERR_UNSUPPORTED_TYPESCRIPT_SYNTAX.import type / verbatimModuleSyntax - Value imports of types crash at runtime; the type keyword is mandatory for type-only imports.import './file.ts', not ./file. .tsx is unsupported by native stripping.project/
├── package.json # "type": "module"
├── tsconfig.json # noEmit, erasableSyntaxOnly, verbatimModuleSyntax
├── src/
│ ├── index.ts # node src/index.ts
│ └── interfaces/ # type-only modules (import type)
└── test/
└── unit.test.ts # node --test (node:test)
→ See node-esm-setup.md for a complete setup
| Topic | Reference | When to Consult |
|-------|-----------|-----------------|
| Type Stripping | type-stripping.md | Running .ts natively, understanding what erases and what errors |
| When tsx | tsx-when-needed.md | Native stripping is insufficient (paths, enums, decorators, .tsx) |
| Node 24 features | references/node24-features.md | Watch mode, node:test, ESM resolution, relevant built-ins |
| Template | When to Use | |----------|-------------| | node-esm-setup.md | Starting an ESM Node + native TS project |
"type": "module" and use .ts/.mts with explicit import extensionstsc --noEmit in CI for real type safety alongside runtime strippingtsx the moment you need paths, decorators, enum, or .tsxtsconfig paths or target downleveling work at runtime — they don't.ts files inside node_modules — Node refuses to strip themtesting
Copy self-audit and ban-lists — filler verbs/hype adjectives, slop placeholder names, fake-precise numbers, Title Case headlines, humor in error copy ('Oops!'), em-dash crutch, one copy register per page.
development
Logged-in web apps — dashboards, auth flows, settings, onboarding, data tables, command palettes, modals, toasts. Register `product`: density and glance-speed over marketing polish, no hero/CTA-tricks, every data surface covers empty/loading/error explicitly, tables and dataviz follow preattentive-processing rules.
development
Marketing sites, landing pages, campaign pages — register `brand` (design IS the product). Structure comes from the register's POV + a macrostructure pick, never from copying an inspiration site's section flow. Hero discipline, deviated section order, asymmetric grids, and a silhouette lookalike-test gate before ship.
development
Token-strategy core — OKLCH color rules, neutral tinting, accent-commitment levels, type scale, 8pt spacing grid, touch targets, and the canonical output format of design-system.md (the file the harness gates on). This is routing step 1 of design-method/SKILL.md — read it before design-web/design-webapp/design-ios/design-android, before picking or auditing a single color/type/spacing value.