For agents: an index of these docs is at /docs/llms.txt, and this page as markdown is at /docs/safety-categories.md.
Safety categories
The nine safety categories, the action each preset gives them, and what always waits for you.
The preset is safety.preset in your config. safety.rules overrides single categories, and safety.everyMerge sets the floor for every merge. What waits for you explains how they fit together. To see how one ticket would be treated:
dobby safety explain "Add Stripe refunds to the orders page"Actions
| Action | What happens |
|---|---|
auto |
Normal review, then merge. |
review |
A strict review on the strongest model, then merge. |
owner |
Dobby opens a draft pull request and reviews it, and you merge it with dobby merge <id> or the Merge button on the dashboard. |
never |
Agents do not take the ticket. |
Presets
| Category | Strict | Balanced | Autonomous |
|---|---|---|---|
migrations.schema |
owner |
auto |
auto |
migrations.data |
owner |
owner |
review |
payments |
owner |
review |
review |
auth |
owner |
review |
review |
secrets |
owner |
review |
review |
deploys |
owner |
auto |
auto |
config |
owner |
auto |
auto |
client-sites |
owner |
owner |
review |
releases |
owner |
owner |
review |
| Every other merge | owner |
auto |
auto |
The last row is the floor that safety.everyMerge replaces. A change in several categories gets the strictest action among them.
Categories
| Category | Covers |
|---|---|
migrations.schema |
A migration file that only changes the shape of the database, such as a new table, column or index. |
migrations.data |
A migration file that changes existing data: it updates, inserts or deletes rows, drops or renames a table or column, or changes a column type. A migration whose SQL Dobby cannot read counts here too. |
payments |
Code that handles real money: charging, billing, refunds, payouts, subscriptions or a payment provider. |
auth |
How people sign in: sessions, passwords, tokens, permissions or access control. |
secrets |
Secrets, tokens, API keys, passwords or credentials, or a change to a .env or secrets file. |
deploys |
Deploys and CI: a ticket about a deploy, production or a pipeline, or a change to wrangler.toml, .github/workflows/ or a Dockerfile. |
config |
Config files such as wrangler.toml, eas.json, app.json or *.config.*, or a ticket about config. |
client-sites |
A paying client's own site or data, in a project you list under clientProjects. |
releases |
A release to users: an app store or Play Console release, a version publish, or a change to eas.json or fastlane/. |
Migrations are sorted by the SQL in the changed files. Payments, auth, client sites and releases go through a word and path check first, then the classifier set in safety.classifier decides.
What always waits
These wait for you whatever the preset and the rules say:
- Running a migration that changes existing data. The deploy that would run it waits for its own tap.
- A ticket an agent filed from outside input, such as an email or a Claude MCP call.
- The first merge on a fresh install.
dobby initpauses merges until you rundobby resume merges.