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.
npx skills add mohitmishra786/low-level-dev-skills --skill ninja -a claude-codeWhat 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
-jand-lflags - export
compile_commands.jsonfor 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-code2Manually: put the files in place
~/.claude/skills/ninja/SKILL.mdCopy the whole skill folder; for one project use .claude/skills/ninja/
1Skills CLI (Vercel)
npx skills add mohitmishra786/low-level-dev-skills --skill ninja -a codex2Manually: put the files in place
.agents/skills/ninja/SKILL.mdFor all projects use ~/.agents/skills/
1Skills CLI (Vercel)
npx skills add mohitmishra786/low-level-dev-skills --skill ninja -a cursor2Manually: put the files in place
.cursor/skills/ninja/SKILL.mdCursor also reads .agents/skills/ and .claude/skills/
1GitHub CLI
gh skill install mohitmishra786/low-level-dev-skills ninja2Manually: put the files in place
.github/skills/ninja/SKILL.md1Skills CLI (Vercel)
npx skills add mohitmishra786/low-level-dev-skills --skill ninja -a gemini-cli2Platform CLI
gemini skills install https://github.com/mohitmishra786/low-level-dev-skills --path skills/build-systems/ninjaManually: put the files in place
.devin/skills/ninja/SKILL.mdThe legacy .windsurf/skills/ path still works
Skills CLI (Vercel)
npx skills add mohitmishra786/low-level-dev-skills --skill ninja -a opencodeClaude.ai
Zip the folder and upload it in Settings → Capabilities → Skills
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