# The gates that always apply

`autonomous` means Connect does not stop to ask. It does not mean nothing can stop it. A suppressed or blocked recipient, a spent daily allowance, an address there is no evidence for, a provider that cannot carry the message and the workspace boundary itself all refuse regardless of the mode — and each refusal is written to the decision log with its reason.

- **Status:** Available
- **Audience:** both
- **In the app:** #/autonomy, #/autonomy-audit
- **Last verified:** 2026-09-10
- **Canonical:** https://connectbyjbrh.com/docs/autonomy/explicit-gates/

## The gates, and what each one refuses

| Gate | What it stops | Where it is set or cleared |
|---|---|---|
| Suppression and do-not-contact | Any outbound to that recipient on that channel | Compliance records; a do-not-contact entry is not cleared casually, and the Connect Assistant cannot clear one at all |
| A block on a contact | Every channel, not just the one it was set on | A memory entry tagged `block:<channel>` against the contact |
| SMS STOP | Further SMS to a number that replied STOP | The recipient sets it; the workspace does not override it |
| The daily allowance | Further sends once the day's ledger is spent | The plan; it resets |
| Cost metering on a call | A call the workspace's AI budget cannot cover | Plan and usage |
| No evidence for an address | Sending to an address nobody supplied or verified | Not configurable — Connect never guesses an email address |
| Provider capability | An action the configured provider cannot perform | The integration, not the autonomy screen |
| The workspace boundary | Reading or writing anything belonging to another workspace | Not configurable at any level |

## Why they sit outside the mode

A mode is a statement about how much a business trusts Connect's judgement. The gates are statements about things judgement does not settle: a person who asked not to be contacted has not made a request that gets weighed against a good reason, and a workspace's data is not more available to a confident agent than a cautious one. Putting them inside the mode would mean the strongest promise a business can make to its customers could be undone by a dropdown.

> **Careful** Because the gates are outside the mode, an `autonomous` channel still produces refusals — sometimes many of them. A rise in refusals is not a fault in the mode. Read the reason on each one: a spent allowance, a suppression and a provider that cannot carry the message are three different problems with three different fixes.

## Blocks travel further than people expect

A block is not a column on the contact record. It is a memory entry carrying the tag `block:<channel>`, and Connect's directive lookup reads only the tag list — never the body of the note. Two consequences follow, and both are the point of building it that way.

- It holds across channels. Blocking somebody on email is visible to the code deciding whether to place a call, because both are reading the same contact-level memory.
- It holds across future conversations. A new thread from the same person months later resolves to the same contact and finds the same directive.
- Writing "do not contact" in the body of a note does nothing. The tag is the mechanism; prose beside it is for the humans reading later.

## What is not a gate

Two things get mistaken for gates because they also stop work, and neither belongs on the list above.

**The runtime switch** — Turning Connect off stops the engine picking up work at all. That is not a refusal against a rule; nothing is evaluated, so nothing is refused. See [Turning Connect on and off](/docs/autonomy/connect-on-off/).
**An unfinished integration** — A mailbox whose credentials have gone stale, or a channel with no provider configured, produces an operational problem in Needs You rather than a compliance refusal. The distinction matters when you are reading the decision log for an audit.

One further limit is worth stating plainly because it is not a setting either: the Connect Assistant's rights are narrower than a person's. It cannot quote pricing and it cannot clear a do-not-contact entry, and no autonomy mode widens that.

## Questions

### Can I override a suppression for one important message?

Not from the autonomy screen, and not by raising the mode. Suppression is cleared where it was recorded, and only where clearing it is legitimate — a do-not-contact entry is deliberately not casual to remove, and the Connect Assistant cannot remove one at all.

### Does an `autonomous` channel still record refusals?

Yes, and they are the most useful part of the log on such a channel. A refusal carries the rule that caused it and what happened next, which is how you tell a compliance stop from a spent allowance without opening every conversation.

### Is call recording or a human transfer something autonomy can enable?

No. Call recording is not enabled on the live carrier, and a call cannot be transferred to a human there either. Both exist as foundation in the code and depend on what the provider can do; no autonomy mode changes that.

## Related

- [The four autonomy modes](https://connectbyjbrh.com/docs/autonomy/modes/)
- [Autonomy and spend](https://connectbyjbrh.com/docs/autonomy/spend-context/)
- [The decision log](https://connectbyjbrh.com/docs/autonomy/audit-trail/)
- [Turning Connect on and off](https://connectbyjbrh.com/docs/autonomy/connect-on-off/)
- [Workspace isolation](https://connectbyjbrh.com/docs/security/workspace-isolation/)
- [Connect is preparing work but sending nothing](https://connectbyjbrh.com/docs/troubleshooting/nothing-is-sending/)

## What this page is based on

- Connect source pack §3 — blocking as a tagged memory entry (`docs-source/sources/GENERAL.md`)
- Connect source pack §5 — autonomy, approvals and the audit trail
- Connect source pack §8 — the Connect Assistant's narrower rights
- Connect capability registry (`docs-source/facts.py`) — `suppression_dnc`, `sms_stop`, `daily_quota_refusal`, `no_guessed_email`, `voice_cost_metering`, `rls_isolation`
