config.toml

Written to .sapling/config.toml by sapling init (or automatically on first run in a new project). Every field:

[project]
repo_root = "."

[eval]
# dev_split = "configs/eval_dev.yaml"
# held_out_split = "configs/eval_heldout.yaml"
# max_dev_heldout_gap = 0.15   # refuse promotion above this dev-held_out gap (overfitting guard)

[tracker]
type = "wandb"            # "wandb" | "mlflow"
# project = "my-team/my-project"

[paper_search]
# optional - no key needed to search OpenAlex; sent only as a "mailto"
# courtesy param for its faster response pool
# contact_email = "you@example.com"

[model]
# /model opens a menu to log in to Sapling, pick an already-registered
# provider/model, or register a new one - these are just the starting point.
provider_id = "anthropic"
model_id = "claude-sonnet-4-5"
# effort = "high"            # reasoning effort, if the model supports one
# context_limit = 1048576    # manual fallback - only needed for a custom
#                             # provider OpenCode has no context-size data for

[pair_mode]
cadence = "checked-in"    # "tight" | "checked-in" | "loose" | "autonomous"

[permissions]
local_check_bash_allowlist = ["pytest -k *", "python -c *", "*--dry-run*"]
experiment_run_min_seconds = 30
destructive_edit_line_threshold = 200

[research_log]
path = ".sapling/research_log.jsonl"

[memory]
# off by default - a fresh project starts genuinely blank. Turn on to let
# this project's agent search *other* Sapling projects' Research Logs too.
cross_project_search = false