<?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>Forem: Bewaker AI</title>
    <description>The latest articles on Forem by Bewaker AI (@bewakerai).</description>
    <link>https://forem.com/bewakerai</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%2F3552256%2F7c27ec2d-bb19-46d7-9d35-d093d2c0d310.png</url>
      <title>Forem: Bewaker AI</title>
      <link>https://forem.com/bewakerai</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/bewakerai"/>
    <language>en</language>
    <item>
      <title>Building Cryptographic Guardrails for AI-Assisted Coding</title>
      <dc:creator>Bewaker AI</dc:creator>
      <pubDate>Tue, 07 Oct 2025 21:32:53 +0000</pubDate>
      <link>https://forem.com/bewakerai/building-cryptographic-guardrails-for-ai-assisted-coding-ong</link>
      <guid>https://forem.com/bewakerai/building-cryptographic-guardrails-for-ai-assisted-coding-ong</guid>
      <description>&lt;h2&gt;
  
  
  Bewaker: local-first cryptographic guardrails for critical code (VS Code + git hooks)
&lt;/h2&gt;

&lt;p&gt;AI coding assistants are great! That is until a tiny diff lands in the wrong place. For things like &lt;strong&gt;infrastructure-as-code&lt;/strong&gt;, &lt;strong&gt;authorization paths&lt;/strong&gt;, or &lt;strong&gt;payment logic&lt;/strong&gt;, even subtle changes can carry real risk.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bewaker&lt;/strong&gt; is an open-source, local-first tool that helps you lock down the sensitive parts of your repo and &lt;strong&gt;prove&lt;/strong&gt; they weren’t changed without an explicit unlock. It runs &lt;strong&gt;inside VS Code&lt;/strong&gt; and enforces integrity with &lt;strong&gt;git pre-commit/pre-push hooks&lt;/strong&gt;. No backend, no telemetry; keys and audit stay on your machine. &lt;strong&gt;Apache-2.0&lt;/strong&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Website: &lt;a href="https://www.bewaker.ai" rel="noopener noreferrer"&gt;https://www.bewaker.ai&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;GitHub: &lt;a href="https://github.com/bewakerai/bewaker" rel="noopener noreferrer"&gt;https://github.com/bewakerai/bewaker&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Marketplace: &lt;a href="https://marketplace.visualstudio.com/items?itemName=BewakerAI.Bewaker" rel="noopener noreferrer"&gt;https://marketplace.visualstudio.com/items?itemName=BewakerAI.Bewaker&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  What it does
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Policy-driven protection&lt;/strong&gt; — define a simple YAML policy that lists what to protect.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cryptographic lockfile&lt;/strong&gt; — Bewaker writes a Merkle-rooted, &lt;strong&gt;Ed25519-signed&lt;/strong&gt; lock that represents the expected state.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Editor + hooks enforcement&lt;/strong&gt; — VS Code surfaces guardrails as you edit; &lt;strong&gt;pre-commit&lt;/strong&gt;/&lt;strong&gt;pre-push&lt;/strong&gt; hooks block unapproved changes.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tamper-evident audit&lt;/strong&gt; — events are chained locally so you have a verifiable trail.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Works alongside Copilot/Cursor—goal is &lt;strong&gt;secure AI-assisted dev&lt;/strong&gt;, not blocking AI.&lt;/p&gt;




&lt;h2&gt;
  
  
  Quickstart (90 seconds)
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Install the VS Code extension&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Marketplace: &lt;a href="https://marketplace.visualstudio.com/items?itemName=BewakerAI.Bewaker" rel="noopener noreferrer"&gt;https://marketplace.visualstudio.com/items?itemName=BewakerAI.Bewaker&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Create a policy&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
In VS Code, open the Command Palette and run &lt;strong&gt;"Bewaker: Recommend Policy"&lt;/strong&gt; (or create &lt;code&gt;.guardpolicy.yml&lt;/code&gt;).&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="c1"&gt;# .guardpolicy.yml (minimal example)&lt;/span&gt;
&lt;span class="na"&gt;protect&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;path&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;infra/**"&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;path&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;src/auth/**"&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;path&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;.github/workflows/**"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Lock the repository&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Command Palette → &lt;strong&gt;"Bewaker: Lock Repository"&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
This writes &lt;code&gt;.guardlock&lt;/code&gt; (Merkle + Ed25519) to represent the expected state.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Install git hooks&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Command Palette → &lt;strong&gt;"Bewaker: Install Git Hooks"&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
This adds pre-commit / pre-push verification.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Try it&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Edit a protected file and attempt a commit. The hook will block it until you &lt;strong&gt;explicitly unlock&lt;/strong&gt; in the extension.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  How it works
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Policy → &lt;code&gt;.guardpolicy.yml&lt;/code&gt;&lt;/strong&gt; tells Bewaker which files/paths are considered sensitive.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Lockfile → &lt;code&gt;.guardlock&lt;/code&gt;&lt;/strong&gt; stores a Merkle root and signature so drift is detectable and the lock itself is tamper-evident.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hooks → pre-commit / pre-push&lt;/strong&gt; recompute hashes for protected paths and compare against the lockfile before a commit/push is allowed.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Audit → local JSONL&lt;/strong&gt; keeps an append-only, tamper-evident record of locks/unlocks/verification events.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Local-first by design: &lt;strong&gt;no server, no telemetry, keys stay on your machine.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  How this differs from CODEOWNERS
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;CODEOWNERS&lt;/code&gt; is great for &lt;strong&gt;review&lt;/strong&gt; workflows, but it triggers &lt;strong&gt;during PR&lt;/strong&gt;, after a commit exists.&lt;br&gt;&lt;br&gt;
Bewaker focuses on &lt;strong&gt;pre-commit&lt;/strong&gt;, on the developer’s machine. It’s a &lt;strong&gt;guardrail while editing&lt;/strong&gt;, not just during review.&lt;/p&gt;

&lt;p&gt;Use both: CODEOWNERS for review gates; Bewaker for local cryptographic integrity.&lt;/p&gt;




&lt;h2&gt;
  
  
  Threat model &amp;amp; limitations
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Local enforcement&lt;/strong&gt;: disables “it was the bot” surprises; hooks still run even if the editor is bypassed.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No network&lt;/strong&gt;: reduces data exfil/telemetry risks.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Language-agnostic&lt;/strong&gt;: path/policy-based across text files.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Known gaps / roadmap:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Heuristics are intentionally simple today; “adaptive/ML-ready” risk scoring is in progress.
&lt;/li&gt;
&lt;li&gt;Org-wide controls (e.g., server-side pre-receive checks) and multi-approver unlocks are part of a future &lt;strong&gt;Team Edition&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Call for feedback
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Does the &lt;strong&gt;UX&lt;/strong&gt; make sense?
&lt;/li&gt;
&lt;li&gt;Any obvious &lt;strong&gt;bypasses&lt;/strong&gt; or threat-model blind spots?
&lt;/li&gt;
&lt;li&gt;What policy shapes would make this easier to adopt in monorepos?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If this scratches an itch for your team, I’d love to hear how you’d extend it.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;GitHub issues: &lt;a href="https://github.com/bewakerai/bewaker/issues" rel="noopener noreferrer"&gt;https://github.com/bewakerai/bewaker/issues&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Website: &lt;a href="https://www.bewaker.ai" rel="noopener noreferrer"&gt;https://www.bewaker.ai&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  Appendix: tiny policy + what happens
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="c1"&gt;# .guardpolicy.yml&lt;/span&gt;
&lt;span class="na"&gt;protect&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;path&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;infra/**"&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;path&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;src/auth/**"&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;path&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;.github/workflows/**"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Save the file, Lock Repository, Install Git Hooks.&lt;/li&gt;
&lt;li&gt;Change infra/terraform.tf and try git commit.&lt;/li&gt;
&lt;li&gt;The pre-commit hook verifies the hash against .guardlock and rejects the commit until you unlock in VS Code (events show up in the local audit).&lt;/li&gt;
&lt;/ul&gt;

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