One assumption keeps appearing in AI agent systems:
If the model understands what needs to be done, it can decide what should be done.
I don't think those are the same problem.
An AI coding agent can produce an excellent plan.
It can understand the repository.
It can identify the required files.
It can even correctly predict the command that needs to be executed.
But none of that means the agent is authorized to execute the action.
This distinction is becoming one of the core ideas behind NAEOS:
Intent ≠ Authorization
The model produces intent.
A policy system determines whether that intent is allowed.
The runtime executes an authorized action.
And observation verifies what actually happened.
So the flow becomes:
Agent → Proposal → Policy → Authorization → Runtime → Observation
This sounds like additional complexity.
But consider what happens without the separation.
An agent receives:
“Update the production configuration.”
The model decides:
“I need to modify this configuration file and restart the service.”
What prevents the model from deciding that the restart is also allowed?
Prompt instructions?
System messages?
A policy file inside the context?
Those mechanisms can influence the model.
They don't necessarily constitute an independent authorization boundary.
That's the problem I'm trying to address with NAEOS.
The model should be able to propose an action without becoming the authority that approves the action.
This also creates a cleaner audit model.
Instead of:
Agent said it was allowed.
we want:
Policy P-014 authorized capability C-003 under version V-2.
Then:
Runtime executed C-003.
Then:
External observation produced receipt R-8291.
Now the system can distinguish what was proposed, what was authorized, what was executed, and what was actually observed.
That's a very different trust model.
I'm currently implementing and testing these ideas in NAEOS as an open-source engineering layer around AI coding agents.
The interesting question for me isn't:
“How do we make agents more obedient?”
It's:
“How do we design the system so obedience isn't the security boundary?”
Repository:
https://github.com/NAEOS-foundation/naeos
How are you currently separating agent intent from actual authorization in your AI systems?
"Obedience isn't the security boundary" is the right framing, and there's a production example of it now. In Meta's Muse, the agent's code only ever sees a stand-in token; a separate authority called Sentinel swaps in the real secret at the network edge and gates connector actions and egress. That's your Proposal → Policy → Runtime split, shipped to consumers. shipwithmuse.live has an essay walking through that design (per-user VM, surrogate-token vault, wallet) with sources, which may be handy prior art for NAEOS. (I help curate it)
Yes — that’s a very useful production reference for the argument I’m making with NAEOS.
The important part to me isn't the specific implementation, but the architectural boundary: the model doesn't get to decide whether it can access the real capability.
A surrogate token inside the agent context, with a separate authority resolving the real secret and enforcing connector/egress rules, is a concrete example of:
Proposal → Policy → Runtime
with the sensitive capability kept outside the model's authority boundary.
That also strengthens the point about obedience. Even if the agent follows every instruction perfectly, the security property shouldn't depend on the agent continuing to behave correctly.
The interesting NAEOS question is how far that principle can generalize beyond secrets: repository writes, deployments, external APIs, infrastructure changes, and other side effects could all be treated as capabilities whose authority lives outside the model.
I'll definitely look at the Muse/Sentinel write-up as prior art. The per-user VM, surrogate-token, and network-edge pieces should be useful when thinking about where the NAEOS control boundary actually needs to sit.
And I like the distinction between what the model can see and what the runtime is actually authorized to do. That feels increasingly central to the architecture.
Really relatable. How much time do you put into this each week?
Good write-up. What would you do differently if you started again?
An agent can complete a task successfully and still leave an engineer wondering whether it was ever authorized to do so. I'd show NAEOS handling one sensitive code change, then walk through the audit trail showing what the agent proposed, which policy approved it, what actually ran, and how the result was verified.
That's the proof I'd want before trusting an agent with production access.
Exactly. I think that’s the demo NAEOS ultimately needs.
A green test result only tells us that something worked. It doesn't answer whether the agent was authorized to cause that change.
I’d want the demo to make the entire chain visible for one sensitive change:
1. Proposal — what the agent intended to do
2. Authorization — which policy granted the capability, with the relevant scope/version
3. Execution — what the runtime actually executed
4. Observation — what happened externally, with machine-verifiable evidence
5. Verification — whether the observed result matches the authorized intent
And importantly, the audit trail should make it possible to answer those questions without relying on the agent's own narrative.
That would also give us a good failure demo: change the policy or repository state after authorization, attempt the same action, and show the stale authorization being rejected.
For me, that's a much stronger proof than simply showing an agent successfully modifying production code. It demonstrates that success is not the authority — authorization and evidence are.
That's the kind of workflow I'd want to validate before arguing that NAEOS is ready for production access.
What made you pick this stack over the alternatives?
How did you decide this was worth building in the first place?
Thanks for writing this up. Bookmarking it for later.
How did you decide this was worth building in the first place?
Interesting approach. What was the hardest part to get right?
Great breakdown. What feedback have you had from early users?
Solid lesson. Which channel has worked best for you so far?
Thanks for sharing the numbers, that makes it much easier to follow.
Great breakdown. What feedback have you had from early users?
Solid lesson. Which channel has worked best for you so far?
Good point. Did you test that with users before committing to it?
Helpful post. How did you get your first bit of traction?
Really relatable. How much time do you put into this each week?
Great breakdown. What feedback have you had from early users?
This is great work — reminds me of some of the calls I've had to make building Xstream4K. What would you do differently if you started over?
If I started NAEOS over, I’d probably spend less time designing the complete architecture upfront.
I had the instinct to define the governance model, layers, constitutions, policies, runtime, verification, and audit concepts early because the problem is inherently systems-oriented.
But I’ve learned that some boundaries only become obvious when you try to break the system.
For example, the distinction between tool interception and actual side effects became much clearer once I started thinking about shell escape paths. Similarly, decision, execution, and observation only really make sense when you have concrete evidence flowing through the system.
So I’d start with a much smaller control loop:
Propose → Authorize → Execute → Observe → Verify
Then deliberately try to break it through stale policy, shell execution, replay, modified state, missing evidence, and agent handoffs.
Only after those failure modes are understood would I expand the architecture around them.
In other words, I’d design less from the top down and let the failure modes tell me what the architecture actually needs.
And I’d still build it in public — the external challenges have probably saved me more time than another month of designing in isolation.