Configuration
GNO configuration reference.
Config File
Location varies by platform (see File Locations below).
Run gno doctor to see your resolved config path.
version: "1.0"
# FTS tokenizer (set at init, cannot change)
ftsTokenizer: snowball english
# Collections
collections:
- name: notes
path: /Users/you/notes
pattern: "**/*.md"
include: []
exclude:
- .git
- node_modules
languageHint: en
- name: work
path: /Users/you/work/docs
pattern: "**/*"
exclude:
- dist
- build
# Contexts (semantic hints)
contexts:
- scopeType: global
scopeKey: /
text: Personal knowledge base and project documentation
- scopeType: collection
scopeKey: notes:
text: Personal notes and journal entries
- scopeType: prefix
scopeKey: gno://work/api
text: API documentation and specifications
# Model configuration
models:
activePreset: balanced
Collections
Collections define what gets indexed.
Collection Fields
| Field | Type | Default | Description |
|---|---|---|---|
name |
string | required | Unique identifier (lowercase) |
path |
string | required | Absolute path to directory |
pattern |
glob | **/* |
File matching pattern |
include |
array | see below | Extension allowlist |
exclude |
array | see below | Patterns to skip |
updateCmd |
string | - | Shell command before indexing |
languageHint |
string | - | BCP-47 language code |
Default Include Extensions
When include is empty (default), only supported document types are indexed:
.md- Markdown.txt- Plain text.pdf- PDF documents.docx- Word documents.pptx- PowerPoint.xlsx- Excel spreadsheets
To override the default and index only specific supported types:
include:
- .md
- .txt
Note:
includecontrols which files are scanned, but files must still have converter support. Specifying unsupported extensions will result in conversion errors.
Files without extensions (e.g., Makefile, LICENSE) and dotfiles (e.g., .env, .gitignore) are always excluded.
Default Excludes
exclude:
- .git
- node_modules
- .venv
- .idea
- dist
- build
- __pycache__
- .DS_Store
- Thumbs.db
Examples
Markdown notes:
- name: notes
path: /Users/you/notes
pattern: "**/*.md"
Code docs with language hint:
- name: german-docs
path: /Users/you/docs/german
pattern: "**/*.md"
languageHint: de
Mixed documentation folder:
- name: project-docs
path: /Users/you/project/docs
pattern: "**/*"
include:
- .md
- .txt
exclude:
- node_modules
- dist
- drafts
Note: Exclude patterns match path components (directory or file names), not globs. Use
distto exclude adist/directory, not*.js.
With update command:
- name: wiki
path: /Users/you/wiki
updateCmd: "git pull"
Contexts
Contexts add semantic hints to improve search relevance.
Scope Types
| Type | Key Format | Example |
|---|---|---|
global |
/ |
Applies to all documents |
collection |
name: |
Applies to collection |
prefix |
gno://collection/path |
Applies to path prefix |
Examples
contexts:
# Global context
- scopeType: global
scopeKey: /
text: Technical knowledge base for software development
# Collection context
- scopeType: collection
scopeKey: notes:
text: Personal notes and daily journal entries
# Path prefix context
- scopeType: prefix
scopeKey: gno://work/api
text: REST API documentation and OpenAPI specs
Models
Model configuration for embeddings and AI answers.
Presets
| Preset | Disk | Best For |
|---|---|---|
slim |
~1GB | Fast, good quality (default) |
balanced |
~2GB | Slightly larger model |
quality |
~2.5GB | Best answers, complex content |
Note: When using GNO standalone with
--answer, the quality preset is required for documents containing Markdown tables or other structured content. The smaller models in slim/balanced presets cannot reliably parse tabular data. When GNO is used via MCP, skill, or CLI by AI agents (Claude Code, Codex, etc.), the agent handles answer generation, so any preset works for retrieval.
Model Details
All presets use:
- bge-m3 for embeddings (1024 dimensions, multilingual)
- Qwen3-Reranker-0.6B for reranking (scores best chunk per document)
| Preset | Embed | Rerank | Gen |
|---|---|---|---|
| slim | bge-m3-Q4 | Qwen3-Reranker-0.6B-Q8 | Qwen3-1.7B-Q4 |
| balanced | bge-m3-Q4 | Qwen3-Reranker-0.6B-Q8 | Qwen2.5-3B-Q4 |
| quality | bge-m3-Q4 | Qwen3-Reranker-0.6B-Q8 | Qwen3-4B-Q4 |
The reranker’s 32K context window allows scoring complete documents (tables, code, all sections) rather than truncated snippets.
Custom Models
models:
activePreset: custom
presets:
- id: custom
name: My Custom Setup
embed: hf:user/model/embed.gguf
rerank: hf:user/model/rerank.gguf
gen: hf:user/model/gen.gguf
Model URIs support:
hf:org/repo/file.gguf- Hugging Face downloadfile:/path/to/model.gguf- Local filehttp://host:port/path#modelname- Remote HTTP endpoint (OpenAI-compatible)
HTTP Endpoints
GNO supports remote model servers using OpenAI-compatible APIs. This allows offloading inference to a more powerful machine (e.g., a GPU server on your network).
models:
activePreset: remote
presets:
- id: remote
name: Remote GPU Server
embed: "http://192.168.1.100:8081/v1/embeddings#bge-m3"
rerank: "http://192.168.1.100:8082/v1/completions#qwen3-reranker"
gen: "http://192.168.1.100:8083/v1/chat/completions#qwen3-4b"
URI Format: http://host:port/path#modelname
| Component | Description |
|---|---|
http(s):// |
Protocol (HTTP or HTTPS) |
host:port |
Server address |
/path |
API endpoint (e.g., /v1/chat/completions) |
#modelname |
Optional model identifier sent in requests |
Supported Endpoints:
| Model Type | API Path | OpenAI-Compatible API |
|---|---|---|
embed |
/v1/embeddings |
Embeddings API |
rerank |
/v1/completions |
Completions API (text only) |
gen |
/v1/chat/completions |
Chat Completions API |
Example with llama.cpp server:
# Start llama-server for generation
llama-server -m model.gguf --host 0.0.0.0 --port 8083
# Configure GNO to use it
# gen: "http://192.168.1.100:8083/v1/chat/completions#my-model"
Benefits:
- Offload inference to a GPU server
- Share models across multiple machines
- Use larger models than local hardware supports
- Keep local machine responsive during inference
Timeouts
models:
loadTimeout: 60000 # Model load timeout (ms)
inferenceTimeout: 30000 # Inference timeout (ms)
warmModelTtl: 300000 # Keep-warm duration (ms)
FTS Tokenizer
Set at gno init, cannot be changed without rebuilding.
| Tokenizer | Description |
|---|---|
snowball english |
Snowball stemmer (default, 20+ languages) |
unicode61 |
Unicode-aware, no stemming |
porter |
English-only stemming (legacy) |
trigram |
Substring matching |
The Snowball stemmer enables matching across word forms: “running” matches “run”, “scored” matches “score”, plurals match singulars.
# Initialize with unicode61 (no stemming)
gno init --tokenizer unicode61
Environment Variables
Override paths (applied before platform defaults):
| Variable | Description |
|---|---|
GNO_CONFIG_DIR |
Override config directory |
GNO_DATA_DIR |
Override database directory |
GNO_CACHE_DIR |
Override model cache |
File Locations
Linux (XDG):
| Path | Purpose |
|——|———|
| ~/.config/gno/index.yml | Config |
| ~/.local/share/gno/index-default.sqlite | Database |
| ~/.cache/gno/models/ | Model cache |
macOS:
| Path | Purpose |
|——|———|
| ~/Library/Application Support/gno/config/index.yml | Config |
| ~/Library/Application Support/gno/data/index-default.sqlite | Database |
| ~/Library/Caches/gno/models/ | Model cache |
Run gno doctor to see resolved paths for your system.
Editing Config
Edit directly or use CLI:
# Add collection via CLI
gno collection add ~/notes --name notes
# View config (Linux)
cat ~/.config/gno/index.yml
# View config (macOS)
cat ~/Library/Application\ Support/gno/config/index.yml
After manual edits, run gno update to apply changes.