Installation
Ninja ships as a single static binary (~6 MB compressed download). No Node, Python, or runtime service required.
One-line install
Linux / macOS
curl -sfL https://ninja-cli.btaskee.work/install.sh | bash
Mirror (same deploy):
curl -sfL https://ninja-cli.pages.dev/install.sh | bash
Installs to ~/.local/bin/ninja. Pin a version:
NINJA_VERSION=v0.1.0-beta.1 curl -sfL https://ninja-cli.btaskee.work/install.sh | bash
Windows (PowerShell)
irm https://ninja-cli.btaskee.work/install.ps1 | iex
Installs to %LOCALAPPDATA%\ninja and adds it to user PATH. Open a new terminal afterward.
Git Bash / MSYS / WSL can use the bash installer.
macOS Gatekeeper
If macOS blocks the binary:
xattr -d com.apple.quarantine ~/.local/bin/ninja
Manual download
Compressed artifacts under https://ninja-cli.btaskee.work/releases/latest/:
| Platform | File |
|---|---|
| Linux amd64 | ninja-linux-amd64.gz |
| Linux arm64 | ninja-linux-arm64.gz |
| macOS Apple Silicon | ninja-darwin-arm64.gz |
| macOS Intel | ninja-darwin-amd64.gz |
| Windows amd64 | ninja-windows-amd64.exe.zip |
| Windows arm64 | ninja-windows-arm64.exe.zip |
Unix example:
curl -sfL -o ninja.gz https://ninja-cli.btaskee.work/releases/latest/ninja-linux-amd64.gz
gzip -dc ninja.gz > ninja && chmod +x ninja
mv ninja ~/.local/bin/ninja
Verify install
ninja --version
ninja doctor # config, model endpoint, MCP, session dir
doctor works even before a model is reachable (it will report endpoint status).
Updating
ninja update # download latest for this platform, verify SHA256SUMS, replace binary
ninja update --check # print current vs latest without downloading
Self-update downloads the compressed artifact for your GOOS/GOARCH from the
release CDN, verifies it against releases/latest/SHA256SUMS (checksum of the
compressed file, same as the installers), decompresses, and atomically
replaces the running binary. On permission errors, re-run the one-line installer.
Startup update check
On an interactive TUI start (stdin is a TTY, not headless -p), Ninja does a
live GET of latest.json (≤2s). If a newer release exists, it asks:
⬆ ninja vX.Y.Z available (current vA.B.C). Update now? [y/N]
Answer y to self-update (same path as ninja update) and exit; n or Enter
to continue this session. Headless / non-TTY modes never prompt (background cache
refresh only). Dev builds (Version == "dev") skip the check. Network failures
are silent.
ninja --version still prints a one-line notice from the local cache only
(no network, no prompt).
Privacy: plain GET of latest.json with **no query parameters or identifying
payload**. Disable with "update_check": false in config.json or
NINJA_NO_UPDATE_CHECK=1. Explicit ninja update still works when the check is off.
CDN base defaults to https://ninja-cli.btaskee.work; override with NINJA_CDN_BASE.
Uninstall / remove
Ninja is a single binary plus optional config and session data. There is no
package manager entry to reverse — delete the paths you care about.
Linux / macOS — binary only
rm -f ~/.local/bin/ninja
Linux / macOS — full remove (binary + config + sessions)
# Binary
rm -f ~/.local/bin/ninja
# Config, MCP, user skills, allowlists, cloudflare.env, …
# Linux: ~/.config/ninja
# macOS: ~/Library/Application Support/ninja
rm -rf ~/.config/ninja
rm -rf "$HOME/Library/Application Support/ninja" # macOS only if present
# Saved sessions (Linux / macOS)
rm -rf ~/.local/share/ninja
Project-local data (optional — only in repos where you ran Ninja):
# From a project root
rm -rf .ninja
Windows (PowerShell) — binary only
Remove-Item -Force "$env:LOCALAPPDATA\ninja\ninja.exe" -ErrorAction SilentlyContinue
# Optional: remove install dir if empty of other files
Remove-Item -Recurse -Force "$env:LOCALAPPDATA\ninja" -ErrorAction SilentlyContinue
If the installer added %LOCALAPPDATA%\ninja to your user PATH, remove
that entry in *Settings → System → About → Advanced system settings →
Environment Variables*, or:
$userPath = [Environment]::GetEnvironmentVariable("Path", "User")
$installDir = Join-Path $env:LOCALAPPDATA "ninja"
$parts = $userPath -split ";" | Where-Object { $_ -and ($_ -ne $installDir) }
[Environment]::SetEnvironmentVariable("Path", ($parts -join ";"), "User")
Windows — full remove
Remove-Item -Recurse -Force "$env:LOCALAPPDATA\ninja" -ErrorAction SilentlyContinue
Remove-Item -Recurse -Force "$env:APPDATA\ninja" -ErrorAction SilentlyContinue
# Project-local (from each repo):
# Remove-Item -Recurse -Force .ninja -ErrorAction SilentlyContinue
What each path is
| Path | Contents |
|---|---|
~/.local/bin/ninja or %LOCALAPPDATA%\ninja\ninja.exe |
The binary |
Config dir (~/.config/ninja, macOS Application Support, or %APPDATA%\ninja) |
config.json, mcp_config.json, user skills, allowlists, optional Cloudflare env |
~/.local/share/ninja/sessions (Unix) |
Saved chat sessions |
.ninja/ in a project |
Project skills, allowlists, MCP override |
Builtin Ninjaskills live inside the binary only (not on disk). Removing the
binary is enough to drop them; user skills under the config skills dir are
removed with the config directory.
Next
- Quickstart — first conversation
- Configure models — planner vs coder