Claude Skills Guide

Claude Code Spawn Unknown Error Node Skill Fix

When you’re building Claude Code skills that interact with Node.js scripts, you might encounter the frustrating “spawn unknown error” message. This error typically occurs when Claude Code’s bash tool attempts to run a Node.js process but fails due to misconfiguration, missing dependencies, or path issues. In this guide, I’ll walk you through the common causes and practical fixes for this error.

Understanding the Spawn Error

The “spawn unknown error” appears when Claude Code tries to execute a command using Node.js but cannot find the executable, the script, or lacks proper permissions. Unlike standard error messages that tell you exactly what’s wrong, this cryptic message requires some detective work.

The error usually looks something like this in your Claude Code session:

Error: spawn unknown error

This originates from Node.js’s child_process.spawn() function failing with an errno that doesn’t map to a known error code. The root causes typically involve PATH issues, missing Node.js installation, incorrect file permissions, or shell interpretation problems.

Common Causes and Solutions

Cause 1: Node.js Not in PATH

The most frequent cause is Claude Code not being able to find the Node.js executable. This happens when Node.js is installed in a non-standard location or when the PATH environment variable isn’t properly configured.

Diagnosis: Check if Node.js is accessible from Claude Code’s environment:

which node
node --version
npm --version

Fix: If Node.js isn’t found, you need to either add it to your PATH or specify the full path to the Node.js executable. You can find the path using:

which node
# Or on macOS/Linux
brew --prefix node

Then in your skill or Claude Code session, use the full path:

// Instead of just 'node', use the full path
const { spawn } = require('child_process');
const nodePath = '/usr/local/bin/node'; // Replace with your actual path

const child = spawn(nodePath, ['script.js'], {
  cwd: '/path/to/working/directory'
});

Cause 2: Missing Package Dependencies

Your Node.js script might require npm packages that aren’t installed. When the script runs, it fails because it can’t find required modules.

Diagnosis: Run your script manually outside of Claude Code to see if it works:

cd /path/to/your/script
node your-script.js

Look for error messages about missing modules.

Fix: Install the required dependencies:

cd /path/to/your/script
npm install

Or if you want Claude Code to handle this automatically, add an installation step to your skill instructions:

## Steps

1. Install dependencies if needed:
   - Run `npm install` in the project directory

2. Execute the Node.js script:
   - Run `node script.js` with appropriate arguments

Cause 3: Working Directory Issues

The spawn error can occur if the working directory doesn’t exist or lacks proper permissions. Node.js needs a valid directory to run processes.

Diagnosis: Check if the directory exists and is accessible:

ls -la /path/to/working/directory

Fix: Always specify a valid, accessible working directory in your spawn options:

const { spawn } = require('child_process');
const fs = require('fs');

const workingDir = '/Users/yourname/project';

// Verify directory exists
if (!fs.existsSync(workingDir)) {
  console.error(`Working directory does not exist: ${workingDir}`);
  process.exit(1);
}

const child = spawn('node', ['script.js'], {
  cwd: workingDir,
  env: process.env,
  shell: true
});

Cause 4: Shell Interpretation Problems

When using shell: true or certain command patterns, shell interpretation can cause issues, especially with complex arguments or special characters.

Diagnosis: Test your command with explicit shell invocation:

bash -c "node script.js arg1 arg2"

Fix: Use explicit arrays for arguments and avoid shell injection issues:

// PROBLEMATIC - relies on shell interpretation
const child = spawn('node script.js ' + args, { shell: true });

// BETTER - explicit argument handling
const child = spawn('node', ['script.js', '--flag', 'value'], {
  cwd: workingDir
});

Cause 5: Permission Denied Errors

Node.js scripts need execute permissions. If the script file doesn’t have execute permissions or is owned by a different user, spawn will fail.

Diagnosis:

ls -la your-script.js

Fix:

chmod +x your-script.js

If you’re running scripts that need sudo, you may need to configure Claude Code differently or use a different approach:

const { spawn } = require('child_process');

const child = spawn('sudo', ['node', 'privileged-script.js'], {
  cwd: workingDir,
  env: { ...process.env, SUDO_ASKPASS: '/path/to/askpass-script' }
});

Practical Example: Building a Robust Node.js Skill

Here’s a complete example of a Claude Code skill that handles Node.js execution robustly:

---
name: node-executor
description: "Execute Node.js scripts with proper error handling"
---

# Node.js Script Executor

This skill helps execute Node.js scripts with proper error handling and diagnostics.

## When to Use

Use this skill when you need to run Node.js scripts and want better error messages and automatic troubleshooting.

## Steps

### Step 1: Verify Node.js Availability

Run these diagnostic commands:
- `node --version` - Check Node.js is installed
- `npm --version` - Check npm is available

If either fails, the skill will guide you through installation.

### Step 2: Prepare the Script

Ensure your Node.js script:
- Has execute permissions: `chmod +x script.js`
- Has all dependencies installed: `npm install`
- Uses proper shebang if directly executable: `#!/usr/bin/env node`

### Step 3: Execute with Error Handling

Run scripts using explicit paths and capture output:

```bash
cd /path/to/project
node script.js 2>&1

The 2>&1 redirects stderr to stdout for better error capture.

Step 4: Debug Common Issues

Error Cause Solution
spawn unknown PATH issue Use full path to node
ENOENT Missing file Check file exists
EACCES Permission denied chmod +x script.js
Module not found Missing deps npm install

Example Usage

Run my Node.js script at /Users/me/project/parser.js with argument --input data.json

The skill will:

  1. Verify Node.js is available
  2. Check the script exists
  3. Run the script with proper error handling
  4. Report any issues with helpful suggestions ```

Environment-Specific Considerations

Windows-Specific Issues

On Windows, Node.js paths use backslashes and the PATH separator is different:

const { spawn } = require('child_process');

// Windows-style path
const nodePath = 'C:\\Program Files\\nodejs\\node.exe';

const child = spawn(nodePath, ['script.js'], {
  cwd: 'C:\\path\\to\\project',
  shell: true
});

Docker Container Issues

If running inside Docker, ensure Node.js is installed in the container and the working directory is properly mounted:

# In your Dockerfile
RUN apt-get update && apt-get install -y nodejs npm

# Or use official Node.js image
FROM node:18-alpine

NVM Users

If you use Node Version Manager (nvm), ensure the correct Node.js version is loaded. Claude Code may use a different shell profile than your interactive terminal:

# Source nvm in your skill
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"

node --version

Summary

The “spawn unknown error” in Claude Code Node.js skills is usually caused by one of these issues:

  1. Node.js not in PATH - Use full path or configure PATH
  2. Missing dependencies - Run npm install
  3. Invalid working directory - Specify valid cwd
  4. Permission problems - Use chmod +x
  5. Shell interpretation issues - Use explicit argument arrays

By following this troubleshooting guide, you can diagnose and fix spawn errors in your Claude Code skills. The key is to test components individually - verify Node.js works, check dependencies are installed, confirm file permissions are correct, and use explicit paths rather than relying on environment variables.

With these fixes, your Node.js-powered Claude Code skills should run smoothly without mysterious spawn errors.

Built by theluckystrike — More at zovo.one