Connect by JBRH Open Connect

Separating the agent's authority from the person's

Connect's Assistant holds fewer rights than the person using it. Some actions are not in the 66-tool set at all — pricing authority, clearing a do-not-contact entry — so no amount of persuasion reaches them. The three places this earns its keep are commercial terms, compliance and identity, and each is a place where a wrong action is expensive and hard to undo.

Status
Available What this means
Audience
both, developer
Last verified
Product version
6.3.2

A subset, not a careful equal#

There are two ways to stop software doing something dangerous. Teach it not to, or give it no way. The first depends on a model behaving under pressure from text a stranger wrote; the second is a property of the tool set, which is readable, testable and does not have an off day.

ActionA person with permissionThe Assistant
Approve and send a held replyYesYes — approve_draft, send_draft_now, reject_draft, under the same autonomy rule
State a price, an SLA or a warrantyYesNo — refused by safe_sales and escalated where Knowledge does not support it
Clear a do-not-contact entryYes, deliberately not casuallyNo — the capability does not exist for it
Merge two peopleYesNo — duplicates proposes; merge_people is a human decision
Write to a recordYesThrough the service that owns the record, never around it

The read-only half of the tool set is deliberately large — find_anything, customer_360, recall, list_threads, data_query, search_knowledge and the rest — because the useful thing an assistant does most often is find and explain, and reading widely is cheap to allow when writing is narrow.

Three places the separation earns its keep#

  1. Commercial terms. safe_sales.py is the rule that Connect does not invent them: a price, an SLA or a warranty Knowledge does not support is refused and escalated to a person.

    Result The refusal is the correct behaviour rather than a gap. A quoted number a business did not agree to is a commitment somebody has to honour or retract, and both are worse than a pause.

  2. Compliance. Suppression, unsubscribe, complaints and do-not-contact are checked in one place before any outreach, and the Assistant cannot clear a do-not-contact entry.

    Result The one action that would convert a compliance record into a sent message is absent, so the check cannot be undone by the thing it constrains.

  3. Identity. duplicates proposes merges and merge_people is a human decision, preserving identities, stages, follow-ups, deals, demos, cases and onboarding from both sides.

    Result A merge is close to irreversible and it changes what every future conversation is attached to. A proposal costs a person ten seconds; an incorrect merge costs an afternoon of untangling.

Why this is easier to reason about than restraint#

An absent capability produces the same answer under every prompt, in every language, on a bad day and at three in the morning. A restrained capability produces the same answer until something in the input is unusual enough. Reviewing the first is reading a list; reviewing the second is a research programme with no end state.

The trail records the difference. audit.py writes what was decided, by what, under which rule, and what happened — refusals included, because a refusal is a decision. So a separation that is working looks like something in the record rather than like nothing at all, and "the Assistant declined and escalated" is a sentence with a row behind it.

Where the separation is thinner than it looks#

  • On the realtime voice path the rule lives in the instructions. There is no tool call to withhold when the model speaks a sentence, so a breach is detected rather than prevented: price_spoken counts the lines the voice priced, through the same expression the carrier path checks each sentence with, so the two paths agree on what a price is.
  • A person's own authority is not narrowed by any of this. These rules constrain the agent. Somebody with permission to send on a channel can send, and the record names them.
  • The grid is not a second authority. #/data looks like a spreadsheet over 13 sheets, and every change still goes through the service that owns the record, so bulk editing does not become a wider set of rights than the screens have.
  • Supervisor guidance is separated in the other direction. An instruction a colleague types during a live call goes into the system prompt and nowhere else — never into the spoken reply, never into call_turns, never onto the wire.

Questions#

Can the Assistant do anything a person cannot?

No. Its tools are a subset of what the screens already do, called on behalf of the person using it, under that workspace's autonomy rules. Where it looks faster, it is doing several permitted things in one request rather than one unpermitted thing.

Why can the Assistant not lift a do-not-contact entry?

Because that entry exists to survive persuasion, including persuasion arriving as ordinary text in a thread the Assistant is reading. Suppression from a bounce is one thing to clear; a do-not-contact record is a person's stated wish, and the record shows where it came from so a human decision can be made on the evidence.

Does a narrower agent make the product less useful?

It moves the usefulness. Sixty-six tools cover finding, explaining, drafting, scheduling and recording; what is withheld is a short list of actions whose cost is asymmetric. The measurable effect is that the escalations a business gets are the ones worth a person's attention.