Configuration.
Nilux keeps configuration in plain files — no hidden databases, no magic registries. Global settings live in ~/.nilux/, project-scoped files live in your repo.
File map
Every file Nilux reads or writes. Nothing else touches the filesystem.
plaintext# Global (per-user)~/.nilux/config.json # auth, model, language, thinkingnilux.md # user-wide instructionsrules/*.md # user-wide rulesagents/*.md # custom agent definitionsskills/ # custom skillssettings.json # MCP servers (user scope)projects/<slug>/ # per-project sessions, todos, memory# Project (in your repo)nilux.md # project instructions — commit thisnilux.local.md # private overrides — gitignore this.mcp.json # MCP servers (project scope).nilux/settings.json # permission rules (auto-generated)rules/*.md # project rulesagents/*.md # project-scoped agentsskills/ # project-scoped skills
nilux.md — project instructions
This is the most important config file. It tells the agent what your project is, how it should behave, and what to avoid. Nilux loads it into every conversation as context.
markdown# nilux.mdThis is a Next.js 16 + Prisma monorepo.## Rules- Never modify files in billing/* without asking.- Always run tests after editing middleware.- Use pnpm, not npm.## ArchitectureAPI routes in src/app/api/. Database models in prisma/schema.prisma.
Nilux discovers instructions in this order. Later files take priority:
~/.nilux/nilux.md— your global preferences, applied to every project~/.nilux/rules/*.md— global rules (alphabetical)nilux.md— project instructions, checked into git.nilux/rules/*.md— project rules (alphabetical)nilux.local.md— private overrides, never committed
Run /init inside a session to have Nilux generate a nilux.md for your project based on its structure.
You can include other files with @path/to/file.md on its own line. Nilux resolves includes relative to the file, up to 5 levels deep.
Global config
~/.nilux/config.json stores account-level settings. Nilux manages this file — you rarely need to edit it by hand.
json{"llm_mode": "standard", # active model tier"language": "English", # response language"show_thinking": true, # show reasoning"thinking_mode": true, # deep reasoning"server_url": "https://api.nilux.dev"}
Most of these are easier to change through slash commands during a session:
/model— switch model tier (Standard, Pro)/config— toggle language, thinking mode, vision, memory/agents— assign models to individual agents
Permission rules
When Nilux asks to run a command or edit a file, you see a numbered menu. Choosing option 2 saves a persistent allow-rule to .nilux/settings.json:
json{"permissions": {"allow": ["Bash(git status:*)", # allow all git status"Bash(pnpm test:*)", # allow pnpm test + args"Read" # allow reading any file],"deny": [],"additionalDirectories": []}}
Dangerous operations like rm -rf, git reset --hard, and DROP TABLE always require approval regardless of rules.
MCP servers
MCP connects Nilux to external services — databases, APIs, cloud providers. Add servers via CLI or edit .mcp.json directly:
bash# Add a stdio server (runs as a child process)$nilux mcp add --transport stdio --scope project my-server -- npx -y @org/mcp-server# Add a network server (connects via URL)$nilux mcp add --transport sse --scope user my-api http://localhost:8080/mcp
json// .mcp.json{"mcpServers": {"my-server": {"command": "npx","args": ["-y", "@org/mcp-server"]},"my-api": {"url": "http://localhost:8080/mcp","transport": "sse"}}}
Three scopes, last wins: ~/.nilux/settings.json (global) → .mcp.json (project) → ~/.nilux/settings.local.json (private).
Environment variables
Two environment variables are supported:
NILUX_SERVER_URL— override the API server address. Takes priority overconfig.json.NILUX_GIT_BASH_PATH— custom path to Git Bash (Windows only).
Per-project storage
Session history, todos, and memory are stored per-project in ~/.nilux/projects/<slug>/ where the slug is derived from your project path. These files stay on your machine — Nilux never uploads them. (The conversation itself is sent to the server while you're working and when you resume a session.)
plaintext~/.nilux/projects/my-app/sessions-index.json # fast index for /resume<uuid>.jsonl # conversation logstodos.json # project todossession_memory.md # session summaryfile-history/ # checkpoints for /rewind
Use /resume to pick up a previous session. Use /rewind to roll back file changes to an earlier checkpoint.