Config index

Every key the config schema accepts, in schema order, with its type and the default that applies when you leave it out. It is generated from the schema itself, so an option cannot ship without appearing here.

This page answers “does this key exist, and what is it set to if I say nothing”. For what a key is for — and for the sections large enough to have earned their own page — start at configuration, which links on to quality gates, telemetry, daemon memory and decision memory.

Everything is optional: trace-mcp indexes a standard project with no config file at all. A default of — means the key is a section rather than a value; _unset_ means there is no default and the feature reads the key only when you supply it.

Key Type Default
db object —
db.path string unset
include string[] built-in list
exclude string[] built-in list
follow_symlinks boolean false
ignore object {}
ignore.directories string[] []
ignore.patterns string[] []
ignore.gitignore boolean true
auto_register object {}
auto_register.mode always | never | ask "always"
auto_register.exclude string[] []
frameworks object —
frameworks.laravel object —
frameworks.laravel.artisan object —
frameworks.laravel.artisan.enabled boolean true
frameworks.laravel.artisan.timeout number (> 0) 10000
frameworks.laravel.graceful_degradation boolean true
ai object —
ai.enabled boolean false
ai.provider onnx | ollama | openai | anthropic | lmstudio | gemini | vertex | voyage | mistral | deepseek | groq | together | xai "onnx"
ai.features object {}
ai.features.embedding boolean true
ai.features.inference boolean true
ai.features.fast_inference boolean true
ai.base_url string unset
ai.api_key string unset
ai.inference_model string unset
ai.fast_model string unset
ai.embedding_model string unset
ai.embedding_dimensions number unset
ai.summarize_on_index boolean false
ai.summarize_batch_size number (> 0) 20
ai.summarize_kinds string[] ["class","function","method","interface","trait","enum","…
ai.summarize_max_tokens number (> 0) 100
ai.rerank_max_tokens number (> 0) 200
ai.rerank_max_candidates number (> 0) 100
ai.summarizeFromDocstrings boolean true
ai.openaiExtraBody object {}
ai.concurrency number (≥ 1, ≤ 32) 1
ai.reranker_model string unset
ai.vertex_project string unset
ai.vertex_location string unset
ai.autoRebuildOnProviderMismatch boolean true
plugins string[] []
security object —
security.secret_patterns string[] unset
security.max_file_size_bytes number (> 0) unset
security.max_files number (> 0) unset
predictive object —
predictive.enabled boolean true
predictive.weights object {}
predictive.weights.bug object {}
predictive.weights.bug.churn number 0.2
predictive.weights.bug.fix_ratio number 0.2
predictive.weights.bug.complexity number 0.2
predictive.weights.bug.coupling number 0.15
predictive.weights.bug.pagerank number 0.1
predictive.weights.bug.authors number 0.15
predictive.weights.tech_debt object {}
predictive.weights.tech_debt.complexity number 0.3
predictive.weights.tech_debt.coupling number 0.25
predictive.weights.tech_debt.test_gap number 0.25
predictive.weights.tech_debt.churn number 0.2
predictive.weights.change_risk object {}
predictive.weights.change_risk.blast_radius number 0.25
predictive.weights.change_risk.complexity number 0.2
predictive.weights.change_risk.churn number 0.2
predictive.weights.change_risk.test_gap number 0.2
predictive.weights.change_risk.coupling number 0.15
predictive.cache_ttl_minutes number 60
predictive.git_since_days number 180
predictive.module_depth number 2
intent object —
intent.enabled boolean false
intent.domain_hints object unset
intent.custom_domains object[] unset
intent.auto_classify_on_index boolean true
intent.classify_batch_size number (> 0) 100
runtime object —
runtime.enabled boolean false
runtime.otlp object {}
runtime.otlp.port number (≥ 0, ≤ 65535) 4318
runtime.otlp.host string "127.0.0.1"
runtime.otlp.max_body_bytes number (> 0) 4194304
runtime.retention object {}
runtime.retention.max_span_age_days number (> 0) 7
runtime.retention.max_aggregate_age_days number (> 0) 90
runtime.retention.prune_interval number (≥ 0) 100
runtime.mapping object {}
runtime.mapping.fqn_attributes string[] ["code.function","code.namespace","code.filepath"]
runtime.mapping.route_patterns string[] ["^(?:GET\|POST\|PUT\|PATCH\|DELETE\|HEAD\|OPTIONS)\\s+(.+)$"]
lsp object —
lsp.enabled boolean false
lsp.servers object {}
lsp.auto_detect boolean true
lsp.max_concurrent_servers number (≥ 1, ≤ 4) 2
lsp.enrichment_timeout_ms number (≥ 5000, ≤ 600000) 120000
lsp.batch_size number (≥ 10, ≤ 1000) 100
scip object —
scip.enabled boolean false
scip.auto_detect boolean true
scip.index_path string unset
scip.indexers object {}
scip.ingestion_timeout_ms number (≥ 5000, ≤ 600000) 120000
topology object —
topology.enabled boolean true
topology.repos string[] []
topology.auto_detect boolean true
topology.auto_discover boolean true
topology.contract_globs string[] unset
indexer object —
indexer.workers number (≥ 1, ≤ 32) unset
indexer.parallel_initial_index number (≥ 1, ≤ 16) unset
pipeline object {}
pipeline.task_cache_ttl_days number (≥ 1, ≤ 365) 30
vault object {}
vault.enabled boolean true
vault.roots string[] []
vault.extra_globs string[] ["**/*.md","**/*.mdx","**/*.markdown"]
decisions object {}
decisions.review_threshold number (≥ 0, ≤ 1) 0.75
decisions.reject_threshold number (≥ 0, ≤ 1) 0.45
memory object {}
memory.recall object {}
memory.recall.timeoutMs number (≥ 100, ≤ 60000) 5000
memory.heat object {}
memory.heat.enabled boolean true
memory.heat.halfLifeDays number (≥ 0.5, ≤ 365) 14
memory.heat.freshnessDays number (≥ 0.5, ≤ 365) 7
memory.mining object {}
memory.mining.strategy regex | llm | hybrid "regex"
memory.mining.llm object {}
memory.mining.llm.maxTokensPerSession number (≥ 500, ≤ 50000) 8000
memory.mining.llm.minSessionLength number (≥ 0) 500
memory.mining.llm.maxSessions number (≥ 1) 50
memory.mining.incrementalCursor boolean true
memory.memo object {}
memory.memo.enabled boolean true
memory.memo.regenerateEveryN number (≥ 5, ≤ 500) 50
memory.memo.targetTokens number (≥ 100, ≤ 2000) 350
memory.memo.maxBudgetTokens number (≥ 100, ≤ 4000) 400
memory.memo.historyLimit number (≥ 1, ≤ 100) 10
memory.memo.autoRegenerate boolean true
memory.memo.minTriggerIntervalSec number (≥ 60, ≤ 86400) 600
memory.consolidation object —
memory.consolidation.defaultMinTitleSimilarity number (≥ 0, ≤ 1) 0.4
memory.consolidation.defaultMaxDecisions number (≥ 1, ≤ 500) 50
memory.consolidation.defaultSameTypeOnly boolean false
memory.audit_log object —
memory.audit_log.enabled boolean false
memory.audit_log.dir string unset
memory.audit_log.retentionDays number (≥ 0, ≤ 3650) 0
memory.weight_tuning object —
memory.weight_tuning.enabled boolean true
memory.weight_tuning.min_events number (≥ 10, ≤ 10000) 25
memory.background object {}
memory.background.enabled boolean false
memory.background.tickIntervalSec number (≥ 10, ≤ 3600) 60
memory.background.activityDebounceSec number (≥ 0, ≤ 3600) 120
memory.background.idleWindowSec number (≥ 60, ≤ 86400) 3600
memory.background.coldThresholdSec number (≥ 3600, ≤ 604800) 86400
memory.background.mineMinIntervalSec number (≥ 60, ≤ 86400) 1800
memory.background.clusterEveryNDecisions number (≥ 5, ≤ 500) 25
memory.background.failureBackoffSec number (≥ 60, ≤ 86400) 3600
memory.background.tuneCooldownSec number (≥ 3600, ≤ 2592000) 86400
memory.background.tuneEveryNNewEvents number (≥ 5, ≤ 1000) 25
quality_gates object —
quality_gates.enabled boolean true
quality_gates.fail_on error | warning | none "error"
quality_gates.rules object {}
quality_gates.rules.max_cyclomatic_complexity object —
quality_gates.rules.max_cyclomatic_complexity.threshold number | string unset
quality_gates.rules.max_cyclomatic_complexity.severity error | warning "error"
quality_gates.rules.max_cyclomatic_complexity.scope all | new_symbols | changed_symbols unset
quality_gates.rules.max_cyclomatic_complexity.message string unset
quality_gates.rules.max_coupling_instability object —
quality_gates.rules.max_coupling_instability.threshold number | string unset
quality_gates.rules.max_coupling_instability.severity error | warning "error"
quality_gates.rules.max_coupling_instability.scope all | new_symbols | changed_symbols unset
quality_gates.rules.max_coupling_instability.message string unset
quality_gates.rules.max_circular_import_chains object —
quality_gates.rules.max_circular_import_chains.threshold number | string unset
quality_gates.rules.max_circular_import_chains.severity error | warning "error"
quality_gates.rules.max_circular_import_chains.scope all | new_symbols | changed_symbols unset
quality_gates.rules.max_circular_import_chains.message string unset
quality_gates.rules.max_dead_exports_percent object —
quality_gates.rules.max_dead_exports_percent.threshold number | string unset
quality_gates.rules.max_dead_exports_percent.severity error | warning "error"
quality_gates.rules.max_dead_exports_percent.scope all | new_symbols | changed_symbols unset
quality_gates.rules.max_dead_exports_percent.message string unset
quality_gates.rules.max_tech_debt_grade object —
quality_gates.rules.max_tech_debt_grade.threshold number | string unset
quality_gates.rules.max_tech_debt_grade.severity error | warning "error"
quality_gates.rules.max_tech_debt_grade.scope all | new_symbols | changed_symbols unset
quality_gates.rules.max_tech_debt_grade.message string unset
quality_gates.rules.max_security_critical_findings object —
quality_gates.rules.max_security_critical_findings.threshold number | string unset
quality_gates.rules.max_security_critical_findings.severity error | warning "error"
quality_gates.rules.max_security_critical_findings.scope all | new_symbols | changed_symbols unset
quality_gates.rules.max_security_critical_findings.message string unset
quality_gates.rules.max_antipattern_count object —
quality_gates.rules.max_antipattern_count.threshold number | string unset
quality_gates.rules.max_antipattern_count.severity error | warning "error"
quality_gates.rules.max_antipattern_count.scope all | new_symbols | changed_symbols unset
quality_gates.rules.max_antipattern_count.message string unset
quality_gates.rules.max_code_smell_count object —
quality_gates.rules.max_code_smell_count.threshold number | string unset
quality_gates.rules.max_code_smell_count.severity error | warning "error"
quality_gates.rules.max_code_smell_count.scope all | new_symbols | changed_symbols unset
quality_gates.rules.max_code_smell_count.message string unset
telemetry object —
telemetry.enabled boolean false
telemetry.usage_ping boolean true
telemetry.max_rows number (≥ 0, ≤ 10000000) 500000
telemetry.observability object {}
telemetry.observability.enabled boolean false
telemetry.observability.sink noop | otlp | langfuse | multi "noop"
telemetry.observability.sampleRate number (≥ 0, ≤ 1) 1
telemetry.observability.otlp object {}
telemetry.observability.otlp.endpoint string "http://localhost:4318/v1/traces"
telemetry.observability.otlp.headers object {}
telemetry.observability.otlp.serviceName string "trace-mcp"
telemetry.observability.otlp.maxQueuedSpans number (≥ 1, ≤ 1000000) 5000
telemetry.observability.otlp.requestTimeoutMs number (≥ 0, ≤ 600000) 10000
telemetry.observability.langfuse object {}
telemetry.observability.langfuse.endpoint string "https://cloud.langfuse.com"
telemetry.observability.langfuse.publicKey string unset
telemetry.observability.langfuse.secretKey string unset
telemetry.observability.langfuse.maxQueuedEvents number (≥ 2, ≤ 1000000) 10000
telemetry.observability.langfuse.requestTimeoutMs number (≥ 0, ≤ 600000) 10000
tools object —
tools.preset string "minimal"
tools.include string[] unset
tools.exclude string[] unset
tools.descriptions object unset
tools.description_verbosity full | minimal | none "full"
tools.instructions_verbosity full | minimal | none "full"
tools.client_profile auto | off | claude-code | codex | cursor | vscode | generic "auto"
tools.agent_behavior strict | minimal | off "off"
tools.meta_fields boolean | (_hints | _budget_warning | _budget_level | _duplicate_warning | _dedup | _optimization_hint | _meta | _duplication_warnings | _methodology | _warnings)[] true
tools.compact_schemas boolean false
tools.default_format json | compact | auto "json"
tools.default_detail_level minimal | default | full unset
watch object {}
watch.enabled boolean true
watch.debounceMs number (≥ 500, ≤ 30000) 2000
logging object {}
logging.file boolean false
logging.path string "~/.trace/run.log"
logging.level trace | debug | info | warn | error | fatal "info"
logging.max_size_mb number (> 0, ≤ 500) 10
git object {}
git.defaultBaseBranch string unset
idle_timeout_minutes number (≥ 0, ≤ 1440) 30
daemon_stability_seconds number (≥ 0, ≤ 600) 30
backend_swap_drain_ms number (≥ 0, ≤ 60000) 5000
auto_spawn_daemon boolean true
daemon_spawn_timeout_seconds number (≥ 1, ≤ 60) 20
daemon_idle_exit_minutes number (≥ 0, ≤ 1440) 15
project_idle_unload_minutes number (≥ 0, ≤ 1440) 30
worktree_index object —
worktree_index.enabled boolean false
worktree_index.initial_wait_ms number (≥ 0, ≤ 60000) 3000
worktree_index.sync_wait_ms number (≥ 0, ≤ 60000) 1000
worktree_index.idle_unload_minutes number (≥ 0, ≤ 1440) 30
worktree_index.max_loaded number (≥ 1, ≤ 64) 3
worktree_index.max_snapshots number (≥ 1, ≤ 256) 8
worktree_index.max_disk_mb number (≥ 0, ≤ 1048576) 8192
worktree_index.max_delta_files number (≥ 1, ≤ 1000000) 2000
daemon_eager_load_projects number (≥ 0, ≤ 1000) 8
index_cache_mb number (≥ 1, ≤ 1024) 16
index_mmap_mb number (≥ 0, ≤ 4096) 64
index_memory_profile auto | full | low-power "auto"
hermes object {}
hermes.enabled auto | boolean "auto"
hermes.home_override string unset
hermes.profile string unset

One key is worth reading with care: db.path is vestigial. Nothing reads it. The index location is not configurable — getDbPath() in src/global.ts puts every project’s database under ~/.trace/index/. The key is still accepted so existing config files keep validating, and will be dropped in the next major.

Catalogue: Articles / reference

Last updated: October 19, 2026