Ninoo

Ninoo Code

CLI reference

New here? Start with Download and install and How it works.

Install & sign in

$ curl -fsSL https://ninoo.ai/install.sh | sh
ninoo loginOpens nicrron.ai to authorize this device; the minted key is saved to ~/.ninoo/config.json and never passes through the browser.
ninoo logoutRemoves the stored key from this machine. Revoke it fully from the Nicrron dashboard's API Keys page.
ninoo updateInstalls the latest version. Ninoo checks once a day and shows a notice when one is out; it never updates itself without you.

Usage

Shell
ninoo                          # interactive session in the current directory
ninoo "fix the failing test"   # one task, then exit (scripts and pipes OK)
ninoo -m nicrron/coding        # start with a specific model or mode
ninoo --mode plan              # research and plan first, change nothing
ninoo -y "run the linter and fix what it finds"   # auto mode: risky steps still ask
-m, --model <slug>Model or routing mode for this run (default: nicrron/builder).
--base-url <url>Gateway URL (default: https://api.nicrron.ai).
--mode <mode>Start in manual (default), accept-edits, plan or auto. See Permission modes.
-y, --yesSame as --mode auto. Routine work runs unasked; deletes, pushes, deploys, secrets and anything outside the folder still ask.
-h, --helpPrint usage.

Slash commands

Type / for a live-filtering dropdown. ↑ ↓ move, tab completes, ↵ runs.

/model [slug]Opens the model picker (modes first, then the live catalog with prices), or switches directly with a slug. The choice is saved.
/initExplores the repo and writes NINOO.md project notes, or improves an existing one. Confirmations and /undo apply.
/undoReverts the last turn's file changes from the per-turn snapshot and tells the model.
/compactReplaces the history with a short summary to reclaim context.
/clearClears the conversation history.
/statusModel, mode, gateway, cwd and the session's token totals.
/mode [name]Shows or sets the permission mode: manual, accept-edits, plan, auto.
/permissionsThe mode, your allow/ask/deny rules, and what auto mode recently approved or blocked.
/helpLists commands, modes and shortcuts.
/exitQuits. Plain exit or quit work too.

Keyboard

shift+tabCycle permission modes: manual → accept edits → plan → auto. Works mid-turn.
escInterrupt the running turn; the half-finished step is discarded.
(just type)Keep typing while Ninoo works; messages queue and run in order.
↑ / ↓Walk your prompt history (~/.ninoo/history).
ctrl+a / ctrl+eJump to start or end of line.
ctrl+u / ctrl+kDelete to start or end of line.
ctrl+wDelete the previous word.
pasteMulti-line pastes are one block (bracketed paste).

Permission modes

Press shift+tab to switch. The footer under the input box shows the current mode.

manualReading and searching. Every edit, command and fetch asks first. The default.
accept editsAlso file edits and simple file commands (mkdir, mv, cp) inside the project. Other commands ask.
planRead-only. Ninoo researches and proposes a plan; nothing changes. When it finishes you choose: implement in auto mode, accept edits, ask each time, or keep planning.
autoRoutine work: edits, file commands, reads, docs fetches. Builds, tests and unfamiliar commands get a quick check by a small safety model (openai/gpt-6-luna) that sees only your requests and the command, never file contents.

Some things always ask, in every mode, and no rule or model can approve them for you:

Deletingrm -r, rm -f, wildcards, find -delete, xargs rm, git clean
Losing or publishing git workpush --force, pushing to main or another branch, reset --hard, checkout -- ., rebase, branch -D
Root and remote codesudo, curl … | sh, base64 -d | sh
Deploys and shared systemsterraform apply, kubectl delete, aws/gcloud changes, vercel --prod, npm publish, database migrations, DROP / DELETE without WHERE
Secretsreading .env, keys and credential files; printing env vars or tokens. After a secret is read, every network action asks for the rest of the session.
Outside the projectedits outside the folder, shell startup files, ~/.ssh, ~/.aws, .git internals, CI workflows, .ninoo hooks
Changed scriptsrunning package.json scripts, a Makefile or a script the agent edited this session

Ninoo reads every command the way the shell would, through &&, pipes, $(…), bash -c, sudo, xargs, find -exec and npm scripts, so a risky step can't hide inside a harmless one. Catastrophic commands like rm -rf ~ get a red warning with No preselected. If auto mode is refused 3 times in a row it pauses and asks for everything until the turn ends. Without a terminal, anything that needs you is refused. Every decision is logged to ~/.ninoo/audit.log.

Add your own rules under permissions in ~/.ninoo/config.json. Deny beats ask, ask beats allow, and allow never overrides the always-ask list. A repo's .ninoo/permissions.json can add ask and deny rules but not allow rules, so a cloned project can't pre-approve its own commands.

Routing modes

Virtual slugs the gateway resolves at request time. Use them anywhere a model slug is accepted.

nicrron/builderGPT-6 Luna, with GPT-5.4 mini and Claude Sonnet 5.5 as fallbacks. Same as the Builder. The default.
nicrron/autoRight-sizes the model per request.
nicrron/codingStrongest coding models first, with cheaper fallbacks.
nicrron/reasoningDeep-reasoning models for hard problems.
nicrron/fastestLowest-latency lightweight models.
nicrron/cheapestCheapest model per token; quality varies.

Project memory (NINOO.md)

At startup Ninoo loads two Markdown files into its context, personal notes first, then the project's. Edit or prune them by hand anytime.

~/.ninoo/NINOO.mdPersonal notes that apply everywhere: preferences, common commands.
./NINOO.mdThis repo's build and test commands, conventions and gotchas. Created by /init, extended by the remember tool with approval. Commit it.

Configuration

Everything lives in ~/.ninoo/config.json with owner-only permissions. Environment variables override the file; the file overrides defaults.

~/.ninoo/config.json
{
  "apiKey": "sk-af-…",              // from ninoo login
  "baseUrl": "https://api.nicrron.ai",
  "webUrl": "https://nicrron.ai",
  "model": "nicrron/builder",       // saved by /model
  "safetyModel": "openai/gpt-6-luna", // auto mode's safety check
  "permissions": {
    "allow": ["bash(npm run test*)", "fetch(domain:docs.python.org)"],
    "ask":   ["write(src/payments/**)"],
    "deny":  ["bash(git push*)"]
  }
}
NINOO_API_KEYThe stored key. Useful in CI without a login.
NINOO_BASE_URLGateway URL.
NINOO_WEB_URLThe web app used by ninoo login.
NINOO_MODELModel or mode.
NINOO_SAFETY_MODELThe auto-mode safety check model.
NINOO_NO_UPDATE_CHECKSet to 1 to turn off the daily update check.

Troubleshooting

Not logged inRun ninoo login.
Invalid API keyThe key was revoked or rotated. Run ninoo login again.
Out of creditsTop up at nicrron.ai/dashboard/credits and rerun; the session's history is preserved.
command not found: ninooAdd export PATH="$HOME/.local/bin:$PATH" to your shell profile.
ninoo update: unknown commandYou have a version from before updates existed. Re-run the install command once; after that ninoo update works.
Could not load the catalogThe gateway was unreachable when /model opened; the nicrron/* modes are still offered. Check your network or --base-url.

Still stuck? Email support@nicrron.ai.