<?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.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>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>
