Bi

Configuration overview

How the config files are laid out and what each switch does.

Raw markdown

Bi’s configuration is not one big table — it is split into small files by responsibility, all under .bi/ in the launch directory:

File Controls
config.json Runtime settings: port, workspace, default model, loop limits, thresholds
llm.json Multi-provider / multi-model config, plus each provider’s API key
permissions.json Tool permission rules and auto-approval rules
intercept_rules.json Intercept rules (match = reject)
bi.db SQLite session database (messages, tool calls, usage stats)
history.json Plaintext cross-session conversation log
checkpoints/ Workspace shadow Git repo for “roll back to this step”
skills/, plugins/ Skill and plugin directories
logs/ Runtime logs and network activity records

Key fields in config.json

Field Default Meaning
base_url https://api.deepseek.com/v1 Model endpoint
model deepseek-chat Default model
port 8080 Local server port
workspace Launch directory Workspace root for the agent
max_loops 200 Max tool-loop iterations per turn
max_sub_agents / max_sub_depth 5 / 2 Sub-agent count and depth limits
turn_timeout 30 (minutes) Total time cap for one turn
recent_turns_full 6 Recent turns injected in full when packing context
tool_result_keep 4 Tool results kept in full inside a tool loop
read_cache_enabled true Read-result cache (mtime+size checked)
network_log_enabled false Network activity log (off by default, privacy first)
auto_search true New conversations start with smart search on
disabled_tools — Tool ids to disable

Two fields worth attention:

  • network_log_enabled is off by default. When on, every LLM call and every full exec command is appended as JSONL under .bi/logs/network/. That is sensitive data, so enable it only when you specifically need it.
  • link_schemes is the protocol whitelist for rendering Markdown into clickable links — http, https, mailto by default. Executable protocols like javascript: are never rendered as links.

Missing-field behaviour

An absent field falls back to the defaults above; an explicit 0 / false usually means “off” and is respected (a few fields like recent_turns_full have no meaningful 0, so they fall back too). When unsure, delete the field entirely and let it return to default — don’t guess.

Providers and keys

Provider and key configuration lives separately in llm.json; it migrates once from a legacy config.json. Keys only travel to the endpoint you configured — Bi has no server of its own. See model providers.

UI vs files

The settings UI edits exactly these files, so both stay in sync. For bulk edits or version-controlled configuration, edit the files directly — changes are picked up on save without a restart.