Configuration
All configuration is loaded from .env via pydantic-settings (navi/config.py). The global settings object is imported everywhere as from navi.config import settings.
LLM
| Variable |
Type |
Default |
Description |
OLLAMA_HOST |
str |
http://localhost:11434 |
Ollama server URL |
OLLAMA_API_KEY |
str |
"" |
Ollama Cloud API key for direct https://ollama.com access |
OLLAMA_DEFAULT_MODEL |
str |
gemma4:e2b-it-q8_0 |
Default model (can be overridden per profile) |
OLLAMA_NUM_CTX |
int |
65536 |
Context window size in tokens |
OLLAMA_THINK |
bool |
true |
Enable extended reasoning (thinking) |
OPENAI_API_KEY |
str |
"" |
OpenAI API key (if using OpenAI backend) |
ANTHROPIC_API_KEY |
str |
"" |
Anthropic API key (if using Anthropic backend) |
For direct Ollama Cloud access, set OLLAMA_HOST=https://ollama.com and OLLAMA_API_KEY=<key>. Built-in profiles may override OLLAMA_DEFAULT_MODEL, so update the model field in navi/profiles/*/config.json to a cloud model when switching away from local Ollama models.
Security / Sandboxing
| Variable |
Type |
Default |
Description |
FS_ALLOWED_PATHS |
str |
"*" |
Comma-separated paths the filesystem tool can access. "*" = no restriction |
TERMINAL_ALLOWED_COMMANDS |
str |
"*" |
Comma-separated allowed executables for terminal. "*" = allow all |
SSH_HOSTS_FILE |
str |
ssh_hosts.json |
Path to JSON file with named SSH connections |
settings.fs_allowed_paths_list and settings.terminal_allowed_commands_list are computed properties that parse the comma-separated strings into lists.
Database
| Variable |
Type |
Default |
Description |
DB_PATH |
str |
navi.db |
SQLite database file path |
Logging
| Variable |
Type |
Default |
Description |
LOG_LEVEL |
str |
INFO |
Python logging level (DEBUG, INFO, WARNING, ERROR) |
| Variable |
Type |
Default |
Description |
TOOLS_DIR |
str |
tools |
Directory for user-defined tools (auto-discovered at startup) |
Session files
| Variable |
Type |
Default |
Description |
SESSION_FILES_DIR |
str |
session_files |
Directory for uploaded session files |
SESSION_FILES_MAX_SIZE_MB |
int |
200 |
Max upload size per file in megabytes |
SESSION_FILES_TTL_HOURS |
int |
24 |
Hours before session file directories are cleaned up |
Context compression
| Variable |
Type |
Default |
Description |
CONTEXT_COMPRESSION_ENABLED |
bool |
true |
Enable/disable automatic context compression |
CONTEXT_COMPRESSION_THRESHOLD |
float |
0.80 |
Trigger compression at this fraction of OLLAMA_NUM_CTX |
CONTEXT_KEEP_RECENT |
int |
10 |
Number of recent conversation turns to keep verbatim |
CONTEXT_SUMMARY_TEMPERATURE |
float |
0.3 |
Temperature for the summarization LLM call |
Persona
| Variable |
Type |
Default |
Description |
NAVI_PERSONA |
str |
"" |
Global personality prompt prepended to every profile's system prompt |
NAVI_PERSONA_FILE |
str |
"" |
Path to a .txt file containing the persona (preferred over inline NAVI_PERSONA) |
Recommended: use NAVI_PERSONA_FILE=persona.txt rather than inlining the persona in .env, because multi-line values don't parse reliably in .env files.
The _load_persona_from_file validator reads the file on startup if NAVI_PERSONA is empty and NAVI_PERSONA_FILE is set.
Example .env
OLLAMA_HOST=http://localhost:11434
OLLAMA_API_KEY=
OLLAMA_DEFAULT_MODEL=gemma4:e2b-it-q8_0
OLLAMA_NUM_CTX=65536
OLLAMA_THINK=true
FS_ALLOWED_PATHS=*
TERMINAL_ALLOWED_COMMANDS=*
DB_PATH=navi.db
LOG_LEVEL=INFO
TOOLS_DIR=tools
CONTEXT_COMPRESSION_ENABLED=true
CONTEXT_COMPRESSION_THRESHOLD=0.80
CONTEXT_KEEP_RECENT=10
NAVI_PERSONA_FILE=persona.txt