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 json

Options

Session

FlagMeaning
-c, --continueContinue 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-sessionWith --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, --resume and --from-pr can't be combined, and --fork-session requires --continue or --resume.
  • --worktree and --session-id start a new session, so they can't be combined with resuming one.
  • -r takes 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

FlagMeaning
-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-permissionsSame 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-permissionsLets 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

FlagMeaning
--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-configUse 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

FlagMeaning
-p, --printRun 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-messagesWith 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-persistenceDelete the session when the run ends
--bgStart the run, print its session id and exit. Follow it with nib --resume <id>
--init, --maintenanceWith -p: run the Setup hooks (trigger init or maintenance) first
--init-onlyRun the Setup and SessionStart hooks, then exit. Takes no prompt
  • --output-format, --input-format, --max-budget-usd, --json-schema and --no-session-persistence require -p. --include-partial-messages requires --output-format stream-json.
  • -p can't open the session picker, so --resume needs an explicit id in headless mode.
  • --no-session-persistence deletes the session it ran in, so with --continue or --resume it needs --fork-session, and it can't be combined with --worktree.
  • --bg doesn't wait for the run, so it can't be combined with stream-json input or output, --max-turns, --json-schema or --no-session-persistence.

Daemon

FlagEnvironment variableMeaning
--daemon-url <url>NIB_DAEMON_URLConnect to this daemon
NIB_DAEMON_TOKENIts bearer token
--data-dir <dir>NIB_DATA_DIRDaemon 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

FlagMeaning
--verboseDiagnostics on stderr, including permission denials in headless mode
-v, --versionPrint the version
-h, --helpShow help

Commands

CommandMeaning
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 doctorCheck 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 logoutSign in to your Nib account, or out of it. Also nib auth login and nib auth logout
nib auth statusWhich Nib account nib is signed in with
nib usageYour 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:

ClassWhat the item does
env-execAn environment variable that makes every program a session starts load or run code: PATH, NODE_OPTIONS, LD_*, DYLD_*, PYTHONPATH and the like
permission-bypassSkips 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.

OptionMeaning
--from <src>Source to import, the same as the positional argument
--dry-runList 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
--userImport user-level configuration (~/.claude, ~/.codex, …) instead of this project's
--allBoth project and user level
--forceReplace 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.

OptionMeaning
--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-runShow what the export holds, every memory and instruction in full. Writes nothing
--jsonWith --dry-run, print the plan as JSON
--runsList 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

CommandMeaning
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": …}
listEvery 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-choicesForget 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

CommandMeaning
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.

OptionMeaning
--pull <id>Bring a session moved to the cloud back here as a new session
--declassifyWhen your sessions are encrypted before they sync: agree that the cloud may read this one once it moves. Asked interactively otherwise
--daemon-url, --data-dirAs 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.

OptionMeaning
--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-browserlogin: 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-linklogin: sign in only, and don't link this computer
--sync, --no-synclogin: whether this computer syncs its sessions. Asked once otherwise
--jsonauth status, usage: machine-readable output

nib keys

CommandMeaning
status [--json]Whether this computer encrypts what it syncs, and how your keys are kept. The default
setupOn your first device: make your account's keys and save the recovery phrase, which is shown once
joinAnother of your devices approves this one, after you compare a code on both
recoverJoin with your recovery phrase instead
approveApprove devices waiting to join, after comparing the code each one shows

nib usage request

nib usage request [--credits <credits>] [--note <text>]
nib usage request --withdraw

Asks 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.

OptionMeaning
--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
--withdrawWithdraw the request that's waiting
--cloud-url <url>Nib Cloud API. Environment variable NIB_CLOUD_URL
--jsonMachine-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.

OptionMeaning
--days <n>The last n days, today included: 1 to 400. Default: 30
--csvA row per day and member, as CSV
--cloud-url <url>Nib Cloud API. Environment variable NIB_CLOUD_URL
--jsonThe cloud's answer, machine-readable

nib usage export

nib usage export [--days <n>] > usage.csv

For 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.

OptionMeaning
--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.

OptionMeaning
--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
--blockdecline, 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
--jsonMachine-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.

OptionMeaning
--cloud-url <url>Nib Cloud API. Environment variable NIB_CLOUD_URL
--name <name>Device name. Default: CI (<hostname>)
--printPrint the device token once to stdout, and don't link the local daemon
--sync, --no-syncWhether this device syncs its sessions. Default: paused until you choose under Account
--daemon-url, --data-dirAs in the daemon options
--verboseDiagnostics on stderr

Exit codes

CodeMeaning
0Success
1The run failed, including stopping at --max-turns or --max-budget-usd
2Invalid command line
130Interrupted

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, --allowedTools and --disallowedTools. Anything they don't allow is denied, and the agent is told how to proceed. Every denial is listed in permission_denials in 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 json

text 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": []
}
FieldMeaning
subtypesuccess, error_max_turns, error_max_budget_usd, error_max_structured_output_retries, error_during_execution or error_interrupted
is_errortrue for any subtype other than success
resultThe final assistant text
session_idPass to --resume to continue the session
num_turnsModel turns in this run
duration_msWall-clock time
total_cost_usdWhat this run was paid in money: your own keys' estimate. Work your plan covers and Nib credits are never in it
total_creditsWhat Nib credits paid for this run, when they paid any
unpriced_tokensTokens with no known price, when there are any; neither total counts them
usageToken counts for this run. input_tokens includes cache reads and writes
permission_denialsEach denied call: tool_name and tool_use_id
structured_outputWith --json-schema: the final answer, validated against the schema
user_message_idThe id of the prompt's message, which rewind_files takes to restore files to before it
errorsWhat went wrong, when the run failed
errorWhen 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

CommandMeaning
/helpCommands 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
/recapA 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
/planSwitch to plan mode
/todosShow or hide the task list (Ctrl+T)
/usage (/cost, /stats)Tokens and cost for this session
/statusDaemon, session, model and workspace details
/diffSummarize uncommitted changes in the workspace
/export [file]Write the conversation to a text file
/initAsk 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-prWatch 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
/contextHow 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
/logoutSign out of your Nib account
/agentsCustom subagents available to this session
/hooksConfigured hooks
/skillsAvailable 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
/sandboxWhether 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
/ideEditor 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
/copyCopy the last reply to the clipboard
/keybindingsKey bindings and how to change them
/terminal-setupNew lines (Shift+Enter) in your terminal
/release-notesThe 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

PrefixMeaning
/A slash command or skill
@pathMention a file. Completion suggests paths as you type
!commandRun 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

VariableMeaning
NIB_DAEMON_URLDaemon to connect to
NIB_DAEMON_TOKENBearer token for that daemon
NIB_DATA_DIRData directory. Default ~/.nib
NIB_CLOUD_URLNib Cloud API, for nib login and nib setup-token
NIB_CREDENTIAL_STOREWhere nib login keeps your sign-in: auto (default), system (the OS store, or fail) or file
NIB_INSTALL_DIRWhere the shell installer put nib, so nib update recognizes that install. Default ~/.nib/bin
NIB_USE_POWERSHELL_TOOLWindows: 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_PATHWindows: 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_THEMEdark or light for the terminal UI. Overrides /theme
NIB_REDUCED_MOTION1: a still indicator instead of the animated spinner
NIB_ASCII1: an ASCII spinner, for terminals without Unicode
NIB_NOTIFYoff: no desktop notifications through the terminal
NO_COLORDisable color. The UI keeps lightness contrast but drops hues
BROWSERThe browser nib login opens
VISUAL, EDITORThe editor /memory and Ctrl+G open. Default vi (notepad on Windows)
Provider keysSee Providers and gateways

On this page