<?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: Anant</title>
    <description>The latest articles on DEV Community by Anant (@anantdhavale1).</description>
    <link>https://dev.to/anantdhavale1</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%2F3810189%2F90200bc4-6ede-46f1-9c42-4970c1cd02bc.png</url>
      <title>DEV Community: Anant</title>
      <link>https://dev.to/anantdhavale1</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/anantdhavale1"/>
    <language>en</language>
    <item>
      <title>Best AI Agent Governance Tools in 2026: A Layer-by-Layer Guide</title>
      <dc:creator>Anant</dc:creator>
      <pubDate>Fri, 10 Jul 2026 03:58:37 +0000</pubDate>
      <link>https://dev.to/anantdhavale1/best-ai-agent-governance-tools-in-2026-a-layer-by-layer-guide-dp3</link>
      <guid>https://dev.to/anantdhavale1/best-ai-agent-governance-tools-in-2026-a-layer-by-layer-guide-dp3</guid>
      <description>&lt;p&gt;The best AI agent governance tool for a given team depends on which layer of the problem they need to control: agent identity, runtime action validation, model-level guardrails, observability, or platform posture. No single product covers all five well, and most bad purchases in this category come from buying a tool for one layer while the actual risk sits in another.&lt;/p&gt;

&lt;p&gt;This guide lists the leading options by layer, states what each is genuinely good at and where it stops, and closes with how to choose. Cerone, our own product, appears in the runtime validation section, described by the same criteria as everything else.&lt;/p&gt;

&lt;p&gt;What is AI agent governance, and why did it become its own category in 2026?&lt;/p&gt;

&lt;p&gt;AI agent governance is the set of controls that constrain what autonomous AI systems can see, decide, and do at runtime, and that produce evidence those controls operated.&lt;/p&gt;

&lt;p&gt;The category separated from general AI security for a concrete reason: agents act. In late 2025, OWASP published its Top 10 for Agentic Applications, the first formal taxonomy of agent-specific risks, covering goal hijacking, tool misuse, identity and privilege abuse, memory poisoning, insecure inter-agent communication, and rogue agents. Regulation followed the same curve, with the EU AI Act's high-risk obligations and US state-level AI laws taking effect through 2026. Policy documents and model evaluations, the tools of the previous era, address none of these at the moment of execution. Governance moved to runtime because that is where agents cause or prevent harm.&lt;/p&gt;

&lt;p&gt;Which tools govern agent identity and access?&lt;/p&gt;

&lt;p&gt;For teams whose primary risk is agents holding credentials, the non-human identity (NHI) platforms lead.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Oasis Security.&lt;/strong&gt; Built on non-human identity management, Oasis positions its agentic access platform around just-in-time, intent-evaluated access: agents get only the access a given task requires, granted at the moment of need. Strongest where credential sprawl across machines and agents is the known problem. It governs access; it does not judge whether a permitted action serves the agent's purpose.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Astrix, Entro, and Linx.&lt;/strong&gt; A cluster of NHI specialists that discover, classify, and govern machine identities, increasingly extended to agents and MCP servers. Good first buys for visibility: most enterprises cannot currently list their agents, let alone govern them.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Palo Alto Networks&lt;/strong&gt;. The consolidation play. Through Prisma AIRS, the Protect AI acquisition, and the 2026 CyberArk acquisition, Palo Alto offers unified security across human, machine, and agentic identity. Fits organizations already standardized on its stack; heavier than a startup needs.&lt;/p&gt;

&lt;p&gt;Which tools validate agent actions at runtime?&lt;/p&gt;

&lt;p&gt;This is the layer that answers the question identity cannot: the agent is allowed to do this, but should it, given what the agent is for?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Microsoft Agent Governance Toolkit&lt;/strong&gt;. Released open source under MIT license in April 2026, this brought runtime security governance for agents into the mainstream and effectively legitimized the category. It provides deterministic runtime policy around autonomous agents and integrates naturally with the Microsoft ecosystem. As a toolkit, it supplies the enforcement machinery; the policies, and the purpose definitions behind them, remain yours to author and maintain. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cerone&lt;/strong&gt; (Homer Semantics). Our product, so judge the framing accordingly. Cerone registers each agent with a cryptographic identity and a declared purpose, then validates every action against that purpose before execution, returning approved, flagged, or rejected. Its distinguishing bet is semantic: it evaluates whether an action is consistent with what the agent is for, not only whether a policy rule matches. It is a lightweight SDK (pip install cerone, free trial without signup) rather than an enterprise platform, which is its strength for teams that want purpose validation in days, and its limitation for buyers who need a full posture-management suite around it. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Zenity&lt;/strong&gt;. Focused on the low-code and enterprise-copilot agent estate (Copilot Studio and similar), governing the agents business users build outside engineering's view. Strong where shadow agents are the risk; less aimed at custom agent pipelines.&lt;/p&gt;

&lt;p&gt;Which tools handle guardrails and observability?&lt;/p&gt;

&lt;p&gt;Guardrails filter model inputs and outputs; observability tells you what happened. Both are necessary, and neither is enforcement.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Lakera&lt;/strong&gt; (Check Point) and Prompt Security (SentinelOne). Leading guardrail layers for prompt injection and unsafe content, now inside larger security vendors. They protect the model boundary. An agent taking a permitted but misaligned action passes through them untouched, which is why guardrails complement rather than replace action validation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;LangSmith and Langfuse&lt;/strong&gt;. The observability standards for LLM applications: traces, evals, and debugging for agent runs. Essential for understanding agent behavior, and honest about what they are: they record and evaluate, they do not block. Pair one of these with an enforcement layer rather than treating traces as a control.&lt;/p&gt;

&lt;p&gt;How should a team choose among these?&lt;/p&gt;

&lt;p&gt;Map your worst-case incident to a layer, buy for that layer first, and confirm three things in a proof of value.&lt;/p&gt;

&lt;p&gt;Name the incident you are buying against. Leaked credentials point to NHI platforms. A rogue action by a legitimate agent points to runtime validation. Prompt injection points to guardrails. An unexplainable production incident points to observability. The tool category falls out of the incident, not the other way around.&lt;/p&gt;

&lt;p&gt;Ask what the tool does at the moment of action: block, flag, or log. Vendors blur this constantly. Only enforcement-layer tools prevent; everything else informs. Both matter, but they are not interchangeable, and audit evidence requires knowing which you have.&lt;/p&gt;

&lt;p&gt;Check who authors and maintains the policy or purpose. Toolkits give you enforcement machinery and leave policy authorship to you. Products with purpose or intent models reduce that authorship burden but require your purposes to be written honestly. Either way, the ongoing cost of governance is the maintenance of the standard, not the license.&lt;/p&gt;

&lt;p&gt;One combined stack pattern serves most teams: an NHI or identity layer for credentials, one runtime validation layer for actions, guardrails at the model boundary, and observability underneath all of it.&lt;/p&gt;

&lt;p&gt;Summary&lt;/p&gt;

&lt;p&gt;Agent governance in 2026 is a layered problem wearing a single category name. Identity platforms such as Oasis and the NHI specialists control what agents can access. Runtime validation, from Microsoft's open-source toolkit to purpose-based products such as Cerone, controls what agents actually do. Guardrails from Lakera and Prompt Security protect the model boundary, and LangSmith or Langfuse make all of it observable. The buying mistake to avoid is treating any one layer as the whole answer: pick the layer your worst-case incident lives in, buy enforcement where you need prevention and observability where you need evidence, and expect the real ongoing cost to be maintaining honest policies and purposes, whichever vendor's machinery enforces them.&lt;/p&gt;

&lt;p&gt;Frequently asked questions&lt;/p&gt;

&lt;p&gt;Is agent governance the same as AI security? &lt;/p&gt;

&lt;p&gt;Agent governance is the subset of AI security concerned with autonomous systems that take actions: their identity, their permissions, the validation of their actions, and the evidence trail. General AI security also covers training data, model theft, and content risks that exist without any agent.&lt;/p&gt;

&lt;p&gt;Do open-source options make commercial tools unnecessary? &lt;/p&gt;

&lt;p&gt;Open-source toolkits provide credible enforcement machinery, but policy authorship, purpose modeling, maintenance, and evidence workflows remain work someone does. Commercial products compress that work; whether the compression is worth the license depends on team size and stakes.&lt;/p&gt;

&lt;p&gt;Where do observability tools fit if they don't block anything? &lt;/p&gt;

&lt;p&gt;Underneath everything. Traces and evals are how you discover what your agents actually do, tune your policies, and produce forensic evidence. They are necessary and insufficient, in the same way logs are for conventional software.&lt;/p&gt;

&lt;p&gt;Which layer should a small team buy first? &lt;/p&gt;

&lt;p&gt;Usually runtime validation plus basic observability. A small team's agents rarely have enough credential sprawl to justify an NHI platform first, but a single misaligned action in production is already an incident.&lt;/p&gt;

&lt;p&gt;--&lt;/p&gt;

&lt;p&gt;Notes&lt;/p&gt;

&lt;p&gt;Cerone is Homer Semantics' runtime governance layer: declared purpose per agent, every action validated before execution. Install with pip install cerone, run cerone demo, and a free trial with 2,400 validations starts with no signup. Write to &lt;a href="mailto:info@homersemantics.com"&gt;info@homersemantics.com&lt;/a&gt; for anything beyond the trial.&lt;/p&gt;

&lt;p&gt;13K+ downloads on PyPI&lt;/p&gt;

&lt;p&gt;If you are looking for specific AI Implementation services, do check out &lt;a href="https://procors.com/" rel="noopener noreferrer"&gt;https://procors.com/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Read a few other useful articles at : &lt;a href="https://www.homersemantics.com/blog-list" rel="noopener noreferrer"&gt;https://www.homersemantics.com/blog-list&lt;/a&gt;&lt;/p&gt;

</description>
      <category>agentgovernance</category>
      <category>governance</category>
      <category>ai</category>
      <category>aicontrol</category>
    </item>
    <item>
      <title>Easier Bets to Get Early Customer Validation and VC Attention</title>
      <dc:creator>Anant</dc:creator>
      <pubDate>Sun, 24 May 2026 04:26:55 +0000</pubDate>
      <link>https://dev.to/anantdhavale1/easier-bets-to-get-early-customer-validation-and-vc-attention-12go</link>
      <guid>https://dev.to/anantdhavale1/easier-bets-to-get-early-customer-validation-and-vc-attention-12go</guid>
      <description>&lt;p&gt;There is not much of scale to be achieved in the Enterprise AI space unless you have a big team, a solid funding pipeline and a large multi-capability platform. Most AI work on the B2B large organization side is going to be building services, data products, APIs and integrating AI agents.&lt;/p&gt;

&lt;p&gt;From my experience, what VCs look for is user adoption/ customer validation. Now, that typically takes a year or so depending how strong your network is or whether you have a dedicated sales and marketing org within. Most startups do no have that kind of money or resource, so getting customer validation early is difficult. &lt;/p&gt;

&lt;p&gt;Personalized AI agents, recruitment AI, domain specific GPTs, smaller SaaS etc. are better ideas to get both, some early recurring revenue and the consecutive VC support. &lt;/p&gt;

&lt;p&gt;VCs outside of the US ( especially San Francisco) are risk averse and  need to see the money before they can potentially invest. &lt;/p&gt;

&lt;p&gt;I am not trying to dissuade people from entering the enterprise space, rather I have listed the things that I have observed being in this space for the past few months or so. &lt;/p&gt;

&lt;p&gt;Would love to know yall's views. &lt;/p&gt;

</description>
    </item>
    <item>
      <title>Runtime Agent Governance for AI Agents in JavaScript and Node.js</title>
      <dc:creator>Anant</dc:creator>
      <pubDate>Tue, 19 May 2026 03:56:51 +0000</pubDate>
      <link>https://dev.to/anantdhavale1/cerone-runtime-agent-governance-for-ai-agents-in-javascript-and-nodejs-17k1</link>
      <guid>https://dev.to/anantdhavale1/cerone-runtime-agent-governance-for-ai-agents-in-javascript-and-nodejs-17k1</guid>
      <description>&lt;h1&gt;
  
  
  agent-governance
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;Cerone &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.amazonaws.com%2Fuploads%2Farticles%2Fhjg23lec95cb66edwcrb.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.amazonaws.com%2Fuploads%2Farticles%2Fhjg23lec95cb66edwcrb.png" alt=" " width="800" height="493"&gt;&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Install it, create an agent and validate a real action. Get a live governance decision in minutes.&lt;/p&gt;

&lt;p&gt;This package talks to the &lt;strong&gt;Cerone runtime&lt;/strong&gt; and returns explicit runtime decisions before an action executes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;approved&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;flagged&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;rejected&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The npm package name is &lt;code&gt;agent-governance&lt;/code&gt; for discoverability. The hosted runtime behind it is Cerone.&lt;/p&gt;
&lt;h2&gt;
  
  
  Why developers use it
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;start immediately with hosted trial access from the SDK&lt;/li&gt;
&lt;li&gt;validate agent actions before they execute&lt;/li&gt;
&lt;li&gt;keep your own OpenAI, Anthropic, or other model key&lt;/li&gt;
&lt;li&gt;add runtime governance without replacing the rest of your stack&lt;/li&gt;
&lt;li&gt;get real decisions instead of vague policy claims&lt;/li&gt;
&lt;li&gt;use a lean trust layer instead of a heavy platform rewrite&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  Install
&lt;/h2&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;agent-governance
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Node 18+ is required because the SDK uses the built-in &lt;code&gt;fetch&lt;/code&gt; and &lt;code&gt;AbortController&lt;/code&gt;.&lt;/p&gt;
&lt;h2&gt;
  
  
  Quick start
&lt;/h2&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;CeroneClient&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;agent-governance&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;CeroneClient&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;agent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;createAgent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Customer billing support&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;db_read&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;billing_api&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;validate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="nx"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;agentId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;database_query&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;table&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;billing&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;customer_id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;123&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Agent:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;agentId&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Decision:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Trust:&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;trustScore&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h2&gt;
  
  
  Hosted trial and access
&lt;/h2&gt;

&lt;p&gt;If you do not pass an API key, the SDK automatically bootstraps a hosted trial token by calling:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;POST /trial/session&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That token is persisted locally at:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;~/.cerone/trial_token&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Protected API routes still use:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;X-API-Key: sk_trial_...&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Current access paths:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Hosted trial&lt;/li&gt;
&lt;li&gt;no manual signup required to begin evaluation&lt;/li&gt;
&lt;li&gt;designed for testing, demos, and first integrations&lt;/li&gt;
&lt;li&gt;&lt;p&gt;if the trial is exhausted, contact us for persistent access&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Persistent access&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;use a provisioned key for POCs, pilots, and production environments&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Support:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://homersemantics.com" rel="noopener noreferrer"&gt;homersemantics.com&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="mailto:info@homersemantics.com"&gt;info@homersemantics.com&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Hosted service terms:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/AnantDhavale/agent-governance-js/blob/main/TERMS_OF_SERVICE.md" rel="noopener noreferrer"&gt;TERMS_OF_SERVICE.md&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/AnantDhavale/agent-governance-js/blob/main/PRIVACY.md" rel="noopener noreferrer"&gt;PRIVACY.md&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  What this SDK does
&lt;/h2&gt;

&lt;p&gt;It is a thin Node client for the hosted Cerone runtime. It can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;create root agents&lt;/li&gt;
&lt;li&gt;spawn child agents&lt;/li&gt;
&lt;li&gt;validate actions&lt;/li&gt;
&lt;li&gt;validate action batches&lt;/li&gt;
&lt;li&gt;fetch usage&lt;/li&gt;
&lt;li&gt;issue delegated tokens&lt;/li&gt;
&lt;li&gt;verify and revoke delegated tokens&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The goal is to keep the client side light while identity, validation, trust, governance, and audit logic stay centralized in the Cerone runtime.&lt;/p&gt;
&lt;h2&gt;
  
  
  Runtime policy and containment
&lt;/h2&gt;

&lt;p&gt;Cerone is also evolving into a stronger runtime policy layer, not just an&lt;br&gt;
identity and semantic-alignment layer.&lt;/p&gt;

&lt;p&gt;The current direction includes runtime detections for patterns such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;prompt injection&lt;/li&gt;
&lt;li&gt;instruction override&lt;/li&gt;
&lt;li&gt;role manipulation&lt;/li&gt;
&lt;li&gt;policy evasion&lt;/li&gt;
&lt;li&gt;secret harvesting&lt;/li&gt;
&lt;li&gt;data exfiltration&lt;/li&gt;
&lt;li&gt;obfuscation and encoded payload tricks&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These checks are meant to complement semantic validation:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;semantic alignment asks whether the action fits the declared purpose&lt;/li&gt;
&lt;li&gt;runtime policy checks ask whether the action payload itself looks unsafe,
manipulative, evasive, or exfiltration-oriented&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Cerone also has an operator-controlled containment direction:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;manual kill switch support&lt;/li&gt;
&lt;li&gt;soft containment&lt;/li&gt;
&lt;li&gt;hard containment&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Important:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;detection does not automatically activate containment by default&lt;/li&gt;
&lt;li&gt;the intended default behavior is operator-controlled, manual activation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For integrators, the practical rule remains simple:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;approved&lt;/code&gt; -&amp;gt; continue&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;flagged&lt;/code&gt; -&amp;gt; review or warn according to your app policy&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;rejected&lt;/code&gt; -&amp;gt; block execution&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  Single action vs batch validation
&lt;/h2&gt;

&lt;p&gt;Start with &lt;code&gt;validate(...)&lt;/code&gt; for a single action. Use &lt;code&gt;validateBatch([...])&lt;/code&gt; only when you already have two or more validation items to send together.&lt;/p&gt;

&lt;p&gt;Single action:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;CeroneClient&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;agent-governance&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;CeroneClient&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;agent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;createAgent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Customer billing support&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;db_read&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;billing_api&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;validate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="nx"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;agentId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;database_query&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;table&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;billing&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;customer_id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;123&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;trustScore&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Batch validation:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;CeroneClient&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;agent-governance&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;CeroneClient&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;results&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;validateBatch&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;agentId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;agt_123&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;action&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;tool&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;database_query&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;parameters&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;table&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;billing&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;customer_id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;123&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;agentId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;agt_456&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;action&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;tool&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;refund_lookup&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;parameters&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;refund_id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;rf_789&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;]);&lt;/span&gt;

&lt;span class="k"&gt;for &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;item&lt;/span&gt; &lt;span class="k"&gt;of&lt;/span&gt; &lt;span class="nx"&gt;results&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;item&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;agentId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;item&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;item&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;trustScore&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you call &lt;code&gt;validateBatch([])&lt;/code&gt;, the SDK raises a local error before making a request.&lt;/p&gt;

&lt;h2&gt;
  
  
  API
&lt;/h2&gt;

&lt;p&gt;Main exports:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;CeroneClient&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;AgentGovernanceClient&lt;/code&gt; (alias)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;CeroneError&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;AuthenticationError&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ValidationError&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;RateLimitError&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;NetworkError&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;new CeroneClient&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;Options:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;apiKey&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;baseUrl&lt;/code&gt; default: &lt;code&gt;https://api.homersemantics.com&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;timeoutMs&lt;/code&gt; default: &lt;code&gt;30000&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;maxRetries&lt;/code&gt; default: &lt;code&gt;3&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;retryNonIdempotent&lt;/code&gt; default: &lt;code&gt;false&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;enableCache&lt;/code&gt; default: &lt;code&gt;false&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;cacheTtlMs&lt;/code&gt; default: &lt;code&gt;300000&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;&lt;code&gt;trialTokenPath&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Agent / certificate methods
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;createAgent(purpose, capabilities?, options?)&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;spawnAgent(parentId, purpose, capabilities?, options?)&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Validation methods
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;validate(agentId, action, parameters?)&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;validateBatch(validations)&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Trial / health / usage methods
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;healthCheck()&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;getUsage()&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ensureApiKey()&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Delegated token methods
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;delegateToken(options)&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;verifyToken(accessToken, options?)&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;revokeToken(accessToken)&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Request shape
&lt;/h2&gt;

&lt;p&gt;Validation requests use the Cerone runtime request shape:&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;"agent_id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"agt_..."&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="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"tool"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"database_query"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"parameters"&lt;/span&gt;&lt;span class="p"&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;span class="nl"&gt;"table"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"billing"&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;span class="p"&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;h2&gt;
  
  
  Runtime headers
&lt;/h2&gt;

&lt;p&gt;The SDK sends telemetry headers including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;User-Agent: agent-governance-node-sdk/&amp;lt;version&amp;gt;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;X-Cerone-SDK-Name&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;X-Cerone-SDK-Version&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;X-Cerone-Platform&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;X-Cerone-Client-Intent&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Bring your own model key
&lt;/h2&gt;

&lt;p&gt;Cerone governs agent behavior, not inference.&lt;/p&gt;

&lt;p&gt;You keep your own OpenAI, Anthropic, or other provider key and pass it directly to your model calls. Cerone validates the intended action and records the governance trail, but it does not sit in the middle of your model billing path.&lt;/p&gt;

&lt;h2&gt;
  
  
  Other SDKs
&lt;/h2&gt;

&lt;p&gt;Cerone now has more than one SDK surface.&lt;/p&gt;

&lt;p&gt;Current SDKs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Node / JavaScript SDK&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;package: &lt;code&gt;agent-governance&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;repo: &lt;a href="https://github.com/AnantDhavale/agent-governance-js" rel="noopener noreferrer"&gt;github.com/AnantDhavale/agent-governance-js&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;&lt;strong&gt;Python SDK&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;package: &lt;code&gt;cerone&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;repo: &lt;a href="https://github.com/AnantDhavale/cerone_sdk" rel="noopener noreferrer"&gt;github.com/AnantDhavale/cerone_sdk&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;The product name is &lt;strong&gt;Cerone&lt;/strong&gt; across both SDKs.&lt;br&gt;&lt;br&gt;
The npm package uses the name &lt;code&gt;agent-governance&lt;/code&gt; for discoverability.&lt;/p&gt;

&lt;p&gt;If you are building in Node:&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;agent-governance
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you are building in Python:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install &lt;/span&gt;cerone
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Notes
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;this package is server-side Node code&lt;/li&gt;
&lt;li&gt;do not expose your Cerone API key in browser bundles&lt;/li&gt;
&lt;li&gt;for enterprise or persistent access, contact &lt;code&gt;info@homersemantics.com&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>agents</category>
      <category>ai</category>
      <category>javascript</category>
      <category>node</category>
    </item>
    <item>
      <title>cerone-openclaw-plugin : check OpenClaw tool calls before they run</title>
      <dc:creator>Anant</dc:creator>
      <pubDate>Sat, 16 May 2026 17:20:47 +0000</pubDate>
      <link>https://dev.to/anantdhavale1/cerone-openclaw-plugin-check-openclaw-tool-calls-before-they-run-229e</link>
      <guid>https://dev.to/anantdhavale1/cerone-openclaw-plugin-check-openclaw-tool-calls-before-they-run-229e</guid>
      <description>&lt;p&gt;I’ve been working on cerone-openclaw-plugin, a native OpenClaw plugin that checks tool calls with Cerone before execution. (Cerone is an AI agent runtime.) &lt;/p&gt;

&lt;p&gt;OpenClaw agents can read files, write files, call APIs, and trigger other tools. &lt;/p&gt;

&lt;p&gt;This plugin adds a pre-execution check layer using OpenClaw’s existing before_tool_call hook, without modifying OpenClaw core.&lt;/p&gt;

&lt;p&gt;What it does:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;loads as a normal third-party OpenClaw plugin&lt;/li&gt;
&lt;li&gt;intercepts tool calls through before_tool_call&lt;/li&gt;
&lt;li&gt;sends the tool name, parameters, and runtime context to Cerone&lt;/li&gt;
&lt;li&gt;gets back a decision:
 approved
 flagged
 rejected&lt;/li&gt;
&lt;li&gt;maps that into OpenClaw behavior:
 approved -&amp;gt; tool runs
 flagged -&amp;gt; require approval by default
 rejected -&amp;gt; block the tool call&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Example shape:&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;"plugins"&lt;/span&gt;&lt;span class="p"&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;span class="nl"&gt;"entries"&lt;/span&gt;&lt;span class="p"&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;span class="nl"&gt;"cerone-openclaw-plugin"&lt;/span&gt;&lt;span class="p"&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;span class="nl"&gt;"enabled"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"config"&lt;/span&gt;&lt;span class="p"&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;span class="nl"&gt;"trialMode"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"auto"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"flaggedBehavior"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"requireApproval"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"networkFailureBehavior"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"allow"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"agentPurpose"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Read repository files and inspect code inside OpenClaw for software engineering tasks."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"agentCapabilities"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"file_read"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"file_write"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"network_access"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"api_call"&lt;/span&gt;&lt;span class="p"&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;span class="p"&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;span class="p"&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;In practice, this means OpenClaw keeps its normal workflow, but the sdk gets a chance to allow, flag, or block a tool call before it executes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Repo&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/AnantDhavale/cerone-openclaw-plugin" rel="noopener noreferrer"&gt;https://github.com/AnantDhavale/cerone-openclaw-plugin&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;npm&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.npmjs.com/package/cerone-openclaw-plugin" rel="noopener noreferrer"&gt;https://www.npmjs.com/package/cerone-openclaw-plugin&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Would appreciate feedback from people using OpenClaw for:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;coding agents&lt;/li&gt;
&lt;li&gt;tool-heavy assistants&lt;/li&gt;
&lt;li&gt;agents that can touch files or external APIs&lt;/li&gt;
&lt;li&gt;workflows where some actions should pause for approval before execution&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Thanks!&lt;/p&gt;

</description>
      <category>langchain</category>
      <category>agents</category>
    </item>
    <item>
      <title>Beta Users for Agent Governance Runtime</title>
      <dc:creator>Anant</dc:creator>
      <pubDate>Sun, 10 May 2026 15:29:47 +0000</pubDate>
      <link>https://dev.to/anantdhavale1/beta-users-for-agent-governance-runtime-56k7</link>
      <guid>https://dev.to/anantdhavale1/beta-users-for-agent-governance-runtime-56k7</guid>
      <description>&lt;p&gt;Hey folks!&lt;/p&gt;

&lt;p&gt;I'm looking for beta users to try out &lt;strong&gt;Cerone&lt;/strong&gt; — an AI Agent governance runtime.&lt;/p&gt;

&lt;p&gt;It helps monitor, control, and enforce policies on AI agents at runtime, would love early feedback from anyone building with agents.&lt;/p&gt;

&lt;p&gt;Install it via PyPI: &lt;code&gt;pip install cerone&lt;/code&gt;Full details &amp;amp; docs on the PyPI page: &lt;code&gt;pypi.org/project/cerone&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;If you try it out, drop your feedback in the comments or reach out directly — every bit helps shape the roadmap! &lt;/p&gt;


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
        &lt;div class="c-embed__cover"&gt;
          &lt;a href="https://pypi.org/project/cerone/" class="c-link align-middle" rel="noopener noreferrer"&gt;
            &lt;img alt="" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fpypi.org%2Fstatic%2Fimages%2Ftwitter.abaf4b19.webp" height="300" class="m-0" width="300"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="c-embed__body"&gt;
        &lt;h2 class="fs-xl lh-tight"&gt;
          &lt;a href="https://pypi.org/project/cerone/" rel="noopener noreferrer" class="c-link"&gt;
            cerone · PyPI
          &lt;/a&gt;
        &lt;/h2&gt;
          &lt;p class="truncate-at-3"&gt;
            Zero Trust Security for AI Agents
          &lt;/p&gt;
        &lt;div class="color-secondary fs-s flex items-center"&gt;
            &lt;img alt="favicon" class="c-embed__favicon m-0 mr-2 radius-0" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fpypi.org%2Fstatic%2Fimages%2Ffavicon.35549fe8.ico" width="32" height="30"&gt;
          pypi.org
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


</description>
      <category>agents</category>
      <category>ai</category>
      <category>python</category>
      <category>showdev</category>
    </item>
    <item>
      <title>pip-guardian on Pypi</title>
      <dc:creator>Anant</dc:creator>
      <pubDate>Tue, 07 Apr 2026 09:25:03 +0000</pubDate>
      <link>https://dev.to/anantdhavale1/pip-guardian-on-pypi-4d4o</link>
      <guid>https://dev.to/anantdhavale1/pip-guardian-on-pypi-4d4o</guid>
      <description>&lt;p&gt;The LiteLLM supply chain attack is a bit of a wake-up call.&lt;/p&gt;

&lt;p&gt;Somehow it has not been very prominent in the news. I received an email from Mercor stating a recent supply chain attack involving LiteLLM affected their systems.&lt;/p&gt;

&lt;p&gt;According to reports, malicious code was injected directly into official versions of the LiteLLM package, which were published on PyPI. &lt;/p&gt;

&lt;p&gt;When developers installed the package in production using pip as usual, they unknowingly introduced the malicious code into their environments. The malicious package reportedly harvested cloud credentials, SSH keys, API tokens, and even tried lateral movement in Kubernetes environments. &lt;/p&gt;

&lt;p&gt;The lesson here is simple: “pip install latest” in production is no longer safe.&lt;/p&gt;

&lt;p&gt;At a minimum, before installing a package in production, check:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;When was this version published?&lt;/li&gt;
&lt;li&gt;Are you pinning versions?&lt;/li&gt;
&lt;li&gt;Are you using hash-locked requirements?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I’ve experimented with a small tool that adds a check before pip installs a package. Not commercial yet, just a safety layer for developers after the LiteLLM incident.&lt;/p&gt;

&lt;p&gt;You can check it out here, please star if you like it :&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/AnantDhavale/pip-guardian/tree/main" rel="noopener noreferrer"&gt;https://github.com/AnantDhavale/pip-guardian/tree/main&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Download it from Pypi&lt;/p&gt;

&lt;p&gt;pip install pip-guardian&lt;/p&gt;


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
      &lt;div class="c-embed__body flex items-center justify-between"&gt;
        &lt;a href="https://pypi.org/project/pip-guardian/" rel="noopener noreferrer" class="c-link fw-bold flex items-center"&gt;
          &lt;span class="mr-2"&gt;pypi.org&lt;/span&gt;
          

        &lt;/a&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;Here's the readme version for you with some details::&lt;/p&gt;

&lt;p&gt;Feature set&lt;/p&gt;

&lt;p&gt;1) Pre-install risk policy&lt;br&gt;
Version age rules:&lt;br&gt;
block if version is very new (default &amp;lt; 5h)&lt;br&gt;
warn if version is recent (default &amp;lt; 48h)&lt;br&gt;
Blocks yanked releases.&lt;br&gt;
Blocks known-compromised versions from local blocklist.&lt;br&gt;
Blocks maintainer identities from local blocklist.&lt;/p&gt;

&lt;p&gt;2) Deep artifact scanning&lt;br&gt;
Downloads wheel/sdist artifacts from PyPI before install.&lt;br&gt;
Verifies artifact SHA256 against PyPI metadata.&lt;br&gt;
Static scan heuristics for:&lt;br&gt;
executable .pth startup hooks&lt;br&gt;
sitecustomize.py / usercustomize.py&lt;br&gt;
obfuscated payload patterns (e.g., long base64 + dynamic execution)&lt;br&gt;
credential-exfiltration-like behavior&lt;br&gt;
persistence indicators (e.g., systemd artifacts)&lt;br&gt;
Kubernetes lateral-movement indicators&lt;/p&gt;

&lt;p&gt;3) Built-in incident guard (LiteLLM March 2026)&lt;br&gt;
Blocks:&lt;br&gt;
litellm==1.82.7&lt;br&gt;
litellm==1.82.8&lt;br&gt;
Runbook:&lt;br&gt;
docs/INCIDENT_LITELLM_2026.md&lt;/p&gt;

&lt;p&gt;4) CI-friendly JSON mode&lt;br&gt;
--json emits one machine-readable JSON object.&lt;br&gt;
--yes allows non-interactive proceed on WARN.&lt;br&gt;
Exit codes:&lt;br&gt;
0 install succeeded&lt;br&gt;
1 blocked, warn-not-confirmed, or pip install failure&lt;br&gt;
2 usage/argument errors&lt;/p&gt;

&lt;p&gt;5) Logging&lt;br&gt;
Decision logs written as JSONL.&lt;br&gt;
Primary path: ~/.pip_guardian/guardian.log&lt;br&gt;
Fallback path (if home not writable): ./.pip_guardian/guardian.log&lt;br&gt;
Installation&lt;br&gt;
Install from PyPI:&lt;/p&gt;

&lt;p&gt;python -m pip install pip-guardian&lt;br&gt;
Upgrade:&lt;/p&gt;

&lt;p&gt;python -m pip install --upgrade pip-guardian&lt;br&gt;
Install from source (development):&lt;/p&gt;

&lt;p&gt;git clone &lt;a href="https://github.com/AnantDhavale/pip-guardian.git" rel="noopener noreferrer"&gt;https://github.com/AnantDhavale/pip-guardian.git&lt;/a&gt;&lt;br&gt;
cd pip-guardian&lt;br&gt;
python -m pip install .&lt;/p&gt;

&lt;p&gt;Usage&lt;/p&gt;

&lt;p&gt;guardian install requests&lt;br&gt;
guardian install litellm==1.82.8&lt;br&gt;
guardian install fastapi --index-url &lt;a href="https://pypi.org/simple" rel="noopener noreferrer"&gt;https://pypi.org/simple&lt;/a&gt;&lt;br&gt;
guardian install requests --json --yes&lt;/p&gt;

&lt;p&gt;Policy and IOC files&lt;br&gt;
policies/config.yaml:&lt;br&gt;
age thresholds&lt;br&gt;
deep-scan score thresholds&lt;br&gt;
executable .pth blocking toggle&lt;br&gt;
policies/blocklist.json:&lt;br&gt;
package/version deny list&lt;br&gt;
maintainer deny list&lt;/p&gt;

&lt;p&gt;Repository structure&lt;br&gt;
guardian/cli.py - command entrypoint&lt;br&gt;
guardian/policy_engine.py - risk decision logic&lt;br&gt;
guardian/scanner.py - deep artifact scanning&lt;br&gt;
guardian/pypi_checker.py - PyPI metadata collection&lt;br&gt;
guardian/logger.py - local decision logging&lt;/p&gt;

&lt;p&gt;Notes:&lt;br&gt;
This reduces risk but is not a full malware sandbox.&lt;br&gt;
For production, use pinned dependencies and hash-locked installs.&lt;/p&gt;

</description>
      <category>cybersecurity</category>
      <category>llm</category>
      <category>python</category>
      <category>security</category>
    </item>
    <item>
      <title>OAuth for AI Agents</title>
      <dc:creator>Anant</dc:creator>
      <pubDate>Thu, 02 Apr 2026 23:03:29 +0000</pubDate>
      <link>https://dev.to/anantdhavale1/oauth-for-ai-agents-4id7</link>
      <guid>https://dev.to/anantdhavale1/oauth-for-ai-agents-4id7</guid>
      <description>&lt;p&gt;New here. I am looking for some beta users for Agent Guard, it is aimed at building zero trust / Oauth for AI Agents. Think of it as Runtime permission checks for AI agent actions.&lt;/p&gt;

&lt;p&gt;Agent Guard is a lightweight enforcement layer that sits between your agent and tool execution. Before a tool runs, Agent Guard asks Cerone whether the action should be allowed. Cerone is the backend mastermind - the policy decision point (PDP). &lt;/p&gt;

&lt;p&gt;Some features : &lt;/p&gt;

&lt;p&gt;Add runtime guardrails without rewriting your app.&lt;br&gt;
Keep your current tools/functions and wrap them in minutes.&lt;br&gt;
Cache approvals for low-latency hot paths.&lt;br&gt;
Stay framework-agnostic (OpenAI tools, LangChain, CrewAI, custom agents).&lt;/p&gt;

&lt;p&gt;Please check it out, feedbacks/ comments/ suggestions highly appreciated ! &lt;a href="https://github.com/AnantDhavale/Agent_Guard" rel="noopener noreferrer"&gt;https://github.com/AnantDhavale/Agent_Guard&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The image is a weak Chat GPTized attempt at humor of mine, I hope you like it lol . Thank you. &lt;/p&gt;

</description>
      <category>ai</category>
      <category>oauth</category>
      <category>vibecoding</category>
      <category>programming</category>
    </item>
  </channel>
</rss>
