---
url: https://bishop.agentdeployment.co/reference/config.md
description: Every field in .bishop/config.json.
---

# 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": ["hayes.davis@example.com", "revops", "@sales-managers"]
  },
  "gmail": {
    "allow": ["hayes.davis@example.com", "@example.com"],
    "pollSeconds": 20
  },
  "agent": {
    "harness": "claude",
    "model": "claude-sonnet-5",
    "effort": "high"
  }
}
```

Every block is optional. An interface runs when its [credentials](/reference/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](/running/access#slack). |
| `verbosity` | `low`, `medium`, or `high` (the default). Where every thread starts. See [verbosity](/interfaces/commands#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](/interfaces/slack#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](/running/access#email). |
| `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](/running/access#microsoft-teams). |
| `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](/running/harness). |
| `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](/running/worktrees). |
| `sandbox` | `true`, or `{ "profile": "<name>" }` to add a nono profile's grants. Off by default. See [Sandbox](/running/sandbox). |
| `options` | The harness's own options, unvalidated. See [Agent options](/running/harness#agent-options). |
| `harnesses` | A block per harness, each taking `model`, `effort`, and `options`. See [One config for both harnesses](/running/harness#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](/running/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](/deploying/cleanup). |
