<?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: Avinash Amudala</title>
    <description>The latest articles on DEV Community by Avinash Amudala (@avinash_amudala_8712ab560).</description>
    <link>https://dev.to/avinash_amudala_8712ab560</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%2F3736257%2F4b9ef170-10fd-4f27-b4d9-9416beda226e.jpg</url>
      <title>DEV Community: Avinash Amudala</title>
      <link>https://dev.to/avinash_amudala_8712ab560</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/avinash_amudala_8712ab560"/>
    <language>en</language>
    <item>
      <title>A local second brain for coding agents: context, memory and gates in Weftgate 0.2</title>
      <dc:creator>Avinash Amudala</dc:creator>
      <pubDate>Sun, 13 Sep 2026 06:56:56 +0000</pubDate>
      <link>https://dev.to/avinash_amudala_8712ab560/a-local-second-brain-for-coding-agents-context-memory-and-gates-in-weftgate-02-20ik</link>
      <guid>https://dev.to/avinash_amudala_8712ab560/a-local-second-brain-for-coding-agents-context-memory-and-gates-in-weftgate-02-20ik</guid>
      <description>&lt;p&gt;Coding agents need more than another large context dump. They need a small set of relevant source locations, decisions that are still current, and evidence that their changes connect to the project correctly.&lt;/p&gt;

&lt;p&gt;I maintain &lt;a href="https://github.com/Avinash-Amudala/weftgate" rel="noopener noreferrer"&gt;Weftgate&lt;/a&gt;. Version 0.2 puts those three jobs in one local Python package: understand, remember and verify.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fvws5gmc9gx06r16a1lfe.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fvws5gmc9gx06r16a1lfe.png" alt="Understand, remember, verify" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/Avinash-Amudala/weftgate/releases/download/v0.2.0/weftgate-demo.mp4" rel="noopener noreferrer"&gt;Watch the captioned 78-second demo&lt;/a&gt;. It uses real CLI output from an intentionally broken fixture, not a field benchmark.&lt;/p&gt;

&lt;h2&gt;
  
  
  Understand with bounded context
&lt;/h2&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;weftgate
&lt;span class="nb"&gt;cd&lt;/span&gt; /path/to/your/repo
weftgate setup &lt;span class="nt"&gt;--agents&lt;/span&gt; codex,claude,cursor,antigravity &lt;span class="nt"&gt;--hooks&lt;/span&gt; &lt;span class="nt"&gt;--instructions&lt;/span&gt;
weftgate card &lt;span class="s2"&gt;"POST /orders"&lt;/span&gt; &lt;span class="nt"&gt;--budget&lt;/span&gt; 1200
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Use a route that exists in your project. The card contains source locations and static relationships between declarations, dependencies, env reads and route handlers. It does not load file bodies or pretend to be a runtime call graph. Ambiguous names and missing capabilities remain visible.&lt;/p&gt;

&lt;p&gt;The default response is capped at 6,000 UTF-8 JSON bytes, including its accounting fields. That is an estimate of 1,500 tokens, not a guarantee for every model tokenizer. The ledger records actual payload bytes and omissions. It does not invent a savings percentage.&lt;/p&gt;

&lt;h2&gt;
  
  
  Remember decisions, then recheck their sources
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;weftgate remember &lt;span class="s2"&gt;"Order idempotency"&lt;/span&gt; &lt;span class="s2"&gt;"Keep duplicate requests idempotent."&lt;/span&gt; &lt;span class="nt"&gt;--file&lt;/span&gt; app/orders.py
weftgate recall &lt;span class="s2"&gt;"orders"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The path must exist. Weftgate stores an explicit note in a repository-scoped local SQLite database. On recall it checks the cited file hashes. If a file changes or vanishes, the note is hidden by default. The original hashes stay intact until you review and explicitly replace the note.&lt;/p&gt;

&lt;p&gt;An unchanged file does not prove the saved prose true. Notes are untrusted context, not higher-priority instructions. There is no automatic transcript capture, embedding download or API key. This mnemo-derived lexical notebook is included in the public package; the separate private companion is not required.&lt;/p&gt;

&lt;h2&gt;
  
  
  Verify connections and hand off evidence
&lt;/h2&gt;

&lt;p&gt;The gate checks env names, Python and Node imports, and static FastAPI or Starlette references. &lt;code&gt;DATABSE_URL&lt;/code&gt; can be rejected against a declared &lt;code&gt;DATABASE_URL&lt;/code&gt;; &lt;code&gt;os.environ[key]&lt;/code&gt; remains advisory when its key cannot be resolved statically.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight toml"&gt;&lt;code&gt;&lt;span class="nn"&gt;[weftgate.workflow]&lt;/span&gt;
&lt;span class="py"&gt;commands&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s"&gt;"python -m pytest -q"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;weftgate checkpoint &lt;span class="nt"&gt;--run&lt;/span&gt; &lt;span class="nt"&gt;--require-ready&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A checkpoint checks the current changed code, including staged and untracked source files. With explicit execution enabled it observes configured, allowlisted test commands. It distinguishes a proven failure, incomplete evidence, review findings, and a repository that changed while checking. Ready means these checks and commands passed against an unchanged file fingerprint. It does not certify the entire app.&lt;/p&gt;

&lt;h2&gt;
  
  
  Use the same tools across editors
&lt;/h2&gt;

&lt;p&gt;CLI and MCP use the same implementation. Setup writes project configuration and workflow rules for Codex, Claude Code, Cursor and Antigravity. Completion hooks request bounded repair passes when a proven failure remains. Claude also has a pre-edit adapter for supported Edit/Write/MultiEdit operations.&lt;/p&gt;

&lt;p&gt;Trust and enable hooks in each editor. Codex uses &lt;code&gt;/hooks&lt;/code&gt;. The other new adapters run after writes, and no local hook is a complete enforcement boundary. Keep the GitHub Action required in branch protection when merges must be gated.&lt;/p&gt;

&lt;p&gt;Validation includes 199 local tests, about 91% line coverage, CLI/MCP parity, stale-memory regressions and isolated package installation. See the &lt;a href="https://github.com/Avinash-Amudala/weftgate/blob/main/docs/VALIDATION.md" rel="noopener noreferrer"&gt;validation record&lt;/a&gt; and &lt;a href="https://github.com/Avinash-Amudala/weftgate/blob/main/docs/AGENTS-INTEGRATION.md" rel="noopener noreferrer"&gt;activation guide&lt;/a&gt;. Every editor build has not been interactively certified.&lt;/p&gt;

&lt;p&gt;Try it on a project you know well. I would value reproducible reports about confusing setup, useful context and false blocks. &lt;a href="https://github.com/Avinash-Amudala/weftgate" rel="noopener noreferrer"&gt;Source and quickstart&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Disclosure: this article and launch assets were prepared with AI assistance. Code behavior is backed by the linked tests and reproducible fixture evidence.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>devtools</category>
      <category>mcp</category>
      <category>python</category>
      <category>showdev</category>
    </item>
    <item>
      <title>Catch broken environment, import, and route connections with Weftgate</title>
      <dc:creator>Avinash Amudala</dc:creator>
      <pubDate>Sun, 13 Sep 2026 05:51:19 +0000</pubDate>
      <link>https://dev.to/avinash_amudala_8712ab560/catch-broken-environment-import-and-route-connections-with-weftgate-2h3p</link>
      <guid>https://dev.to/avinash_amudala_8712ab560/catch-broken-environment-import-and-route-connections-with-weftgate-2h3p</guid>
      <description>&lt;p&gt;I maintain Weftgate, an open-source verification gate for coding agents. It checks environment-variable reads, dependency imports, and FastAPI route references against contracts in the repository. It runs locally through a CLI, MCP, hooks, and CI.&lt;/p&gt;

&lt;p&gt;The core has no runtime dependencies and makes no network calls on its default path. It is an early static analyzer with explicit limits. A passing gate does not prove that an application works.&lt;/p&gt;

&lt;h2&gt;
  
  
  Start with a small, reproducible case
&lt;/h2&gt;

&lt;p&gt;Use Python 3.10 or later in a fresh directory:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;mkdir &lt;/span&gt;weftgate-example
&lt;span class="nb"&gt;cd &lt;/span&gt;weftgate-example
python3 &lt;span class="nt"&gt;-m&lt;/span&gt; venv .venv
&lt;span class="nb"&gt;.&lt;/span&gt; .venv/bin/activate
pip &lt;span class="nb"&gt;install &lt;/span&gt;weftgate
&lt;span class="nb"&gt;printf&lt;/span&gt; &lt;span class="s1"&gt;'DATABASE_URL=\n'&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; .env.example
&lt;span class="nb"&gt;printf&lt;/span&gt; &lt;span class="s1"&gt;'import os\nurl = os.environ["DATABSE_URL"]\n'&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; app.py
weftgate check app.py
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The environment oracle compares the read with &lt;code&gt;.env.example&lt;/code&gt;. The misspelled hard claim rejects, exits 1, and suggests &lt;code&gt;DATABASE_URL&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Correct the reference and check again:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;printf&lt;/span&gt; &lt;span class="s1"&gt;'import os\nurl = os.environ["DATABASE_URL"]\n'&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; app.py
weftgate check app.py
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This time the reference resolves. Now try a computed key:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;printf&lt;/span&gt; &lt;span class="s1"&gt;'import os\nkey = "DATABASE_URL"\nurl = os.environ[key]\n'&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; app.py
weftgate check app.py
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That returns &lt;code&gt;review&lt;/code&gt;, with exit code 0. The environment parser does not establish the computed key's value, so the finding stays advisory.&lt;/p&gt;

&lt;p&gt;These are constructed demonstrations, not field accuracy benchmarks.&lt;/p&gt;

&lt;h2&gt;
  
  
  Follow the connections across files
&lt;/h2&gt;

&lt;p&gt;The &lt;a href="https://github.com/Avinash-Amudala/weftgate/releases/download/v0.1.1/weftgate-demo-motion.mp4" rel="noopener noreferrer"&gt;58-second demo&lt;/a&gt; traces three intentional mistakes in a fixture:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Reference&lt;/th&gt;
&lt;th&gt;Repository evidence&lt;/th&gt;
&lt;th&gt;Suggested correction&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;import requestz&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Dependency declarations&lt;/td&gt;
&lt;td&gt;&lt;code&gt;requests&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;os.environ["DATABSE_URL"]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;.env.example&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;DATABASE_URL&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Route handler &lt;code&gt;helth&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;Defined/imported handlers&lt;/td&gt;
&lt;td&gt;&lt;code&gt;health&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;a href="https://github.com/Avinash-Amudala/weftgate/blob/main/docs/DEMO.md" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F17reu68pc3wep6krcggo.gif" alt="Animated evidence trace and repair" width="720" height="405"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can reproduce the broader mutation fixture locally:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;weftgate &lt;span class="nb"&gt;eval &lt;/span&gt;mutate &lt;span class="nt"&gt;--fixture&lt;/span&gt; &lt;span class="nt"&gt;--seed&lt;/span&gt; 13
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The harness measures detection, blocking, and usable suggestions separately. Its fixture score is not a claim about arbitrary repositories.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why the uncertain cases matter
&lt;/h2&gt;

&lt;p&gt;An import absent from a manifest can be transitive. A router produced by a factory can register paths that a static scan cannot enumerate. A missing index cannot establish absence. These cases must review or be reported as unverifiable.&lt;/p&gt;

&lt;p&gt;An &lt;code&gt;accept&lt;/code&gt; result only describes the extracted claims. Continue running your tests, type checker, security checks, and normal review.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it on an existing project
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;weftgate doctor
weftgate audit
weftgate check app/main.py
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;doctor&lt;/code&gt; explains which contracts are available. Environment reads supplied externally should be documented in your declaration source. Python and Node dependency resolution can depend on workspace and runtime configuration, so review findings in context.&lt;/p&gt;

&lt;p&gt;For a pull request:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Verify connections&lt;/span&gt;
&lt;span class="na"&gt;on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;pull_request&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
&lt;span class="na"&gt;permissions&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;contents&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;read&lt;/span&gt;
&lt;span class="na"&gt;jobs&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;verify&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;runs-on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ubuntu-latest&lt;/span&gt;
    &lt;span class="na"&gt;steps&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;actions/checkout@v5&lt;/span&gt;
        &lt;span class="na"&gt;with&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;fetch-depth&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Avinash-Amudala/weftgate@v0.1.1&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;MCP clients can start &lt;code&gt;weftgate mcp&lt;/code&gt; from the target repository. The tools and CLI call the same gate functions; no separate model API or server account is required.&lt;/p&gt;

&lt;h2&gt;
  
  
  Help improve the boundaries
&lt;/h2&gt;

&lt;p&gt;The most useful feedback is a minimal example of a false block or a missing contract. There are also contribution issues for workspace fixtures and a first-project walkthrough.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/Avinash-Amudala/weftgate" rel="noopener noreferrer"&gt;Repository and installation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Avinash-Amudala/weftgate/blob/main/docs/DEMO.md" rel="noopener noreferrer"&gt;Demo transcript and reproducible evidence&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Avinash-Amudala/weftgate/issues/new/choose" rel="noopener noreferrer"&gt;Report a reproducible issue&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Disclosure: this walkthrough was generated with AI and checked against the project's reproducible fixtures. It does not claim independent benchmark results.&lt;/p&gt;

</description>
      <category>python</category>
      <category>testing</category>
      <category>showdev</category>
      <category>devtools</category>
    </item>
    <item>
      <title>Why Your AI Agent Has Root Access to Everything (And How to Fix It in 3 Lines of Python)</title>
      <dc:creator>Avinash Amudala</dc:creator>
      <pubDate>Thu, 16 Apr 2026 23:52:35 +0000</pubDate>
      <link>https://dev.to/avinash_amudala_8712ab560/why-your-ai-agent-has-root-access-to-everything-and-how-to-fix-it-in-3-lines-of-python-476d</link>
      <guid>https://dev.to/avinash_amudala_8712ab560/why-your-ai-agent-has-root-access-to-everything-and-how-to-fix-it-in-3-lines-of-python-476d</guid>
      <description>&lt;p&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%2Fdmaynm5l0rdbfdublfb1.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%2Fdmaynm5l0rdbfdublfb1.png" alt=" " width="800" height="447"&gt;&lt;/a&gt;I’ve been building AI agents at work and kept running into the same problem: every framework lets agents call any registered tool with zero safety checks. An agent with database access can run &lt;code&gt;DROP TABLE users&lt;/code&gt; and nothing stops it.&lt;/p&gt;

&lt;p&gt;So I built &lt;strong&gt;AgentShield-FW&lt;/strong&gt;, a runtime firewall that intercepts every tool call and enforces configurable safety policies before execution.&lt;/p&gt;

&lt;p&gt;• GitHub: &lt;a href="https://github.com/Avinash-Amudala/AgentShield" rel="noopener noreferrer"&gt;https://github.com/Avinash-Amudala/AgentShield&lt;/a&gt;&lt;br&gt;
• PyPI: &lt;code&gt;pip install agentshield-fw&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The simplest usage:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;`import agentshield&lt;br&gt;
shield = agentshield.Shield()&lt;/p&gt;

&lt;p&gt;&lt;a class="mentioned-user" href="https://dev.to/shield"&gt;@shield&lt;/a&gt;.protect&lt;br&gt;
def execute_sql(query: str) -&amp;gt; str:&lt;br&gt;
    return db.execute(query)&lt;/p&gt;

&lt;p&gt;Agent tries: execute_sql("DROP TABLE users")&lt;br&gt;
→ Blocked by AgentShield: Destructive SQL detected (ASI02)`&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What makes it different:&lt;/strong&gt;&lt;br&gt;
• Zero required dependencies — core runs on Python stdlib only&lt;br&gt;
• 40+ pre-built rules covering SQL injection, path traversal, credential leaks, prompt injection, shell commands, rate limiting&lt;br&gt;
• Mapped to OWASP Agentic Security Top 10 (ASI01-ASI10)&lt;br&gt;
• Works with LangChain, MCP, CrewAI, OpenAI SDK, or any Python function&lt;br&gt;
• Sub-millisecond latency (&amp;lt;1ms p99)&lt;br&gt;
• 94.56% test coverage&lt;br&gt;
• Hash-chained audit logging for tamper detection&lt;/p&gt;

&lt;p&gt;Other projects called "AgentShield" are static scanners (analyze config files). This is a runtime firewall (intercepts live tool calls). WAF vs SAST.&lt;/p&gt;

&lt;p&gt;MIT license. Python 3.10-3.13.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>python</category>
      <category>security</category>
      <category>opensource</category>
    </item>
  </channel>
</rss>
