Документация доступна только на английском языке.
CLI
Every command, flag, slash command, headless output format and exit code of the CLI.
nib [options] [prompt]
nib <command> [options]nib starts an interactive session in the current folder. With a prompt, the session starts with that message. With -p, it runs the prompt without the UI, prints the result and exits. The commands do one job each, such as signing in or adding an MCP server.
Examples
nib # interactive session in this folder
nib "explain the build pipeline" # start with a prompt
nib -c # continue the most recent session here
nib -r # pick a session to resume
nib -w # new session in its own git worktree
nib -m openai:gpt-6.1-sol --effort high # choose model and effort
nib -p "list TODO comments in src/" # headless: print the answer and exit
cat error.log | nib -p "what failed?" # headless with piped input
nib -p "summarize the diff" --max-budget-usd 0.50 --output-format jsonOptions
Session
| Flag | Meaning |
|---|---|
-c, --continue | Continue the most recent session in this folder |
-r, --resume [session] | Resume a session by id (ses_…) or handle, or pick one interactively when none is given |
--fork-session | With --continue or --resume: continue in a copy, leaving the original untouched |
--from-pr <url> | Resume the session for a GitHub pull request, or start one on its branch |
-n, --name <title> | Name the session |
--cwd <dir> | Workspace folder. Default: the current directory |
-w, --worktree[=<branch>] | Start the session in its own git worktree, on <branch> when given |
--add-dir <dirs…> | Other folders the session may work in, such as ../apps ../lib |
--session-id <id> | Id for the new session (ses_…). Fails if a session with that id exists |
--continue,--resumeand--from-prcan't be combined, and--fork-sessionrequires--continueor--resume.--worktreeand--session-idstart a new session, so they can't be combined with resuming one.-rtakes the next argument as the session to resume when it names one: an id (ses_…) or a handle (lowercase letters, marks and digits of any script, and dashes). A flag or a phrase after it stays what it was, and the picker opens.
Model and permissions
| Flag | Meaning |
|---|---|
-m, --model <provider:model> | Model for this session. A bare model id keeps a resumed session's provider; for a new session it's the one provider that offers that model (name the provider when several do) |
--effort <level> | none, minimal, low, medium, high, xhigh or max |
--permission-mode <mode> | default, acceptEdits, plan, auto, bypassPermissions or dontAsk. manual and bypass are accepted for default and bypassPermissions |
--dangerously-skip-permissions | Same as --permission-mode bypassPermissions. Can't be combined with another --permission-mode. In the terminal UI, until you've accepted bypass in any Nib client, it shows what bypass does and asks you to accept; with -p, including --bg, the flag is your choice |
--allow-dangerously-skip-permissions | Lets this run switch to bypass later, without starting in it: Shift+Tab reaches it in the terminal UI (the first time, it shows what bypass does and asks you to accept), and a program (SDK mode) or an editor (ACP) may switch to it. An editor's picker also offers bypass once you've accepted it in any Nib client |
--allowedTools <rules…> | Pre-approve tools for this session, such as "Bash(git log *)" Edit |
--disallowedTools <rules…> | Always deny these tools for this session |
--system-prompt <text> | Replace Nib's system prompt for this session |
--system-prompt-file <file> | The same, read from a file |
--append-system-prompt <text> | Extra instructions appended to the system prompt |
--append-system-prompt-file <file> | The same, read from a file |
--allowedTools and --disallowedTools also accept the kebab-case spellings --allowed-tools and --disallowed-tools. Lists can be comma- or space-separated; Nib never splits inside parentheses, so "Bash(git log *),Edit" is two rules. Each system-prompt flag and its -file form are mutually exclusive.
The list flags (--allowedTools, --disallowedTools, --add-dir, --mcp-config) take every value up to the next flag, so a prompt typed after a list becomes part of it. Put the prompt first, as in nib -p "fix it" --allowedTools Read Edit, or end the list with --. The --allowedTools=<rule> form takes one value.
Configuration
| Flag | Meaning |
|---|---|
--settings <file|json> | A settings overlay for this session, in the shape of settings.json |
--setting-sources <list> | Which settings files to load: user, project and local, comma-separated. Default: all; "" loads none |
--mcp-config <file|json…> | MCP servers as {"mcpServers": {…}}, from one or more files or JSON strings |
--strict-mcp-config | Use only the --mcp-config servers, ignoring settings files and .mcp.json. New sessions only |
--agents <file|json> | Subagents by name, such as {"reviewer": {"description": …, "prompt": …}} |
--agent <name> | Run the session as this agent: its prompt, its tools, and its initialPrompt when you give no prompt |
Headless
| Flag | Meaning |
|---|---|
-p, --print | Run the prompt (or stdin) non-interactively, print the result, exit |
--output-format <f> | text (default), json or stream-json |
--input-format <f> | text (default) or stream-json |
--include-partial-messages | With stream-json output: also emit streaming deltas |
--max-turns <n> | Stop after n model turns |
--max-budget-usd <n> | Stop once the run has cost $n. The result's subtype is error_max_budget_usd |
--json-schema <file|json> | The final answer must be JSON that matches this schema. It's returned in structured_output |
--no-session-persistence | Delete the session when the run ends |
--bg | Start the run, print its session id and exit. Follow it with nib --resume <id> |
--init, --maintenance | With -p: run the Setup hooks (trigger init or maintenance) first |
--init-only | Run the Setup and SessionStart hooks, then exit. Takes no prompt |
--output-format,--input-format,--max-budget-usd,--json-schemaand--no-session-persistencerequire-p.--include-partial-messagesrequires--output-format stream-json.-pcan't open the session picker, so--resumeneeds an explicit id in headless mode.--no-session-persistencedeletes the session it ran in, so with--continueor--resumeit needs--fork-session, and it can't be combined with--worktree.--bgdoesn't wait for the run, so it can't be combined withstream-jsoninput or output,--max-turns,--json-schemaor--no-session-persistence.
Daemon
| Flag | Environment variable | Meaning |
|---|---|---|
--daemon-url <url> | NIB_DAEMON_URL | Connect to this daemon |
NIB_DAEMON_TOKEN | Its bearer token | |
--data-dir <dir> | NIB_DATA_DIR | Daemon data directory. Default ~/.nib |
With --daemon-url (or NIB_DAEMON_URL), the CLI connects to that daemon, with the token in NIB_DAEMON_TOKEN. Without a URL it uses the daemon running for the data directory, and when none is running it starts one for this run; --bg starts one that keeps running after nib exits.
In CI, that means a daemon starts for the run and stops when the run ends. To use your account there, register a device token with nib setup-token.
The daemon's token has no flag: a command line is visible to every user of the computer, and the token gives full control of your daemon.
Other
| Flag | Meaning |
|---|---|
--verbose | Diagnostics on stderr, including permission denials in headless mode |
-v, --version | Print the version |
-h, --help | Show help |
Commands
| Command | Meaning |
|---|---|
nib acp [options] | Serve the Agent Client Protocol on stdio for Zed, JetBrains and other ACP editors |
nib import <source> [options] | Import another agent's configuration |
nib import <file> [options] | Bring in your ChatGPT, Claude or Gemini history from their export |
nib export [path.zip] | Download everything this computer holds in Nib, in a zip of open formats |
nib mcp <command> | Add, list, inspect and remove MCP servers |
nib doctor | Check this install, the daemon, providers and the folder's configuration |
nib teleport [session] | Continue a session on a new cloud computer (coming soon) |
nib update [--check] | Update nib the way it was installed. --check only reports |
nib plugin <command> | Install and manage plugins and marketplaces |
nib login, nib logout | Sign in to your Nib account, or out of it. Also nib auth login and nib auth logout |
nib auth status | Which Nib account nib is signed in with |
nib usage | Your plan and what it has used this period |
nib usage request [options] | Ask your organization's owners for a higher monthly budget |
nib usage activity [options] | What your organization's members did: sessions, edits and commands. Admins and owners |
nib usage export [--days <n>] | Your organization's spend as CSV, for chargeback. Admins and owners |
nib org requests [approve|decline] | What members asked for, to approve or decline. Owners only |
nib keys [status|setup|join|recover|approve] | Encryption keys on this computer |
nib setup-token [options] | Register a Nib Cloud device token for CI |
Every command takes --help.
nib acp
Serves the Agent Client Protocol on stdio, so editors that speak it can run Nib; see JetBrains, Zed and ACP editors. It takes no prompt, because the editor sends prompts. Its options set the defaults for the sessions the editor creates and how to reach the daemon: -m/--model, --effort, --permission-mode, --dangerously-skip-permissions, --allow-dangerously-skip-permissions, the daemon options and --verbose. Each session's folder comes from the editor, so there's no --cwd.
nib import
nib import <claude-code|codex|gemini|cursor> [options]
nib import --from <source> [options]Converts another agent's configuration into .nib/, item by item: MCP servers, commands, skills, agents, rules, output styles, settings and permission rules. Secret values are never copied: they become ${VAR} references, and the variables to set are listed at the end. See Import your setup.
Every item is imported, with what it does shown beside it. From a project's own files, an item in one of these classes is left out, with the reason, unless you include its class with --include-risky:
| Class | What the item does |
|---|---|
env-exec | An environment variable that makes every program a session starts load or run code: PATH, NODE_OPTIONS, LD_*, DYLD_*, PYTHONPATH and the like |
permission-bypass | Skips approvals altogether |
What other items would run is checked where it runs: a project's hooks, environment variables and allow rules wait until you trust the folder, and every imported MCP server waits for your approval. User-level configuration (--user) imports as it is. A copied skill, command or agent is judged by what its frontmatter declares, never by its prompt.
| Option | Meaning |
|---|---|
--from <src> | Source to import, the same as the positional argument |
--dry-run | List every item with its diff and what it does, and each item left out with the class that includes it. Writes nothing |
--include-risky <classes> | Also import a project's items in these classes: env-exec, permission-bypass, separated by commas, or all |
--user | Import user-level configuration (~/.claude, ~/.codex, …) instead of this project's |
--all | Both project and user level |
--force | Replace existing .nib/ files that differ. Default: keep them |
--cwd <dir> | Project folder. Default: the current directory |
nib import <file>
nib import <file> [options]
nib import --paste <memories|instructions> [--source <service>] < text
nib import --runs
nib import --undo <id>Brings your history from ChatGPT, Claude or Gemini into Nib, from the file their own export gave you: the zip, the folder it unpacks to, or conversations.json. Nib reads it on this computer and never signs in to those services. Conversations become read-only sessions, listed by their own dates and found by search. What an export leaves out (saved memories, a custom assistant's role) you can pipe in with --paste.
It asks before anything is written: whether to bring in the conversations, where each of the service's projects goes (a new project with its name, one you have open, or with the rest), where the conversations outside a project go ("Imported from ChatGPT" by default), and about every memory and instruction, shown in full. Those steer every future agent where they're put, so each starts at "Leave it out" and comes in only where you place it. A conversation that holds what looks like a secret, such as a key pasted into a chat, is flagged; it comes in as it is and stays on this computer. Images, audio and attached files aren't brought in yet.
The review needs a terminal. In a script, --dry-run shows what an export holds without writing anything.
| Option | Meaning |
|---|---|
--paste <memories|instructions> | Add memories or instructions from stdin, with or without a file |
--source <service> | The service pasted text came from: chatgpt, claude or gemini |
--parent <dir> | The folder new projects are made in. Asked otherwise; the current folder by default |
--dry-run | Show what the export holds, every memory and instruction in full. Writes nothing |
--json | With --dry-run, print the plan as JSON |
--runs | List your imports, newest first |
--undo <id> | Undo an import (imp_…): its sessions go, and a file or project you've changed or used since stays, named |
nib export
nib export [path.zip]Writes everything this computer holds in Nib to one zip, in open formats with a README that explains them: sessions (as JSON Lines and Markdown transcripts), instructions and memory, artifacts, projects, providers (named, never their keys) and settings. Nothing is uploaded to make it. Without a path it's nib-export-<date>.zip in the current folder. What the cloud holds (synced sessions, hosted artifacts, usage and billing) is its own download: Settings → Account → Your data in the app.
nib mcp
| Command | Meaning |
|---|---|
add [options] <name> <url | -- command [args…]> | Add a server |
add-json [-s scope] <name> <json> | Add a server from its JSON entry, such as {"type": "http", "url": …} |
list | Every configured server and whether it connects |
get <name> | One server's details and status |
remove [-s scope] <name> | Remove a server and its stored sign-in |
login <name> [--no-browser] | Sign in to a remote server with OAuth. Sessions use the sign-in |
logout <name> | Forget a remote server's sign-in |
add-from-claude-desktop [-s scope] | Copy Claude Desktop's MCP servers. Name clashes get _1 |
reset-project-choices | Forget your approvals and refusals of this folder's .mcp.json servers, so each asks again |
serve [--permission-mode <mode>] | Serve Nib's file and shell tools over stdio MCP |
add takes -t/--transport <stdio|http> (a URL implies http), -s/--scope <local|project|user> (local, the default, is you in this project; project is .mcp.json; user is everywhere), -e/--env KEY=value and -H/--header "Name: value" (both repeatable), --client-id <id> for a pre-registered OAuth client, and --callback-port <port> for a fixed OAuth callback. Put -- before a stdio server's command when its arguments start with -. Install guides that give an mcp add … command line work as nib mcp add …. See MCP servers.
nib plugin
| Command | Meaning |
|---|---|
install <name[@marketplace]|./dir|owner/repo> [--project] [--yes] | Install and enable a plugin |
list [--available] | Installed plugins, and with --available what marketplaces offer |
enable <name> [--project], disable <name> [--project] | Turn a plugin on or off |
update <name> [--yes] | Update to the newest version its source has |
remove <name> | Uninstall |
validate <dir> | Check a plugin or marketplace folder |
marketplace add <owner/repo|git-url|url|./dir> | Register a marketplace |
marketplace list, marketplace update [name], marketplace remove <name> | Manage marketplaces |
Plugins use the .claude-plugin/plugin.json format. They can run code on this computer, so an install or update that needs your consent says what the plugin can do and waits for --yes. Everything goes through the daemon's Hub, so the desktop app shows the same plugins. See Nib Hub.
nib teleport
nib teleport [session] [options]
nib teleport --pull <teleport-id>Cloud computers aren't open yet, so teleport is coming soon.
Continues a session on a new cloud computer: its code, the conversation and attached files (up to 25 MB) move there, and this copy is archived. A session that's working moves when its current turn ends. session is an id, handle or title; the default is the latest session in this folder.
| Option | Meaning |
|---|---|
--pull <id> | Bring a session moved to the cloud back here as a new session |
--declassify | When your sessions are encrypted before they sync: agree that the cloud may read this one once it moves. Asked interactively otherwise |
--daemon-url, --data-dir | As in the daemon options |
nib login, nib logout, nib auth status, nib usage
nib login signs you in through your browser; signing in with a link and a code sent to your email (--email) is coming soon. Without a browser (over SSH, on a server, or with --no-browser) it prints a link to open on any device, with a code to check. Then it links this computer to your account, as the desktop app does. nib logout undoes both. The sign-in is stored in the macOS Keychain, the Secret Service keyring on Linux or Windows Credential Manager, or in <data-dir>/cli/credentials.json (mode 0600) where there's none.
| Option | Meaning |
|---|---|
--cloud-url <url> | Nib Cloud API. Environment variable NIB_CLOUD_URL |
--email [address] | login: sign in with a link and a code sent to your email (coming soon) |
--no-browser | login: print a link and a code instead of opening a browser |
--invite <link> | login: your invite link or code, to create the account as you sign in |
--no-link | login: sign in only, and don't link this computer |
--sync, --no-sync | login: whether this computer syncs its sessions. Asked once otherwise |
--json | auth status, usage: machine-readable output |
nib keys
| Command | Meaning |
|---|---|
status [--json] | Whether this computer encrypts what it syncs, and how your keys are kept. The default |
setup | On your first device: make your account's keys and save the recovery phrase, which is shown once |
join | Another of your devices approves this one, after you compare a code on both |
recover | Join with your recovery phrase instead |
approve | Approve devices waiting to join, after comparing the code each one shows |
nib usage request
nib usage request [--credits <credits>] [--note <text>]
nib usage request --withdrawAsks the owners of the organization you're signed in to for a higher monthly budget for Nib models, as Request more usage under Account → Usage does in the app. The owners decide. One request waits at a time: to change it, withdraw it and ask again. Owners set budgets themselves, so they don't ask, and a member with no budget has nothing to raise.
| Option | Meaning |
|---|---|
--credits <credits> | The monthly budget you need, in whole Nib credits. Without it, the owners choose |
--note <text> | A note for the owners, up to 500 characters |
--withdraw | Withdraw the request that's waiting |
--cloud-url <url> | Nib Cloud API. Environment variable NIB_CLOUD_URL |
--json | Machine-readable output |
nib usage activity
nib usage activity [--days <n>] [--json]
nib usage activity --csv [--days <n>]For admins and owners: what the members of your organization did with Nib, as Activity under Account → Usage shows it in the app. It shows how many members were active against the plan's seats, the range's sessions, edits, lines and spend on Nib models and own keys, a row per member, and the five most used commands. Commands that a project or a person defined count together as "your own commands", because their names can name the work. The counts come from the members' computers, never code, prompts or file names, and only organizations on Team and Enterprise collect them. Days are whole UTC days, today included.
With --csv it writes a row per day and member instead, the file Export activity saves in the app: sessions, turns, edits, lines added and removed, and the spend on Nib models and on own keys.
| Option | Meaning |
|---|---|
--days <n> | The last n days, today included: 1 to 400. Default: 30 |
--csv | A row per day and member, as CSV |
--cloud-url <url> | Nib Cloud API. Environment variable NIB_CLOUD_URL |
--json | The cloud's answer, machine-readable |
nib usage export
nib usage export [--days <n>] > usage.csvFor admins and owners: your organization's spend as CSV on stdout, for chargeback. It's the file Export usage under Account → Usage saves in the app. Each row is one day, member and model, with the provider, the requests, the input and output tokens, the cost in US dollars, and whether Nib models or the member's own key served them.
| Option | Meaning |
|---|---|
--days <n> | The last n days, today included: 1 to 400. Default: 30 |
--cloud-url <url> | Nib Cloud API. Environment variable NIB_CLOUD_URL |
nib org requests
nib org requests
nib org requests approve <id> [--credits <credits>]
nib org requests decline <id> [--note <text>] [--block]For owners: what the members of your organization asked for, as Requests under Account → Organization shows it in the app. Requests waiting for an answer come first, then the last 30 days' answers, each with the id that approve and decline take. Approving sets the member's monthly budget for Nib models, in Nib credits, to what they asked for, or to --credits. A decline can carry a note, which the member reads in the email. A request that was already answered or withdrawn stays as it is.
| Option | Meaning |
|---|---|
--credits <credits> | approve: the monthly budget to set, in whole Nib credits. Default: what the member asked for |
--note <text> | decline: a note for the member, up to 500 characters |
--block | decline, a library request: also make the item unavailable, so nobody asks for it again |
--cloud-url <url> | Nib Cloud API. Environment variable NIB_CLOUD_URL |
--json | Machine-readable output |
nib setup-token
Registers a Nib Cloud device for CI and stores its token. Create a key with the sync scope under Settings → API keys in Nib Cloud, then run nib setup-token and paste the key, or pipe it on stdin. The key is used once to register the device and isn't stored. By default the device token goes into the local daemon's cloud link (<data-dir>/cloud.json). With --print it's written once to stdout instead: save it as the CI secret NIB_DEVICE_TOKEN, next to NIB_CLOUD_URL.
| Option | Meaning |
|---|---|
--cloud-url <url> | Nib Cloud API. Environment variable NIB_CLOUD_URL |
--name <name> | Device name. Default: CI (<hostname>) |
--print | Print the device token once to stdout, and don't link the local daemon |
--sync, --no-sync | Whether this device syncs its sessions. Default: paused until you choose under Account |
--daemon-url, --data-dir | As in the daemon options |
--verbose | Diagnostics on stderr |
Exit codes
| Code | Meaning |
|---|---|
0 | Success |
1 | The run failed, including stopping at --max-turns or --max-budget-usd |
2 | Invalid command line |
130 | Interrupted |
Language
nib speaks English and Russian. Help, errors, questions and the interactive session follow the language in your user settings (a tag such as ru or a name such as Russian), else your terminal's locale (LC_ALL, LC_MESSAGES, LANG), else English. Output meant for programs stays in English: --output-format json and stream-json, the Agent SDK mode and --verbose logs.
Headless mode
nib -p runs one prompt and exits. The prompt comes from the arguments, from stdin, or both: piped input is read when stdin isn't a terminal. With a prompt argument, piped input that hasn't started after 3 seconds is skipped, and nib says so on stderr; redirect stdin from /dev/null to skip the wait.
Nobody can answer prompts in headless mode, so:
- Permission requests are decided by your permission rules,
--permission-mode,--allowedToolsand--disallowedTools. Anything they don't allow is denied, and the agent is told how to proceed. Every denial is listed inpermission_denialsin the JSON result. - Questions from the agent (
AskUserQuestion) are answered with "No answer: running non-interactively. Use your best judgment and state the assumption." - Forms from MCP servers (elicitation) are declined, and stderr names the server that asked.
- Budget limits that would pause a session stop the run instead.
- Workspace trust prompts don't appear.
# Allow tests and edits, nothing else
nib -p "make the failing test in auth.test.ts pass" \
--allowedTools "Bash(bun test *)" Edit Write \
--max-turns 25 \
--output-format jsontext output
The final assistant message, as plain text. Errors go to stderr.
json output
A single JSON object when the run ends. Field names follow the widely used headless result format (type, subtype, result, session_id, total_cost_usd, …), so existing scripts that parse it keep working.
{
"type": "result",
"subtype": "success",
"is_error": false,
"result": "Fixed the token expiry check in src/auth/session.ts. All 48 tests pass.",
"session_id": "ses_01JCQ8Z4X9T5V2M3N7K1P6R0WA",
"num_turns": 7,
"duration_ms": 41873,
"total_cost_usd": 0.0871,
"usage": {
"input_tokens": 182340,
"output_tokens": 2911,
"reasoning_tokens": 1404,
"cache_read_input_tokens": 151200,
"cache_creation_input_tokens": 18420
},
"permission_denials": []
}| Field | Meaning |
|---|---|
subtype | success, error_max_turns, error_max_budget_usd, error_max_structured_output_retries, error_during_execution or error_interrupted |
is_error | true for any subtype other than success |
result | The final assistant text |
session_id | Pass to --resume to continue the session |
num_turns | Model turns in this run |
duration_ms | Wall-clock time |
total_cost_usd | What this run was paid in money: your own keys' estimate. Work your plan covers and Nib credits are never in it |
total_credits | What Nib credits paid for this run, when they paid any |
unpriced_tokens | Tokens with no known price, when there are any; neither total counts them |
usage | Token counts for this run. input_tokens includes cache reads and writes |
permission_denials | Each denied call: tool_name and tool_use_id |
structured_output | With --json-schema: the final answer, validated against the schema |
user_message_id | The id of the prompt's message, which rewind_files takes to restore files to before it |
errors | What went wrong, when the run failed |
error | When the run failed: its code, message and whether it is retryable (and the refusal, when a policy refused it) |
With --json-schema, the run must end with a structured answer. A turn that ends without one gets one reminder; if the next turn has none either, the run fails with error_max_structured_output_retries.
stream-json output
One JSON object per line while the run is in progress, then the same result object as json on the last line.
The first line describes the run:
{"type":"system","subtype":"init","session_id":"ses_01JC…","cwd":"/Users/me/code/app","model":"anthropic:claude-opus-5-5","permissionMode":"default","mcp_servers":[],"agents":[],"nib_version":"0.1.0","protocol_version":1,"daemon":"spawned"}Each following line wraps one session event:
{"type":"event","session_id":"ses_01JC…","event":{"seq":12,"body":{"type":"tool.start", …}}}Streaming deltas (assistant.delta, tool.progress) are included only with --include-partial-messages.
stream-json input
With --input-format stream-json, each line on stdin is a user message:
{"type":"user","message":{"role":"user","content":"Now add tests for it."}}content can be a string or an array of content blocks ({"type":"text","text":"…"}, images and so on). This lets another program hold a multi-turn conversation with Nib over a pipe.
Interactive mode
Slash commands
| Command | Meaning |
|---|---|
/help | Commands and keyboard shortcuts |
/clear (/new, /reset) | Start a new session. The current one stays resumable |
/resume [session] (/continue) | Resume a previous session in this folder |
/rename <title> | Rename this session |
/rewind (/checkpoint, /undo) | Rewind the conversation and files to an earlier prompt |
/fork [prompt] | Copy this conversation into a background session; you stay here |
/branch [name] | Branch the conversation here into a copy and switch to it |
/recap | A one-line summary of this session so far |
/teleport [--declassify] | --pull <id> (/tp) | Continue this session on a new cloud computer, or bring one back (coming soon) |
/model [provider:model] | Switch the model for this session |
/effort [none|minimal|low|medium|high|xhigh|max] | Set reasoning effort, with the values --effort takes |
/mode [default|acceptEdits|plan|auto|bypass] | Set the permission mode (or press Shift+Tab). The first time, bypass shows what it does and asks you to accept; after that it doesn't ask |
/plan | Switch to plan mode |
/todos | Show or hide the task list (Ctrl+T) |
/usage (/cost, /stats) | Tokens and cost for this session |
/status | Daemon, session, model and workspace details |
/diff | Summarize uncommitted changes in the workspace |
/export [file] | Write the conversation to a text file |
/init | Ask Nib to write a NIB.md guide for this project |
/review [quick|standard|deep|ultra] [pr|branch|uncommitted|last-turn] [--post] [focus] (/code-review) | Code review with structured findings, of the session's pull request by default |
/security-review [focus] | Security review of this branch's changes |
/simplify [target] | Simplify the changed code without changing its behaviour |
/pr [create|draft|status|refresh|auto-fix on|off|auto-merge on|off|unbind] | Open or manage this session's pull request |
/autofix-pr | Watch this session's pull request and push fixes for CI failures and review comments |
/loop [interval] <prompt> | Run a prompt now and again on a schedule, self-paced without an interval |
/goal [condition | clear] | Keep working across turns until a condition holds; an independent model checks it |
/sync [base] | Merge the base branch into this session's branch |
/compact [instructions] | Summarize the conversation to free context |
/context | How much of the model's context window is in use |
/config [get <key> | set [--workspace] <key> <value> | unset [--workspace] <key>] (/settings) | View and change daemon settings |
/permissions [allow|ask|deny <rule> | remove [rule]] (/allowed-tools) | Permission mode and rules |
/mcp [check|login <server> | reconnect <server> | enable|disable <server>] | MCP servers: status, sign-in, reconnecting one in this session, turning one on or off. Add one with nib mcp add |
/memory [auto [on|off] | <file>] | Memory files in $EDITOR, and auto memory on or off |
/doctor (/checkup) | Check the daemon, providers, models and workspace |
/provider [add <provider> [env:VAR] | remove [provider]] | Connect or disconnect a model provider |
/login [--email <address>] [--no-browser] [--invite <link>] | Sign in to your Nib account |
/logout | Sign out of your Nib account |
/agents | Custom subagents available to this session |
/hooks | Configured hooks |
/skills | Available skills |
/plugin [list | install <name> | enable|disable <name> | …] | Manage plugins, as nib plugin does |
/add-dir [--remember] <path> | Let Nib read and edit another folder. --remember keeps it for this project |
/output-style [style] | List or switch output styles for new sessions |
/sandbox | Whether shell commands run in the sandbox, and how to change it |
/import [claude-code|codex|gemini|cursor] [--dry-run] | Import another agent's configuration, as nib import does |
/ide | Editor integration: the connected editor and its selection |
/theme [dark|light] | Switch the color theme |
/statusline [instructions] | Ask Nib to set up a custom status line |
/tasks [share <n> | clear] (/bashes) | Background shell commands and workflows |
/btw <question> | A side question, sent without interrupting the turn |
/offer [n] [start|here|dismiss] | Choose from Nib's latest offer: start a suggested session or send a next step |
/copy | Copy the last reply to the clipboard |
/keybindings | Key bindings and how to change them |
/terminal-setup | New lines (Shift+Enter) in your terminal |
/release-notes | The version and what changed |
/exit (/quit) | Exit |
/init, /security-review, /simplify, /recap, /statusline and /loop come with Nib: the runner expands them, so they work the same in the desktop app, the CLI, VS Code and ACP clients. A skill or command of yours with the same name replaces the bundled one, and "disableBundledSkills": true in settings turns them off.
Skills you can invoke appear in the same / menu. A /name that's none of these, nor one of your skills, commands or an MCP server's prompts, isn't sent: the CLI says it's an unknown command and points to /help.
Prompt prefixes
| Prefix | Meaning |
|---|---|
/ | A slash command or skill |
@path | Mention a file. Completion suggests paths as you type |
!command | Run a shell command yourself and share its output with the agent. It runs in your SHELL; on Windows in Git Bash, or PowerShell without it |
Keyboard shortcuts are listed in Keyboard shortcuts.
Environment variables
| Variable | Meaning |
|---|---|
NIB_DAEMON_URL | Daemon to connect to |
NIB_DAEMON_TOKEN | Bearer token for that daemon |
NIB_DATA_DIR | Data directory. Default ~/.nib |
NIB_CLOUD_URL | Nib Cloud API, for nib login and nib setup-token |
NIB_CREDENTIAL_STORE | Where nib login keeps your sign-in: auto (default), system (the OS store, or fail) or file |
NIB_INSTALL_DIR | Where the shell installer put nib, so nib update recognizes that install. Default ~/.nib/bin |
NIB_USE_POWERSHELL_TOOL | Windows: 0 turns the PowerShell tool off where it's the shell (no Git Bash); 1 adds it beside Bash. CLAUDE_CODE_USE_POWERSHELL_TOOL works too |
NIB_GIT_BASH_PATH | Windows: the bash.exe of Git for Windows, when Nib doesn't find it. A path that isn't an existing bash.exe, sh.exe, bash or sh is ignored, with a warning in the log. CLAUDE_CODE_GIT_BASH_PATH works too |
NIB_THEME | dark or light for the terminal UI. Overrides /theme |
NIB_REDUCED_MOTION | 1: a still indicator instead of the animated spinner |
NIB_ASCII | 1: an ASCII spinner, for terminals without Unicode |
NIB_NOTIFY | off: no desktop notifications through the terminal |
NO_COLOR | Disable color. The UI keeps lightness contrast but drops hues |
BROWSER | The browser nib login opens |
VISUAL, EDITOR | The editor /memory and Ctrl+G open. Default vi (notepad on Windows) |
| Provider keys | See Providers and gateways |