
A few weeks ago I was posting here about agent governance mostly as an architecture problem.
Where should authority live?
When should an agent be forced to clarify instead of acting?
What happens when policy or context changes after a decision has already been made?
How do you prove what was actually authorized later?
Those discussions helped a lot.
But at some point you have to stop explaining the architecture and let people actually interact with the product.
So this week I published the first NEES Python SDK developer preview.
The interesting part is that the SDK is deliberately much smaller than NEES Core itself.
Today, SDK v0.1.1 exposes one supported capability:
chat:invoke
A Python application can install the client:
and call NEES like this:
client = NEESClient()
result = client.chat(
"Explain runtime governance in simple terms."
)
print(result.reply)
print(result.governance.decision)
print(result.governance.status)
print(result.governance.reason)
That is intentionally the public SDK surface right now.
You get authenticated invocation, request/session correlation, an optional trace ID, and a limited public governance result.
You do not get the internals.
And you do not get the entire Core exposed as a giant API surface on day one.
That part is deliberate.
NEES Core itself is already much broader than this first SDK release.
The runtime currently includes supported mechanisms around authority and delegation, resource/operation scope, human approval and resume, state-aware requalification, execution qualification, decision/evidence lineage, sequence limits, cost governance, containment, enterprise governance, and bounded governed action execution.
But not every internal capability should immediately become a public SDK method.
I would rather stabilize the integration boundary one layer at a time than dump the engine into a client library and call it a developer platform.
There is another part of the release that is probably more useful if you want to understand what NEES is actually doing beyond the current SDK.
We also have a public Governance Lab.
The SDK shows the integration surface.
The Governance Lab shows more of the governance behavior.
It lets visitors interact with selected NEES-powered flows and inspect normalized governance and evidence results without exposing the Core implementation itself.
That includes reasoning-only interactions as well as a bounded governed reference-action path.
So instead of only reading that NEES can make governance decisions, you can actually see outcomes, execution state, and linked evidence through the public interface.
We have also verified that bounded reference-action path in production.
That matters to me because it moves the project beyond:
“the policy engine said ALLOW”
toward:
“this specific governed action was allowed, executed through the participating path, and has linked evidence.”
The Governance Lab is not a simulation of every Core feature, and it is not proof that NEES controls arbitrary external systems.
It is a public demonstration of selected, real governed behavior through the supported runtime boundary.
That distinction is important.
NEES is not claiming universal control over arbitrary Python code, operating-system activity, network traffic, or every external tool an agent might reach.
Execution governance is strongest where an action participates in a registered, governed path.
That is the model we are building around.
There is also a commercial side to this that I understand much better now than when I started posting about the project here.
One of the best comments I got on an earlier post was that the enforcement engine is often not the hardest part in enterprise adoption.
The harder question can be organizational:
Who owns the policy?
Who approves authority?
What does the auditor or risk team actually see when something is refused at 2am?
And who is really the buyer — the developer integrating the system, or the team responsible for approving its use?
I think the answer is probably both, but they care about different things.
The developer wants a clean integration surface.
The organization wants boundaries, evidence, accountability and a defensible answer to why an agent was allowed to act.
That is also why I think both the SDK and the Governance Lab matter.
The SDK answers:
“How would I integrate this?”
The Governance Lab answers:
“What does this governance actually look like when it runs?”
The current developer preview is controlled access because I want to learn from real integrations before exposing more of the Core.
I am especially interested in developers building:
Developer docs and examples:
https://github.com/NEES-Anna/nees-python-sdk-developer-preview
Governance Lab:
https://nees.cloud
Request developer access:
https://nees.cloud/request-access
One thing I am particularly curious about:
If you were integrating governance into an existing agent today, what would you want exposed first after chat?
Action submission?
Approval/resume?
Evidence lookup?
Authority and scope?
Something else?
That answer will probably matter more than my roadmap assumptions.
This is useful. How are you finding your first users so far?
Mostly through founder/developer communities like Indie Hackers, LinkedIn and direct conversations right now.
The goal at this stage is less about volume and more about finding a few developers with real agent workflows so I can see where the SDK and governance model hold up — and where they don’t.
Shipping a smaller SDK than the engine is the right call, and we made the same choice for chatform.in's client. The things that earned a place in the SDK were the parts developers get subtly wrong on their own: retries with idempotency keys, cursor paging, stream reconnection and webhook signature verification. Everything else stayed as plain HTTP with a complete reference, so nobody is forced into the SDK. We also went ESM-only on purpose, because a package loaded twice (ESM and CJS) meant two copies writing the same session state.
Curious what you left out that people have already asked for. That list is usually the real roadmap. (Ours, for reference: chatform.in/docs/sdk)
That’s exactly the kind of signal I’m looking for.
So far the strongest asks have been around action submission, approval/resume, evidence lookup, and clearer authority/scope handling.
I’m keeping those out until the contracts are stable enough that developers won’t have to depend on internal behavior.
Your point about only putting the “easy to get subtly wrong” parts into the SDK is a really useful framing.
A small SDK can still leave a pretty big trust question unanswered: what exactly did the agent have permission to do? I'd show one Python call returning a governance decision with its trace ID, then follow that trace to the reason behind the decision.
That visible evidence makes a much stronger case than exposing the entire engine.
Exactly. That’s the direction I’m taking with the Governance Lab too keep the SDK surface small, but make the decision, trace, and linked evidence visible enough that developers can understand why the runtime behaved the way it did.
Nice progress. What is the next thing you are focusing on?
Right now the focus is on real developer integrations seeing where the SDK feels too narrow, what governance capabilities people actually need next, and then expanding the public interface around those real use cases.
Curious how long it took before you saw the first real results?
The first prototype results came fairly early, but getting reliable governance across decisions, execution, and evidence took months of iteration. The developer preview is the point where I can now test it with real external integrations.
Love this angle, honestly. What made you look into it in the first place?
It started from building AI systems that were becoming more capable and more autonomous.
At some point I realized the hard problem wasn’t just getting better model output, it was deciding what the system should actually be allowed to do, under whose authority, and how you could prove that later.
Once agents start touching tools, data, workflows, or external systems, prompt level rules started feeling too fragile to me.
That’s what pushed me toward treating governance as a runtime layer instead of just an instruction layer.