brazosd
Back to blog

Enterprise security for agents starts below the model

What makes agents usable in production is not just safer prompting. It is secret handling that never puts keys into LLM requests, a native and non-bypassable authorization flow, VM-isolated sandboxes, separation between sandbox and agent, and event-level auditability.

SecurityEnterpriseArchitecture

When enterprises start evaluating agents seriously, the first question is usually not “is the model smart enough?” but “is this thing safe enough to trust?”. The moment an agent stops being a chat interface and starts accessing internal systems, calling third-party APIs, browsing the web, downloading files, and running scripts, it stops being just a conversational product. It becomes a real software system with execution power. At that point, the security problem immediately expands beyond model behavior into a much more practical set of concerns: where are the secrets stored, can the model see them, what happens if malicious code lands in the execution environment, and can the whole chain of actions be reconstructed afterward?

That is why Brazosd does not treat enterprise security as a thin layer on top of the model. The important work happens lower in the stack, in how secrets are handled, how execution is isolated, how control boundaries are drawn, and how every action is recorded. For enterprises, security is not a single feature. It is whether the whole system can keep risk contained while still allowing the agent to do useful work.

0x00 > The problem

A lot of agent products still talk about security mostly in model terms: reducing hallucinations, limiting outputs, refining prompts, tightening system instructions. Those things matter, but they only address what the model says. Enterprise risk starts growing when the agent is allowed to do things. Once it can call tools, hold credentials, and interact with outside systems, the problem is no longer just about generation quality. It is about execution.

So enterprise security is not something you solve by saying “we take model safety seriously”. The real question is how you let an agent work with real systems without dragging that execution risk directly into the enterprise environment. Brazosd’s answer is built around several layers: secret management, native authorization flow, isolated execution, separation between the sandbox and the agent, and event-driven auditability.

0x01 > Secret management

If an agent is going to do useful work, it will eventually need secrets. It may need access to a Git repository, a cloud service, a database, or some third-party SaaS API. If that part is handled poorly, the whole security model falls apart. The most dangerous and surprisingly common mistake is to place secrets directly into the LLM request, so the model can “see” them inside the prompt or message history. Once a secret enters model context, it has already crossed into the wrong place, and from there the risk of accidental output, indirect leakage, or prompt-based extraction becomes much harder to control.

Brazosd follows a simple principle: the agent can use secrets, but the secrets themselves do not appear in LLM requests. The model sees tasks, context, and tool interfaces, not raw secret values. Only at tool execution time does the platform apply the appropriate secret to the actual external call, based on permissions and policy. In other words, the LLM can decide that a capability should be used, but it does not get to read the secret itself. That distinction matters because it cleanly separates “being able to trigger a privileged operation” from “being able to inspect the credential behind it”.

And “do not put secrets in prompts” is not enough on its own. Enterprise security needs an operational standard, not just a vague promise. Brazosd therefore comes with enterprise-grade secure key management implementation guidelines covering secret storage, injection, access control, rotation, revocation, and usage auditing. Enterprises do not need a claim that secrets are handled carefully. They need a process that can be implemented, reviewed, and verified.

0x02 > Native authorization flow

In enterprise environments, many of the actions that matter most cannot be left to “the model decided it should proceed”. They have to go through mandatory approval. That might mean obtaining a one-time verification code, waiting for a human confirmation before accessing a sensitive system, or collecting explicit feedback from the relevant user before continuing a critical step. If those approval steps live outside the platform as some loosely attached workflow, the agent still has opportunities to route around them. And the moment an agent can bypass approval, the claim of enterprise security starts to fall apart.

Brazosd builds authorization into the platform as a native capability, and it is a mandatory flow the agent cannot bypass. When policy says a step requires approval, the workflow enters an authorization state and stays there until the required confirmation arrives. The agent cannot skip it by rewriting its prompt, reordering tool calls, or inventing a side path. It must wait for the one-time code, the approval result, or the requested human feedback before continuing. That turns authorization from an optional wrapper into a hard boundary built into the runtime itself.

There is also an important security detail here: even when a flow involves a one-time code or another sensitive value, the same secret-handling model still applies. The agent may use the result, but it does not get raw access to the secret itself. That preserves the same separation as the rest of the platform: the agent can complete a controlled action without being able to inspect or expose the sensitive value behind it.

From an audit perspective, native authorization matters just as much. Approval is not happening in a detached chat thread or in a separate system that has to be reconciled later. It is part of the agent architecture itself. Who requested the step, why approval was required, who confirmed it, what result came back, and what happened afterward all land in the same event chain. That means security and audit are not stitched together after the fact. They are aligned at the architectural level from the start.

0x03 > Sandboxes run inside virtual machines

Another question that has to be answered directly is where the execution environment actually lives. In many cases, the highest-risk part of the system is not the model but the environment it operates in. Web pages are untrusted. Downloaded files are untrusted. Third-party scripts are untrusted. A lot of external inputs are untrusted. If all of that is mixed directly into the same environment that hosts platform control logic, the boundary becomes dangerously unclear.

Brazosd runs sandboxes inside virtual machines. That means browsing the web, downloading files, running scripts, and handling outside inputs all happen inside a clearly isolated execution environment. For enterprises, that matters because security is not only about preventing data leakage. It is also about making sure risky actions stay inside a risky zone rather than touching the control plane directly.

The value of the VM here is not simply that it is a heavier runtime. It is that it creates a clearer boundary. The sandbox is where work happens, but it is not the platform itself. A big part of enterprise trust comes from exactly that kind of boundary: even when the agent is executing complex tasks and interacting with untrusted content, it is doing so inside an isolated environment rather than inside the platform’s core control layer.

0x04 > Sandbox and agent are separate

But running the sandbox inside a VM is still not the whole story. The sandbox and the agent also need to be separate from one another, because they play very different roles in the system. The sandbox is the execution environment, where browsers, filesystems, scripts, and tasks actually run. The agent is the long-lived identity and control layer, where configuration, capabilities, workflow state, and relationships to users and organizations are defined.

This separation has a very direct security consequence: even if malicious code appears inside the sandbox, it cannot directly take control of the agent itself. That means a problem in the execution environment does not automatically become a takeover of the agent control plane. For enterprises, this is crucial. The requirement is not that nothing bad can ever happen anywhere. The requirement is that if something does go wrong locally, the damage stays local and does not immediately spread upward into the long-lived control layer.

So separating the agent from the sandbox is not just a clean architectural decision. It is a risk-containment decision. The sandbox interacts with the outside world, so it is naturally the higher-risk layer. The agent holds longer-lived control and identity, so it should not be easily controlled from the execution side. Without that boundary, it is very hard for enterprises to treat agents as serious production systems rather than useful tools that still feel too dangerous to trust.

0x05 > Auditability and event-driven security

There is one more part of enterprise security that is often underestimated but becomes critical the moment something goes wrong: auditability. Many systems look acceptable during normal operation, but once an incident happens, the hardest problem is no longer that the incident occurred. It is that nobody can clearly explain how it happened. What did the user ask for, what did the model decide, which tool touched which external system, where was the wrong data written, what happened automatically, what happened after an approval, and which step changed the system state? If those answers cannot be reconstructed, security governance quickly breaks down.

Brazosd’s event-driven framework is naturally well suited to this problem. In an event-driven model, user inputs, model outputs, tool calls, tool results, approval actions, state transitions, and scheduled triggers can all be captured and tracked as explicit steps. The agent is not doing mysterious work inside a black box. It is operating inside an event stream that can be replayed, inspected, and audited.

That matters in very practical ways. Incidents become easier to locate. Compliance work has concrete evidence. Internal security teams can review a real record instead of relying on guesswork after the fact. For a production-grade agent platform, auditability is not a nice extra. It is part of the foundation of trust.

0x06 > Why this matters

Taken together, these layers show that enterprise security is not a single feature but a system outcome. Secrets staying out of LLM requests means the most sensitive data does not enter the least appropriate context. A native and non-bypassable authorization flow means critical actions require explicit human approval and that the approval itself becomes part of the architectural audit chain. Running sandboxes inside virtual machines means higher-risk execution has a clear isolation boundary. Separating the sandbox from the agent means a local execution problem does not automatically become a control-plane problem. Recording the full event chain means every step can be traced, reconstructed, and audited.

The kind of security enterprises actually need is not “we trust the model not to make mistakes”, and it is not “we hope nothing bad happens”. What they need is a system where the agent can do real work, while risk remains bounded, responsibilities remain clear, and every meaningful action can be reconstructed afterward. That is how Brazosd thinks about enterprise security: not as a slogan at the model layer, but as a design principle applied to secrets, authorization, execution, isolation, and audit from end to end.