<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Llm on t0ul</title><link>https://t0ul.com/tags/llm/</link><description>Recent content in Llm on t0ul</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Mon, 19 Oct 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://t0ul.com/tags/llm/index.xml" rel="self" type="application/rss+xml"/><item><title>Walk away, read it over coffee</title><link>https://t0ul.com/blog/eva-walk-away-read-it-over-coffee/</link><pubDate>Mon, 19 Oct 2026 00:00:00 +0000</pubDate><guid>https://t0ul.com/blog/eva-walk-away-read-it-over-coffee/</guid><description>&lt;p&gt;&lt;em&gt;Part of my EVA series, where I build the cockpit I pilot &lt;a href="https://github.com/t0ul/GORED"&gt;GORED&lt;/a&gt; runs from. This is the last one, and it is the mode the whole cockpit was pointed at: the overnight blind campaign. Code in &lt;a href="https://github.com/t0ul/GORED"&gt;t0ul/GORED&lt;/a&gt;; write-ups in &lt;a href="https://github.com/t0ul/ai-security-engineering"&gt;t0ul/ai-security-engineering&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;h2 id="intro"&gt;Intro&lt;/h2&gt;
&lt;p&gt;Here is the honest advantage of a tester that runs on my own laptop. It is not that it is smarter than a cloud model, because &lt;a href="https://t0ul.com/blog/gored-not-first-and-the-gpu/"&gt;my GORED series&lt;/a&gt; is clear that it is not. It is that it costs nothing per hour and never gets bored. A frontier model billed by the token is a thing you ration. A small model running locally is a thing you can leave on all night, pointed at a problem, for the price of some electricity.&lt;/p&gt;</description></item><item><title>You're not first, and here's the lever</title><link>https://t0ul.com/blog/gored-not-first-and-the-gpu/</link><pubDate>Sat, 17 Oct 2026 00:00:00 +0000</pubDate><guid>https://t0ul.com/blog/gored-not-first-and-the-gpu/</guid><description>&lt;p&gt;&lt;em&gt;Part of my GORED series, where I point small local language models at my own web apps and measure, honestly, whether they can break them. The harness is &lt;a href="https://github.com/t0ul/GORED"&gt;t0ul/GORED&lt;/a&gt; and these write-ups live in &lt;a href="https://github.com/t0ul/ai-security-engineering"&gt;t0ul/ai-security-engineering&lt;/a&gt;. Every number comes from a kept, hash-verified trace.&lt;/em&gt;&lt;/p&gt;
&lt;h2 id="intro"&gt;Intro&lt;/h2&gt;
&lt;p&gt;By the end of the zeros I had talked myself into two bad conclusions at once: that I had built the thing wrong, and that the idea was dumb to begin with. Both felt true at two in the morning. Neither is, and the thing that convinced me was sitting in the research the whole time, which I should have read first instead of last.&lt;/p&gt;</description></item><item><title>The one time it worked, and the exact line where it stops</title><link>https://t0ul.com/blog/gored-the-one-time-it-worked/</link><pubDate>Fri, 16 Oct 2026 00:00:00 +0000</pubDate><guid>https://t0ul.com/blog/gored-the-one-time-it-worked/</guid><description>&lt;p&gt;&lt;em&gt;Part of my GORED series, where I point small local language models at my own web apps and measure, honestly, whether they can break them. The harness is &lt;a href="https://github.com/t0ul/GORED"&gt;t0ul/GORED&lt;/a&gt; and these write-ups live in &lt;a href="https://github.com/t0ul/ai-security-engineering"&gt;t0ul/ai-security-engineering&lt;/a&gt;. Every number comes from a kept, hash-verified trace.&lt;/em&gt;&lt;/p&gt;
&lt;h2 id="intro"&gt;Intro&lt;/h2&gt;
&lt;p&gt;I have shown you a lot of zeros. I owe you the one time it genuinely worked, because it did, and it is the most instructive moment in the whole project. A small local model, running on my laptop, wrote a working SQL injection against a login form, watched its first try bounce off, and then corrected its own syntax and got in. That is a real thing a model did, scored by the application itself, not by me.&lt;/p&gt;</description></item><item><title>The one half of pentesting small models are good at</title><link>https://t0ul.com/blog/gored-recon-is-the-bright-spot/</link><pubDate>Thu, 15 Oct 2026 00:00:00 +0000</pubDate><guid>https://t0ul.com/blog/gored-recon-is-the-bright-spot/</guid><description>&lt;p&gt;&lt;em&gt;Part of my GORED series, where I point small local language models at my own web apps and measure, honestly, whether they can break them. The &lt;a href="https://t0ul.com/blog/gored-the-question/"&gt;earlier posts&lt;/a&gt; are a pile of zeros on the exploit side. This one is the part that worked, and it changed how I think about where these models belong. The harness is &lt;a href="https://github.com/t0ul/GORED"&gt;t0ul/GORED&lt;/a&gt;. Every number comes from a kept, hash-verified trace.&lt;/em&gt;&lt;/p&gt;</description></item><item><title>The wall: a 3B won't aim its tools, and more tries don't fix it</title><link>https://t0ul.com/blog/gored-the-wall/</link><pubDate>Wed, 14 Oct 2026 00:00:00 +0000</pubDate><guid>https://t0ul.com/blog/gored-the-wall/</guid><description>&lt;p&gt;&lt;em&gt;Part of my GORED series, where I point small local language models at my own web apps and measure, honestly, whether they can break them. The harness is &lt;a href="https://github.com/t0ul/GORED"&gt;t0ul/GORED&lt;/a&gt; and these write-ups live in &lt;a href="https://github.com/t0ul/ai-security-engineering"&gt;t0ul/ai-security-engineering&lt;/a&gt;. Every number comes from a kept, hash-verified trace.&lt;/em&gt;&lt;/p&gt;
&lt;h2 id="intro"&gt;Intro&lt;/h2&gt;
&lt;p&gt;The last post left me with a clean, almost hopeful diagnosis. The tools work and the target is vulnerable, so the only thing missing is aim. Aim felt fixable. If the model keeps reaching for the wrong tool, I thought, I will just take the wrong tools away. Give each endpoint only the tools that make sense for it, shrink the decision down to almost nothing, and the model has no choice but to do the right thing.&lt;/p&gt;</description></item><item><title>The ceiling check: is it the tools or the model?</title><link>https://t0ul.com/blog/gored-the-ceiling-check/</link><pubDate>Tue, 13 Oct 2026 00:00:00 +0000</pubDate><guid>https://t0ul.com/blog/gored-the-ceiling-check/</guid><description>&lt;p&gt;&lt;em&gt;Part of my GORED series, where I point small local language models at my own web apps and measure, honestly, whether they can break them. The harness is &lt;a href="https://github.com/t0ul/GORED"&gt;t0ul/GORED&lt;/a&gt; and these write-ups live in &lt;a href="https://github.com/t0ul/ai-security-engineering"&gt;t0ul/ai-security-engineering&lt;/a&gt;. Every number comes from a kept, hash-verified trace.&lt;/em&gt;&lt;/p&gt;
&lt;h2 id="intro"&gt;Intro&lt;/h2&gt;
&lt;p&gt;After enough zeros, you start to doubt your own equipment. I kept pointing the model at my app and getting nothing back, and the honest question at that point is not &amp;ldquo;why is the model so bad,&amp;rdquo; it is &amp;ldquo;are you certain the thing you built even works?&amp;rdquo; A run that comes back empty because the model failed and a run that comes back empty because the harness is broken look identical from the outside. Both are zero.&lt;/p&gt;</description></item><item><title>Scoring a model attack without fooling yourself</title><link>https://t0ul.com/blog/gored-scoring-without-fooling-yourself/</link><pubDate>Mon, 12 Oct 2026 00:00:00 +0000</pubDate><guid>https://t0ul.com/blog/gored-scoring-without-fooling-yourself/</guid><description>&lt;p&gt;&lt;em&gt;Part of my GORED series, where I point small local language models at my own web apps and measure, honestly, whether they can break them. The &lt;a href="https://t0ul.com/blog/gored-the-question/"&gt;first post&lt;/a&gt; set the two rules, no cheating and no hardcoding. This one is the plumbing that enforces them. The harness is &lt;a href="https://github.com/t0ul/GORED"&gt;t0ul/GORED&lt;/a&gt;. Every number I quote comes from a kept, hash-verified trace.&lt;/em&gt;&lt;/p&gt;
&lt;h2 id="intro"&gt;Intro&lt;/h2&gt;
&lt;p&gt;In the last post I said a benchmark you can fool is worse than no benchmark. This post is me showing you I cannot fool this one, because I tried, and it caught me.&lt;/p&gt;</description></item><item><title>Can a local LLM pentest your own app?</title><link>https://t0ul.com/blog/gored-the-question/</link><pubDate>Sun, 11 Oct 2026 00:00:00 +0000</pubDate><guid>https://t0ul.com/blog/gored-the-question/</guid><description>&lt;p&gt;&lt;em&gt;Part of my GORED series, where I point small local language models at my own web apps and measure, honestly, whether they can break them. This first post is all setup: the weapon, the target, the ruler, and the two rules. The harness is &lt;a href="https://github.com/t0ul/GORED"&gt;t0ul/GORED&lt;/a&gt; and these write-ups live in &lt;a href="https://github.com/t0ul/ai-security-engineering"&gt;t0ul/ai-security-engineering&lt;/a&gt;. Every number I quote comes from a kept, hash-verified trace.&lt;/em&gt;&lt;/p&gt;
&lt;h2 id="intro"&gt;Intro&lt;/h2&gt;
&lt;p&gt;I had a question that would not leave me alone. We keep reading that language models can hack now. There are demos, there are leaderboards, there are papers with impressive single numbers. So I wanted to know the version of that claim that actually matters to me, a person who ships small web apps: can a model I run on my own laptop, with no cloud, no frontier API, find the security bugs in an app I wrote, the way a human reviewer would?&lt;/p&gt;</description></item><item><title>A factory I wouldn't fake</title><link>https://t0ul.com/blog/eva-a-factory-i-wouldnt-fake/</link><pubDate>Mon, 05 Oct 2026 00:00:00 +0000</pubDate><guid>https://t0ul.com/blog/eva-a-factory-i-wouldnt-fake/</guid><description>&lt;p&gt;&lt;em&gt;Part of my EVA series, where I build the cockpit I pilot &lt;a href="https://github.com/t0ul/GORED"&gt;GORED&lt;/a&gt; runs from. &lt;a href="https://t0ul.com/blog/eva-a-sortie-log-that-survives-a-restart/"&gt;Last time&lt;/a&gt; I gave runs a durable home so they survive a restart. This post is about the one surface I refused to fake, and what it took to make it real. Code in &lt;a href="https://github.com/t0ul/GORED"&gt;t0ul/GORED&lt;/a&gt;; write-ups in &lt;a href="https://github.com/t0ul/ai-security-engineering"&gt;t0ul/ai-security-engineering&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;h2 id="intro"&gt;Intro&lt;/h2&gt;
&lt;p&gt;Every cockpit wants a factory behind it, and EVA&amp;rsquo;s is Studio: the place the skills a run is built from are meant to be authored, tried, and saved. I built it, and then for a while I would not let you save. You could list every skill, read it, pick it, and the edit button was not there, on purpose. That restraint is the first half of this post, because it is the same standard I hold every number in this project to. The second half is the payoff, because the piece that was missing has since landed, and the editor is real now in the one way that matters: a skill you change actually changes the next run.&lt;/p&gt;</description></item><item><title>A sortie log that survives a restart</title><link>https://t0ul.com/blog/eva-a-sortie-log-that-survives-a-restart/</link><pubDate>Mon, 21 Sep 2026 00:00:00 +0000</pubDate><guid>https://t0ul.com/blog/eva-a-sortie-log-that-survives-a-restart/</guid><description>&lt;p&gt;&lt;em&gt;Part of my EVA series, where I build the cockpit I pilot &lt;a href="https://github.com/t0ul/GORED"&gt;GORED&lt;/a&gt; runs from. &lt;a href="https://t0ul.com/blog/eva-watching-it-think/"&gt;Last time&lt;/a&gt; I streamed a live run to the browser by tailing its trace. This post is what happens when those runs pile up and I want them to survive a restart. Code in &lt;a href="https://github.com/t0ul/GORED"&gt;t0ul/GORED&lt;/a&gt;; write-ups in &lt;a href="https://github.com/t0ul/ai-security-engineering"&gt;t0ul/ai-security-engineering&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;h2 id="intro"&gt;Intro&lt;/h2&gt;
&lt;p&gt;Once I could watch a run, I started doing a lot of them. Different models, different prompts, the same target, trying to build a feel for what moved the needle. And every one of them left a trace file in a directory, which was fine, but the cockpit&amp;rsquo;s sense of what runs existed lived in memory. So the first time I restarted the server to ship a change, my whole afternoon of sorties vanished from the list. The traces were still on disk, but EVA had forgotten they happened.&lt;/p&gt;</description></item><item><title>Watching it think</title><link>https://t0ul.com/blog/eva-watching-it-think/</link><pubDate>Mon, 07 Sep 2026 00:00:00 +0000</pubDate><guid>https://t0ul.com/blog/eva-watching-it-think/</guid><description>&lt;p&gt;&lt;em&gt;Part of my EVA series, where I build the cockpit I pilot &lt;a href="https://github.com/t0ul/GORED"&gt;GORED&lt;/a&gt; runs from. The &lt;a href="https://t0ul.com/blog/eva-llm-proposes-human-disposes/"&gt;last post&lt;/a&gt; was the seam that lets a piloted run and a headless CI run be one loop. This one turns the dial down and actually watches a run go. Code in &lt;a href="https://github.com/t0ul/GORED"&gt;t0ul/GORED&lt;/a&gt;; write-ups in &lt;a href="https://github.com/t0ul/ai-security-engineering"&gt;t0ul/ai-security-engineering&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;h2 id="intro"&gt;Intro&lt;/h2&gt;
&lt;p&gt;My first run page was embarrassing. It used a meta refresh, the old trick where the page reloads itself every couple of seconds, and watching a run through it felt like watching a kettle by blinking. You would catch the state at two-second strobes, the page would jump to the top on every reload, and a fast run would be half over before the first refresh landed. It worked, in the sense that the numbers were eventually right, but it was no way to watch a model think.&lt;/p&gt;</description></item><item><title>LLM proposes, human disposes, on a dial</title><link>https://t0ul.com/blog/eva-llm-proposes-human-disposes/</link><pubDate>Mon, 24 Aug 2026 00:00:00 +0000</pubDate><guid>https://t0ul.com/blog/eva-llm-proposes-human-disposes/</guid><description>&lt;p&gt;&lt;em&gt;Part of my EVA series, where I build the cockpit I pilot &lt;a href="https://github.com/t0ul/GORED"&gt;GORED&lt;/a&gt; runs from. Last time I made the case that EVA is a thin window over the one engine my command line and CI already run. This post is about the seam that lets a human-piloted run and an autonomous CI run be that one engine. Code lives in &lt;a href="https://github.com/t0ul/GORED"&gt;t0ul/GORED&lt;/a&gt;; write-ups in &lt;a href="https://github.com/t0ul/ai-security-engineering"&gt;t0ul/ai-security-engineering&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;</description></item><item><title>A cockpit for the red-team runs</title><link>https://t0ul.com/blog/eva-a-cockpit-for-the-runs/</link><pubDate>Mon, 10 Aug 2026 00:00:00 +0000</pubDate><guid>https://t0ul.com/blog/eva-a-cockpit-for-the-runs/</guid><description>&lt;p&gt;&lt;em&gt;Part of my EVA series, where I build the cockpit I pilot &lt;a href="https://github.com/t0ul/GORED"&gt;GORED&lt;/a&gt; runs from. GORED is the harness that points small local language models at my own web apps and measures, honestly, whether they can break them; EVA is the web surface I drive it from. The harness and the cockpit both live in &lt;a href="https://github.com/t0ul/GORED"&gt;t0ul/GORED&lt;/a&gt;, and these write-ups live in &lt;a href="https://github.com/t0ul/ai-security-engineering"&gt;t0ul/ai-security-engineering&lt;/a&gt;. Every run EVA shows you is a kept, hash-verified trace.&lt;/em&gt;&lt;/p&gt;</description></item></channel></rss>