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.
{
"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
| Key | What it does |
|---|---|
allow | Usernames, emails, and group names. See Access. |
verbosity | low, medium, or high (the default). Where every thread starts. See verbosity. |
maxBotTurns | How 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. |
workspace | Written by setup to record which workspace the app belongs to. Nothing reads it. |
app | id, name, displayName, description, written by setup. Changing them afterwards doesn't change the app in Slack. |
gmail
| Key | What it does |
|---|---|
allow | Addresses and @domain entries. An entry that is neither stops startup. See Access. |
pollSeconds | How often the inbox is checked. Defaults to 20. |
labelPrefix | Names the labels Bishop puts on threads. Defaults to Bishop, giving Bishop/Working, Bishop/Done, Bishop/Failed, and Bishop/Refused. |
markRead | Marks a message read once the agent has been given it. Off by default, since a person may also be reading the mailbox. |
internalDomains | The 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
| Key | What it does |
|---|---|
allow | User principal names, @domain entries, and Entra object IDs. See Access. |
verbosity | low, medium, or high (the default). low also drops the line saying what a turn cost. |
port | Where the messaging endpoint listens. Defaults to 3978. |
host | What it binds to. Defaults to loopback, which is where a tunnel reaches it. |
tls | cert and key, paths to PEM files, for Bishop to terminate TLS itself. Leave it out behind a tunnel or proxy. |
app | id, 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
| Key | What it does |
|---|---|
harness | claude (the default) or codex. See Harness and Model. |
model | Passed to the harness as written. |
effort | Passed to the harness as written. |
worktrees | true gives each thread its own git worktree. See Worktree Mode. |
sandbox | true, or { "profile": "<name>" } to add a nono profile's grants. Off by default. See Sandbox. |
options | The harness's own options, unvalidated. See Agent options. |
harnesses | A 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
| Key | What it does |
|---|---|
maxMb | The 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
| Key | What it does |
|---|---|
maxAgeDays | How 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. |