<?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: Mohith</title>
    <description>The latest articles on DEV Community by Mohith (@achu_mohith).</description>
    <link>https://dev.to/achu_mohith</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%2F3799582%2F386944b9-c1e0-4e2b-81a8-f4d7ff9db406.jpg</url>
      <title>DEV Community: Mohith</title>
      <link>https://dev.to/achu_mohith</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/achu_mohith"/>
    <language>en</language>
    <item>
      <title>Severance: An IAM Security Agent That Explains and Tests Its Fixes</title>
      <dc:creator>Mohith</dc:creator>
      <pubDate>Sun, 18 Oct 2026 15:53:50 +0000</pubDate>
      <link>https://dev.to/achu_mohith/severance-an-iam-security-agent-that-explains-and-tests-its-fixes-1ho0</link>
      <guid>https://dev.to/achu_mohith/severance-an-iam-security-agent-that-explains-and-tests-its-fixes-1ho0</guid>
      <description>&lt;p&gt;A security finding tells you something is exposed. It rarely tells you which relationship to change without disrupting legitimate access.&lt;/p&gt;

&lt;p&gt;In an IAM environment, access can pass through users, groups, roles, and shared policies. A permission that looks harmless in isolation can become dangerous when combined with several other relationships. Removing the first connection you find might block the exposure, but it might also break access that should remain.&lt;/p&gt;

&lt;p&gt;We built &lt;strong&gt;Severance&lt;/strong&gt; to investigate that problem for Graph Hacks, entering &lt;strong&gt;Track 01: Agents That Act on Connected Data&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Severance is an AI agent that investigates an IAM graph, explains the path behind an exposure, proposes a specific relationship to remove, and tests that change before asking for approval.&lt;/p&gt;

&lt;p&gt;The current implementation operates on an offline FalkorDB model. It does not change AWS permissions.&lt;/p&gt;

&lt;h2&gt;
  
  
  The graph supplies the evidence
&lt;/h2&gt;

&lt;p&gt;We gave the language model responsibility for selecting tools and explaining their results. Reachability, paths, scores, and proposed changes come from deterministic code and FalkorDB queries.&lt;/p&gt;

&lt;p&gt;The graph contains five node types:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Node&lt;/th&gt;
&lt;th&gt;What it represents&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Principal&lt;/td&gt;
&lt;td&gt;A user, group, service, or modeled untrusted identity&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Role&lt;/td&gt;
&lt;td&gt;An IAM role or an explicit permission-carrier adapter&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Policy&lt;/td&gt;
&lt;td&gt;A managed or inline permission policy&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Action&lt;/td&gt;
&lt;td&gt;An operation scoped to an assessed target&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Resource&lt;/td&gt;
&lt;td&gt;A seeded resource or a concrete permission request&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Relationships capture group membership, role access, role assumption, policy attachment, permitted actions, and their targets.&lt;/p&gt;

&lt;p&gt;One public-input investigation follows this chain:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Compromised user
  → MEMBER_OF → Group
  → HAS_ROLE → Group permission carrier
  → GRANTS → Policy
  → PERMITS → s3:PutObject
  → TARGETS → Assessed object permission
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The permission carrier adapts user and group policy attachments to our existing graph schema. It is not an additional AWS role.&lt;/p&gt;

&lt;p&gt;That distinction matters: a graph should make the source data easier to reason about without silently inventing cloud infrastructure.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where FalkorDB does the work
&lt;/h2&gt;

&lt;p&gt;FalkorDB is the primary operational context layer.&lt;/p&gt;

&lt;p&gt;Parameterized Cypher queries find the principals connected to a target through identity and permission relationships. For example, the reachability query follows the policy and action spine backward from a resource, then finds the identities that reach the relevant role:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight cypher"&gt;&lt;code&gt;&lt;span class="k"&gt;MATCH&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="py"&gt;res:&lt;/span&gt;&lt;span class="n"&gt;Resource&lt;/span&gt; &lt;span class="ss"&gt;{&lt;/span&gt;&lt;span class="py"&gt;id:&lt;/span&gt; &lt;span class="n"&gt;$rid&lt;/span&gt;&lt;span class="ss"&gt;})&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;-&lt;/span&gt;&lt;span class="ss"&gt;[&lt;/span&gt;&lt;span class="nc"&gt;:TARGETS&lt;/span&gt;&lt;span class="ss"&gt;]&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="py"&gt;act:&lt;/span&gt;&lt;span class="n"&gt;Action&lt;/span&gt;&lt;span class="ss"&gt;)&lt;/span&gt;
      &lt;span class="o"&gt;&amp;lt;-&lt;/span&gt;&lt;span class="ss"&gt;[&lt;/span&gt;&lt;span class="nc"&gt;:PERMITS&lt;/span&gt;&lt;span class="ss"&gt;]&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;:Policy&lt;/span&gt;&lt;span class="ss"&gt;)&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;-&lt;/span&gt;&lt;span class="ss"&gt;[&lt;/span&gt;&lt;span class="nc"&gt;:GRANTS&lt;/span&gt;&lt;span class="ss"&gt;]&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="py"&gt;role:&lt;/span&gt;&lt;span class="n"&gt;Role&lt;/span&gt;&lt;span class="ss"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;MATCH&lt;/span&gt; &lt;span class="n"&gt;path&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;
      &lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="py"&gt;p:&lt;/span&gt;&lt;span class="n"&gt;Principal&lt;/span&gt;&lt;span class="ss"&gt;)&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="ss"&gt;[&lt;/span&gt;&lt;span class="nc"&gt;:MEMBER_OF&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="n"&gt;HAS_ROLE&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="n"&gt;CAN_ASSUME&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="o"&gt;..&lt;/span&gt;&lt;span class="m"&gt;6&lt;/span&gt;&lt;span class="ss"&gt;]&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="n"&gt;role&lt;/span&gt;&lt;span class="ss"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;RETURN&lt;/span&gt; &lt;span class="n"&gt;p.id&lt;/span&gt; &lt;span class="k"&gt;AS&lt;/span&gt; &lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="ss"&gt;,&lt;/span&gt;
       &lt;span class="n"&gt;p.name&lt;/span&gt; &lt;span class="k"&gt;AS&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="ss"&gt;,&lt;/span&gt;
       &lt;span class="n"&gt;p.kind&lt;/span&gt; &lt;span class="k"&gt;AS&lt;/span&gt; &lt;span class="n"&gt;kind&lt;/span&gt;&lt;span class="ss"&gt;,&lt;/span&gt;
       &lt;span class="nf"&gt;min&lt;/span&gt;&lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;length&lt;/span&gt;&lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="ss"&gt;))&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt; &lt;span class="k"&gt;AS&lt;/span&gt; &lt;span class="n"&gt;hops&lt;/span&gt;&lt;span class="ss"&gt;,&lt;/span&gt;
       &lt;span class="nf"&gt;collect&lt;/span&gt;&lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="k"&gt;DISTINCT&lt;/span&gt; &lt;span class="n"&gt;act.name&lt;/span&gt;&lt;span class="ss"&gt;)&lt;/span&gt; &lt;span class="k"&gt;AS&lt;/span&gt; &lt;span class="n"&gt;via_actions&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We use &lt;code&gt;algo.SPpaths&lt;/code&gt; to obtain shortest exposure paths and sampled betweenness centrality to identify load-bearing roles and policies.&lt;/p&gt;

&lt;p&gt;The planner then evaluates candidate relationship removals using &lt;code&gt;GRAPH.COPY&lt;/code&gt;. Each candidate is tested on a disposable copy, allowing the same reachability queries to measure its effect.&lt;/p&gt;

&lt;p&gt;Without FalkorDB, Severance cannot establish the exposure path, rank candidate fixes, simulate their effects, or apply the selected graph change.&lt;/p&gt;

&lt;h2&gt;
  
  
  Finding a path is only the beginning
&lt;/h2&gt;

&lt;p&gt;Several different changes can block the same path. Choosing between them requires measuring what each change removes.&lt;/p&gt;

&lt;p&gt;Our planner considers edges on the shortest untrusted paths and ranks candidate cuts using:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;How many untrusted reachers remain.&lt;/li&gt;
&lt;li&gt;How many existing shortest paths are closed.&lt;/li&gt;
&lt;li&gt;How much other modeled access is lost.&lt;/li&gt;
&lt;li&gt;The broker score of the roles or policies involved.&lt;/li&gt;
&lt;li&gt;Relationship specificity and a stable final tie-break.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This gives us a declared, reproducible decision policy rather than asking the model to choose whichever fix sounds convincing.&lt;/p&gt;

&lt;p&gt;The selected fix is simulated again before approval. Severance shows the supporting path, before-and-after measurements, and any collateral impact.&lt;/p&gt;

&lt;p&gt;Approval produces a single-use token bound to the specific plan. The agent cannot apply a different edge deletion using that approval. Non-interactive investigations reject changes by default.&lt;/p&gt;

&lt;p&gt;An append-only audit trail records tool calls, proposals, simulations, approval decisions, and applied changes.&lt;/p&gt;

&lt;h2&gt;
  
  
  Moving beyond our own seeded scenarios
&lt;/h2&gt;

&lt;p&gt;We started with four deterministic scenarios containing known vulnerabilities. Those fixtures let us check exact paths and expected fixes.&lt;/p&gt;

&lt;p&gt;We also wanted to test whether Severance could work with data maintained outside our project.&lt;/p&gt;

&lt;p&gt;For that, we imported the public account-authorization example from &lt;a href="https://github.com/salesforce/cloudsplaining/blob/f2ed0ba2ddf6457143203d46971c91ba236b6597/examples/files/example.json" rel="noopener noreferrer"&gt;Salesforce’s Cloudsplaining repository&lt;/a&gt;. The pinned input contains:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;44 users.&lt;/li&gt;
&lt;li&gt;5 groups.&lt;/li&gt;
&lt;li&gt;78 roles.&lt;/li&gt;
&lt;li&gt;84 managed policies, alongside inline policies.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The original file, source revision, checksum, and upstream license are included in the repository.&lt;/p&gt;

&lt;p&gt;Each import assesses one concrete action/resource request and explicitly identifies a user or role session assumed to be compromised.&lt;/p&gt;

&lt;p&gt;One case examines the &lt;code&gt;OverprivilegedEC2&lt;/code&gt; role. Its attached &lt;code&gt;InsecurePolicy&lt;/code&gt; grants S3 write operations on wildcard resources. Severance traces that grant and proposes detaching the policy from the role.&lt;/p&gt;

&lt;p&gt;Another case follows a user’s group membership to a policy granting &lt;code&gt;s3:*&lt;/code&gt;. That investigation produces a five-edge explanation and proposes removing the selected user’s membership.&lt;/p&gt;

&lt;p&gt;These are externally sourced example records, not a verified production-account export. The assessed object ARN is a concrete example request, not evidence that an object exists.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the benchmark showed
&lt;/h2&gt;

&lt;p&gt;We defined six cases from the source records before running the engine:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Case&lt;/th&gt;
&lt;th&gt;Expected behavior&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Role-attached S3 write&lt;/td&gt;
&lt;td&gt;Find the path and detach the relevant policy&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Group-inherited S3 write&lt;/td&gt;
&lt;td&gt;Find the path and remove the selected membership&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Group-inherited object ACL access&lt;/td&gt;
&lt;td&gt;Find the path and remove the selected membership&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Rejected approval&lt;/td&gt;
&lt;td&gt;Preserve the graph&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Allow and deny in one policy&lt;/td&gt;
&lt;td&gt;Produce no positive exposure path or mutation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Allow and deny across attached policies&lt;/td&gt;
&lt;td&gt;Respect the explicit deny&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The final run passed &lt;strong&gt;30 out of 30 deterministic engine evaluations&lt;/strong&gt; and &lt;strong&gt;six out of six live Sonnet MCP-agent investigations&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Approved cases reduced the assessed untrusted reacher count from one to zero, with no collateral among the supported modeled principals. Each approved run deleted exactly one graph edge. Rejection and deny controls preserved the graph.&lt;/p&gt;

&lt;p&gt;The repository also has &lt;strong&gt;113 passing deterministic tests&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;These results establish that the selected workflows behave as expected on these fixtures. Six agent calls are not a production accuracy estimate.&lt;/p&gt;

&lt;p&gt;Earlier runs exposed resource-name lookup errors and a collision between concurrent benchmark graphs. We retained those results, fixed exact-name handling and graph isolation, and ran the final benchmark again.&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://github.com/mohi-devhub/Severance/blob/main/results/public_iam.md" rel="noopener noreferrer"&gt;benchmark report&lt;/a&gt; and &lt;a href="https://github.com/mohi-devhub/Severance/blob/main/results/public_iam.json" rel="noopener noreferrer"&gt;per-call evidence&lt;/a&gt; are available in the repository.&lt;/p&gt;

&lt;h2&gt;
  
  
  The most important limitation is authorization scope
&lt;/h2&gt;

&lt;p&gt;An IAM snapshot is not the complete AWS authorization environment.&lt;/p&gt;

&lt;p&gt;Our importer supports unconditional identity-policy allows and explicit denies, wildcard matching, default managed-policy versions, inline policies, and group inheritance.&lt;/p&gt;

&lt;p&gt;Relevant conditions, unsupported negations, policy variables, missing policy documents, and permissions boundaries produce an &lt;strong&gt;unknown&lt;/strong&gt; result. An unknown selected identity stops the import. Other unknown identities are reported and excluded from positive paths.&lt;/p&gt;

&lt;p&gt;The projection does not evaluate role-trust transitions, resource policies, organization controls, session policies, or actual resource existence.&lt;/p&gt;

&lt;p&gt;Consequently, a positive path means a supported identity-policy grant in the imported model. It does not prove that AWS would authorize a live request. Likewise, collateral measurements cover the assessed permission, not every permission or workload.&lt;/p&gt;

&lt;p&gt;Keeping those boundaries visible was an important part of building the project.&lt;/p&gt;

&lt;h2&gt;
  
  
  What we learned
&lt;/h2&gt;

&lt;p&gt;Resource scoping is essential. A globally shared &lt;code&gt;s3:GetObject&lt;/code&gt; node could accidentally connect a policy to unrelated resources. Action nodes need to preserve their target scope.&lt;/p&gt;

&lt;p&gt;Explicit denies also cannot be treated as ordinary graph edges alongside allows. Their effect must be resolved when constructing the supported permission projection.&lt;/p&gt;

&lt;p&gt;Finally, graph-copy simulation made the agent’s proposed actions reviewable. Instead of presenting a recommendation alone, Severance can show what changed in the model and what remained reachable.&lt;/p&gt;

&lt;p&gt;That is the interaction we wanted to build: an investigation whose evidence, decision policy, approval, and resulting change can all be inspected.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/mohi-devhub/Severance" rel="noopener noreferrer"&gt;Explore Severance on GitHub&lt;/a&gt;, including local setup instructions, the graph model, essential queries, and benchmark evidence.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://youtu.be/G21T4s6PrMk" rel="noopener noreferrer"&gt;View the working-project recording&lt;/a&gt;, covering both a seeded investigation and a public-snapshot investigation through approval and application.&lt;/p&gt;

</description>
      <category>falkordb</category>
      <category>ai</category>
      <category>security</category>
      <category>python</category>
    </item>
    <item>
      <title>SentinelLM - A Proxy Middleware for Safer, Observable LLM Systems</title>
      <dc:creator>Mohith</dc:creator>
      <pubDate>Sun, 01 Mar 2026 09:05:51 +0000</pubDate>
      <link>https://dev.to/achu_mohith/sentinellm-a-proxy-middleware-for-safer-observable-llm-systems-56a2</link>
      <guid>https://dev.to/achu_mohith/sentinellm-a-proxy-middleware-for-safer-observable-llm-systems-56a2</guid>
      <description>&lt;p&gt;Large Language Models are powerful.&lt;/p&gt;

&lt;p&gt;But most production AI apps today have a hidden problem:&lt;/p&gt;

&lt;p&gt;They directly connect their application to the model API —&lt;br&gt;
with no inspection layer in between.&lt;/p&gt;

&lt;p&gt;No runtime safety scoring.&lt;br&gt;
No structured logging of prompt/response risks.&lt;br&gt;
No observability into failures.&lt;/p&gt;

&lt;p&gt;That’s why I built &lt;strong&gt;SentinelLM&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;GitHub: &lt;a href="https://github.com/mohi-devhub/SentinelLM" rel="noopener noreferrer"&gt;https://github.com/mohi-devhub/SentinelLM&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  What Is SentinelLM?
&lt;/h2&gt;

&lt;p&gt;SentinelLM is an open-source middleware that sits between your application and any LLM backend.&lt;/p&gt;

&lt;p&gt;Instead of:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;App → OpenAI (or any LLM)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;App → SentinelLM → LLM Provider
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It acts as a proxy layer that intercepts every request and every response before it reaches the user.&lt;/p&gt;

&lt;p&gt;Think of it as a safety + quality firewall for LLMs.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why This Layer Matters
&lt;/h2&gt;

&lt;p&gt;LLMs process untrusted input.&lt;/p&gt;

&lt;p&gt;That includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;User prompts&lt;/li&gt;
&lt;li&gt;Retrieved documents (RAG pipelines)&lt;/li&gt;
&lt;li&gt;Tool outputs&lt;/li&gt;
&lt;li&gt;External API responses&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Without a control layer, your system is blindly trusting model outputs in real time.&lt;/p&gt;

&lt;p&gt;SentinelLM introduces:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Request evaluation&lt;/li&gt;
&lt;li&gt;Injection pattern detection&lt;/li&gt;
&lt;li&gt;Response scoring&lt;/li&gt;
&lt;li&gt;Hallucination checks&lt;/li&gt;
&lt;li&gt;Toxicity and policy violation flags&lt;/li&gt;
&lt;li&gt;Structured logging&lt;/li&gt;
&lt;li&gt;Real-time observability&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Not as a replacement for model safety —&lt;br&gt;
but as an additional enforcement layer.&lt;/p&gt;
&lt;h2&gt;
  
  
  Key Features
&lt;/h2&gt;
&lt;h3&gt;
  
  
  1. Interception &amp;amp; Evaluation Pipeline
&lt;/h3&gt;

&lt;p&gt;Every request passes through a chain of evaluators before reaching the model.&lt;/p&gt;

&lt;p&gt;Every response is analyzed before being returned to the user.&lt;/p&gt;
&lt;h3&gt;
  
  
  2. Pluggable Architecture
&lt;/h3&gt;

&lt;p&gt;Evaluators can be extended or modified depending on your application needs.&lt;/p&gt;

&lt;p&gt;Want stricter hallucination detection?&lt;br&gt;
Add a custom evaluator.&lt;/p&gt;
&lt;h3&gt;
  
  
  3. Drop-In Integration
&lt;/h3&gt;

&lt;p&gt;No major app changes required.&lt;/p&gt;

&lt;p&gt;Just point your LLM client to:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;http://localhost:8000/v1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;SentinelLM mirrors standard LLM API formats, making integration simple.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Logging &amp;amp; Observability
&lt;/h3&gt;

&lt;p&gt;All interactions are logged for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Debugging&lt;/li&gt;
&lt;li&gt;Risk auditing&lt;/li&gt;
&lt;li&gt;Analytics&lt;/li&gt;
&lt;li&gt;Monitoring&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This makes your AI system observable — not a black box.&lt;/p&gt;

&lt;h2&gt;
  
  
  Design Philosophy
&lt;/h2&gt;

&lt;p&gt;SentinelLM is built around one idea:&lt;/p&gt;

&lt;p&gt;LLMs should be treated as powerful but untrusted components.&lt;/p&gt;

&lt;p&gt;Just like we use:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;API gateways&lt;/li&gt;
&lt;li&gt;Reverse proxies&lt;/li&gt;
&lt;li&gt;Web application firewalls&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;AI systems need runtime inspection layers.&lt;/p&gt;

&lt;p&gt;Not because models are bad.&lt;/p&gt;

&lt;p&gt;But because production systems require accountability.&lt;/p&gt;

&lt;h2&gt;
  
  
  Who Is This For?
&lt;/h2&gt;

&lt;p&gt;SentinelLM is useful if you’re building:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AI assistants&lt;/li&gt;
&lt;li&gt;AI agents&lt;/li&gt;
&lt;li&gt;Copilots&lt;/li&gt;
&lt;li&gt;RAG-based systems&lt;/li&gt;
&lt;li&gt;Enterprise AI workflows&lt;/li&gt;
&lt;li&gt;Internal AI tooling&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Especially if:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You need audit trails&lt;/li&gt;
&lt;li&gt;You handle sensitive data&lt;/li&gt;
&lt;li&gt;You care about injection risks&lt;/li&gt;
&lt;li&gt;You want measurable safety metrics&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The Bigger Picture
&lt;/h2&gt;

&lt;p&gt;As AI systems move from demos to production infrastructure, we need:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Observability&lt;/li&gt;
&lt;li&gt;Defense-in-depth&lt;/li&gt;
&lt;li&gt;Runtime evaluation&lt;/li&gt;
&lt;li&gt;Transparent logging&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;SentinelLM is a step toward that future.&lt;/p&gt;

&lt;p&gt;It’s open-source, extensible, and built for real-world AI engineering.&lt;/p&gt;

&lt;p&gt;If you’re working on production AI systems, I’d love feedback.&lt;/p&gt;

&lt;p&gt;What safety or quality checks do you think every LLM system should have by default?&lt;/p&gt;

</description>
      <category>llm</category>
      <category>monitoring</category>
      <category>security</category>
      <category>showdev</category>
    </item>
  </channel>
</rss>
