Skip to content

KeydrisThesis

Software is beginning to act.

Ahmed Isse16 min read

21 Aug 2026Thesis

Identity

deploy-agent-07

Who the agent is. One answer, and it is the same answer every time you ask.

Authority

  • repo.deploy · stagingALLOW
  • database.delete · productionREJECT
  • repo.read · payments-apiALLOW

What it may do right now. A different answer per action, and the answer can change without the agent changing.

The distinction the argument rests on. Knowing which agent is acting tells you nothing about whether this particular action is inside what it was granted.

For most of software history, software waited.

A human clicked the button.

A human submitted the form.

A human approved the transaction.

A human initiated the deployment.

Software executed.

That relationship is changing.

Software is beginning to act.

Agents can write code, call APIs, operate tools, modify databases, deploy infrastructure, communicate with customers, purchase resources, and coordinate with other software.

The question everyone asks is:

How intelligent will these agents become?

I think there is another question that matters just as much:

How much authority should we give them?

Because intelligence decides.

Authority bounds.

Software acts.

And the moment software begins acting on our behalf, identity alone is no longer enough.

The argument · 24 sections
  1. Identity ≠ authority
  2. Software changed sides
  3. Access ≠ authority
  4. If the agent is wrong
  5. The unit of security
  6. Authority before action
  7. Authority changed
  8. This already exists
  9. Build it yourself
  10. Prompts are instructions
  11. Bounded wrongness
  12. Out of every loop
  13. Machine speed
  14. One becomes 147
  15. The authority graph
  16. Leaving the building
  17. The receiver decides
  18. What Keydris is
  19. What exists today
  20. Where the bet fails
  21. Direction of travel
  22. Access to authority
  23. The network later
  24. Software acts

Identity is not authority.

We have spent decades getting better at identity.

Who are you?

Can you prove it?

Should you be allowed into this system?

We built passwords.

API keys.

OAuth.

SSO.

IAM.

Workload identity.

All of it matters.

But knowing who an actor is does not tell you everything that actor should be allowed to do.

That distinction becomes more important when the actor is software.

Imagine an agent authenticates successfully to an MCP server.

We know exactly which agent it is.

Now it asks to:

repo.read · payments-api

Then:

repo.deploy · staging

Then:

database.delete · production

Same identity.

Same connection.

Same MCP server.

Three different actions.

Should authentication answer all three?

I don’t think it should.

Identity tells us who the agent is.

Authority tells us what that agent may do.

Those are different questions.

Software changed sides.

The old software model was simple.

Humans decided.

Software executed.

Security systems were built around that relationship.

A person logged in.

A person received access.

A person clicked.

A person acted.

The machine was mostly the instrument.

Now the instrument is becoming an actor.

An agent can receive a goal and decide how to pursue it.

It can select tools.

Call APIs.

Generate subtasks.

Retry failures.

Modify systems.

Ask another agent for help.

Continue while the human is somewhere else.

That changes the security problem.

Not because the old infrastructure suddenly became useless.

OAuth still matters.

IAM still matters.

MCP authorization matters.

Policy engines matter.

Authentication matters.

But they now sit inside a world they were not originally designed around:

software making consequential decisions at software speed.

That changes what we need to govern.

Access is not the same as authority.

This is where I think the industry can make a dangerous mistake.

We can give an agent access to a system and assume the problem is mostly solved.

It isn’t.

Access answers whether the door can open.

Authority asks what should happen after the agent walks through it.

Consider an engineering agent.

It may legitimately need access to GitHub.

But “access to GitHub” is not one thing.

Read this repository.

Open a pull request.

Merge to staging.

Modify a secret.

Deploy production.

Delete a repository.

Those actions don’t carry the same consequence.

So why should they inherit the same authority simply because the actor authenticated successfully?

The problem isn’t that agents have capabilities.

We want capable agents.

The problem is allowing capability to become authority by accident.

Capability without authority is not autonomy. It’s exposure.

If the agent is wrong.

Much of the conversation about AI safety starts with a difficult ambition:

How do we stop the model from being wrong?

We should keep working on that.

But I don’t think we should build the autonomous economy on the assumption that we’ll solve it completely.

Agents will make mistakes.

They will misunderstand instructions.

They will choose bad tools.

They will encounter malicious inputs.

They will loop.

They will behave in ways their creators didn’t anticipate.

So I keep coming back to a simpler question:

Why did a mistaken agent have authority to do the damage in the first place?

That changes the problem.

We may never make autonomous software incapable of being wrong.

But we can decide how much authority being wrong gets.

The unit of security is changing.

Human-oriented systems often think in relatively durable states.

A user has a role.

A client has scopes.

A workload has credentials.

A session remains active.

An agent behaves differently.

One authenticated agent can attempt thousands of heterogeneous actions.

Read.

Write.

Deploy.

Delete.

Send.

Purchase.

Refund.

Approve.

Modify.

Each action can have a different consequence.

And those actions can arrive much faster than a human can supervise them.

So the question moves closer to execution.

Not only:

Who is this?

Not only:

What system can it access?

But:

What is this agent authorized to do right now?

That is the question we built Keydris around.

Authority before action.

The idea is simple.

An agent intends to perform an action.

Before that governed action runs, its authority is evaluated.

For example:

repo.read · payments-apiALLOW

Then:

repo.deploy · stagingALLOW

Then:

database.delete · productionREJECT

Or perhaps:

customer.refund · $8,000APPROVAL REQUIRED

The agent did not become a different agent between those requests.

Its identity did not need to change.

Its connection did not need to disappear.

The questions changed.

So the authority decision changed.

That is the boundary.

Authority before action.

Diagram 1 · Authority before action
Principal / Operator
acts on delegated authority
Agent
before it runs
Governed action
Keydris authority boundary
ALLOWREJECTAPPROVAL REQUIRED
on ALLOW only
Underlying tool / system
it executesor it failsTool outcome

The authority decision and the tool outcome are two different facts.

The agent didn’t change. Its authority did.

This is one of the ideas I believe will matter most.

We are used to treating authentication and authority as if they move together.

But autonomous systems need those states to separate.

An agent can remain authenticated while the authority assigned to it changes.

Maybe it can deploy to staging this morning.

Maybe that authority is removed this afternoon.

Maybe production always requires approval.

Maybe a repository is removed from its policy.

Maybe the operator revokes its Keydris authority entirely.

The agent can still be the same agent.

The underlying system can still know who it is.

But the next governed action can receive a different answer.

Diagram 2 · Same agent. Different authority.
Unchanged across both statesSame agentSame identitySame connectionSame MCP server
State Arepo.deploy · stagingALLOW
Policy / authority changes
State Brepo.deploy · stagingREJECT

Same agent, same action. Only the authority changed.

The agent didn’t change. Its authority did.

That separation is the point.

This already exists. Partly.

This is where a security engineer should challenge me.

OAuth exists.

Scopes exist.

IAM exists.

MCP has authorization.

Policy engines like Cedar and OPA exist.

So why Keydris?

Good question.

We are not claiming those systems disappear.

We are not claiming authorization was invented in 2026.

And we are not claiming you couldn’t assemble pieces of this yourself.

You can.

The deeper question is whether autonomous software creates an authority problem important enough to deserve its own infrastructure.

We think it does.

OAuth can participate in access.

IAM can manage identities and permissions.

A policy engine can evaluate policy.

MCP can define how clients and servers authorize access.

Keydris is built around the operational question immediately before a governed agent action:

Does this machine have authority to do this?

Not in theory.

Not because its identity belongs to the right group.

Not because it received broad access earlier.

This action. This resource. This environment. Under the authority assigned to it now.

And if the answer changes, the agent’s authority can change without requiring the agent itself to become someone else.

That is the abstraction we are betting on.

You could build it yourself.

I think infrastructure companies lose credibility when they pretend the primitives underneath them don’t exist.

So let me make the opposite argument.

You could build this yourself.

Take your authentication system.

Add OAuth.

Add your MCP authorization.

Add a policy engine.

Build middleware around your consequential tools.

Create action-level policies.

Build approval workflows.

Add revocation.

Track policy versions.

Record decisions.

Build administration.

Connect the same authority model across GitHub, Slack, MCP, APIs, local commands and whatever comes next.

Maintain it.

Secure it.

Explain it to every enterprise customer.

Then repeat some version of that architecture everywhere autonomous software acts.

You can do that.

Our bet is that eventually you won’t want to.

Because the thing being assembled isn’t merely another permission.

It is an authority system for autonomous actors.

That’s what we’re building.

Prompts are instructions. They are not an authorization boundary.

This distinction matters.

We can tell an agent:

“Never touch production.”

Good.

We should.

But that is an instruction to an intelligent system.

It is not the same thing as an execution boundary refusing:

production.delete

Instructions influence behavior.

Authority limits behavior.

We need both.

The prompt can tell the agent what it should do.

The authority layer determines what it may do.

That means a prompt injection doesn’t need to make the entire system trustworthy.

The agent may be manipulated.

Its reasoning may fail.

Its instructions may conflict.

But a governed action can still hit a boundary that says:

No.

That is a different kind of safety.

Bounded wrongness.

I think this is one of the most important ideas in autonomous systems.

We spend enormous energy trying to increase the probability that an agent makes the correct decision.

We should.

But another lever exists.

Reduce the consequences when it doesn’t.

If an agent only has authority over staging, being wrong does not automatically become authority over production.

If an agent may read a repository but not modify it, a bad decision doesn’t magically create write authority.

If an action requires approval, intelligence alone cannot turn that requirement into ALLOW.

The goal isn’t perfect agents.

It is bounded agents.

Or more precisely:

bounded wrongness.

The model can fail.

The authority boundary should still hold.

The human doesn’t have to remain in every loop. Their authority does.

There is a trap here.

When people hear “agent governance,” they often imagine a human approving every action.

That doesn’t scale.

If autonomous software is going to matter, most legitimate actions need to happen without waiting for someone to click approve.

The human should define the boundary.

The machine should operate inside it.

Approval becomes one possible decision for actions that cross a boundary requiring human judgment.

That means:

ALLOWthe routine.REJECTthe forbidden.Escalate the exceptional.

The human doesn’t have to remain in every loop. Their authority does.

Machine speed changes the stakes.

Humans create natural friction.

We read.

We hesitate.

We switch windows.

We get tired.

We go home.

Software doesn’t.

An autonomous system can make one bad decision and immediately make another.

And another.

And another.

The first failure can become a loop before anyone opens the logs.

That is why observability alone isn’t enough.

Evidence after execution matters.

But there is a profound difference between:

“Here is what the agent did.”

and:

“The agent was not authorized to do it, so it never ran.”

One helps you investigate damage.

The other can prevent that particular unauthorized action from becoming damage.

We need both.

One agent becomes 147.

Now take the idea beyond one agent.

A company begins with an engineering assistant.

Then a support agent.

Then a finance agent.

Then procurement.

Sales operations.

Infrastructure.

Security.

Customer success.

Internal workflows.

One becomes ten.

Ten becomes 147.

Eventually nobody can answer the simplest governance question:

How much authority have we given our machines?

Not how many agents exist.

Not how many API calls they made.

Not which models they’re running.

What can they actually do?

Which agent can deploy?

Which can send?

Which can purchase?

Which can modify customer data?

Which actions require approval?

Which authority was revoked?

Who changed the policy?

What was rejected?

What was permitted?

This stops being an AI feature.

It becomes organizational infrastructure.

The authority graph.

I think enterprises will eventually need a new map.

Today they map people.

Roles.

Applications.

Devices.

Networks.

Data.

Autonomous systems introduce another graph:

machines and their authority.

Diagram 3 · The authority graphDirection · not current product
Organization
  • Agent Arepo.read · repositories 1 and 2
  • Agent Brepo.deploy · staging
  • Agent Cslack.send · no customer.refund
  • Agent Dpurchase.create · up to a defined boundary
  • Agent Edatabase.write · approval required

How much authority have we given our machines?

Agent A may read repositories 1 and 2.

Agent B may modify staging.

Agent C may communicate with customers but not issue refunds.

Agent D may operate a procurement workflow up to a defined boundary.

Agent E may use a tool only when approval is present.

And those authorities will change.

Constantly.

The important enterprise question becomes:

Where can autonomous authority reach?

That’s a different map from identity.

And I think companies will eventually consider it just as important.

Then the agent leaves the building.

Inside one organization, you can build almost anything.

The more interesting problem begins when autonomous software crosses organizational boundaries.

Company A’s agent calls Company B’s system.

Company A knows the agent.

Company A knows why it delegated authority.

Company B does not belong to Company A.

Company B should not have to surrender control to Company A’s IAM.

And Company A should not have to expose its internal authorization system to Company B.

This creates a fundamental requirement:

Authority must be able to move.

But acceptance cannot move with it.

Company A can say:

We delegated this authority to this machine.

Company B still gets to say:

We don’t accept it here.

That distinction matters.

Authority can travel. Acceptance stays local.

Or put another way:

Authority moved. Sovereignty didn’t.

The receiving system decides.

This is why I don’t believe the future should be one enormous centralized agent gateway deciding what everyone on the internet may do.

That would recreate the wrong problem.

If an agent reaches my infrastructure, I should retain the final say over what happens inside my boundary.

Diagram 4 · Cross-organization authorityDirection · not current product
Company A
Agent · delegated authority
Organizational boundary
Company B

Company B’s policy decides.

  • ACCEPTED
  • NOT ACCEPTED

Authority moved. Sovereignty didn’t.

The sender can present authority.

The receiver evaluates it.

The receiver applies its own policy.

The receiver decides whether execution occurs.

That is how organizations can cooperate without merging their security models.

Portable authority. Local acceptance.

The network can become more connected without becoming one security domain.

What Keydris is.

Keydris is not an agent runtime.

We don’t run the model.

We don’t decide what the agent should think.

We don’t execute the underlying action.

We are not trying to replace the identity provider.

We are not trying to become the MCP server.

We are not the payment processor.

We are not the cloud.

We sit at a narrower boundary.

The agent wants to act.

The operator has defined authority.

The receiving system has its own rules.

Keydris helps answer:

Is this action authorized before it runs?

Then the actual tool does what tools do.

It executes.

Or it fails.

Those are different outcomes.

An authorization decision of ALLOW does not mean the deployment succeeded.

It means the authority boundary permitted the attempt.

That distinction is important.

What exists today.

There is a temptation in infrastructure to describe the destination as though it already exists.

I don’t want to do that.

Keydris is early.

Today, we are proving a narrower idea:

Can an operator give an agent explicit authority?

Can selected MCP tools and resources be protected by that authority?

Can a governed action be evaluated before execution?

Can the result be:

ALLOW,REJECT,orAPPROVAL REQUIRED?

Can authority change without redeploying the agent?

Can an operator revoke that Keydris authority?

Can the decision be recorded with the policy that produced it?

Those are concrete questions.

Diagram 5 · Today → direction
Today
Agent
KIT · assigned authority
Reader · governed boundary · asks
Keydris · evaluates the requested action
ALLOWREJECTAPPROVAL REQUIRED
selected MCP tool / resource / actionRuns only on ALLOWdecision recorded with its policy
Direction
  • Broader execution surfaces
  • More agents
  • More organizations
  • Cross-company machine authority
  • Neutral authority infrastructure for autonomous software

What runs now, and what is only a direction.

The larger network is a direction.

It is not something I want to pretend we’ve already built.

Where the bet can fail.

The world doesn’t owe Keydris a category.

Maybe OAuth evolves far enough.

Maybe IAM absorbs the problem.

Maybe MCP authorization becomes the complete answer.

Maybe every company prefers to assemble this internally.

Maybe agents never receive enough consequential authority for any of this to matter.

Maybe developers don’t want another boundary.

Maybe the latency or operational burden isn’t worth it.

Maybe we’re simply wrong.

Good.

Infrastructure should be falsifiable.

The test isn’t whether I can write a convincing essay about authority.

The test is whether developers with real agents encounter this problem and choose to install an authority boundary before consequential actions.

If they don’t, the thesis fails.

But look at the direction of travel.

Software is being given tools.

Then memory.

Then credentials.

Then browsers.

Then terminals.

Then APIs.

Then the ability to modify production systems.

We keep increasing intelligence.

We keep increasing capability.

We keep increasing autonomy.

Every increase creates another question:

How much authority follows?

I don’t believe the answer can permanently be:

Whatever the credential can reach.

That is too much inherited authority for a world of autonomous actors.

Software needs something more explicit.

From access to authority.

The internet grew up around access.

Can this user enter?

Can this application connect?

Can this service call that service?

The autonomous internet adds another dimension.

Once connected:

What may this machine actually do?

That is why I think we’re moving from an access-centric world toward an authority-centric one.

Not replacing identity.

Building on it.

Not replacing authentication.

Separating it from the authority to act.

Not replacing policy.

Making authority itself something operators can govern.

The transition sounds subtle.

I don’t think it is.

Because once software acts, permissions stop being configuration sitting in the background.

They become part of the execution path.

The network comes later.

If this works inside one company, something larger becomes possible.

One organization issues explicit machine authority.

Another knows how to evaluate it.

Then another.

Then another.

The more systems that can evaluate explicit machine authority, the more useful issuing it becomes.

The more organizations that issue it, the more useful evaluating it becomes.

Not because everyone shares one policy.

The opposite.

Because everyone retains their own.

The network isn’t valuable because Keydris decides for everybody.

It becomes valuable if different parties can understand authority without surrendering sovereignty.

That is the long-term bet.

A neutral authority layer for autonomous software.

Not a central brain.

Not a universal runtime.

Not a machine overlord deciding what the internet may do.

Infrastructure.

Quietly sitting between intention and consequence.

Software is beginning to act.

I started Keydris because I couldn’t get past one question.

Not:

Can the agent do it?

Agents will be able to do almost anything software can do.

Not:

Can we identify the agent?

That problem matters, and an enormous amount of infrastructure already exists around identity.

The question was:

What is this agent authorized to do right now?

I think that question gets bigger as agents get better.

Because more intelligence creates more capability.

More capability creates more autonomy.

More autonomy creates more consequence.

And more consequence demands clearer authority.

We don’t need to make autonomous software powerless.

We need to stop confusing power with permission.

We don’t need a human clicking every button.

We need the human’s authority to survive when the human leaves the loop.

We don’t need every organization to trust every agent.

We need every organization to retain the right to decide what authority it accepts.

And we should not wait until after an autonomous action has caused damage to ask whether it should have been allowed.

Ask before.

Software is beginning to act.

Now we have to decide what it is allowed to do.