<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Attack-Driven-Design on t0ul</title><link>https://t0ul.com/tags/attack-driven-design/</link><description>Recent content in Attack-Driven-Design on t0ul</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Tue, 26 May 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://t0ul.com/tags/attack-driven-design/index.xml" rel="self" type="application/rss+xml"/><item><title>Attack-Driven Design, shown once</title><link>https://t0ul.com/blog/attack-driven-design-shown-once/</link><pubDate>Tue, 26 Aug 2025 00:00:00 +0000</pubDate><guid>https://t0ul.com/blog/attack-driven-design-shown-once/</guid><description>&lt;p&gt;&lt;em&gt;Part of my &lt;a href="https://t0ul.com/blog/the-plan/"&gt;AI Security Engineering&lt;/a&gt; series, a local email-to-calendar agent I build, then attack, then harden. If you have not set up the lab yet, start with &lt;a href="https://t0ul.com/blog/setting-up-the-lab/"&gt;Set up your lab&lt;/a&gt;. The lessons are &lt;a href="https://github.com/t0ul/ai-security-engineering"&gt;on GitHub&lt;/a&gt;, and the agent itself lives at &lt;a href="https://github.com/t0ul/emaildrop"&gt;t0ul/emaildrop&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;h2 id="a-model-changes-the-problem"&gt;A model changes the problem&lt;/h2&gt;
&lt;p&gt;In &lt;a href="https://t0ul.com/blog/setting-up-the-lab/"&gt;the last post&lt;/a&gt; the agent read an email with a set of hand-written rules, no AI involved. That version is predictable: the same email gives the same answer every time, which is exactly what you want from a baseline. Now that your lab has a model running, you can point the agent at it instead. With &lt;code&gt;modeld&lt;/code&gt; up in one terminal, run this in another, from the &lt;code&gt;emaildrop&lt;/code&gt; checkout you built in the setup post:&lt;/p&gt;</description></item><item><title>The one-command scorecard</title><link>https://t0ul.com/blog/the-one-command-scorecard/</link><pubDate>Tue, 28 Apr 2026 00:00:00 +0000</pubDate><guid>https://t0ul.com/blog/the-one-command-scorecard/</guid><description>&lt;p&gt;&lt;em&gt;Part of my &lt;a href="https://t0ul.com/blog/the-plan/"&gt;AI Security Engineering&lt;/a&gt; series, a local email-to-calendar agent I build, then attack, then harden. If you have not set up the lab yet, start with &lt;a href="https://t0ul.com/blog/setting-up-the-lab/"&gt;Set up your lab&lt;/a&gt;. The lessons are &lt;a href="https://github.com/t0ul/ai-security-engineering"&gt;on GitHub&lt;/a&gt;, and the agent itself lives at &lt;a href="https://github.com/t0ul/emaildrop"&gt;t0ul/emaildrop&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;h2 id="from-a-pile-of-tests-to-one-command"&gt;From a pile of tests to one command&lt;/h2&gt;
&lt;p&gt;Five parts in, the agent is covered by dozens of before/after tests, each one an attack that lands without a control and is blocked with it. That is a lot of green, and green that nobody runs is just a feeling again. Part 6 is about the flywheel: the machinery that keeps all of this true as the agent grows, starting with the simplest piece, a single command that scores every control at once and fails loudly the moment one regresses.&lt;/p&gt;</description></item><item><title>From pattern to library</title><link>https://t0ul.com/blog/from-pattern-to-library/</link><pubDate>Tue, 05 May 2026 00:00:00 +0000</pubDate><guid>https://t0ul.com/blog/from-pattern-to-library/</guid><description>&lt;p&gt;&lt;em&gt;Part of my &lt;a href="https://t0ul.com/blog/the-plan/"&gt;AI Security Engineering&lt;/a&gt; series, a local email-to-calendar agent I build, then attack, then harden. If you have not set up the lab yet, start with &lt;a href="https://t0ul.com/blog/setting-up-the-lab/"&gt;Set up your lab&lt;/a&gt;. The lessons are &lt;a href="https://github.com/t0ul/ai-security-engineering"&gt;on GitHub&lt;/a&gt;, and the agent itself lives at &lt;a href="https://github.com/t0ul/emaildrop"&gt;t0ul/emaildrop&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;h2 id="the-same-shape-written-out-too-many-times"&gt;The same shape, written out too many times&lt;/h2&gt;
&lt;p&gt;By now you have read the same test two dozen times. Fire an attack at the control removed, confirm it lands. Fire it at the real control, confirm it is blocked. Read the result with an oracle. The only part that ever changes is the control and the attack; everything else is ceremony, and ceremony repeated by hand drifts, which is how you end up with a test that quietly stopped being able to fail.&lt;/p&gt;</description></item><item><title>ADD on an app that is not this one</title><link>https://t0ul.com/blog/add-on-an-app-that-is-not-this-one/</link><pubDate>Tue, 26 May 2026 00:00:00 +0000</pubDate><guid>https://t0ul.com/blog/add-on-an-app-that-is-not-this-one/</guid><description>&lt;p&gt;&lt;em&gt;Part of my &lt;a href="https://t0ul.com/blog/the-plan/"&gt;AI Security Engineering&lt;/a&gt; series, a local email-to-calendar agent I build, then attack, then harden. If you have not set up the lab yet, start with &lt;a href="https://t0ul.com/blog/setting-up-the-lab/"&gt;Set up your lab&lt;/a&gt;. The lessons are &lt;a href="https://github.com/t0ul/ai-security-engineering"&gt;on GitHub&lt;/a&gt;, and the agent itself lives at &lt;a href="https://github.com/t0ul/emaildrop"&gt;t0ul/emaildrop&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;h2 id="the-claim-under-the-whole-book"&gt;The claim under the whole book&lt;/h2&gt;
&lt;p&gt;Thirty-odd lessons have attacked one agent. That is a good way to learn, and a bad way to end, because the thing worth taking away is not how emaildrop is secured, it is the method: build it, attack the real thing, resolve, re-attack live, keep every row wired. If that method only works on the app it was invented for, it is a story. If it drops onto an app it has never seen, it is a tool.&lt;/p&gt;</description></item></channel></rss>