@@ -353,8 +353,7 @@ index rebuild when supported files are present and the privacy posture has no wa
353353Manual initialization is still available:
354354
355355``` plain text
356- .mimir/config.json # local config
357- .mimir/sources.txt # optional extra source paths
356+ .mimir/config.json # local config (add extra paths to the "sources" array)
358357.mimir/raw/ # raw documents to ingest
359358.gitignore # ignores .mimir/
360359```
@@ -368,22 +367,28 @@ Put supported files under `.mimir/raw/`:
368367 requirements.docx
369368```
370369
371- For monorepos or downloaded local folders, list extra paths or glob patterns in ` .mimir/sources.txt ` .
372- Relative entries resolve from the Mimir project root, and ` ! ` excludes matched files:
370+ For monorepos or downloaded local folders, add extra paths or glob patterns to the ` sources ` array in
371+ ` .mimir/config.json ` . Relative entries resolve from the Mimir project root, and ` ! ` excludes matched files:
372+
373+ ``` json
374+ {
375+ "sources" : [
376+ " ../apps/*/README.md" ,
377+ " ../apps/*/docs/**/*.{md,mdx}" ,
378+ " ../packages/*/architecture/**/*.md" ,
379+ " !../apps/**/node_modules/**"
380+ ]
381+ }
382+ ```
383+
384+ The legacy ` .mimir/sources.txt ` file (one entry per line) is still read when present and can be managed
385+ from the CLI:
373386
374387``` bash
375388npx mimir sources add " ../apps/*/README.md" " ../apps/*/docs/**/*.{md,mdx}"
376- npx mimir sources add " !../apps/**/node_modules/**"
377389npx mimir sources list
378390```
379391
380- ``` plain text
381- ../apps/*/README.md
382- ../apps/*/docs/**/*.{md,mdx}
383- ../packages/*/architecture/**/*.md
384- !../apps/**/node_modules/**
385- ```
386-
387392### Team Workflow With A Shared Private Corpus
388393
389394For a team of 10 developers, keep Git as the reproducible setup layer and keep the corpus in an
@@ -632,6 +637,7 @@ preload Transformers.js-compatible model files with non-sensitive text, then ren
632637npx mimir audio /tmp/MIMIR-SUMMARY-project.txt \
633638 --engine transformers \
634639 --offline \
640+ --lang fr \
635641 --model-path .mimir/models/tts \
636642 --out .mimir/audio/project-summary.wav
637643```
@@ -645,8 +651,10 @@ npx mimir-tts render /tmp/MIMIR-SUMMARY-project.txt \
645651 --out .mimir/audio/project-summary.mp3
646652```
647653
648- The default standalone engine is ` transformers ` . The default Transformers.js model is
649- ` Xenova/mms-tts-fra ` . Override it with ` --model ` or ` MIMIR_TTS_MODEL ` .
654+ The default standalone engine is ` transformers ` and the default language is ` fr ` . Pass
655+ ` --lang en|es|fr ` (or ` MIMIR_TTS_LANG ` ) to switch language: it selects the matching self-contained
656+ offline model (` Xenova/mms-tts-eng ` , ` Xenova/mms-tts-spa ` , or ` Xenova/mms-tts-fra ` ) and, on the Edge
657+ path, a native neural voice. Override the model directly with ` --model ` or ` MIMIR_TTS_MODEL ` .
650658
651659See [ ` docs/offline-tts-preload.md ` ] ( ./docs/offline-tts-preload.md ) for the exact preload and
652660offline-check workflow.
@@ -787,6 +795,7 @@ Default `.mimir/config.json` for a fresh project:
787795 "rawDir" : " .mimir/raw" ,
788796 "storageDir" : " .mimir/storage" ,
789797 "sourcesFile" : " .mimir/sources.txt" ,
798+ "sources" : [],
790799 "accessLogPath" : " .mimir/access.log" ,
791800 "embeddingModelPath" : " .mimir/models" ,
792801 "tableName" : " chunks" ,
@@ -816,6 +825,63 @@ Default `.mimir/config.json` for a fresh project:
816825}
817826```
818827
828+ Every field, its default, and what it controls:
829+
830+ | Field | Default | Purpose |
831+ | --- | --- | --- |
832+ | ` rawDir ` | ` .mimir/raw ` | Local corpus folder, indexed recursively. The primary place to drop documents. |
833+ | ` sources ` | ` [] ` | Extra file, directory, and glob paths (plus ` ! ` exclusions) to index, resolved from the project root. See below. |
834+ | ` sourcesFile ` | ` .mimir/sources.txt ` | Legacy one-path-per-line file; still read and merged with ` sources ` when present. |
835+ | ` storageDir ` | ` .mimir/storage ` | LanceDB vector store location. |
836+ | ` accessLogPath ` | ` .mimir/access.log ` | Query access log (stores hashes/metadata only). |
837+ | ` embeddingModelPath ` | ` .mimir/models ` | Local cache for the Transformers.js embedding model. |
838+ | ` tableName ` | ` chunks ` | LanceDB table name. |
839+ | ` embeddingProvider ` | ` local-hash ` | ` local-hash ` (offline lexical, not semantic) or ` transformers ` (semantic). Switching requires ` mimir ingest --rebuild ` . |
840+ | ` embeddingModel ` | ` mixedbread-ai/mxbai-embed-xsmall-v1 ` | Model used when ` embeddingProvider ` is ` transformers ` . |
841+ | ` transformersAllowRemoteModels ` | ` false ` | Allow downloading the embedding model at runtime. |
842+ | ` redaction.enabled ` | ` true ` | Strip secrets/PII before anything is embedded. |
843+ | ` redaction.builtIn ` | ` true ` | Apply the built-in secret/PII patterns. |
844+ | ` redaction.patterns ` | ` [] ` | Extra ` { name, pattern, flags?, replacement? } ` redaction rules. |
845+ | ` accessLog ` | ` true ` | Record query metadata to ` accessLogPath ` . |
846+ | ` mcpMaxTopK ` | ` 10 ` | Hard cap on results any MCP tool may return. |
847+ | ` topK ` | ` 8 ` | Default number of passages returned by ` search ` /` ask ` . |
848+ | ` chunkSize ` | ` 1200 ` | Characters per chunk. |
849+ | ` chunkOverlap ` | ` 200 ` | Overlapping characters between chunks (must be ` < chunkSize ` ). |
850+ | ` maxFileBytes ` | ` 50000000 ` | Skip files larger than this. |
851+ | ` ingestConcurrency ` | ` 4 ` | Files processed in parallel during ingest. |
852+ | ` embeddingBatchSize ` | ` 32 ` | Chunks embedded per batch. |
853+ | ` includeExtensions ` | ` [] ` | Extra file extensions to treat as indexable text. |
854+ | ` pdfOcrCommand ` , ` imageOcrCommand ` , ` legacyWordCommand ` | ` [] ` | Opt-in external extractors (see below). |
855+ | ` pdfOcrTimeoutMs ` , ` imageOcrTimeoutMs ` , ` legacyWordTimeoutMs ` | ` 120000 ` | Timeouts for the external extractors. |
856+
857+ ### Extra source paths (` sources ` )
858+
859+ Mimir always indexes everything under ` rawDir ` (` .mimir/raw/ ` ). To pull in files that live elsewhere —
860+ sibling packages in a monorepo, a shared docs folder, a downloaded directory — add them straight to the
861+ ` sources ` array in ` .mimir/config.json ` . No separate file is needed:
862+
863+ ``` json
864+ {
865+ "sources" : [
866+ " ../packages/*/README.md" ,
867+ " ../docs" ,
868+ " ./NOTES.md" ,
869+ " !../packages/**/node_modules/**"
870+ ]
871+ }
872+ ```
873+
874+ Each entry is one of:
875+
876+ - a ** file** or ** directory** path — relative paths resolve from the project root; directories are indexed recursively;
877+ - a ** glob** pattern — any entry containing ` * ` , ` ? ` , ` [ ` , or ` { ` ;
878+ - an ** exclusion** — starts with ` ! ` and filters the glob matches.
879+
880+ > ** Legacy ` sources.txt ` .** Paths listed one per line in ` .mimir/sources.txt ` are still read when the
881+ > file exists, and ` mimir sources add ` / ` mimir sources list ` continue to manage it. Entries from both
882+ > the ` sources ` array and ` sources.txt ` are merged, so existing projects keep working unchanged. New
883+ > projects should prefer the ` sources ` array — ` mimir init ` no longer creates a ` sources.txt ` .
884+
819885Environment overrides:
820886
821887- ` MIMIR_RAW_DIR `
0 commit comments