CLI Configuration
Every setting in the bmor settings file, what it does, and its default. This page also covers Stats Mode, which is a setting on your account, and the environment variables bmor reads.
#The settings file
bmor reads its settings from ~/.branchmore/settings.toml. Every setting is optional. Anything you leave out uses its default, and if there's no file at all, bmor uses the defaults for everything.
bmor init doesn't create settings.toml. It writes settings.example.toml in the same folder, with every setting and a comment explaining each one. To change a setting, copy the example to settings.toml and uncomment the lines you need, or create settings.toml with only the settings you change:
[directories] denylist = ["~/code/client-work"] [session] monitoring_warning = false
Each setting goes under its section header, the name in square brackets. This page writes a setting as section.name, so session.monitoring_warning means monitoring_warning under [session]. Put text and paths in quotes.
bmor reads the file each time it runs, so a change applies from the next session or sync, with nothing to restart. bmor init and updates rewrite settings.example.toml, but never change settings.toml.
#Check your settings
$ bmor config
It prints the settings bmor is using, with defaults filled in, the agent it would launch for tune and inspect, and your account's Stats Mode. It doesn't list [directories] or [session]. For those, the notice at the start of each session says whether that session is being monitored, and which list decided it.
- A misspelled setting does nothing.
bmorignores names it doesn't recognize, without a warning. If a change has no effect, check the spelling and the section header above it. - A broken file stops uploads. If
settings.tomlisn't valid TOML,bmor configprints the error and its line number, such astoml: line 2 (last key "directories.allowlist"): expected a comma. Until you fix it,bmorcan't upload sessions.
To check hooks, login, and the connection to Branchmore as well, run bmor config doctor.
#Settings
Every setting you can put in settings.toml:
| Setting | Default | What it does |
|---|---|---|
directories.allowlist | Empty | Tracks only sessions in these folders |
directories.denylist | Empty | Never tracks sessions in these folders |
session.monitoring_warning | true | Shows a notice when a session starts |
updater.auto_update | true | Installs new releases automatically |
agent.provider | Detected | Picks the agent bmor tune and bmor inspect launch |
collector.claude.session_dir | ~/.claude/ | Where to find Claude Code sessions |
collector.codex.session_dir | ~/.codex/ | Where to find Codex sessions |
collector.cursor.db_path | Cursor's Linux location | Where to find the Cursor editor's database |
#Which projects are tracked
[directories] # Only track sessions in these folders (empty = track everything) allowlist = ["~/code/work-app", "~/code/other-repo"] # Never track sessions in these folders. Wins over the allowlist. denylist = ["~/code/work-app/private"]
Both lists match the working directory recorded in each session, and an entry covers every folder under it. With neither list set, bmor tracks every session. With an allowlist, it tracks only sessions in an allowlisted folder. A denylisted folder is never tracked, even inside an allowlisted one.
- Paths. Use full paths, or paths that start with
~/. Relative paths and~user/paths never match anything. - Sessions with no recorded folder are skipped while you have an allowlist, and tracked if you only have a denylist.
- Where the lists apply. All three agents, for new sessions and in
bmor syncandbmor sync backfill. Excluding a folder doesn't delete sessions you've already uploaded from it. Retention and deletion explains how to have them deleted. - Cursor. While either list is set, Cursor conversations found only in the editor's database are skipped. Supported platforms explains which conversations those are.
Exclude projects on Data ingestion covers what an excluded project keeps out of Branchmore.
#Session start notice
[session] monitoring_warning = false
When a session starts in Claude Code, Codex, or Cursor, bmor shows a notice that starts "This session is being monitored by Branchmore". If your directory lists exclude the session's folder, the notice says the session isn't being monitored. Set monitoring_warning to false to turn the notice off in every agent. It doesn't change what's uploaded.
#Automatic updates
[updater] auto_update = false
If you installed bmor with the install script or a manual download, it checks for a new release at most once a day and installs it. Set auto_update to false to update only when you run bmor update. Homebrew and npm installs never update themselves, so the setting does nothing there. Update covers each install method.
#Agent for tune and inspect
[agent] provider = "claude"
bmor tune and bmor inspect launch your own coding agent on your machine. This setting picks which one: "claude" for Claude Code, or "codex". Cursor can't be launched this way.
When it isn't set, bmor uses whichever of the two is installed. If you have both, it picks the one you've used for more sessions in the last 30 days, and tells you which it picked and why.
To choose for a single run, add --provider, or set the BMOR_AGENT_PROVIDER environment variable. --provider wins over the variable, and both win over this setting. The agent you choose has to be installed and on your PATH, or the command stops with an error.
$ bmor tune agentsmd --provider codex
#Where bmor finds sessions
[collector.claude] # One folder, or a list of folders session_dir = ["/home/you/.claude/projects", "/home/you/.claude-work/projects"] [collector.codex] session_dir = "/home/you/codex-data/sessions" [collector.cursor] # macOS db_path = "/Users/you/Library/Application Support/Cursor/User/globalStorage/state.vscdb"
Change these only if an agent keeps its files somewhere other than the default. bmor looks in these places when it syncs and backfills.
collector.claude.session_diris where Claude Code keeps its sessions,~/.claude/projectsby default. It takes one folder or a list. Setting it replaces the default, so if you still want the default folder read, include it in your list.collector.codex.session_diris where Codex keeps its sessions,~/.codex/sessionsby default. It takes one folder.collector.cursor.db_pathis the Cursor editor's database,state.vscdb. The default,~/.config/Cursor/User/globalStorage/state.vscdb, is where Cursor keeps it on Linux, so on macOS, set this before you upload your history. The example above shows the macOS path, with your username in place ofyou. Supported platforms explains what's missed without it. The Cursor transcript folders,~/.cursor/projectsand~/.cursor/chats, can't be changed.
Write these paths in full. Unlike the directory lists, they don't expand ~.
#Stats Mode
Stats Mode isn't in settings.toml. It's a setting on your Branchmore account, so it applies to every machine you use, and you can also change it in the web app under Settings.
$ bmor config statsmode --status $ bmor config statsmode --mode stats $ bmor config statsmode --mode full
--status shows your current mode, and --mode sets it. Run bmor config statsmode on its own to switch to the other mode. Stats Mode on Data ingestion explains what it sends and which features it turns off.
#Environment variables
| Variable | What it does |
|---|---|
BMOR_AGENT_PROVIDER | Picks the agent bmor tune and bmor inspect launch: claude or codex. It overrides agent.provider, and --provider overrides it. |
LOG_LEVEL | How much bmor writes to its log: debug, info (the default), warn, or error. The --log-level flag overrides it. |
Hooks run with your agent's environment, so to get debug logs from them, set LOG_LEVEL=debug in the shell you start your agent from. Check your logs covers where the log is and how to read it.