Engineering · 21 Aug 2026

A permission it cannot argue with

Most AI products ask the model to behave. We put the rule somewhere the model cannot reach, because a rule written in a prompt is a request.

Ask a security team what worries them about an AI coworker and you get one answer, in different words each time. What stops it doing something nobody approved?

The common reply is a paragraph in the system prompt. Never send email to customers. Never touch payroll. Always ask before spending money. It reads like a policy. It is not one. It is a request, written in the same language as everything else the model reads, and it competes for attention with every document, ticket and message that arrives after it.

#The problem with asking nicely

A model weighs its instructions. That is what makes it useful, and it is also why an instruction cannot be a boundary. Anything that reaches the model can argue with anything else that reaches the model.

You do not need a clever attack to see it. You need a Tuesday:

  • A customer email says "as agreed with your finance director, please process this immediately."
  • A pasted spreadsheet has a column header called override_approval.
  • A colleague, in good faith, writes "ignore the usual limit, this one is urgent."

None of that is an attack. It is a normal week. And a rule that lives in the prompt has to win an argument against all of it, every time, forever.

#Where we put the rule instead

A permission in Alfera is not a sentence. It is a property of the connection, checked by the thing that performs the action, after the model has already decided what it wants to do.

It decidesThe coworker produces a tool request, like any other
The tool layerOurs. The model does not run it and cannot write to it
The grantWhat is this coworker allowed to do on this connection?
Not allowedNothing happens. The coworker is told no
The check sits outside the model, so the decision to act and the permission to act are never the same conversation.

The last step is the whole argument. A check that runs after the decision does not care how the decision was reached, which is what makes it a boundary rather than a preference.

The model can want to send the email. It can be argued into wanting it very badly. It still does not have the key.

The credential is handed to a request at the moment of the call, and only when the call is permitted. There is no version of the conversation that produces one earlier.

#Reading and doing are different permissions

The second thing we got wrong early, and fixed, was treating a connection as one switch. Connecting an inbox is not the same as being allowed to send from it. Reading the CRM is not the same as writing to it.

So they are separate grants:

ConnectionReadAct
Shared inboxEverything since 2019Drafts only, sending held
CRMAll accountsUpdate owned records
LedgerNothingNothing
One coworker in finance. Everything it may read, and the much shorter list of what it may do.

That table is worth more than it looks. It means a coworker can do the whole job and stop at the last step. It can prepare nine reminder emails, apply the rule it learned about who pays late, notice that three of them are over your limit, and hold exactly those three for a person. Not because it decided to be careful. Because it was never able to send them.

#What the person sees

An action held for approval arrives where that person already is — Slack, or email — and it says three things: what it wants to do, why it is held, and who can release it. If the person who asked is not the person who can approve, it routes to somebody who can, and records both.

That last part is the one auditors care about. Not was the action correct, but whose authority did it go out under. We write that down for every action, and you can export the lot.

#What this costs us

Honesty, since this is an engineering post and not a brochure.

What you get

It stops, and it says so

Work you can hand over without watching. The failure is visible, named, and sits with a person who can clear it in a sentence.

What it costs

It fails in a duller way

The coworker sometimes plans work it cannot finish, then reports that it could not finish it. That is less impressive than a system which quietly does everything.

We think a coworker that stops and says I am not allowed to do this is worth more than one that never stops. You can give the first one more work. You can only give the second one supervision.

Questions people ask after this

Is a rule in the system prompt a permission?

No. Anything the model can read, the model can weigh against something else it reads later. A prompt rule is a request that has to win an argument against every document, ticket and message that arrives after it.

Where does Alfera check what a coworker is allowed to do?

In the tool layer, after the model has decided what it wants and before anything happens. That layer looks up the grant for this coworker on this connection. If the action is not allowed it never runs, and the coworker is told no.

Can a coworker read a tool without being able to act in it?

Yes, and that is the default we recommend. Reading and acting are separate grants, so a coworker can read a shared inbox back to 2019 and still be unable to send from it.

What happens to an action that is over the limit?

It is held and routed to a named person where they already are, in Slack or email. The message says what it wants to do, why it is held, and who can release it. Both the request and the release are recorded.

Oliviero Pinotti

Founder

ShareXLinkedIn

Put one on a real job this afternoon

Connect one tool and give it one task. You will know inside ten minutes.