<?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: auto_majicly</title>
    <description>The latest articles on DEV Community by auto_majicly (@xenocoregiger31).</description>
    <link>https://dev.to/xenocoregiger31</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%2F4008564%2Fa95de33f-0c01-48e4-b042-7a3b29ff00ec.png</url>
      <title>DEV Community: auto_majicly</title>
      <link>https://dev.to/xenocoregiger31</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/xenocoregiger31"/>
    <language>en</language>
    <item>
      <title>From Tool-Runner to Decision Engine: Upgrading an Autonomous Security Agent's Harness</title>
      <dc:creator>auto_majicly</dc:creator>
      <pubDate>Sat, 18 Jul 2026 15:28:12 +0000</pubDate>
      <link>https://dev.to/xenocoregiger31/from-tool-runner-to-decision-engine-upgrading-an-autonomous-security-agents-harness-5380</link>
      <guid>https://dev.to/xenocoregiger31/from-tool-runner-to-decision-engine-upgrading-an-autonomous-security-agents-harness-5380</guid>
      <description>&lt;p&gt;Yesterday I did something that sounds like paperwork and is actually the whole point: I&amp;nbsp;graduated&amp;nbsp;a batch of next-gen modules out of a staging package and into the running harness of HALO, the local, autonomous offensive-security agent I've been building. "Graduated" is the operative word. These weren't new files landing in a repo — they were designs that had earned their way from a shelved&amp;nbsp;halo-nextgen/&amp;nbsp;package into the live agent loop, each one wired to the parts of the system it was always meant to touch.&lt;br&gt;
The interesting part isn't the diff. It's what the batch was&amp;nbsp;for. Taken together, these upgrades push HALO across a line I've been circling for months: from a&amp;nbsp;tool-runner&amp;nbsp;to a&amp;nbsp;decision engine.&lt;/p&gt;

&lt;p&gt;The reframe&lt;/p&gt;

&lt;p&gt;A tool-runner is what most "AI hacking" demos actually are. You give it a target, it runs nmap, it runs sqlmap, it greps the output for the word "found," and it reports back. It's a shell with a language model taped to the front. It doesn't know whether the thing it found is exploitable&amp;nbsp;here, in&amp;nbsp;this&amp;nbsp;environment, and it cheerfully forgets everything the moment the session ends.&lt;br&gt;
The characterized goal for HALO is the opposite of that: a fully-local operator that decides which exposures are genuinely exploitable in a given environment, proves it with evidence, and never re-learns the same dead end. Every module in yesterday's batch is measured against that one sentence. Here's the before/after that the redesign is chasing:&lt;/p&gt;

&lt;p&gt;Old loop - Next-gen loop&lt;/p&gt;

&lt;p&gt;Goal framing    static tool-manual prompt   goal-first ("decide, don't just run")&lt;br&gt;
Success detection   substring grep ("found")    evidence-based validator&lt;br&gt;
Memory  negative-only; deletes successes    tiered: negative + positive + environmental&lt;br&gt;
Engagement state    re-derived every call   persistent case file (read/write)&lt;br&gt;
Prompt injection    tool output re-enters raw   trust-tier guard on every output&lt;br&gt;
Autonomy    all-or-nothing  per-action-class policy&lt;br&gt;
Substring grep versus an evidence-based validator is the entire distance between a script and an operator. Everything else is in service of making that judgment reliable, safe, and repeatable.&lt;br&gt;
The spine comes first&lt;br&gt;
You don't get to build an autonomous offensive agent and bolt safety on at the end. The arsenal does genuinely sensitive work, and the difference between "professional weapon" and "liability" is entirely one layer: the engagement spine. So it's the first thing every action passes through, not the last.&lt;br&gt;
The spine gives four guarantees, and they're enforced by construction rather than by good intentions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Authorization&amp;nbsp;— you cannot construct an engagement context without a written-approval reference and a non-empty scope. Miss either, and it throws at construction time. There is no "just this once."&lt;/li&gt;
&lt;li&gt;Scope guard&amp;nbsp;— every target is matched against an allowlist of hosts and CIDRs. Out of scope is refused and logged.&lt;/li&gt;
&lt;li&gt;Kill switch&amp;nbsp;— one call halts all further authorized action mid-run.&lt;/li&gt;
&lt;li&gt;Chain of custody&amp;nbsp;— every decision, authorized or blocked, is appended to a custody log you can export for the client.
One gate answers one question —&amp;nbsp;is this actor allowed to take this class of action against this target, right now?&amp;nbsp;— and it answers "yes" only when the run isn't halted, the target is in scope, and the autonomy policy permits it. Either way, it writes down what it decided. An offensive agent that can't produce that log has no business in front of a client.
Three upgrades, at the architecture level
With the spine in place, three of yesterday's modules are worth describing — in terms of shape, not offensive specifics.
Self-audit: the agent refusing to rot.&amp;nbsp;You run an agent like this on a security distro that ships tool upgrades constantly, while the model labs ship technique advances on their own cadence. Left alone, any agent decays: its tools fall behind, an upgrade silently breaks one before an engagement, and its architecture drifts toward obsolete. The self-audit module is HALO turning its eyes inward on a schedule — checking tool currency, arsenal integrity (did an upgrade&amp;nbsp;break&amp;nbsp;something?), framework currency, and its own module health. It rolls up to one verdict: current, updates-available, or attention-needed.
The deliberate line here matters more than the checks.&amp;nbsp;Tools&amp;nbsp;may auto-update under policy — bumping a scanner is low-risk and reversible.&amp;nbsp;Architecture&amp;nbsp;is never auto-changed. Frontier advances are surfaced as a backlog for me to approve, and that boundary is enforced in code: the update path touches tools only; backlog items have no auto-apply route. A security agent that silently re-architects itself is a liability, full stop.
Debug mode: separate, bridged, sandboxed.&amp;nbsp;A debugger's whole job is to freely write and run code. A security loop's whole job is to gate everything. Those instincts are opposites, so the design keeps them apart. Debug mode is a standalone mode behind an explicit toggle, off by default, with its own state — it doesn't run inside the attack loop or share its gating. But the engagement can still&amp;nbsp;borrow&amp;nbsp;it mid-run to repair a broken proof-of-concept, without flipping the whole system into debug mode. And every execution goes through a sandbox: no sandbox, no run, enforced in code. Writing-and-running code is the same risk class as the arsenal's most sensitive actions, and it's treated that way.
Continuous attack-surface awareness.&amp;nbsp;The scanner that keeps a live picture of a target's exposure draws its authorization from exactly one place — the engagement scope. There's no second definition of "what am I allowed to touch" to drift out of sync. Findings flow into a structured inventory the report builder can read later. Single-sourcing authorization sounds like a footnote; it's the difference between one guardrail and two guardrails that disagree.
The honest part
Here's where I'll disappoint anyone hoping for self-evolving-AI mythology: the "stay current with the frontier" capability is&amp;nbsp;semi-automated, not magic.&amp;nbsp;When online, a feed pulls changelogs and release notes, diffs them against what HALO already uses, and produces a prioritized backlog. Then&amp;nbsp;I&amp;nbsp;decide what to adopt. The agent can be told to implement an approved item; it does not perform structural self-surgery on its own. That's not a limitation I'm apologizing for — it's the design. Unsupervised self-modification in an offensive tool is precisely the thing you don't want.
Every collaborator in the loop — model client, tool executor, control oracle, approver — is injected, which means the whole thing runs and is testable offline with stubs. The next-gen loop exercises end to end without touching a network, including a simulated prompt-injection attempt in tool output that gets caught and quarantined. If it can't be verified on my laptop with no target in sight, it isn't done.
The takeaway
A while back I wrote up Jason Haddix's forecast for where autonomous pentesting is heading: a small pool of elite humans on genuinely novel work, and a much larger layer of continuous agents absorbing the well-documented bug classes. Nothing in yesterday's batch changes that picture — it's an attempt to build the&amp;nbsp;responsible&amp;nbsp;version of the second layer. An agent that decides instead of greps, that starts from authorization instead of ending at it, that keeps itself current without letting itself off the leash.
The worst-case use of a tool like this is real. But worst-case is also a spec: the same reasoning that lets you imagine the misuse is the reasoning that builds the guardrails before it's a live problem. That's the work. Purposeful risk analysis, hard boundaries in code, and a chain of custody for every decision — not panic, and not hype.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ai</category>
      <category>cybersecurity</category>
      <category>python</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Anatomy of a Pentest Dropbox: How Remote Internal Assessments Actually Work</title>
      <dc:creator>auto_majicly</dc:creator>
      <pubDate>Mon, 13 Jul 2026 13:16:16 +0000</pubDate>
      <link>https://dev.to/xenocoregiger31/anatomy-of-a-pentest-dropbox-how-remote-internal-assessments-actually-work-3hoi</link>
      <guid>https://dev.to/xenocoregiger31/anatomy-of-a-pentest-dropbox-how-remote-internal-assessments-actually-work-3hoi</guid>
      <description>&lt;p&gt;When people imagine a penetration test, they picture someone on-site — badge on a lanyard, laptop open in a conference room. That still happens, but a large share of internal assessments now run remotely, and the device that makes it possible is the humble dropbox. It is one of the more elegant ideas in the field, and worth understanding whether you run these engagements or defend against the techniques they simulate.&lt;/p&gt;

&lt;p&gt;The core idea&lt;/p&gt;

&lt;p&gt;A dropbox is a small computer that lives, temporarily, inside the target's network. The client plugs it into an Ethernet port and power; from there it becomes the tester's foothold on the inside. This lets an internal assessment — the scenario where we simulate an attacker who is already past the perimeter — happen without a person physically on-site for the entire engagement window.&lt;/p&gt;

&lt;p&gt;The hardware is deliberately unremarkable: a Raspberry Pi for a cheap, disposable unit; an Intel NUC when the work needs real horsepower; or a purpose-built commercial appliance. Whatever the form factor, it runs a standard offensive toolkit and does its work quietly.&lt;/p&gt;

&lt;p&gt;The clever part: it calls you&lt;/p&gt;

&lt;p&gt;The instinct is to imagine connecting into the dropbox. In practice, the client's firewall blocks inbound connections — that is its job. So the dropbox does the opposite: it makes an outbound connection to a server the tester controls, and the tester rides that tunnel back in.&lt;/p&gt;

&lt;p&gt;This works because firewalls are strict about traffic coming in and permissive about traffic going out. Employees browse the web all day, so outbound connections look normal. A well-built dropbox blends into that traffic — a tunnel over a common port, or wrapped in ordinary-looking protocols — and re-establishes itself automatically if it reboots or the link drops. That persistence matters; a power blip should not end the engagement.&lt;/p&gt;

&lt;p&gt;If this "phone home to my server" pattern sounds familiar, it should. It is the authorised, physical cousin of the command-and-control technique that real intrusions rely on. The difference is entirely one of permission.&lt;/p&gt;

&lt;p&gt;Where the actual work happens&lt;/p&gt;

&lt;p&gt;A common misconception is that the dropbox is just a doorway. It is better thought of as the workstation. Because it sits inside the network, it is the right place to run the scanning and enumeration — traffic stays local and fast, rather than crawling back and forth through a tunnel. The tester connects in to drive it, but the tooling executes where the targets are. Design the device as the machine that does the job, not merely a relay.&lt;/p&gt;

&lt;p&gt;Why clients like it&lt;/p&gt;

&lt;p&gt;Remote internal assessments cut travel cost and scheduling overhead, and — this is the part that matters most — they are a more honest simulation. A real attacker does not stand in your server room. They establish a foothold and operate remotely, patiently, over an encrypted channel. A dropbox mirrors that threat model precisely, which makes the findings more representative of an actual breach.&lt;/p&gt;

&lt;p&gt;The part that comes before the cable&lt;/p&gt;

&lt;p&gt;None of this begins until the paperwork is signed. A dropbox is inert without a Rules of Engagement document that names the exact IP ranges, hosts, and time windows in scope, states what is explicitly off-limits, and lists an emergency contact. That authorisation is not bureaucratic friction; it is the line between a professional assessment and a crime, and it is also what tells you which segments of the network you are even permitted to touch.&lt;/p&gt;

&lt;p&gt;The defender's takeaway&lt;/p&gt;

&lt;p&gt;If you protect a network, the dropbox is a useful lens. It thrives on two assumptions: that anything already inside is trusted, and that outbound traffic is benign. Both are worth challenging. Network segmentation limits how far a foothold reaches. Egress filtering and monitoring for anomalous outbound connections — beaconing to unfamiliar hosts, tunnels over odd ports — turn the dropbox's quietest advantage into its loudest tell. The same visibility that would catch an authorised tester's device is exactly what catches the real thing.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>pentest</category>
      <category>cybersecurity</category>
      <category>mcp</category>
    </item>
    <item>
      <title># Online vs. Offline Password Attacks: A Field Guide</title>
      <dc:creator>auto_majicly</dc:creator>
      <pubDate>Sun, 12 Jul 2026 14:51:09 +0000</pubDate>
      <link>https://dev.to/xenocoregiger31/-online-vs-offline-password-attacks-a-field-guide-4874</link>
      <guid>https://dev.to/xenocoregiger31/-online-vs-offline-password-attacks-a-field-guide-4874</guid>
      <description>&lt;p&gt;Password attacks are one of the first things people learn in offensive security, and one of the most commonly muddled. The confusion usually comes down to a single distinction that determines which tool you reach for, how fast you move, and how much noise you make: is the attack &lt;strong&gt;online&lt;/strong&gt; or &lt;strong&gt;offline&lt;/strong&gt;? Getting this wrong wastes hours and, in a real engagement, can lock accounts and blow your cover. Here is the field guide I wish I had early on.&lt;/p&gt;

&lt;h2&gt;
  
  
  Online attacks: guessing against a live service
&lt;/h2&gt;

&lt;p&gt;An online attack throws credentials at a running service — SSH, RDP, a web login, a database — and waits to see what sticks. Tools like &lt;strong&gt;Hydra&lt;/strong&gt;, &lt;strong&gt;Ncrack&lt;/strong&gt;, and &lt;strong&gt;Medusa&lt;/strong&gt; live here. You use them when you do &lt;em&gt;not&lt;/em&gt; yet have valid credentials and you are trying to find some against a service that is actually listening.&lt;/p&gt;

&lt;p&gt;The defining traits of online attacks are their constraints. They are &lt;strong&gt;slow&lt;/strong&gt;, because every guess is a full network round-trip. They are &lt;strong&gt;loud&lt;/strong&gt;, generating authentication logs with every attempt. And they are &lt;strong&gt;fragile&lt;/strong&gt;, because account lockout policies, rate limiting, and fail2ban-style tooling will stop you — or worse, lock out the very accounts you are testing. In practice this means being surgical: a short, high-probability wordlist against a high-value service beats blindly hammering everything. Telnet and other slow protocols are rarely worth the time.&lt;/p&gt;

&lt;h2&gt;
  
  
  Offline attacks: cracking captured hashes
&lt;/h2&gt;

&lt;p&gt;An offline attack works against password &lt;strong&gt;hashes&lt;/strong&gt; you have already obtained — from a dumped database, a captured &lt;code&gt;/etc/shadow&lt;/code&gt;, a network capture, or a memory dump. Tools like &lt;strong&gt;John the Ripper&lt;/strong&gt; and &lt;strong&gt;Hashcat&lt;/strong&gt; own this space. Here there is no live service in the loop at all; you are running computation against data you already hold.&lt;/p&gt;

&lt;p&gt;That changes everything. Offline attacks are &lt;strong&gt;fast&lt;/strong&gt;, bounded only by your hardware — a GPU can try billions of candidates per second against a weak hashing scheme. They are &lt;strong&gt;silent&lt;/strong&gt;, because the target sees nothing; there is no service to log your attempts. And they are &lt;strong&gt;unlimited&lt;/strong&gt;, with no lockout to stop you. The catch is that you had to obtain the hashes first, and the difficulty scales enormously with the hashing algorithm: a fast, unsalted hash falls quickly, while a modern, deliberately slow scheme can resist cracking indefinitely.&lt;/p&gt;

&lt;h2&gt;
  
  
  The decision that trips people up
&lt;/h2&gt;

&lt;p&gt;The mistake I see most often is reaching for an online brute-forcer when the situation calls for offline cracking, or vice versa. Three cases make it clear:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;You have no credentials and a live service is exposed.&lt;/strong&gt; This is online territory — Hydra, Ncrack, Medusa — used carefully and sparingly.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;You found password hashes.&lt;/strong&gt; These go straight to offline cracking with John or Hashcat. Do not point an online tool at anything.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;You found actual plaintext credentials.&lt;/strong&gt; You do not brute-force at all. You &lt;em&gt;reuse&lt;/em&gt; them — credential stuffing and password spraying across other systems — because people recycle passwords everywhere, and one valid pair is often the key to many doors.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Knowing which of these three you are in tells you exactly which tool to open, before you waste a cycle.&lt;/p&gt;

&lt;h2&gt;
  
  
  The defender's mirror
&lt;/h2&gt;

&lt;p&gt;Every property that makes these attacks work is something a defender can take away.&lt;/p&gt;

&lt;p&gt;Against &lt;strong&gt;online&lt;/strong&gt; attacks: enforce rate limiting and sensible lockout thresholds, monitor authentication logs for spikes, prefer key-based authentication over passwords where possible, and put multi-factor authentication in front of anything that matters. These measures turn a slow attack into an impractical one.&lt;/p&gt;

&lt;p&gt;Against &lt;strong&gt;offline&lt;/strong&gt; attacks: assume your hash store will eventually be exposed and design for that day. Use a modern, deliberately slow, salted hashing algorithm — the kind built to resist GPU cracking. Salting defeats precomputed tables; slowness defeats brute force. And enforce password length, because length is the single factor that scales cost fastest for the attacker.&lt;/p&gt;

&lt;p&gt;The through-line is simple. Offensive and defensive password work are two views of the same mechanics. Understand which attack applies to which situation, and you will not only choose the right tool as a tester — you will know exactly where to spend a defender's budget.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>hacktoberfest</category>
      <category>cybersecurity</category>
      <category>mcp</category>
    </item>
    <item>
      <title>[Boost]</title>
      <dc:creator>auto_majicly</dc:creator>
      <pubDate>Fri, 10 Jul 2026 21:03:56 +0000</pubDate>
      <link>https://dev.to/xenocoregiger31/-1i29</link>
      <guid>https://dev.to/xenocoregiger31/-1i29</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/xenocoregiger31/-getting-listed-publishing-an-offensive-security-agent-to-the-mcp-registries-1h1f" class="crayons-story__hidden-navigation-link"&gt;# Getting Listed: Publishing an Offensive-Security Agent to the MCP Registries&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/xenocoregiger31" class="crayons-avatar  crayons-avatar--l  "&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%2Fuser%2Fprofile_image%2F4008564%2Fa95de33f-0c01-48e4-b042-7a3b29ff00ec.png" alt="xenocoregiger31 profile" class="crayons-avatar__image" width="800" height="1734"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/xenocoregiger31" class="crayons-story__secondary fw-medium m:hidden"&gt;
              auto_majicly
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                auto_majicly
                
              
              &lt;div id="story-author-preview-content-4116137" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/xenocoregiger31" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&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%2Fuser%2Fprofile_image%2F4008564%2Fa95de33f-0c01-48e4-b042-7a3b29ff00ec.png" class="crayons-avatar__image" alt="" width="800" height="1734"&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;auto_majicly&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/xenocoregiger31/-getting-listed-publishing-an-offensive-security-agent-to-the-mcp-registries-1h1f" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Jul 10&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/xenocoregiger31/-getting-listed-publishing-an-offensive-security-agent-to-the-mcp-registries-1h1f" id="article-link-4116137"&gt;
          # Getting Listed: Publishing an Offensive-Security Agent to the MCP Registries
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/ai"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;ai&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/mcp"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;mcp&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/python"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;python&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/cybersecurity"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;cybersecurity&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/xenocoregiger31/-getting-listed-publishing-an-offensive-security-agent-to-the-mcp-registries-1h1f" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/raised-hands-74b2099fd66a39f2d7eed9305ee0f4553df0eb7b4f11b01b6b1b499973048fe5.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/exploding-head-daceb38d627e6ae9b730f36a1e390fca556a4289d5a41abb2c35068ad3e2c4b5.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;4&lt;span class="hidden s:inline"&gt;&amp;nbsp;reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/xenocoregiger31/-getting-listed-publishing-an-offensive-security-agent-to-the-mcp-registries-1h1f#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              

              &lt;span class="hidden s:inline"&gt;Add&amp;nbsp;Comment&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            3 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial crayons-icon c-btn__icon"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success crayons-icon c-btn__icon"&gt;
                

              &lt;/span&gt;
            
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


</description>
    </item>
    <item>
      <title># Getting Listed: Publishing an Offensive-Security Agent to the MCP Registries</title>
      <dc:creator>auto_majicly</dc:creator>
      <pubDate>Fri, 10 Jul 2026 21:02:46 +0000</pubDate>
      <link>https://dev.to/xenocoregiger31/-getting-listed-publishing-an-offensive-security-agent-to-the-mcp-registries-1h1f</link>
      <guid>https://dev.to/xenocoregiger31/-getting-listed-publishing-an-offensive-security-agent-to-the-mcp-registries-1h1f</guid>
      <description>&lt;p&gt;The Model Context Protocol ecosystem has grown fast, and with it a handful of registries that have become the front door for discovery. If you have built an MCP server and nobody can find it, you have built half a product. This week I took HALO — my local, autonomous security agent — through the full listing process across every major registry. Here is the practical walkthrough, in the order that actually works.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 0: Make it a &lt;em&gt;real&lt;/em&gt; MCP server first
&lt;/h2&gt;

&lt;p&gt;This is the step most people skip, and it is the one that gates everything else. It is not enough to &lt;em&gt;call&lt;/em&gt; something an MCP server. The registries inspect your repository, launch the server, and enumerate its tools. If it does not speak the protocol, it fails silently and you never understand why.&lt;/p&gt;

&lt;p&gt;The cleanest architecture separates &lt;strong&gt;transport&lt;/strong&gt; from &lt;strong&gt;execution&lt;/strong&gt;. I moved my tool logic into a single transport-agnostic engine, then put two thin layers on top: a spec-compliant MCP server that speaks JSON-RPC over stdio using the official SDK, and the existing local interface my agent already used. Defining the tool schemas once, in one registry, means both layers stay in sync and there is no drift.&lt;/p&gt;

&lt;p&gt;I also added a &lt;code&gt;server.json&lt;/code&gt; manifest at the repository root. Several registries read it directly, and it signals that you know what the ecosystem expects.&lt;/p&gt;

&lt;p&gt;The test that matters: a real MCP client should be able to &lt;code&gt;initialize&lt;/code&gt;, call &lt;code&gt;tools/list&lt;/code&gt;, and get back your full arsenal with valid input schemas. If that round-trip works, you are ready to submit. If it does not, no registry will save you.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1: Glama
&lt;/h2&gt;

&lt;p&gt;Glama indexes MCP servers directly from GitHub and assigns each a quality score. Once your repository is a genuine server, sign in, submit the repo, and let its inspector do the work. The payoff is a live score badge you can embed anywhere — and, more importantly, that badge is what several &lt;em&gt;other&lt;/em&gt; directories validate against. Glama is the keystone; get it green first.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 2: awesome-mcp-servers (punkpeye)
&lt;/h2&gt;

&lt;p&gt;The largest community list. Contribution is a straightforward pull request: find the correct category, match the existing entry format exactly — repository link, score badge, language and scope emoji, then a one-line description — and add your line. An automated check validates the submission against Glama. Because I had already earned a Glama score, that check passed cleanly, and the PR dropped into the merge queue.&lt;/p&gt;

&lt;p&gt;Two details save time: match the neighbours' formatting precisely, and do not fight the review automation. A skipped "welcome" workflow is not a failure; the submission check is the one that counts.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 3: awesome-mcp-servers (TensorBlock)
&lt;/h2&gt;

&lt;p&gt;A different list with a different process. Instead of hand-editing a giant README, TensorBlock offers an "Add MCP server" issue form and drafts the pull request for you from the fields you provide. Lower friction, fewer formatting mistakes. Pick your category, describe the server plainly, and submit.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 4: mcpservers.org
&lt;/h2&gt;

&lt;p&gt;A hosted directory with a simple submission form: name, description, link, category, contact email. Free listings are the default; ignore the paid "premium" upsell unless speed genuinely matters to you. Choose the most honest category available — a precise "Other" beats a wrong label that buries you under the wrong search.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I would tell my past self
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;The engineering comes before the marketing. A registry submission is only as good as the server behind it.&lt;/li&gt;
&lt;li&gt;Glama first. Its score is the currency the other lists trade on.&lt;/li&gt;
&lt;li&gt;Match each destination's format on its own terms; they are not interchangeable.&lt;/li&gt;
&lt;li&gt;Be accurate in your metadata. Miscategorising to chase visibility costs you the audience you actually want.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;None of these steps is hard on its own. The discipline is doing them in the right order, and refusing to submit anything until the thing you are submitting is real. Do that, and a project goes from invisible to discoverable in an afternoon.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>mcp</category>
      <category>python</category>
      <category>cybersecurity</category>
    </item>
    <item>
      <title>I Built a Fully Local, Autonomous AI Pentesting Agent — Now I’m Teaching It to Speak MCP</title>
      <dc:creator>auto_majicly</dc:creator>
      <pubDate>Thu, 09 Jul 2026 20:26:24 +0000</pubDate>
      <link>https://dev.to/xenocoregiger31/i-built-a-fully-local-autonomous-ai-pentesting-agent-now-im-teaching-it-to-speak-mcp-2ikp</link>
      <guid>https://dev.to/xenocoregiger31/i-built-a-fully-local-autonomous-ai-pentesting-agent-now-im-teaching-it-to-speak-mcp-2ikp</guid>
      <description>&lt;p&gt;⚠️ Everything here is for authorized security testing and research only — systems you own or have explicit written permission to test.&lt;/p&gt;

&lt;p&gt;A few months ago I set myself a stubborn goal: build a penetration-testing agent that runs entirely on my own machine — no cloud, no API keys, nothing leaving the laptop — that could plan an engagement, run its own recon, chain attacks based on what it finds, and write up the findings on its own.&lt;/p&gt;

&lt;p&gt;That project became HALO (I ship it as GEMMA-by-GOOGLE). It’s driven by a local Gemma model in LM Studio and a Python agent loop that calls out to a server exposing ~29 security tools. It’s fully offline, and it’s the thing I’ve learned the most from this year.&lt;br&gt;
This post is about the part I got wrong first, and the standard I’m now rebuilding it around: the Model Context Protocol (MCP).&lt;/p&gt;

&lt;p&gt;What HALO actually does&lt;/p&gt;

&lt;p&gt;The design is a small crew of specialist agents passing a shared message format:&lt;br&gt;
    • a planner turns a goal into an ordered plan&lt;br&gt;
    • an orchestrator routes each task to the right specialist&lt;br&gt;
    • a vuln-discovery agent surfaces candidates&lt;br&gt;
    • an attacker branches into vuln-class specialists (SQLi, brute force, IDOR, SSRF, XSS, auth)&lt;br&gt;
    • a validator confirms findings against real evidence before they count&lt;br&gt;
    • a debugger diagnoses failed tool runs and adjusts&lt;/p&gt;

&lt;p&gt;One of my favorite pieces is a persistent negative-experience cache. Every tool call gets fingerprinted. Fail once → one retry. Fail twice → it’s blacklisted, and the agent moves on to a better tool for the job. Over an engagement it stops wasting cycles on dead ends it has already proven don’t work — trial-and-error that persists across sessions.&lt;/p&gt;

&lt;p&gt;At the end, everything compiles into an HTML report. One command starts the whole thing: engage .&lt;/p&gt;

&lt;p&gt;The wall I hit: my tools were bolted on&lt;/p&gt;

&lt;p&gt;Here’s the honest part. When I wired those ~29 tools in, I did it the fastest way I knew: a Flask HTTP server with a couple of routes. The agent POSTs {tool, params}; the server runs the tool and returns the result. It works. It’s been working for months.&lt;/p&gt;

&lt;p&gt;But it’s bespoke. My agent is the only thing that knows how to talk to it. If I wanted to use those same tools from another client — say, a desktop AI app or an editor — I’d have to reimplement the glue every time. The tools were locked inside my one custom protocol.&lt;/p&gt;

&lt;p&gt;That’s exactly the problem MCP was built to solve.&lt;/p&gt;

&lt;p&gt;What MCP is (the 60-second version)&lt;/p&gt;

&lt;p&gt;The Model Context Protocol is an open standard for connecting LLM applications to external tools and data. Instead of every app inventing its own way to expose “here are my tools, here’s how to call them,” MCP defines a common one:&lt;br&gt;
    • a server exposes capabilities — tools, resources, prompts&lt;br&gt;
    • a client (the LLM app) connects, calls tools/list to discover what’s available, and tools/call to run them&lt;br&gt;
    • it speaks JSON-RPC over a transport like stdio or HTTP/SSE&lt;/p&gt;

&lt;p&gt;The payoff is interoperability. Write your tools as an MCP server once, and any MCP-aware client — Claude Desktop, Cursor, Cline, and a growing list of others — can use them without custom glue. Your capability becomes portable.&lt;/p&gt;

&lt;p&gt;When it clicked for me, it was obvious: my Flask server is a worse, private version of a thing that already has an open standard.&lt;br&gt;
Why I’m rebuilding HALO’s tool layer as a real MCP server&lt;/p&gt;

&lt;p&gt;So that’s the next build. Concretely:&lt;br&gt;
    1.  Wrap the existing tools with the MCP SDK. Each of my run_* functions becomes a registered MCP tool with a typed schema, exposed via tools/list / tools/call — instead of my ad-hoc POST /.&lt;br&gt;
    2.  Serve over stdio so any MCP client can launch and introspect it.&lt;br&gt;
    3.  Ship a Dockerfile so it starts in a clean environment and can be verified.&lt;br&gt;
What this unlocks:&lt;br&gt;
    • Plug HALO’s arsenal straight into Claude Desktop / Cursor / Cline — the same recon and analysis tools, now usable from any MCP client, not just my agent loop.&lt;br&gt;
    • Keep it local. MCP doesn’t mean cloud. The server still runs on my machine; the model still runs in LM Studio. Nothing about adopting the standard changes the “fully offline” promise — it just standardizes the interface.&lt;br&gt;
    • Portability. I do this work on a travel VM that goes with me. A standard interface + a Dockerfile means “it runs the same everywhere” stops being a hope.&lt;br&gt;
Lessons so far&lt;br&gt;
    • “It works” and “it’s reusable” are different milestones. My Flask server passed the first bar for months while quietly failing the second. Standards are how you cross the second one without a rewrite every time.&lt;br&gt;
    • Adopt the protocol, keep your architecture. My multi-agent crew, the negative-experience cache, the reporting — none of that changes. MCP is about the tool interface, not the brain.&lt;br&gt;
    • Local-first and standards-based aren’t in tension. MCP over stdio is arguably more local than my HTTP server was.&lt;br&gt;
    • Name things honestly. I’d been loosely calling my Flask layer an “MCP server.” It wasn’t one. Fixing that — making the name true — is half of why this next build matters.&lt;/p&gt;

&lt;p&gt;Follow along&lt;/p&gt;

&lt;p&gt;HALO is open source (MIT). The multi-agent code, the tool server, and the docs are all in the repo, and the real MCP interface is the next thing landing:&lt;br&gt;
👉 &lt;a href="https://github.com/XenoCoreGiger31/GEMMA-by-GOOGLE" rel="noopener noreferrer"&gt;https://github.com/XenoCoreGiger31/GEMMA-by-GOOGLE&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you’re building local-first AI tooling — security or otherwise — I’d love to hear how you’re thinking about MCP. And if you want the follow-up (“here’s exactly how I converted a Flask tool server into a spec-compliant MCP server, with a Dockerfile”), that post is coming once the build lands.&lt;br&gt;
Build for systems you’re allowed to touch. Stay legal, stay curious.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>cybersecurity</category>
      <category>mcp</category>
      <category>python</category>
    </item>
    <item>
      <title>[Boost]</title>
      <dc:creator>auto_majicly</dc:creator>
      <pubDate>Wed, 08 Jul 2026 22:43:24 +0000</pubDate>
      <link>https://dev.to/xenocoregiger31/-5c0a</link>
      <guid>https://dev.to/xenocoregiger31/-5c0a</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/xenocoregiger31/your-autonomous-agent-will-lie-to-you-about-success-23kb" class="crayons-story__hidden-navigation-link"&gt;Your autonomous agent will lie to you about success&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/xenocoregiger31" class="crayons-avatar  crayons-avatar--l  "&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%2Fuser%2Fprofile_image%2F4008564%2Fa95de33f-0c01-48e4-b042-7a3b29ff00ec.png" alt="xenocoregiger31 profile" class="crayons-avatar__image" width="800" height="1734"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/xenocoregiger31" class="crayons-story__secondary fw-medium m:hidden"&gt;
              auto_majicly
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                auto_majicly
                
              
              &lt;div id="story-author-preview-content-4100388" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/xenocoregiger31" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&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%2Fuser%2Fprofile_image%2F4008564%2Fa95de33f-0c01-48e4-b042-7a3b29ff00ec.png" class="crayons-avatar__image" alt="" width="800" height="1734"&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;auto_majicly&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/xenocoregiger31/your-autonomous-agent-will-lie-to-you-about-success-23kb" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Jul 8&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/xenocoregiger31/your-autonomous-agent-will-lie-to-you-about-success-23kb" id="article-link-4100388"&gt;
          Your autonomous agent will lie to you about success
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag crayons-tag--filled  " href="/t/discuss"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;discuss&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/cybersecurity"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;cybersecurity&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/ai"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;ai&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/llm"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;llm&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/xenocoregiger31/your-autonomous-agent-will-lie-to-you-about-success-23kb" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/raised-hands-74b2099fd66a39f2d7eed9305ee0f4553df0eb7b4f11b01b6b1b499973048fe5.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/exploding-head-daceb38d627e6ae9b730f36a1e390fca556a4289d5a41abb2c35068ad3e2c4b5.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;4&lt;span class="hidden s:inline"&gt;&amp;nbsp;reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/xenocoregiger31/your-autonomous-agent-will-lie-to-you-about-success-23kb#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              

              1&lt;span class="hidden s:inline"&gt;&amp;nbsp;comment&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            4 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial crayons-icon c-btn__icon"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success crayons-icon c-btn__icon"&gt;
                

              &lt;/span&gt;
            
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


</description>
    </item>
    <item>
      <title>[Boost]</title>
      <dc:creator>auto_majicly</dc:creator>
      <pubDate>Wed, 08 Jul 2026 22:36:02 +0000</pubDate>
      <link>https://dev.to/xenocoregiger31/-1pfm</link>
      <guid>https://dev.to/xenocoregiger31/-1pfm</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/xenocoregiger31/your-autonomous-agent-will-lie-to-you-about-success-23kb" class="crayons-story__hidden-navigation-link"&gt;Your autonomous agent will lie to you about success&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/xenocoregiger31" class="crayons-avatar  crayons-avatar--l  "&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%2Fuser%2Fprofile_image%2F4008564%2Fa95de33f-0c01-48e4-b042-7a3b29ff00ec.png" alt="xenocoregiger31 profile" class="crayons-avatar__image"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/xenocoregiger31" class="crayons-story__secondary fw-medium m:hidden"&gt;
              auto_majicly
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                auto_majicly
                
              
              &lt;div id="story-author-preview-content-4100388" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/xenocoregiger31" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&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%2Fuser%2Fprofile_image%2F4008564%2Fa95de33f-0c01-48e4-b042-7a3b29ff00ec.png" class="crayons-avatar__image" alt=""&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;auto_majicly&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/xenocoregiger31/your-autonomous-agent-will-lie-to-you-about-success-23kb" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Jul 8&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/xenocoregiger31/your-autonomous-agent-will-lie-to-you-about-success-23kb" id="article-link-4100388"&gt;
          Your autonomous agent will lie to you about success
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag crayons-tag--filled  " href="/t/discuss"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;discuss&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/cybersecurity"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;cybersecurity&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/ai"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;ai&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/llm"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;llm&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/xenocoregiger31/your-autonomous-agent-will-lie-to-you-about-success-23kb" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/raised-hands-74b2099fd66a39f2d7eed9305ee0f4553df0eb7b4f11b01b6b1b499973048fe5.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/exploding-head-daceb38d627e6ae9b730f36a1e390fca556a4289d5a41abb2c35068ad3e2c4b5.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;4&lt;span class="hidden s:inline"&gt;&amp;nbsp;reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/xenocoregiger31/your-autonomous-agent-will-lie-to-you-about-success-23kb#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              

              1&lt;span class="hidden s:inline"&gt;&amp;nbsp;comment&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            4 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial crayons-icon c-btn__icon"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success crayons-icon c-btn__icon"&gt;
                

              &lt;/span&gt;
            
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


</description>
    </item>
    <item>
      <title>Your autonomous agent will lie to you about success</title>
      <dc:creator>auto_majicly</dc:creator>
      <pubDate>Wed, 08 Jul 2026 22:35:32 +0000</pubDate>
      <link>https://dev.to/xenocoregiger31/your-autonomous-agent-will-lie-to-you-about-success-23kb</link>
      <guid>https://dev.to/xenocoregiger31/your-autonomous-agent-will-lie-to-you-about-success-23kb</guid>
      <description>&lt;p&gt;I’m building an autonomous pentesting agent. Last week it told me an attack succeeded. It hadn’t. The bug that let it lie is one every agent builder will hit eventually, so here’s the story and the fix.&lt;br&gt;
The setup&lt;br&gt;
The agent can write and run custom Python when its standard tools fall short. Running model-authored code on your host is obviously a bad idea, so that path goes through a sandbox: a rootless Podman container with two phases. A test phase with no network at all (--network=none) to prove the script runs, then an attack phase with networking enabled to run it against the real target. Each phase is behind a human approval gate.&lt;br&gt;
I gave it a simple goal to smoke-test the whole thing: connect to an FTP server on my lab target and print the banner.&lt;br&gt;
The thing that looked like success&lt;br&gt;
Both phases printed the banner:&lt;/p&gt;

&lt;p&gt;Both phases printed the banner:&lt;/p&gt;

&lt;p&gt;--- TEST PHASE OUTPUT (isolated, no network) ---&lt;br&gt;
220 (vsFTPd 2.3.4)&lt;/p&gt;

&lt;p&gt;--- ATTACK PHASE OUTPUT (target: 10.x.x.x:21) ---&lt;br&gt;
220 (vsFTPd 2.3.4)&lt;/p&gt;

&lt;p&gt;[GATE] Attack phase succeeded&lt;br&gt;
--- TEST PHASE OUTPUT (isolated, no network) ---&lt;br&gt;
220 (vsFTPd 2.3.4)&lt;/p&gt;

&lt;p&gt;--- ATTACK PHASE OUTPUT (target: 10.x.x.x:21) ---&lt;br&gt;
220 (vsFTPd 2.3.4)&lt;/p&gt;

&lt;p&gt;[GATE] Attack phase succeeded&lt;/p&gt;

&lt;p&gt;--- TEST PHASE OUTPUT (isolated, no network) ---&lt;br&gt;
220 (vsFTPd 2.3.4)&lt;/p&gt;

&lt;p&gt;--- ATTACK PHASE OUTPUT (target: 10.x.x.x:21) ---&lt;br&gt;
220 (vsFTPd 2.3.4)&lt;/p&gt;

&lt;p&gt;[GATE] Attack phase succeeded&lt;/p&gt;

&lt;p&gt;Looks great. It’s also impossible.&lt;br&gt;
The test phase runs with no network. A socket connect to a remote FTP server from inside that container cannot succeed — it should throw “network unreachable.” But it printed a live banner, identical to the attack phase. If the sealed room and the open room both report “I can see outside,” either the room isn’t sealed or someone taped a photo to the wall.&lt;/p&gt;

&lt;p&gt;Two bugs wearing one costume&lt;/p&gt;

&lt;p&gt;Bug one: the sandbox wasn’t running. The service was launching from a stale copy of the code — an older path left over from a refactor. That copy predated the sandbox entirely, so “test phase, no network” was just a label being printed. Both phases were running the same unsandboxed code on the host, twice. The banner was real; the isolation was fiction.&lt;br&gt;
Fixing the service to point at the current code brought the actual sandbox online. Now the test phase correctly failed with Network is unreachable, and only the attack phase got the banner. Good.&lt;br&gt;
Bug two, the interesting one: the success check was a lie detector that always said “truth.” The gate decided success like this:&lt;/p&gt;

&lt;p&gt;ok = result.get("status") == "success"&lt;/p&gt;

&lt;p&gt;And status was set from the exit code of the sandbox runner — not the script inside it. The runner can exit 0 (it did its job: it ran the container) while the script inside printed nothing, threw an exception, or ran against a placeholder target the model forgot to fill in. Exit 0 meant “I successfully ran something,” not “the something worked.”&lt;br&gt;
This is the trap. An agent’s tools report on themselves, and they’re generous. Left alone, the agent banks these false successes as progress and moves on, building a plan on top of steps that never happened.&lt;br&gt;
The fix: trust the output contract, not the exit code&lt;br&gt;
The sandbox already emits a structured block for every run:&lt;/p&gt;

&lt;p&gt;=== STDOUT ===&lt;br&gt;
&lt;br&gt;
=== STDERR ===&lt;br&gt;
&lt;br&gt;
=== EXIT  ===&lt;/p&gt;

&lt;p&gt;So instead of trusting the runner’s exit code, parse the sandbox’s own contract and judge the inner result:&lt;/p&gt;

&lt;p&gt;raw = result.get("stdout", "")&lt;/p&gt;

&lt;p&gt;inner_exit = None&lt;br&gt;
for line in raw.splitlines():&lt;br&gt;
    t = line.strip()&lt;br&gt;
    if t.startswith("=== EXIT ") and t.endswith("==="):&lt;br&gt;
        n = t[9:-3].strip()&lt;br&gt;
        if n.isdigit():&lt;br&gt;
            inner_exit = int(n)&lt;/p&gt;

&lt;p&gt;inner_stdout = ""&lt;br&gt;
if "=== STDOUT ===" in raw and "=== STDERR ===" in raw:&lt;br&gt;
    inner_stdout = raw.split("=== STDOUT ===", 1)[1].split("=== STDERR ===", 1)[0].strip()&lt;/p&gt;

&lt;p&gt;if inner_exit is None:&lt;br&gt;
    fail("no exit marker from sandbox")&lt;br&gt;
elif inner_exit != 0:&lt;br&gt;
    fail("script exited non-zero")&lt;br&gt;
elif not inner_stdout:&lt;br&gt;
    fail("no output; no-op treated as failure")&lt;br&gt;
elif "TARGET_IP" in code:          # model left a placeholder&lt;br&gt;
    fail("placeholder target, not a real run")&lt;br&gt;
else:&lt;br&gt;
    succeed()&lt;/p&gt;

&lt;p&gt;Note there’s no regex here. My first version used one, and a stray trailing newline in the output made the pattern miss, which flipped the guard to a false negative — now it failed real successes. Plain string splitting on the markers is boring and it doesn’t care about whitespace. Boring won.&lt;/p&gt;

&lt;p&gt;The takeaways&lt;/p&gt;

&lt;p&gt;If you’re wiring tools into an agent, three things earned their keep:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Exit code 0 is not success. It means a process ended without crashing. Whether the task succeeded is a separate question your tool has to answer explicitly. Define what “worked” means — non-empty output, an expected marker, a parsed field — and check for it.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;A test that can’t fail isn’t testing anything. The whole bug was invisible until the isolated phase started correctly failing. If your “isolated” mode never errors, it isn’t isolated.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Watch for placeholder output. Models will happily hand you TARGET_IP or example.com and a green checkmark. Treat obvious placeholders as failure, not success.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The guard is deliberately strict: no-op, error, empty output, or placeholder all report failure. I’d rather the agent retry a real success it undercounted than march forward on a fake one it believed.&lt;br&gt;
Verified end-to-end against a local lab target: test phase blocks the network, attack phase returns the real banner, and a deliberately empty script now correctly reports failure instead of success.&lt;br&gt;
If you’re building in this space, I’d genuinely like to hear how you’re validating tool results — the exit-code trap feels like something a lot of people hit quietly.&lt;/p&gt;

</description>
      <category>discuss</category>
      <category>cybersecurity</category>
      <category>ai</category>
      <category>llm</category>
    </item>
    <item>
      <title>[Boost]</title>
      <dc:creator>auto_majicly</dc:creator>
      <pubDate>Wed, 08 Jul 2026 16:58:52 +0000</pubDate>
      <link>https://dev.to/xenocoregiger31/-1omi</link>
      <guid>https://dev.to/xenocoregiger31/-1omi</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/xenocoregiger31/-wiring-real-agents-into-halo-from-stub-orchestrator-to-a-working-multi-agent-pentest-pipeline-57k8" class="crayons-story__hidden-navigation-link"&gt;# Wiring Real Agents Into Halo: From Stub Orchestrator to a Working Multi-Agent Pentest Pipeline&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/xenocoregiger31" class="crayons-avatar  crayons-avatar--l  "&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%2Fuser%2Fprofile_image%2F4008564%2Fa95de33f-0c01-48e4-b042-7a3b29ff00ec.png" alt="xenocoregiger31 profile" class="crayons-avatar__image"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/xenocoregiger31" class="crayons-story__secondary fw-medium m:hidden"&gt;
              auto_majicly
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                auto_majicly
                
              
              &lt;div id="story-author-preview-content-4099014" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/xenocoregiger31" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&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%2Fuser%2Fprofile_image%2F4008564%2Fa95de33f-0c01-48e4-b042-7a3b29ff00ec.png" class="crayons-avatar__image" alt=""&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;auto_majicly&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/xenocoregiger31/-wiring-real-agents-into-halo-from-stub-orchestrator-to-a-working-multi-agent-pentest-pipeline-57k8" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Jul 8&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/xenocoregiger31/-wiring-real-agents-into-halo-from-stub-orchestrator-to-a-working-multi-agent-pentest-pipeline-57k8" id="article-link-4099014"&gt;
          # Wiring Real Agents Into Halo: From Stub Orchestrator to a Working Multi-Agent Pentest Pipeline
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag crayons-tag--filled  " href="/t/discuss"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;discuss&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/ai"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;ai&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/programming"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;programming&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/cybersecurity"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;cybersecurity&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/xenocoregiger31/-wiring-real-agents-into-halo-from-stub-orchestrator-to-a-working-multi-agent-pentest-pipeline-57k8" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/raised-hands-74b2099fd66a39f2d7eed9305ee0f4553df0eb7b4f11b01b6b1b499973048fe5.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/exploding-head-daceb38d627e6ae9b730f36a1e390fca556a4289d5a41abb2c35068ad3e2c4b5.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;4&lt;span class="hidden s:inline"&gt;&amp;nbsp;reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/xenocoregiger31/-wiring-real-agents-into-halo-from-stub-orchestrator-to-a-working-multi-agent-pentest-pipeline-57k8#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              

              2&lt;span class="hidden s:inline"&gt;&amp;nbsp;comments&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            2 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial crayons-icon c-btn__icon"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success crayons-icon c-btn__icon"&gt;
                

              &lt;/span&gt;
            
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


</description>
    </item>
    <item>
      <title># Wiring Real Agents Into Halo: From Stub Orchestrator to a Working Multi-Agent Pentest Pipeline</title>
      <dc:creator>auto_majicly</dc:creator>
      <pubDate>Wed, 08 Jul 2026 16:58:41 +0000</pubDate>
      <link>https://dev.to/xenocoregiger31/-wiring-real-agents-into-halo-from-stub-orchestrator-to-a-working-multi-agent-pentest-pipeline-57k8</link>
      <guid>https://dev.to/xenocoregiger31/-wiring-real-agents-into-halo-from-stub-orchestrator-to-a-working-multi-agent-pentest-pipeline-57k8</guid>
      <description>&lt;p&gt;Yesterday I had five agent roles sketched out on paper. Today I actually wired them together and watched them run a real engagement against a live target — and immediately hit (and fixed) the kind of bug you only find by running the thing for real.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Starting Point
&lt;/h2&gt;

&lt;p&gt;Halo's orchestrator has existed for a few days, but it was routing tasks to &lt;em&gt;stub&lt;/em&gt; agents — fake stand-ins that printed a success message and moved on. That was intentional: prove the routing logic works before wiring in real specialists. Today was "swap the stubs for the real thing" day.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Got Built
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;wafw00f integration.&lt;/strong&gt; Added WAF/security-solution fingerprinting as tool #25, slotted into the recon workflow right after initial HTTP probing — check for a WAF &lt;em&gt;before&lt;/em&gt; throwing aggressive scans at a target, not after.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Attacker as a router, not a monolith.&lt;/strong&gt; The Attacker agent now branches into vuln-class specialists — SQLi, credential brute-forcing, IDOR, SSRF, XSS, and auth/session issues — instead of one generic "go attack it" prompt. Each branch maps to the tool actually suited for that vuln class.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A real Validator stage.&lt;/strong&gt; This is the piece that was missing entirely. Attacker's claimed findings now get checked against confirmation signals before they're counted — a "confirmed vulnerable" result requires the actual evidence (e.g. sqlmap explicitly confirming an injectable parameter), not just "a tool ran and returned some text." Unconfirmed findings get flagged for manual review instead of silently disappearing or silently passing as real.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Real reporting.&lt;/strong&gt; Confirmed and unconfirmed findings now compile into a client-readable markdown report, written per-engagement.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Bug That Made It Real
&lt;/h2&gt;

&lt;p&gt;First live run against my own router: Attacker fired off &lt;code&gt;searchsploit&lt;/code&gt; — with the target's raw IP address as the search keyword. Of course it found nothing; searchsploit needs a product/service name, not an IP.&lt;/p&gt;

&lt;p&gt;The fix: pass Vuln Discovery's actual findings (service banners, versions) into Attacker as context, then extract just the relevant service string before it ever reaches searchsploit. Second bug surfaced immediately after: a later, empty recon result was &lt;em&gt;overwriting&lt;/em&gt; an earlier good one before Attacker got to use it — classic last-write-wins. Fixed by only updating captured context when the new result is non-empty.&lt;/p&gt;

&lt;p&gt;End state: Attacker correctly searched &lt;code&gt;dnsmasq 2.83&lt;/code&gt;, searchsploit correctly returned "No Results," and Validator correctly logged it as unconfirmed. Not a flashy win — but an &lt;em&gt;honest&lt;/em&gt; one. The pipeline reported the true state of the target instead of a hallucinated finding.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why This Matters More Than It Sounds
&lt;/h2&gt;

&lt;p&gt;A pentest agent that never says "no exploit found" isn't trustworthy. Building the validation and honest-negative-result path in from day one, rather than bolting it on later, was the actual point of today's work — not just to get more findings, but to get &lt;em&gt;correct&lt;/em&gt; ones.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's Next
&lt;/h2&gt;

&lt;p&gt;Sandbox execution for agent-written PoC/exploit code, so Attacker can go beyond canned tools when a target calls for something custom.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>programming</category>
      <category>cybersecurity</category>
      <category>discuss</category>
    </item>
    <item>
      <title>SkillCloak Exposes a Dangerous Blind Spot in AI Security</title>
      <dc:creator>auto_majicly</dc:creator>
      <pubDate>Tue, 07 Jul 2026 16:36:36 +0000</pubDate>
      <link>https://dev.to/xenocoregiger31/skillcloak-exposes-a-dangerous-blind-spot-in-ai-security-1h3b</link>
      <guid>https://dev.to/xenocoregiger31/skillcloak-exposes-a-dangerous-blind-spot-in-ai-security-1h3b</guid>
      <description>&lt;p&gt;As AI coding assistants continue to grow in popularity, so does the attack surface surrounding them. A newly disclosed technique known as SkillCloak demonstrates how malicious AI “skills” can bypass traditional static security scanners while still executing harmful code once installed.&lt;/p&gt;

&lt;p&gt;Researchers from the Hong Kong University of Science and Technology found that attackers can disguise malicious skills by hiding their payloads in locations that many scanners ignore or by slightly altering their structure without changing their functionality. The result is alarming: these modified skills were able to evade detection in more than 90% of the scanners tested.&lt;/p&gt;

&lt;p&gt;The bigger concern is that AI agent skills often execute with the same permissions as the user. That means a malicious skill could potentially access sensitive files, steal credentials, exfiltrate source code, or even establish persistence on a system without raising immediate suspicion.&lt;/p&gt;

&lt;p&gt;The research also highlights an important shift in defensive strategy. Instead of relying solely on static analysis, security tools should increasingly monitor a skill’s behavior at runtime. Observing what a skill actually reads, writes, and transmits provides a much stronger indication of malicious activity than simply inspecting its contents before installation.&lt;br&gt;
As AI ecosystems continue to expand, this serves as another reminder that trust should never be based on appearance alone. Whether you’re using AI coding agents in development or production, installing skills only from trusted sources, limiting their permissions, and adopting runtime monitoring will be essential steps in reducing risk.&lt;br&gt;
This article is based on reporting by Swati Khandelwal at The Hacker News and research published by the Hong Kong University of Science and Technology.&lt;/p&gt;

</description>
      <category>discuss</category>
      <category>ai</category>
      <category>security</category>
      <category>hacktoberfest</category>
    </item>
  </channel>
</rss>
