Skip to content

Config ​

Two config files ​

overseer merges two config files on every run. The local file always takes precedence:

FilePurpose
brain/overseer/config.yamlShared, portable, committed to your brain repo
<user config dir>/overseer/config.local.yamlMachine-local overrides — tokens, paths, never committed

The local file lives in your OS user config directory:

PlatformPath
Linux / WSL~/.config/overseer/config.local.yaml (or $XDG_CONFIG_HOME/overseer/ when set)
macOS~/Library/Application Support/overseer/config.local.yaml

Inspect the merged result at any time:

bash
overseer config           # human-readable summary
overseer config --format json  # full config as JSON

JSON Schema ​

The full JSON Schema for config.yaml is available via:

bash
overseer config schema

You can also point your editor at the schema for inline validation and autocomplete:

brain/overseer/config.yaml
yaml
# yaml-language-server: $schema=https://arthurvasconcelos.github.io/overseer/schema.json

Config keys ​

secrets ​

yaml
secrets:
  environments:
    p24: "{{OP_ACCOUNT_ID}}"  # alias → 1Password account ID
KeyDescription
secrets.environmentsMap of alias → 1Password account ID. Used with overseer run --env <alias>.

integrations ​

yaml
integrations:
  jira:
    - name: work
      base_url: https://company.atlassian.net
      email: you@company.com
      token: "op://Work/Jira/token"
      op_account: work
  slack:
    - name: work
      token: "op://Work/Slack Bot Token/token"
      user_token: "op://Work/Slack User Token/token"
      group_handles:
        - backend-team
        - frontend-team
  google:
    - name: personal
      credentials_doc: "op://Personal/Google/credentials_json"
  github:
    - name: personal
      token: "op://Personal/GitHub/token"
  gitlab:
    - name: work
      base_url: https://gitlab.company.com
      token: "op://Work/GitLab/token"
KeyFields
integrations.jira[]name, base_url, email, token, op_account
integrations.slack[]name, token, op_account, user_token (optional, for search), group_handles (optional, usergroup handles to watch)
integrations.google[]name, credentials_doc, op_account — run overseer gcal auth once per account to cache the OAuth token
integrations.github[]name, token, op_account
integrations.gitlab[]name, base_url, token, op_account

git ​

yaml
git:
  defaults:
    user_name: Arthur Vasconcelos
    gpg_format: ssh
    gpg_ssh_program: /Applications/1Password.app/Contents/MacOS/op-ssh-sign
    commit_gpgsign: true
  profiles:
    - name: personal
      email: arthur@personal.com
      signing_key: "op://Personal/SSH Key/public key"
    - name: work
      email: arthur@company.com
      signing_key: "op://Work/SSH Key/public key"
      op_account: work
KeyDescription
git.defaultsShared settings applied to all profiles unless overridden
git.profiles[]Named git identities. Fields: name, email, signing_key, user_name, gpg_format, gpg_ssh_program, commit_gpgsign, op_account

system (machine-local) ​

yaml
system:
  repos_path: ~/repos
  brain_path: ~/brain
  gpg_ssh_program: /Applications/1Password.app/Contents/MacOS/op-ssh-sign
KeyDescription
system.repos_pathWhere managed repos are cloned
system.brain_pathOverride brain directory path for this machine
system.gpg_ssh_programSSH signing program for this machine. Used when neither the profile nor git.defaults sets one
system.ideDefault IDE command (e.g. code, idea)
system.notificationsFire native desktop notifications on long-running commands

These belong in config.local.yaml, not the shared brain config.

gpg_ssh_program resolves in this order: profile, then git.defaults, then system. The signer path differs per platform (op-ssh-sign on macOS, op-ssh-sign-wsl.exe on WSL). If you share one brain across platforms, set it in system on each machine and leave it out of the brain config.


brain ​

yaml
brain:
  path: ~/brain
  url: git@github.com:you/brain.git
  git_profile: personal
KeyDescription
brain.pathCanonical brain path (portable across machines)
brain.urlGit remote for cloning and pushing
brain.git_profileGit profile to use for brain commits

obsidian ​

yaml
obsidian:
  vault_path: ~/Documents/Notes
  vault_name: Notes
  daily_notes_folder: Daily
  templates_folder: Templates
  default_folder: Inbox
KeyDescription
obsidian.vault_pathAbsolute path to your Obsidian vault
obsidian.vault_nameVault name as registered in Obsidian
obsidian.daily_notes_folderFolder for daily notes
obsidian.templates_folderFolder for note templates
obsidian.default_folderDefault folder for new notes

brew ​

yaml
brew:
  brewfile: overseer/Brewfile
KeyDescription
brew.brewfileBrewfile path relative to repos_path

repos ​

yaml
repos:
  - name: brain
    url: git@github.com:you/brain.git
    path: ~/brain
    git_profile: personal
  - name: work-api
    url: git@gitlab.company.com:team/api.git
    path: ~/repos/work/api
    git_profile: work
    readonly: false
FieldDescription
nameDisplay name
urlGit remote URL
pathLocal path (absolute or ~-prefixed)
git_profileGit identity to apply
readonlyIf true, repos pull skips this repo

repo_dirs ​

Directories to auto-discover git repositories from. Overseer recursively walks each listed directory and treats every subdirectory containing a .git folder as a repo root. The listed directory itself is excluded even if it has .git. Useful for large, externally-managed repo trees (e.g. a company workspace cloned by a plugin).

yaml
repo_dirs:
  - ~/repos/p24          # all repos under this tree are picked up automatically

Used by: overseer standup (commit history).