Skip to content

Configuration ​

.bishop/config.json in Bishop's own directory holds everything except credentials, which is what lets you commit it. Setup writes it, and you can edit it by hand. A missing file is an empty config.

json
{
  "slack": {
    "allow": ["[email protected]", "revops", "@sales-managers"]
  },
  "gmail": {
    "allow": ["[email protected]", "@example.com"],
    "pollSeconds": 20
  },
  "agent": {
    "harness": "claude",
    "model": "claude-sonnet-5",
    "effort": "high"
  }
}

Every block is optional. An interface runs when its credentials are set, not when its block is here, and its block only configures it.

Every key is checked at startup, so a typo fails with the path to it rather than being ignored. The exception is agent.options, which is passed to the harness unvalidated. Setup rewrites the file as formatted JSON, so key order and layout don't survive it.

slack ​

KeyWhat it does
allowUsernames, emails, and group names. See Access.
verbositylow, medium, or high (the default). Where every thread starts. See verbosity.
maxBotTurnsHow many turns in a row another bot may draw in one thread before Bishop waits for a person. Defaults to 3, and 0 means never answer a bot. See Other agents.
workspaceWritten by setup to record which workspace the app belongs to. Nothing reads it.
appid, name, displayName, description, written by setup. Changing them afterwards doesn't change the app in Slack.

gmail ​

KeyWhat it does
allowAddresses and @domain entries. An entry that is neither stops startup. See Access.
pollSecondsHow often the inbox is checked. Defaults to 20.
labelPrefixNames the labels Bishop puts on threads. Defaults to Bishop, giving Bishop/Working, Bishop/Done, Bishop/Failed, and Bishop/Refused.
markReadMarks a message read once the agent has been given it. Off by default, since a person may also be reading the mailbox.
internalDomainsThe domains whose addresses count as inside the organization, which decides whether the agent is told a thread is internal or external. Defaults to the mailbox's own domain, except on gmail.com and googlemail.com, where nobody is.

teams ​

KeyWhat it does
allowUser principal names, @domain entries, and Entra object IDs. See Access.
verbositylow, medium, or high (the default). low also drops the line saying what a turn cost.
portWhere the messaging endpoint listens. Defaults to 3978.
hostWhat it binds to. Defaults to loopback, which is where a tunnel reaches it.
tlscert and key, paths to PEM files, for Bishop to terminate TLS itself. Leave it out behind a tunnel or proxy.
appid, name, displayName, description, written by setup. Every teams command finds the app by id.

The messaging endpoint isn't in the file. The Teams app holds it, and bishop teams setup reads it back and reports it.

agent ​

KeyWhat it does
harnessclaude (the default) or codex. See Harness and Model.
modelPassed to the harness as written.
effortPassed to the harness as written.
worktreestrue gives each thread its own git worktree. See Worktree Mode.
sandboxtrue, or { "profile": "<name>" } to add a nono profile's grants. Off by default. See Sandbox.
optionsThe harness's own options, unvalidated. See Agent options.
harnessesA block per harness, each taking model, effort, and options. See One config for both harnesses.

--harness, --model and --effort override these for one run. model and effort layer, weakest first: agent.model, then the running harness's block, then the flag. A block's options replaces agent.options rather than merging with it.

files ​

KeyWhat it does
maxMbThe largest attachment Bishop downloads. Defaults to 100. A file over it reaches the agent as its name and the reason it isn't there. See Files.

gc ​

KeyWhat it does
maxAgeDaysHow long everything a quiet thread left behind is kept past its last turn. Defaults to 30. There's no switch to turn collection off. See Cleaning Up.