<?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: Jeremy Brown</title>
    <description>The latest articles on DEV Community by Jeremy Brown (@jahboukie).</description>
    <link>https://dev.to/jahboukie</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%2F3433128%2Ffb6d14a1-0370-4412-86ee-0206aa806a66.png</url>
      <title>DEV Community: Jeremy Brown</title>
      <link>https://dev.to/jahboukie</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/jahboukie"/>
    <language>en</language>
    <item>
      <title>A Technical Deep-Dive for the Security-Conscious</title>
      <dc:creator>Jeremy Brown</dc:creator>
      <pubDate>Wed, 13 Aug 2025 18:36:01 +0000</pubDate>
      <link>https://dev.to/jahboukie/a-technical-deep-dive-for-the-security-conscious-4mn6</link>
      <guid>https://dev.to/jahboukie/a-technical-deep-dive-for-the-security-conscious-4mn6</guid>
      <description>&lt;p&gt;I've been using AI coding assistants like Copilot and Claude a lot, but I constantly hit the limits of their context windows, forcing me to re-explain my code over and over. I also work on projects with sensitive IP, so sending code to a third-party service is a non-starter.&lt;/p&gt;

&lt;p&gt;To solve this, I built AntiGoldfishMode: a CLI tool that gives your AI assistant a persistent, local-only memory of your codebase.&lt;/p&gt;

&lt;p&gt;It's built with a few core principles in mind:&lt;/p&gt;

&lt;p&gt;Local-First &amp;amp; Air-Gapped: All data is stored on your machine. The tool is designed to work entirely offline, and you can prove it with the agm prove-offline command.&lt;br&gt;
Traceable &amp;amp; Verifiable: Every action is logged, and all context exports can be cryptographically signed and checksummed, so you can verify the integrity of your data.&lt;br&gt;
No Telemetry: The tool doesn't collect any usage data.&lt;br&gt;
The core features are MIT-licensed and free to use. There are also some honor-system "Pro" features for advanced code analysis and stricter security controls, which are aimed at professional developers and teams.&lt;/p&gt;

&lt;p&gt;You can check out the source code on GitHub: &lt;a href="https://github.com/jahboukie/antigoldfish" rel="noopener noreferrer"&gt;https://github.com/jahboukie/antigoldfish&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The entire security posture is built on a zero-trust, local-first foundation. The tool assumes it's operating in a potentially untrusted environment and gives you the power to verify its behavior and lock down its capabilities.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Verifiable Zero-Egress
We claim the tool is air-gapped, but you shouldn't have to take our word for it.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;How it works: At startup, the CLI can monkey-patch Node.js's http and https modules. Any outbound request is intercepted. If the destination isn't on an explicit allowlist (e.g., localhost for a local vector server), the request is blocked, and the process exits with a non-zero status code.&lt;br&gt;
How to verify: Run agm prove-offline. This command attempts to make a DNS lookup to a public resolver. It will fail and print a confirmation that the network guard is active. This allows you to confirm at any time that no data is leaving your machine.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Supply Chain Integrity for Shared Context: The .agmctx Bundle
When you share context with a colleague, you need to be sure it hasn't been tampered with. The .agmctx bundle format is designed for this.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;When you run agm export-context --sign --zip:&lt;/p&gt;

&lt;p&gt;Checksums First: A checksums.json file is created, containing the SHA-256 hash of every file in the export (the manifest, the vector map, etc.).&lt;br&gt;
Cryptographic Signature: An Ed25519 key pair (generated and stored locally in keys) is used to sign the SHA-256 hash of the concatenated checksums. This signature is stored in signature.bin.&lt;br&gt;
Verification on Import: When agm import-context runs, it performs the checks in reverse order:&lt;br&gt;
It first verifies that the checksum of every file matches the value in checksums.json. If any file has been altered, it fails immediately with exit code 4 (Checksum Mismatch). This prevents wasting CPU cycles on a tampered package.&lt;br&gt;
If the checksums match, it then verifies the signature against the public key. If the signature is invalid, it fails with exit code 3 (Invalid Signature).&lt;br&gt;
This layered approach ensures both integrity and authenticity.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Policy-Driven Operation
The tool is governed by a policy.json file in your project's .antigoldfishmode directory. This file is your control panel for the tool's behavior.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Command Whitelisting: You can restrict which agm commands are allowed to run. For example, you could disable export-context entirely in a highly sensitive project.&lt;br&gt;
File Path Globs: Restrict the tool to only read from specific directories (e.g., src and docs, but not dist or node_modules).&lt;br&gt;
Enforced Signing Policies:&lt;br&gt;
"requireSignedContext": true: The tool will refuse to import any .agmctx bundle that isn't signed with a valid signature. This is a critical security control for teams.&lt;br&gt;
"forceSignedExports": true: This makes signing non-optional. Even if a user tries to export with --no-sign, the policy will override it and sign the export.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Transparent Auditing via Receipts and Journal
You should never have to wonder what the tool did.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If you find it useful, please consider sponsoring the project: &lt;a href="https://github.com/sponsors/jahboukie" rel="noopener noreferrer"&gt;https://github.com/sponsors/jahboukie&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I'd love to hear your feedback&lt;/p&gt;

&lt;p&gt;Receipts: Every significant command (export, import, index-code, etc.) generates a JSON receipt in receipts. This receipt contains a cryptographic hash of the inputs and outputs, timing data, and a summary of the operation.&lt;br&gt;
Journal: A journal.jsonl file provides a chronological, append-only log of every command executed and its corresponding receipt ID. This gives you a complete, verifiable audit trail of all actions performed by the tool.&lt;br&gt;
This combination of features is designed to provide a tool that is not only powerful but also transparent, verifiable, and secure enough for the most sensitive development environments.&lt;/p&gt;

</description>
      <category>opensource</category>
    </item>
  </channel>
</rss>
