This repository was archived by the owner on Jul 15, 2026. It is now read-only.
forked from joestump/msgbrowse
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathconfig.example.yaml
More file actions
98 lines (86 loc) · 4.72 KB
/
Copy pathconfig.example.yaml
File metadata and controls
98 lines (86 loc) · 4.72 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
# msgbrowse configuration example.
#
# Precedence (low → high): these defaults < this file < MSGBROWSE_* env vars < flags.
# Copy to config.yaml (gitignored) and edit, or set the equivalent MSGBROWSE_*
# environment variables. NEVER put the API key in a committed file — prefer the
# MSGBROWSE_LLM_API_KEY env var / a secret.
# Path to the read-only signal-export archive (used by `signal-import`).
# msgbrowse only ever reads this tree.
archive_root: "~/Managed Files/Signal-Archive"
# Path to the read-only imessage-exporter archive (used by `imessage-import`) —
# the flat directory of <ChatName>.txt files plus attachments/. Leave empty if
# you don't import iMessage. Targets imessage-exporter 4.2.0 txt output.
imessage_archive_root: "~/Managed Files/iMessage-Archive"
# Path to the read-only WhatsApp-Chat-Exporter output directory (used by
# `whatsapp-import`) — the folder containing result.json plus the media folders
# the tool copied. Leave empty if you don't import WhatsApp.
# whatsapp_archive_root: "~/Managed Files/WhatsApp-Archive"
# Optional: paths to the upstream exporters that `msgbrowse export` invokes.
# Leave empty to look up the default name on PATH (sigexport /
# imessage-exporter / wtsexporter). Set a path (e.g. a pipx venv binary not on
# PATH) to pin a specific binary.
# signal_export_bin: "~/.local/bin/sigexport"
# imessage_exporter_bin: "/opt/homebrew/bin/imessage-exporter"
# whatsapp_exporter_bin: "~/.local/bin/wtsexporter"
# Writable directory for the SQLite database and embeddings. MUST be outside the
# archive.
data_dir: "./data"
# Web UI bind address. Loopback by default — binding to a non-loopback address
# exposes an unauthenticated UI; do so only behind your own access control.
listen_addr: "127.0.0.1:8787"
llm:
# The ONLY network egress msgbrowse performs. Default: a local LiteLLM proxy.
base_url: "http://127.0.0.1:4000/v1"
# API key, if your route needs one (a local Ollama/LiteLLM route needs none).
# Editable from Settings → LLM, which writes it back here (this file is
# gitignored, mode 0600). MSGBROWSE_LLM_API_KEY still overrides it at startup.
api_key: ""
chat_model: "local-chat" # used for RAG synthesis + journal digests
embed_model: "local-embed" # used for message embeddings (semantic search)
max_concurrency: 4
timeout: "60s"
# In-app message sources ("Providers"). Enabled sources auto-refresh on this
# cadence — `serve` and the desktop app re-run each source's export + incremental
# import in the background so the archive stays current without a manual click.
providers:
# How often Enabled sources auto-refresh. Set to 0 to disable auto-refresh
# (the per-source manual Refresh control still works). Go duration string.
refresh_interval: "6h"
# Vector backend: "sqlite-vec" (default) or "qdrant". The "sqlite-vec" setting
# is currently served by a pure-Go brute-force cosine scan in the same SQLite
# file (a sqlite-vec extension can replace it later behind the same setting);
# see docs/adr/0002-vector-backend.md. These are the only two accepted values.
vector_backend: "sqlite-vec"
journal:
digest_enabled: true
# Conversations whose content is NEVER sent to the LLM (privacy denylist).
exclude_conversations: []
# 0 = no cap on days processed per run.
max_days_per_run: 0
# Multi-device archive sync (ADR-0021 / SPEC-0014). NOT COMPILED INTO RELEASE
# BUILDS: device sync is unfinished and gated behind the `devicesync` build tag
# (build with `go build -tags devicesync` to include it). Without that tag these
# keys are inert and the Device sync UI is hidden. STRICTLY OPT-IN even then:
# with enabled false (or the block absent) no Syncthing process runs and
# msgbrowse keeps its loopback-only posture. When enabled, msgbrowse supervises a
# bundled/BYO Syncthing as the transfer engine: its P2P listener is the one
# socket beyond loopback — mutual TLS with device-ID pinning, both ends must
# accept a peer — and its config is generated LAN-only by default (global
# discovery OFF, relaying OFF; nothing leaves the LAN).
device_sync:
enabled: false
# Syncthing P2P sync listener bind (host:port). Dedicated port, distinct
# from listen_addr; Syncthing's loopback REST API picks its own port.
listen_addr: ":8788"
# This node's name as shown on paired peers. Empty = derive from hostname.
device_name: ""
# Path to the Syncthing binary for `msgbrowse serve` (bring-your-own,
# like the exporter *_bin keys). Empty = look `syncthing` up on PATH.
# The desktop .app ignores this and always runs its bundled, pinned copy.
syncthing_bin: ""
# Run an import pass automatically when `serve` starts.
ingest_on_start: false
# Re-ingest automatically when the archive changes (fsnotify).
watch: false
# Log level: debug | info | warn | error.
log_level: "info"