Both memtomem (LTM) and memtomem-stm (STM) use pydantic-settings with env_prefix + env_nested_delimiter="__". Nested settings use double underscore — MEMTOMEM_EMBEDDING__PROVIDER, not MEMTOMEM_EMBEDDING_PROVIDER.
Resolution order (highest priority first): CLI flags → environment variables → config file → built-in defaults.
This public reference tracks the memtomem 0.2.2 configuration surface.
Variable Description Default MEMTOMEM_STORAGE__BACKENDStorage backend sqliteMEMTOMEM_STORAGE__SQLITE_PATHSQLite database file path ~/.memtomem/memtomem.dbMEMTOMEM_STORAGE__COLLECTION_NAMELogical collection name memories
Variable Description Default MEMTOMEM_EMBEDDING__PROVIDERnone / onnx / ollama / openainone (keyword-only until wizard runs)MEMTOMEM_EMBEDDING__MODELModel name for the chosen provider ""MEMTOMEM_EMBEDDING__DIMENSIONVector dimension (must match model) provider-specific MEMTOMEM_EMBEDDING__BASE_URLOllama / OpenAI-compatible endpoint — MEMTOMEM_EMBEDDING__API_KEYAPI key for paid providers — MEMTOMEM_EMBEDDING__BATCH_SIZETexts per embedding batch 64MEMTOMEM_EMBEDDING__MAX_CONCURRENT_BATCHESMax parallel embedding batches 4MEMTOMEM_EMBEDDING__THREADSONNX Runtime thread cap (0 = ORT default) 4MEMTOMEM_EMBEDDING__PROGRESS_THRESHOLDEmit per-chunk progress only when a file produces more chunks than this threshold; 0 always emits 32
Variable Description Default MEMTOMEM_INDEXING__MEMORY_DIRSDirectories reactively re-indexed by the mm server file watcher (JSON list). Pre-existing files are not auto-scanned — seed them once with mm index <dir>, then the watcher picks up further edits. Populated by mm init when you opt in to AI agent memory enrollment. ["~/.memtomem/memories"] plus selected provider foldersMEMTOMEM_INDEXING__PROJECT_MEMORY_DIRSProject-tier memory roots under .memtomem/memories or .memtomem/memories.local []MEMTOMEM_INDEXING__SUPPORTED_EXTENSIONSFile extensions to index (JSON list) [".md", ".json", ".yaml", ".yml", ".toml", ".py", ".js", ".ts", ".tsx", ".jsx"]MEMTOMEM_INDEXING__MAX_CHUNK_TOKENSMaximum tokens per chunk 512MEMTOMEM_INDEXING__MIN_CHUNK_TOKENSMerge threshold for short chunks 128MEMTOMEM_INDEXING__AUTO_DISCOVERWhen true, mm init prompts to enroll AI agent memory directories into memory_dirs. Set false to skip the prompt. trueMEMTOMEM_INDEXING__EXCLUDE_PATTERNS.gitignore-syntax patterns (JSON list) that stack on top of the built-in credential denylist (oauth_creds.json, credentials*, id_rsa*, *.pem, *.key, .ssh/**, …). User !negation cannot override the built-in secret patterns.[]MEMTOMEM_INDEXING__TARGET_CHUNK_TOKENSGreedy semantic-pack target for short sibling sections. Set 0 to disable the pack pass. 384MEMTOMEM_INDEXING__CHUNK_OVERLAP_TOKENSToken overlap between adjacent chunks 0MEMTOMEM_INDEXING__STRUCTURED_CHUNK_MODEJSON/YAML/TOML chunking mode: original or recursive originalMEMTOMEM_INDEXING__PARAGRAPH_SPLIT_THRESHOLDSplit long prose into paragraphs above this token count 800MEMTOMEM_INDEXING__STARTUP_BACKFILLOn server start, run a one-shot scan over memory_dirs to catch files added while the server was down falseMEMTOMEM_INDEXING__AUTO_SUMMARIZEGenerate AI per-source summaries when LLM is configured falseMEMTOMEM_INDEXING__SUMMARY_LANGUAGEOutput language for AI source summaries enMEMTOMEM_INDEXING__SUMMARY_MAX_INPUT_CHARSMax source chars sent to the summary LLM 3000MEMTOMEM_INDEXING__SUMMARY_MAX_TOKENSSummary output token cap 256
Path-glob → namespace mappings that auto-tag files at index time, so you don’t pass namespace= on every mem_index call.
Variable Description Default MEMTOMEM_NAMESPACE__RULESJSON list of {path_glob, namespace} objects. pathspec.GitIgnoreSpec patterns, case-insensitive. {parent} and {ancestor:N} placeholders expand from the matched file path. Resolution order: explicit namespace= param → rules (first match) → enable_auto_ns → default_namespace. []MEMTOMEM_NAMESPACE__DEFAULT_NAMESPACEDefault namespace for new chunks defaultMEMTOMEM_NAMESPACE__ENABLE_AUTO_NSDerive namespace from a file’s immediate parent folder when no explicit namespace or rule applies false
Example (via config.d/namespace.json, APPEND-merged):
{ "namespace" : { "rules" : [
{ "path_glob" : " docs/** " , "namespace" : " docs " },
{ "path_glob" : " projects/{parent}/** " , "namespace" : " proj/{parent} " }
Cross-encoder reranking runs fully locally by default — no external API required.
Variable Description Default MEMTOMEM_RERANK__ENABLEDEnable reranking of hybrid search results falseMEMTOMEM_RERANK__PROVIDERfastembed (local ONNX) / cohere (external API)fastembedMEMTOMEM_RERANK__MODELModel name. Use jinaai/jina-reranker-v2-base-multilingual for non-English content. Xenova/ms-marco-MiniLM-L-6-v2MEMTOMEM_RERANK__API_KEYOnly required when provider=cohere — MEMTOMEM_RERANK__OVERSAMPLEPool multiplier over response_top_k. Pool size is max(min_pool, min(max_pool, int(oversample * response_top_k))). 2.0MEMTOMEM_RERANK__MIN_POOLFloor — reranker never sees fewer candidates than this 20MEMTOMEM_RERANK__MAX_POOLCap — prevents runaway cost at large top_k 200MEMTOMEM_RERANK__TOP_KDeprecated legacy pool size; migrates to min_pool when present 20
Variable Description Default MEMTOMEM_SEARCH__DEFAULT_TOP_KDefault result count 10MEMTOMEM_SEARCH__BM25_CANDIDATESBM25 candidate pool size 50MEMTOMEM_SEARCH__DENSE_CANDIDATESDense vector candidate pool size 50MEMTOMEM_SEARCH__RRF_KReciprocal Rank Fusion constant 60MEMTOMEM_SEARCH__ENABLE_BM25Enable keyword retriever trueMEMTOMEM_SEARCH__ENABLE_DENSEEnable semantic vector retriever trueMEMTOMEM_SEARCH__RRF_WEIGHTSRRF weights for [BM25, Dense] (JSON list, REPLACE merge) [1.0, 1.0]MEMTOMEM_SEARCH__TOKENIZERFTS tokenizer: unicode61 or kiwipiepy unicode61MEMTOMEM_SEARCH__CACHE_TTLSearch result cache TTL in seconds 30.0MEMTOMEM_SEARCH__SYSTEM_NAMESPACE_PREFIXESNamespace prefixes hidden from default namespace=None search (JSON list, APPEND merge) ["archive:", "agent-runtime:"]
Half-life decay multiplier applied to hybrid-search scores. Gradually deprioritises older chunks.
Variable Description Default MEMTOMEM_DECAY__ENABLEDEnable time-based decay weighting falseMEMTOMEM_DECAY__HALF_LIFE_DAYSHalf-life in days — a chunk’s contribution halves every interval 30.0
Maximal Marginal Relevance rerank. Reduces redundancy among top results and mixes in alternate angles.
Variable Description Default MEMTOMEM_MMR__ENABLEDEnable MMR diversity rerank falseMEMTOMEM_MMR__LAMBDA_PARAM0.0–1.0. 0.0 = max diversity, 1.0 = max relevance 0.7
Frequency-based multiplier that promotes chunks which have been accessed often.
Variable Description Default MEMTOMEM_ACCESS__ENABLEDEnable access-frequency boost falseMEMTOMEM_ACCESS__MAX_BOOSTScore multiplier ceiling (must be >= 1.0) 1.5
Multiplier derived from chunk metadata features (tags, size, position, …) applied on top of the search score.
Variable Description Default MEMTOMEM_IMPORTANCE__ENABLEDEnable importance boost falseMEMTOMEM_IMPORTANCE__MAX_BOOSTScore multiplier ceiling (must be >= 1.0) 1.5MEMTOMEM_IMPORTANCE__WEIGHTSImportance-feature weight vector (JSON list, REPLACE merge) [0.3, 0.2, 0.3, 0.2]
Augments the original query with related tags, headings, or LLM-generated terms to improve recall. strategy=llm uses the LLM section below.
Variable Description Default MEMTOMEM_QUERY_EXPANSION__ENABLEDEnable query expansion falseMEMTOMEM_QUERY_EXPANSION__MAX_TERMSMax additional terms to append 3MEMTOMEM_QUERY_EXPANSION__STRATEGYtags / headings / both / llmtags
Small-to-big retrieval: returns ±N adjacent chunks around each search hit. Useful for recovering fragmented context in long documents.
Variable Description Default MEMTOMEM_CONTEXT_WINDOW__ENABLEDEnable context-window expansion falseMEMTOMEM_CONTEXT_WINDOW__WINDOW_SIZE±N adjacent chunks per hit (0–10) 2
Shared LLM backend used by query_expansion.strategy=llm, consolidation summaries, and other LLM-powered features.
Variable Description Default MEMTOMEM_LLM__ENABLEDEnable LLM-powered features falseMEMTOMEM_LLM__PROVIDERollama / openai / anthropic / compatible endpointollamaMEMTOMEM_LLM__MODELModel name. Empty = provider-specific default ""MEMTOMEM_LLM__BASE_URLEndpoint URL http://localhost:11434MEMTOMEM_LLM__API_KEYAPI key for paid providers — MEMTOMEM_LLM__MAX_TOKENSGeneration token cap 1024MEMTOMEM_LLM__TIMEOUTRequest timeout in seconds 60.0
Variable Description Default MEMTOMEM_TOOL_MODEcore (9 tools total, including mem_do) / standard (37 incl. mem_do) / full (84)core
Variable Description Default MEMTOMEM_WEB__MODEprod (polished pages only) / dev (adds maintainer pages: Sessions, Namespaces, Health Report). mm web --mode and mm web --dev override this at launch.prod
Variable Description Default MEMTOMEM_POLICY__ENABLEDRun PolicyScheduler (auto_archive / auto_promote / auto_expire / auto_tag) falseMEMTOMEM_POLICY__SCHEDULER_INTERVAL_MINUTESScheduler tick interval 60.0MEMTOMEM_POLICY__MAX_ACTIONS_PER_RUNCumulative action cap per scheduled policy run 100MEMTOMEM_WEBHOOK__ENABLEDEnable outbound webhooks for memory events falseMEMTOMEM_WEBHOOK__URLWebhook target URL — MEMTOMEM_WEBHOOK__EVENTSEvent types to send (JSON list, APPEND merge) ["add", "delete", "search"]MEMTOMEM_WEBHOOK__SECRETHMAC signing secret — MEMTOMEM_WEBHOOK__TIMEOUT_SECONDSHTTP timeout 10.0
Background job that periodically groups near-duplicate memories and compresses them into archive summaries.
Variable Description Default MEMTOMEM_CONSOLIDATION_SCHEDULE__ENABLEDRun the consolidation scheduler falseMEMTOMEM_CONSOLIDATION_SCHEDULE__INTERVAL_HOURSScheduler interval (hours) 24.0MEMTOMEM_CONSOLIDATION_SCHEDULE__MIN_GROUP_SIZEMinimum group size to consolidate 3MEMTOMEM_CONSOLIDATION_SCHEDULE__MAX_GROUPSMax groups processed per run 10
Background loop for periodic health checks, orphan-record cleanup, and automatic maintenance.
Variable Description Default MEMTOMEM_HEALTH_WATCHDOG__ENABLEDRun the health watchdog falseMEMTOMEM_HEALTH_WATCHDOG__HEARTBEAT_INTERVAL_SECONDSHeartbeat interval 60.0MEMTOMEM_HEALTH_WATCHDOG__DIAGNOSTIC_INTERVAL_SECONDSDiagnostic-check interval 300.0MEMTOMEM_HEALTH_WATCHDOG__DEEP_INTERVAL_SECONDSDeep-scan interval 3600.0MEMTOMEM_HEALTH_WATCHDOG__MAX_SNAPSHOTSSnapshot retention cap 1000MEMTOMEM_HEALTH_WATCHDOG__ORPHAN_CLEANUP_THRESHOLDOrphan-record cleanup threshold 10MEMTOMEM_HEALTH_WATCHDOG__AUTO_MAINTENANCEPerform automatic maintenance true
Variable Description Default MEMTOMEM_SCHEDULER__ENABLEDEnable cron dispatch for registered maintenance jobs falseMEMTOMEM_SCHEDULER__MAX_CONCURRENT_JOBSMax concurrently running scheduled jobs 1MEMTOMEM_SCHEDULER__DEFAULT_TIMEZONESchedule timezone; Phase A honors utc utcMEMTOMEM_SCHEDULER__RUNNER_TIMEOUT_SECONDSTimeout for one scheduled job run 300.0
Variable Description Default MEMTOMEM_SESSION_SUMMARY__AUTOAuto-generate an LLM summary on mem_session_end when enough chunks were added trueMEMTOMEM_SESSION_SUMMARY__MIN_CHUNKSMinimum chunks before auto-summary runs 5MEMTOMEM_SESSION_SUMMARY__MAX_SUMMARY_TOKENSOutput token cap 500MEMTOMEM_SESSION_SUMMARY__MAX_INPUT_CHARSSkip auto-summary above this assembled input size 60000MEMTOMEM_SESSION_SUMMARY__MAX_SUMMARY_LINKSCap summary-to-source chunk links 50MEMTOMEM_SESSION_SUMMARY__EXPANSION_LOOKUP_TOP_KSession-summary chunks considered for search rescue 3MEMTOMEM_SESSION_SUMMARY__EXPANSION_SCORE_THRESHOLDMinimum summary score for rescue expansion 0.3MEMTOMEM_SESSION_SUMMARY__EXPANSION_RESCUE_WEIGHTRRF input weight for rescued source-file hits 0.5
Variable Description Default MEMTOMEM_LOG_LEVELDEBUG / INFO / WARNING / ERRORINFOMEMTOMEM_LOG_FORMATLog format —
Variable Description Default MEMTOMEM_HOOKS__TARGET_SCOPEScope for memtomem-managed Claude Code settings hooks: user, project_shared, or project_local userMEMTOMEM_CONTEXT_GATEWAY__KNOWN_PROJECTS_PATHWeb UI project registry for Context Gateway ~/.memtomem/known_projects.jsonMEMTOMEM_CONTEXT_GATEWAY__EXPERIMENTAL_CLAUDE_PROJECTS_SCANReverse-decode ~/.claude/projects/<encoded> directories into project roots falseMEMTOMEM_CONTEXT_GATEWAY__USER_TIER_ENABLEDShow user-tier canonical artifacts in discovery responses false
Provider GPU Cost Notes onnxNo Free Built-in via fastembed. ~270 MB on first run ollamaNo Free Requires Ollama. ollama pull nomic-embed-text openaiNo Paid Requires API key
Full list: configuration.md in the upstream repo.
STM settings are organized into six sections: a flat LOG_LEVEL, plus PROXY__*, SURFACING__*, HOOK__*, DAEMON__*, and LANGFUSE__*. Compression, caching, metrics, auto-indexing, and extraction all live under PROXY__ .
Variable Description Default MEMTOMEM_STM_LOG_LEVELLog level WARNINGMEMTOMEM_STM_ADVERTISE_OBSERVABILITY_TOOLSWhen true, advertises the eight observability tools (stm_proxy_stats, stm_proxy_health, stm_proxy_cache_clear, stm_surfacing_stats, stm_compression_stats, stm_progressive_stats, stm_index_stats, stm_tuning_recommendations) in MCP tools/list. When unset/false, the four model-facing tools stay advertised and observability tools remain callable from Python. false
Variable Description Default MEMTOMEM_STM_PROXY__ENABLEDMaster switch for the proxy pipeline falseMEMTOMEM_STM_PROXY__DEFAULT_COMPRESSIONDefault compression strategy autoMEMTOMEM_STM_PROXY__DEFAULT_MAX_RESULT_CHARSPer-response char budget 16000MEMTOMEM_STM_PROXY__MAX_UPSTREAM_CHARSOOM guard on upstream response size 10000000MEMTOMEM_STM_PROXY__MIN_RESULT_RETENTIONRetention floor (0.0–1.0) 0.65
Variable Description Default MEMTOMEM_STM_PROXY__CACHE__ENABLEDEnable response caching trueMEMTOMEM_STM_PROXY__CACHE__DEFAULT_TTL_SECONDSCache TTL 3600MEMTOMEM_STM_PROXY__CACHE__DB_PATHCache DB location — MEMTOMEM_STM_PROXY__CACHE__MAX_ENTRIESCache eviction ceiling —
Variable Description Default MEMTOMEM_STM_PROXY__AUTO_INDEX__ENABLEDIndex tool responses into LTM falseMEMTOMEM_STM_PROXY__AUTO_INDEX__BACKGROUNDRun Stage 4 off the request path (F4) falseMEMTOMEM_STM_PROXY__AUTO_INDEX__MIN_CHARSMinimum response size to index — MEMTOMEM_STM_PROXY__AUTO_INDEX__MEMORY_DIROutput directory — MEMTOMEM_STM_PROXY__AUTO_INDEX__NAMESPACENamespace for auto-indexed memories proxy-{server}
In the standalone mms server, auto_index and extraction are currently inert because no FileIndexer engine is wired at startup. Enabling these fields is valid config, but it does not write back to LTM until the MCP-only adapter is available.
Variable Description Default MEMTOMEM_STM_PROXY__METRICS__ENABLEDRecord call metrics trueMEMTOMEM_STM_PROXY__EXTRACTION__ENABLEDStage 4b EXTRACT (fact extraction) falseMEMTOMEM_STM_PROXY__RELEVANCE_SCORER__SCORERScorer backend — MEMTOMEM_STM_PROXY__COMPRESSION_FEEDBACK__ENABLEDPersist stm_compression_feedback trueMEMTOMEM_STM_PROXY__PROGRESSIVE_READS__ENABLEDRecord progressive-delivery read telemetry (surfaces via stm_progressive_stats) trueMEMTOMEM_STM_PROXY__LOCK_TIMEOUT_SECONDSInternal lock-acquisition ceiling; a timeout signals a deadlock/stuck holder rather than a slow upstream 30.0
These live on per-upstream UpstreamServerConfig entries in ~/.memtomem/stm_proxy.json (set per server, not via env vars). Defaults apply to every registered upstream unless overridden.
Field Description Default call_timeout_secondsPer-attempt timeout for session.call_tool(). On timeout the session is force-reset and the retry loop proceeds. 90.0overall_deadline_secondsTotal wall-clock budget across all retry attempts. Prevents call_timeout × (max_retries+1) worst-case blowout. 180.0compression.llm.llm_timeout_secondsTimeout for llm_summary compression; on timeout STM falls back to truncate. 60.0
Variable Description Default MEMTOMEM_STM_SURFACING__ENABLEDEnable proactive surfacing from LTM trueMEMTOMEM_STM_SURFACING__MIN_SCOREMinimum relevance score 0.03MEMTOMEM_STM_SURFACING__MAX_RESULTSMax memories injected per call 3MEMTOMEM_STM_SURFACING__MIN_RESPONSE_CHARSSkip surfacing on tiny responses 5000MEMTOMEM_STM_SURFACING__MIN_QUERY_TOKENSMin tokens in extracted query 3MEMTOMEM_STM_SURFACING__DEDUP_TTL_SECONDSCross-session dedup window 604800 (7 days)MEMTOMEM_STM_SURFACING__FEEDBACK_ENABLEDAccept stm_surfacing_feedback trueMEMTOMEM_STM_SURFACING__AUTO_TUNE_ENABLEDPer-tool threshold auto-tuning trueMEMTOMEM_STM_SURFACING__QUERY_RETENTION_DAYSDays to retain raw query text in the feedback DB before clearing the column; 0 disables cleanup 30MEMTOMEM_STM_SURFACING__PERSIST_QUERY_TEXTStore raw query text when true; store sha256:<16-hex> digests when false trueMEMTOMEM_STM_SURFACING__FEEDBACK_DEMOTION_ENABLEDLocally filter memories with repeated negative feedback before injection trueMEMTOMEM_STM_SURFACING__FEEDBACK_DEMOTION_NEGATIVE_THRESHOLDDistinct negative surfacing events before local demotion applies 3MEMTOMEM_STM_SURFACING__LTM_MCP_TRANSPORTLTM MCP transport: stdio, sse, or streamable_http stdioMEMTOMEM_STM_SURFACING__LTM_MCP_COMMANDMCP command launching the LTM server for stdio transport memtomem-serverMEMTOMEM_STM_SURFACING__LTM_MCP_ARGSArgs for the LTM command (JSON list) []MEMTOMEM_STM_SURFACING__LTM_MCP_URLLTM endpoint URL for sse / streamable_http ""MEMTOMEM_STM_SURFACING__LTM_MCP_HEADERSOptional static headers for network LTM transport (JSON object) null
Injection mode (append default, plus prepend / section) is set via MEMTOMEM_STM_SURFACING__INJECTION_MODE.
Variable Description Default MEMTOMEM_STM_HOOK__USE_DAEMONRoute mms hook surfacing through the warm local daemon instead of a cold in-process path trueMEMTOMEM_STM_HOOK__DAEMON_TIMEOUT_SECONDSHook-to-daemon round-trip timeout 2.5MEMTOMEM_STM_HOOK__FALLBACKBehavior when daemon is unavailable: skip or cold skipMEMTOMEM_STM_HOOK__AUTO_SPAWNFire-and-forget spawn a daemon on the first eligible hook call trueMEMTOMEM_STM_HOOK__RECORD_FEEDBACK_EVENTSPersist hook surfacing feedback/query events; default keeps dedup without storing raw query text falseMEMTOMEM_STM_HOOK__COMPRESSION__ENABLEDEnable built-in Bash updatedToolOutput compression falseMEMTOMEM_STM_HOOK__COMPRESSION__MAX_CHARSTarget char budget for Bash output replacement 16000MEMTOMEM_STM_DAEMON__HOSTLocal daemon bind address; keep loopback-only 127.0.0.1MEMTOMEM_STM_DAEMON__IDLE_TIMEOUT_SECONDSStop the daemon after this many idle seconds; 0 disables idle shutdown 900.0
Variable Description Default MEMTOMEM_STM_LANGFUSE__ENABLEDEmit spans falseMEMTOMEM_STM_LANGFUSE__PUBLIC_KEYLangfuse public key — MEMTOMEM_STM_LANGFUSE__SECRET_KEYLangfuse secret key — MEMTOMEM_STM_LANGFUSE__HOSTLangfuse host URL — MEMTOMEM_STM_LANGFUSE__SAMPLING_RATE0.0–1.0 1.0
Setting MEMTOMEM_STM_LANGFUSE__ENABLED=true without the [langfuse] extra installed raises a ValueError at startup (fail-fast since v0.1.16). Install the extra first, or leave enabled=false. The old silent-disable-with-WARNING behavior is gone, so a typo no longer leaves tracing quietly off.
Strategy Use for autoDefault — picks per content type hybridMarkdown (structure + summarize non-essentials) selectiveKeep only query-relevant sections progressiveLarge content; cursor-based delivery (zero loss) extract_fieldsJSON dictionaries schema_pruningLarge JSON arrays skeletonAPI docs (schema-only) llm_summaryLLM-based summarization (Ollama / OpenAI) truncateFallback truncation nonePass-through
Full list: configuration.md in the upstream repo.