Skip to main content
skill CX Codex

ninja — Claude Code skill: what it does, how to install

Guides agents in troubleshooting Ninja build failures, tuning parallel jobs, and integrating Ninja with CMake.

Install into Claude Code · Skills CLI (Vercel) All methods and platforms ↓
npx skills add mohitmishra786/low-level-dev-skills --skill ninja -a claude-code
Open on GitHub

What ninja does

This skill equips the agent with instructions to run and inspect the Ninja build executor. It covers CMake generator configuration, concurrency control using -j, and sub-tools like ninja -t targets or ninja -t compdb to produce compile_commands.json.

The reference includes a breakdown of build.ninja syntax along with remedies for missing rules and circular dependencies. Because Ninja runs with CPU count plus 2 jobs by default, I/O-bound builds can quickly thrash system resources without -l load limits. A meta-build generator like CMake must be present in the project to create the initial build files.

What it helps with

  • diagnose build failures using verbose output with ninja -v
  • configure project builds using CMake with the Ninja generator
  • control CPU and disk load during builds using -j and -l flags
  • export compile_commands.json for IDE tooling and clang-tidy
  • inspect circular dependencies or build targets using Ninja sub-tools

Example prompts for the agent

  • Show full compiler commands with ninja -v to see why the build failed
  • Configure CMake with Ninja generator and limit execution to 4 parallel jobs
  • Generate a compile_commands.json file using Ninja sub-tools

How to install ninja

1Skills CLI (Vercel)

npx skills add mohitmishra786/low-level-dev-skills --skill ninja -a claude-code

2Manually: put the files in place

~/.claude/skills/ninja/SKILL.md

Copy the whole skill folder; for one project use .claude/skills/ninja/

Step by step, with commands for each platform: How to install skills in Claude Code: five ways

Questions about ninja

How do I install ninja in Claude Code?

Run npx skills add mohitmishra786/low-level-dev-skills --skill ninja -a claude-code. The skill definition will be added to ~/.claude/skills/ninja/SKILL.md.

What does the ninja skill do?

It gives the agent workflows for managing the Ninja build executor, tuning parallelism, resolving dependency issues, and inspecting build rules.

What is the default parallelism setting in Ninja?

Ninja defaults to running N+2 concurrent jobs, where N represents the available CPU cores. You can adjust this limit via -j or throttle by system load using -l.

Source text

SKILL.md · MIT
---
name: ninja
description: Ninja build system skill. Use when diagnosing Ninja build failures, understanding Ninja's role as a low-level build executor generated by CMake or other meta-build systems, tuning parallelism, interpreting Ninja output, or working with build.ninja files. Activates on queries about ninja errors, ninja parallelism, ninja verbose output, build.ninja format, or ninja as a CMake generator.
user-invocable: true
triggers:
  - ninja build failure
  - ninja parallelism tuning
  - cmake ninja generator
  - interpret ninja output
  - build.ninja file format
  - ninja verbose output
  - ninja as cmake generator
  - diagnose ninja errors
---

# Ninja

## Purpose

Guide agents through Ninja as a build executor: diagnosing failures, controlling parallelism, generating from CMake, and understanding the `.ninja` file format when needed.

## Triggers

- "Ninja is failing — how do I get more output?"
- "How do I use Ninja with CMake?"
- "How many parallel jobs does Ninja use?"
- "How do I add a custom build step in Ninja?"
- "What is a `build.ninja` file?"

## Workflow

### 1. Ninja as a CMake generator

The most common use of Ninja is as the build executor for CMake:

```bash
# Configure with Ninja
cmake -S . -B build -G Ninja
cmake --build build                    # uses ninja internally

# Or invoke ninja directly
cd build && ninja

# Specify parallelism
ninja -j4
ninja -j$(nproc)

# Build specific target
ninja myapp
ninja install
```

CMake also supports `Ninja Multi-Config`:

```bash
cmake -S . -B build -G "Ninja Multi-Config"
cmake --build build --config Release
cmake --build build --config Debug
```

### 2. Verbose output and diagnostics

```bash
# Show full commands (not just [CC] foo.c)
ninja -v

# Dry run (show what would be built)
ninja -n

# Show why a target needs rebuilding
ninja -d explain myapp

# Print all targets
ninja -t targets all

# Print targets grouped by rule
ninja -t targets rule cc

# Dependency graph (graphviz)
ninja -t graph myapp | dot -Tsvg -o deps.svg
```

### 3. Common Ninja flags

| Flag | Effect |
|------|--------|
| `-j N` | Parallel jobs (default: CPUs + 2) |
| `-l N` | Don't start new jobs if load average > N |
| `-k N` | Keep going after N failures (default 1) |
| `-v` | Verbose: show full command lines |
| `-n` | Dry run |
| `-C dir` | Change to `dir` before doing anything |
| `-t tool` | Run a sub-tool (`clean`, `query`, `targets`, `graph`, `compdb`) |

### 4. Cleaning

```bash
ninja -t clean          # remove build outputs
ninja -t clean -g       # also remove generated files
```

Or via CMake:

```bash
cmake --build build --target clean
```

### 5. compile_commands.json

Ninja (via CMake) can generate a `compile_commands.json` for IDE integration and `clang-tidy`:

```bash
cmake -S . -B build -G Ninja -DCMAKE_EXPORT_COMPILE_COMMANDS=ON
ln -sf build/compile_commands.json .
```

### 6. build.ninja format (reference)

Rarely hand-written, but useful to understand for debugging:

```ninja
# Variable
cflags = -Wall -O2

# Rule
rule cc
  command = gcc $cflags -c $in -o $out
  description = CC $in

# Build edge
build foo.o: cc foo.c

# Phony target
build all: phony foo.o

# Default target
default all
```

Key concepts:

- `rule`: defines how to produce outputs from inputs
- `build`: instantiates a rule with specific files
- `$in` / `$out`: automatic variables for inputs/outputs
- `phony`: a target that is always considered out of date (like `.PHONY` in make)

### 7. Ninja sub-tools

```bash
# List all build targets
ninja -t targets

# Query dependencies of a target
ninja -t query myapp

# Clean (already mentioned)
ninja -t clean

# Generate compile_commands.json (if supported by generator)
ninja -t compdb cc cxx > compile_commands.json

# List rules
ninja -t rules
```

### 8. Common issues

| Issue | Cause | Fix |
|-------|-------|-----|
| `ninja: error: 'foo.o', needed by 'prog', missing and no known rule to make it` | Missing build rule | Regenerate with CMake; check `add_executable` source list |
| Build not picking up changes | Stale `build.ninja` | Re-run `cmake -S . -B build` |
| Very slow parallel build | `-j` too high for I/O-bound build | Use `-l$(nproc)` to limit by load |
| Circular dependency | Rule depends on itself | Check CMake target dependencies |

For the full Ninja command reference, `build.ninja` format details, and CMake integration patterns, see [references/cheatsheet.md](references/cheatsheet.md).

## Related skills

- Use `skills/build-systems/cmake` for CMake configuration that generates Ninja files
- Use `skills/build-systems/make` for Make-based projects

© mohitmishra786 · MIT · mohitmishra786/low-level-dev-skills

Similar skills

All skills for DevOps and infrastructure →

From the same set79

Project sponsors

Companies that keep this analytics open
Gold sponsor

Impressions, clicks and code copies — open statistics. We keep the numbers public for the same reason NeBlask itself is public. Become a sponsor