Skip to content

Configuration

NurCLI is configured via a TOML file and optional rule/hook files, plus environment variables.

Config file

The config file lives at ~/.nur/config.toml and is created on first run.

# Active provider id from the catalog (set by TUI /login)
provider = "meta"
model = "muse-spark-1.1"
base_url = "https://api.meta.ai/v1"
reasoning_effort = "high"
max_turns = 40
stream = true
context_window = 1000000

# Tool results larger than this spill to ~/.nur/tool-results/ (0 = unlimited)
tool_result_max_chars = 12000

# Optional hard stops (omit or leave unset for unlimited)
# max_session_cost_usd = 5.0
# max_session_tokens = 500000

# Compaction (auto under context pressure, or /compact)
compact_keep_user_turns = 4
compact_tool_body_max_chars = 800

# Cost-saver prompt: skip PLUR inject, skills catalog, long memory (tools stay full)
poor_mode = false

# Background TTL pack repair on later TUI opens (first install is foreground)
ecosystem_auto_ensure = true

Settings reference

Key Type Default Description
provider string nur Catalog id (nur, openai, openrouter, ollama, …). Set by TUI /login with matching base_url + model
model string muse-spark-1.1 Model id for the active provider
base_url string https://api.meta.ai/v1 API base (no trailing path); providers use Responses or Chat Completions under this base
reasoning_effort string high Reasoning depth: minimal, low, medium, high, xhigh
max_turns integer 40 Max agent turns per prompt (range: 1–200)
stream bool true Stream API responses
context_window integer 1000000 Model context window in tokens (range: 1000–2000000)
tool_result_max_chars integer 12000 Max inline tool output chars; larger results spill to disk (0 = unlimited)
max_session_cost_usd float? unset Hard stop when session estimated cost reaches this USD amount
max_session_tokens integer? unset Hard stop when session total_tokens reaches this value
compact_keep_user_turns integer 4 Recent user turns kept after compaction
compact_tool_body_max_chars integer 800 When compacting, truncate older tool bodies to this many chars (0 = leave intact)
poor_mode bool false Skip PLUR auto-inject, skills catalog, and long memory in the system prompt
ecosystem_auto_ensure bool true Background TTL repair of packs on later TUI opens (first install is foreground via one-liner / EXE / nur install); set false to skip repair

Reasoning effort levels

Level Behaviour
minimal Fastest, shallowest reasoning
low Light reasoning
medium Balanced
high Deep reasoning (default)
xhigh Maximum reasoning depth

Session budgets (interactive)

In the TUI you can set ceilings without editing the file:

/budget                 # show ceilings + spend so far
/budget cost 2.5        # hard stop at ~$2.50 this process
/budget tokens 500000
/budget clear           # unlimited this process
/budget save            # write current ceilings into config.toml

When a ceiling is hit, the agent refuses new API turns with a clear status message.


Permission rules

Optional file: ~/.nur/permissions.toml (and/or project .meta/permissions.toml — both are merged).

# Patterns: "tool" or "tool:glob"  (* = any sequence)
# Order: deny > ask > allow > mode default
# Plan mode still blocks code authoring / VCS mutation even if allow matches.

deny  = ["bash:rm -rf *", "bash:git push --force*"]
ask   = ["bash:npm publish*"]
allow = ["bash:git status*", "bash:cargo test*"]
Decision Effect
deny Always block (including auto mode)
ask Force an approval prompt (even in auto)
allow Skip approval in manual (plan structural blocks still win)

Reload without restart: /permissions reload.


Tool hooks

Optional file: ~/.nur/hooks.toml.

pre_tool = "echo pre $NUR_TOOL"
post_tool = ""
timeout_ms = 5000

Environment for hook commands (legacy META_* aliases are also set):

Env Meaning
NUR_TOOL Tool name
NUR_ARGS_JSON Raw JSON args
NUR_CWD Workspace cwd
NUR_SESSION Session id

Non-zero pre_tool exit blocks the tool. Missing file = no hooks. Check status with /hooks.


Environment variables

API and model

Variable Purpose
NUR_API_KEY API key (preferred)
META_API_KEY Optional key for Meta Model API provider / legacy installs
MODEL_API_KEY API key (alternative)
MUSE_API_KEY API key (legacy)
NUR_BASE_URL Override API base URL (self-hosted Ollama/vLLM/LiteLLM/gateways); legacy META_BASE_URL
NUR_MODEL Override model id; legacy META_MODEL / MUSE_MODEL

Paths

Variable Purpose
NUR_HOME Override data home (default ~/.nur); legacy META_HOME / MUSE_HOME
NUR_CWD Default working directory; legacy META_CWD

Status and usage

Set by NurCLI for host integrations (legacy META_* aliases are also exported):

Variable Purpose
NUR_STATUS_PATH Path to live status file
NUR_USAGE_LOG_PATH Path to usage log
NUR_SESSION_ID Current session id
NUR_PROVIDER Provider identifier (set to nur)

Update control

Variable Purpose
DISABLE_AUTOUPDATER Set to 1 to disable background auto-updates
DISABLE_UPDATES Set to 1 to block all update paths

Ecosystem

Variable Purpose
CLAUDE_FLOW_DB_PATH Ruflo database path
CLAUDE_FLOW_MEMORY_PATH Ruflo home path
USE_BUILTIN_RIPGREP Set to 0 to use system ripgrep

Data home

All NurCLI state lives under ~/.nur/ by default:

~/.nur/
├── auth.json           # API key
├── config.toml         # Configuration
├── permissions.toml    # Optional allow/deny/ask rules
├── hooks.toml          # Optional pre/post tool hooks
├── nur.log            # Tracing (not painted into the TUI)
├── status.json         # Live token/cost status
├── usage.jsonl         # Per-request usage log
├── ade.json            # ADE discovery manifest
├── memory.md           # Cross-session memory journal (quick-memory #notes)
├── history.jsonl       # Prompt history
├── sessions/           # Session files (UUID.json + .json.bak / .precompact.bak)
├── tool-results/       # Spilled oversized tool outputs
├── browser-extension/  # Staged tmwd_cdp_bridge for browser tool
├── skills/             # Installed skill packs
├── ruflo/              # Vector memory database
└── skill-packs/        # Skill pack metadata

Override with META_HOME (or legacy MUSE_HOME).


Legacy migration

If you upgraded from a pre-0.5.14 build, NurCLI automatically gap-fills missing files from ~/.muse/ into ~/.nur/. Existing files are never overwritten. When the same session id exists in both homes, the richer copy (more tokens / newer) wins.

nur auth logout clears auth from both ~/.nur/ and legacy ~/.muse/.


Project instructions

NurCLI reads project-level instruction files from your working directory:

File Purpose
NUR.md Primary project instructions
AGENTS.md Agent conventions (shared with other tools)
CLAUDE.md Legacy instructions (still loaded)
MUSE.md Legacy instructions (still loaded)

These are loaded at session start and prepended to the system prompt.