<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Aguilera Engineering</title><link>https://aguilera.ee/blog/</link><description>Recent content on Aguilera Engineering</description><generator>Hugo -- gohugo.io</generator><language>en-US</language><managingEditor>eduardo@aguilera.ee (Eduardo Aguilera)</managingEditor><webMaster>eduardo@aguilera.ee (Eduardo Aguilera)</webMaster><copyright>Eduardo Aguilera</copyright><lastBuildDate>Mon, 01 Jun 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://aguilera.ee/blog/index.xml" rel="self" type="application/rss+xml"/><item><title>/copy</title><link>https://aguilera.ee/blog/learn-claude-code/copy/</link><pubDate>Mon, 01 Jun 2026 00:00:00 +0000</pubDate><author>eduardo@aguilera.ee (Eduardo Aguilera)</author><guid>https://aguilera.ee/blog/learn-claude-code/copy/</guid><description>&lt;p&gt;&lt;code&gt;/copy&lt;/code&gt; puts the last assistant response on your clipboard.&lt;/p&gt;
&lt;p&gt;If the response has code blocks, a picker lets you grab just one instead of the
whole thing. Pass a number to reach further back: &lt;code&gt;/copy 3&lt;/code&gt; copies the third most
recent response. Press &lt;code&gt;w&lt;/code&gt; to write to a file instead of the clipboard.&lt;/p&gt;





&lt;pre tabindex="0"&gt;&lt;code&gt;&amp;gt; /copy

 Select content to copy:
 ─────────────────────────────────────────────
 &amp;gt; 1. Full response
 2. Code block (sql) SELECT id FROM users…
 3. Code block (sql) WITH active AS (…)
 4. Code block (sql) SELECT count(*) FROM…

 ↑↓ navigate ↵ copy w write to file&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;I reach for it when Claude writes a query or a config block and I want it in the
editor without selecting across a scrolled terminal.&lt;/p&gt;</description><content:encoded><![CDATA[<p><code>/copy</code> puts the last assistant response on your clipboard.</p>
<p>If the response has code blocks, a picker lets you grab just one instead of the
whole thing. Pass a number to reach further back: <code>/copy 3</code> copies the third most
recent response. Press <code>w</code> to write to a file instead of the clipboard.</p>





<pre tabindex="0"><code>&gt; /copy

   Select content to copy:
   ─────────────────────────────────────────────
 &gt; 1. Full response
   2. Code block (sql)   SELECT id FROM users…
   3. Code block (sql)   WITH active AS (…)
   4. Code block (sql)   SELECT count(*) FROM…

   ↑↓ navigate   ↵ copy   w write to file</code></pre><p>I reach for it when Claude writes a query or a config block and I want it in the
editor without selecting across a scrolled terminal.</p>
]]></content:encoded></item><item><title>Why I quote fixed scope</title><link>https://aguilera.ee/blog/fixed-scope/</link><pubDate>Wed, 27 May 2026 00:00:00 +0000</pubDate><author>eduardo@aguilera.ee (Eduardo Aguilera)</author><guid>https://aguilera.ee/blog/fixed-scope/</guid><description>&lt;p&gt;Engagement-based pricing protects the vendor, not the client. The incentive runs
the wrong way: the longer it takes, the more they earn.&lt;/p&gt;
&lt;p&gt;I quote the work, not the hours. Eight weeks, fixed scope, a number you can put
in a budget. If I&amp;rsquo;m wrong about the estimate, that&amp;rsquo;s my problem to solve, not a
line item on your invoice.&lt;/p&gt;
&lt;p&gt;This only works because I write the code myself. There&amp;rsquo;s no team to staff, no
margin to pad, no handoff where the estimate quietly doubles. You&amp;rsquo;re hiring the
person doing the work.&lt;/p&gt;</description><content:encoded><![CDATA[<p>Engagement-based pricing protects the vendor, not the client. The incentive runs
the wrong way: the longer it takes, the more they earn.</p>
<p>I quote the work, not the hours. Eight weeks, fixed scope, a number you can put
in a budget. If I&rsquo;m wrong about the estimate, that&rsquo;s my problem to solve, not a
line item on your invoice.</p>
<p>This only works because I write the code myself. There&rsquo;s no team to staff, no
margin to pad, no handoff where the estimate quietly doubles. You&rsquo;re hiring the
person doing the work.</p>
<p>Concrete beats abstract. A fixed number you can plan around beats a rate card
and a hope.</p>
]]></content:encoded></item><item><title>Evals before claims</title><link>https://aguilera.ee/blog/evals-before-claims/</link><pubDate>Wed, 20 May 2026 00:00:00 +0000</pubDate><author>eduardo@aguilera.ee (Eduardo Aguilera)</author><guid>https://aguilera.ee/blog/evals-before-claims/</guid><description>&lt;p&gt;Most AI features ship on vibes. Someone tries three prompts, the output looks
good, and it goes to production. Then it fails quietly on the fourth case and
nobody notices until a customer does.&lt;/p&gt;
&lt;p&gt;Write the eval first. Pin the cases you care about. Measure before you claim the
feature works.&lt;/p&gt;





&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;test_extraction&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;cases&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;2&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;passed&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;3&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;cases&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;4&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;extract&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;case&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;input&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;5&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;passed&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="k"&gt;case&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;expected&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;6&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;passed&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="nb"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;cases&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;An eval is not a unit test. It is a measurement you keep running as the model,
the prompt, and the data drift underneath you. Treat the score as a contract.&lt;/p&gt;</description><content:encoded><![CDATA[<p>Most AI features ship on vibes. Someone tries three prompts, the output looks
good, and it goes to production. Then it fails quietly on the fourth case and
nobody notices until a customer does.</p>
<p>Write the eval first. Pin the cases you care about. Measure before you claim the
feature works.</p>





<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="ln">1</span><span class="cl"><span class="k">def</span> <span class="nf">test_extraction</span><span class="p">(</span><span class="n">model</span><span class="p">,</span> <span class="n">cases</span><span class="p">):</span>
</span></span><span class="line"><span class="ln">2</span><span class="cl">    <span class="n">passed</span> <span class="o">=</span> <span class="mi">0</span>
</span></span><span class="line"><span class="ln">3</span><span class="cl">    <span class="k">for</span> <span class="k">case</span> <span class="ow">in</span> <span class="n">cases</span><span class="p">:</span>
</span></span><span class="line"><span class="ln">4</span><span class="cl">        <span class="n">result</span> <span class="o">=</span> <span class="n">model</span><span class="o">.</span><span class="n">extract</span><span class="p">(</span><span class="k">case</span><span class="o">.</span><span class="n">input</span><span class="p">)</span>
</span></span><span class="line"><span class="ln">5</span><span class="cl">        <span class="n">passed</span> <span class="o">+=</span> <span class="n">result</span> <span class="o">==</span> <span class="k">case</span><span class="o">.</span><span class="n">expected</span>
</span></span><span class="line"><span class="ln">6</span><span class="cl">    <span class="k">return</span> <span class="n">passed</span> <span class="o">/</span> <span class="nb">len</span><span class="p">(</span><span class="n">cases</span><span class="p">)</span></span></span></code></pre></div><p>An eval is not a unit test. It is a measurement you keep running as the model,
the prompt, and the data drift underneath you. Treat the score as a contract.</p>
<p>The discipline is old. The subject is new. That&rsquo;s the whole job.</p>
]]></content:encoded></item><item><title>I wrote a text file instead of a RAG</title><link>https://aguilera.ee/blog/llms-txt/</link><pubDate>Wed, 22 Apr 2026 00:00:00 +0000</pubDate><author>eduardo@aguilera.ee (Eduardo Aguilera)</author><guid>https://aguilera.ee/blog/llms-txt/</guid><description>&lt;p&gt;Instead of building a RAG pipeline, I wrote a text file.&lt;/p&gt;
&lt;p&gt;A team I worked with had a system changing faster than they could spread the
knowledge around the company.&lt;/p&gt;
&lt;p&gt;Every consultant says &amp;ldquo;build a RAG.&amp;rdquo; What they leave out is the data pipeline
underneath it: engineering effort, time, money.&lt;/p&gt;
&lt;p&gt;The team uses Elixir, which keeps documentation next to the code and exports it as
Markdown. I exposed that documentation through &lt;code&gt;/llms.txt&lt;/code&gt;, a plain text file at a
known URL that tells AI tools where to find your docs.&lt;/p&gt;</description><content:encoded><![CDATA[<p>Instead of building a RAG pipeline, I wrote a text file.</p>
<p>A team I worked with had a system changing faster than they could spread the
knowledge around the company.</p>
<p>Every consultant says &ldquo;build a RAG.&rdquo; What they leave out is the data pipeline
underneath it: engineering effort, time, money.</p>
<p>The team uses Elixir, which keeps documentation next to the code and exports it as
Markdown. I exposed that documentation through <code>/llms.txt</code>, a plain text file at a
known URL that tells AI tools where to find your docs.</p>
<p>Another microservice? Another line in the file.</p>
<p>Anthropic does this for Claude&rsquo;s own docs. Ask Claude about its features and it
uses the claude-code-guide skill, fetching Markdown from the public internet.</p>
<p>Within a couple of hours, product managers and analysts could see exactly how the
product behaves in production, with no new tools.</p>
<p>Even in AI, fundamentals win.</p>
]]></content:encoded></item><item><title>The ticket is the spec</title><link>https://aguilera.ee/blog/plan-mode/</link><pubDate>Mon, 20 Apr 2026 00:00:00 +0000</pubDate><author>eduardo@aguilera.ee (Eduardo Aguilera)</author><guid>https://aguilera.ee/blog/plan-mode/</guid><description>&lt;p&gt;I spend more time writing ticket descriptions than writing code.&lt;/p&gt;
&lt;p&gt;Examples of what success looks like, plus references to similar past work, let
Claude ship a feature in 20 minutes. The ticket becomes the spec.&lt;/p&gt;
&lt;p&gt;I use Claude Code&amp;rsquo;s plan mode. It explores the codebase, interviews me to clarify
the requirements, and lays out a multi-step plan. I just say &amp;ldquo;implement ticket
XX.&amp;rdquo; Activate it with Shift+Tab in the CLI.&lt;/p&gt;</description><content:encoded><![CDATA[<p>I spend more time writing ticket descriptions than writing code.</p>
<p>Examples of what success looks like, plus references to similar past work, let
Claude ship a feature in 20 minutes. The ticket becomes the spec.</p>
<p>I use Claude Code&rsquo;s plan mode. It explores the codebase, interviews me to clarify
the requirements, and lays out a multi-step plan. I just say &ldquo;implement ticket
XX.&rdquo; Activate it with Shift+Tab in the CLI.</p>
]]></content:encoded></item><item><title>Optimize your CLAUDE.md for Claude</title><link>https://aguilera.ee/blog/claude-md-content/</link><pubDate>Tue, 14 Apr 2026 00:00:00 +0000</pubDate><author>eduardo@aguilera.ee (Eduardo Aguilera)</author><guid>https://aguilera.ee/blog/claude-md-content/</guid><description>&lt;p&gt;Claude reads your CLAUDE.md file. Write it for Claude.&lt;/p&gt;
&lt;p&gt;&amp;ldquo;What should I put in my CLAUDE.md&amp;rdquo; is the question I hear most from engineers
trying to speed up their work.&lt;/p&gt;
&lt;p&gt;The common mistake is treating it as documentation for product managers. &amp;ldquo;We&amp;rsquo;re
explaining what the code does anyway, so we&amp;rsquo;ll use it as docs.&amp;rdquo; Wrong.&lt;/p&gt;
&lt;p&gt;Give Claude directions for finding the right information.&lt;/p&gt;
&lt;p&gt;Bad: &amp;ldquo;In the class Calculator I export the methods sum and subtract.&amp;rdquo;&lt;/p&gt;</description><content:encoded><![CDATA[<p>Claude reads your CLAUDE.md file. Write it for Claude.</p>
<p>&ldquo;What should I put in my CLAUDE.md&rdquo; is the question I hear most from engineers
trying to speed up their work.</p>
<p>The common mistake is treating it as documentation for product managers. &ldquo;We&rsquo;re
explaining what the code does anyway, so we&rsquo;ll use it as docs.&rdquo; Wrong.</p>
<p>Give Claude directions for finding the right information.</p>
<p>Bad: &ldquo;In the class Calculator I export the methods sum and subtract.&rdquo;</p>
<p>Good: &ldquo;To do math, look at the Calculator class.&rdquo;</p>
]]></content:encoded></item><item><title>Documentation is a moat</title><link>https://aguilera.ee/blog/documentation-is-a-moat/</link><pubDate>Wed, 18 Mar 2026 00:00:00 +0000</pubDate><author>eduardo@aguilera.ee (Eduardo Aguilera)</author><guid>https://aguilera.ee/blog/documentation-is-a-moat/</guid><description>&lt;p&gt;You can&amp;rsquo;t fit your whole company in one prompt yet.&lt;/p&gt;
&lt;p&gt;Mid-sized companies treat documentation as nice to have. Agile made it feel
useless, so teams stopped writing it.&lt;/p&gt;
&lt;p&gt;Your agents need context to work across your stack. That makes documentation a
moat.&lt;/p&gt;
&lt;p&gt;Stop asking agents to &amp;ldquo;research this codebase thoroughly.&amp;rdquo; Document it once. Save
the tokens.&lt;/p&gt;</description><content:encoded><![CDATA[<p>You can&rsquo;t fit your whole company in one prompt yet.</p>
<p>Mid-sized companies treat documentation as nice to have. Agile made it feel
useless, so teams stopped writing it.</p>
<p>Your agents need context to work across your stack. That makes documentation a
moat.</p>
<p>Stop asking agents to &ldquo;research this codebase thoroughly.&rdquo; Document it once. Save
the tokens.</p>
]]></content:encoded></item><item><title>Skills over MCP servers</title><link>https://aguilera.ee/blog/skills-vs-mcp/</link><pubDate>Thu, 05 Mar 2026 00:00:00 +0000</pubDate><author>eduardo@aguilera.ee (Eduardo Aguilera)</author><guid>https://aguilera.ee/blog/skills-vs-mcp/</guid><description>&lt;p&gt;I use Skills instead of MCP servers.&lt;/p&gt;
&lt;p&gt;MCP servers port existing APIs into something agents can use. They also eat your
context window with verbose definitions.&lt;/p&gt;
&lt;p&gt;Skills are small markdown files with instructions for using CLI tools. They load
into context only when your question matches the skill&amp;rsquo;s description.&lt;/p&gt;
&lt;p&gt;I tested reading my reminders list through Claude Code. The Skill used 40
tokens. The MCP server used 749. Multiply that across the dozens of tools a power
user touches and Skills scale better.&lt;/p&gt;</description><content:encoded><![CDATA[<p>I use Skills instead of MCP servers.</p>
<p>MCP servers port existing APIs into something agents can use. They also eat your
context window with verbose definitions.</p>
<p>Skills are small markdown files with instructions for using CLI tools. They load
into context only when your question matches the skill&rsquo;s description.</p>
<p>I tested reading my reminders list through Claude Code. The Skill used 40
tokens. The MCP server used 749. Multiply that across the dozens of tools a power
user touches and Skills scale better.</p>
<p>Some of your MCP servers are a markdown file waiting to happen.</p>
]]></content:encoded></item><item><title>A SPEC.md is the difference</title><link>https://aguilera.ee/blog/spec-file/</link><pubDate>Wed, 18 Feb 2026 00:00:00 +0000</pubDate><author>eduardo@aguilera.ee (Eduardo Aguilera)</author><guid>https://aguilera.ee/blog/spec-file/</guid><description>&lt;p&gt;A SPEC.md file is the difference between vibe coding and software engineering.&lt;/p&gt;
&lt;p&gt;For a complex feature I write a spec and hand it to the agent to turn into an
implementation plan. What goes in it:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Introduction.&lt;/strong&gt; &amp;ldquo;You are building a dashboard to change settings on a
security platform.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Problem.&lt;/strong&gt; If it knows why, it finds solutions I didn&amp;rsquo;t think of.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Scope.&lt;/strong&gt; Keeps it focused on what I want.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Out of scope.&lt;/strong&gt; Paradoxically, this sharpens the scope.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Functional requirements.&lt;/strong&gt; The list of tasks to complete.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Non-functional requirements.&lt;/strong&gt; Respects my architectural decisions.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;References and glossary.&lt;/strong&gt; Points it at the knowledge it should read.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The spec is where the thinking happens. The code is the easy part.&lt;/p&gt;</description><content:encoded><![CDATA[<p>A SPEC.md file is the difference between vibe coding and software engineering.</p>
<p>For a complex feature I write a spec and hand it to the agent to turn into an
implementation plan. What goes in it:</p>
<ul>
<li><strong>Introduction.</strong> &ldquo;You are building a dashboard to change settings on a
security platform.&rdquo;</li>
<li><strong>Problem.</strong> If it knows why, it finds solutions I didn&rsquo;t think of.</li>
<li><strong>Scope.</strong> Keeps it focused on what I want.</li>
<li><strong>Out of scope.</strong> Paradoxically, this sharpens the scope.</li>
<li><strong>Functional requirements.</strong> The list of tasks to complete.</li>
<li><strong>Non-functional requirements.</strong> Respects my architectural decisions.</li>
<li><strong>References and glossary.</strong> Points it at the knowledge it should read.</li>
</ul>
<p>The spec is where the thinking happens. The code is the easy part.</p>
]]></content:encoded></item><item><title>Claude Code can't see</title><link>https://aguilera.ee/blog/claude-cant-see/</link><pubDate>Fri, 13 Feb 2026 00:00:00 +0000</pubDate><author>eduardo@aguilera.ee (Eduardo Aguilera)</author><guid>https://aguilera.ee/blog/claude-cant-see/</guid><description>&lt;p&gt;Claude Code doesn&amp;rsquo;t have eyes.&lt;/p&gt;
&lt;p&gt;Agents feel natural enough that you start treating them like coworkers. Then you
forget they can&amp;rsquo;t read your nonverbal cues.&lt;/p&gt;
&lt;p&gt;Stop saying &amp;ldquo;this&amp;rdquo; and &amp;ldquo;that&amp;rdquo; to your coding agent. It doesn&amp;rsquo;t know what you mean.
Say &amp;ldquo;do the research first, then build the website.&amp;rdquo;&lt;/p&gt;</description><content:encoded><![CDATA[<p>Claude Code doesn&rsquo;t have eyes.</p>
<p>Agents feel natural enough that you start treating them like coworkers. Then you
forget they can&rsquo;t read your nonverbal cues.</p>
<p>Stop saying &ldquo;this&rdquo; and &ldquo;that&rdquo; to your coding agent. It doesn&rsquo;t know what you mean.
Say &ldquo;do the research first, then build the website.&rdquo;</p>
]]></content:encoded></item><item><title>Stop using AI in your browser</title><link>https://aguilera.ee/blog/media-server/</link><pubDate>Fri, 16 Jan 2026 00:00:00 +0000</pubDate><author>eduardo@aguilera.ee (Eduardo Aguilera)</author><guid>https://aguilera.ee/blog/media-server/</guid><description>&lt;p&gt;I set up a home media server with Claude Code in two hours, after failing for two
days.&lt;/p&gt;
&lt;p&gt;I started in the browser version of Claude, learning what to do and which
commands to run. No success.&lt;/p&gt;
&lt;p&gt;So I asked it for one thing: &amp;ldquo;Give me a prompt to ask an AI to do this for me.&amp;rdquo; I
pasted that prompt into Claude Code. Everything worked in two hours.&lt;/p&gt;
&lt;p&gt;Mission critical? No. Fun? Yes. Can I watch my movies? Yes.&lt;/p&gt;</description><content:encoded><![CDATA[<p>I set up a home media server with Claude Code in two hours, after failing for two
days.</p>
<p>I started in the browser version of Claude, learning what to do and which
commands to run. No success.</p>
<p>So I asked it for one thing: &ldquo;Give me a prompt to ask an AI to do this for me.&rdquo; I
pasted that prompt into Claude Code. Everything worked in two hours.</p>
<p>Mission critical? No. Fun? Yes. Can I watch my movies? Yes.</p>
<p>Claude Code is for anyone with a computer, not just developers.</p>
]]></content:encoded></item><item><title>Tell the AI who you are</title><link>https://aguilera.ee/blog/tell-ai-who-you-are/</link><pubDate>Fri, 16 Jan 2026 00:00:00 +0000</pubDate><author>eduardo@aguilera.ee (Eduardo Aguilera)</author><guid>https://aguilera.ee/blog/tell-ai-who-you-are/</guid><description>&lt;p&gt;Give the AI a role in your first sentence. &amp;ldquo;Be a project manager.&amp;rdquo; &amp;ldquo;Be a software
engineer.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;Then tell it who you are. &amp;ldquo;Be a systems administrator talking to a business major
with Excel experience. How can I see files that live on a different computer? We
use Mac.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;I reach for this every time I start something new.&lt;/p&gt;</description><content:encoded><![CDATA[<p>Give the AI a role in your first sentence. &ldquo;Be a project manager.&rdquo; &ldquo;Be a software
engineer.&rdquo;</p>
<p>Then tell it who you are. &ldquo;Be a systems administrator talking to a business major
with Excel experience. How can I see files that live on a different computer? We
use Mac.&rdquo;</p>
<p>I reach for this every time I start something new.</p>
]]></content:encoded></item><item><title>The cost of the best models</title><link>https://aguilera.ee/blog/cost-of-the-best-models/</link><pubDate>Wed, 07 Jan 2026 00:00:00 +0000</pubDate><author>eduardo@aguilera.ee (Eduardo Aguilera)</author><guid>https://aguilera.ee/blog/cost-of-the-best-models/</guid><description>&lt;p&gt;The best models, per seat:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ChatGPT Business: 30 dollars&lt;/li&gt;
&lt;li&gt;Claude Pro: 20 dollars&lt;/li&gt;
&lt;li&gt;Gemini Enterprise: 21 dollars&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Unless you&amp;rsquo;re on a Business plan, OpenAI and Gemini train on your data. More on
that &lt;a href="https://aguilera.ee/blog/openai-trains-on-your-data/"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;That&amp;rsquo;s 71 dollars per person on starter plans, and it climbs the moment you
exhaust the quotas. Expensive, and hard to control securely at scale.&lt;/p&gt;
&lt;p&gt;One subscription, all three, or something else entirely is a real decision.&lt;/p&gt;</description><content:encoded><![CDATA[<p>The best models, per seat:</p>
<ul>
<li>ChatGPT Business: 30 dollars</li>
<li>Claude Pro: 20 dollars</li>
<li>Gemini Enterprise: 21 dollars</li>
</ul>
<p>Unless you&rsquo;re on a Business plan, OpenAI and Gemini train on your data. More on
that <a href="/blog/openai-trains-on-your-data/">here</a>.</p>
<p>That&rsquo;s 71 dollars per person on starter plans, and it climbs the moment you
exhaust the quotas. Expensive, and hard to control securely at scale.</p>
<p>One subscription, all three, or something else entirely is a real decision.</p>
]]></content:encoded></item><item><title>Is OpenAI training on your data?</title><link>https://aguilera.ee/blog/openai-trains-on-your-data/</link><pubDate>Tue, 06 Jan 2026 00:00:00 +0000</pubDate><author>eduardo@aguilera.ee (Eduardo Aguilera)</author><guid>https://aguilera.ee/blog/openai-trains-on-your-data/</guid><description>&lt;p&gt;Is OpenAI training its models on your data?&lt;/p&gt;
&lt;p&gt;Short answer: yes. On the Free, Go, Plus, and Pro plans, your data is used for
training. On Business and Enterprise, it isn&amp;rsquo;t.&lt;/p&gt;
&lt;p&gt;Worth knowing before you hand ChatGPT subscriptions to your team.&lt;/p&gt;</description><content:encoded><![CDATA[<p>Is OpenAI training its models on your data?</p>
<p>Short answer: yes. On the Free, Go, Plus, and Pro plans, your data is used for
training. On Business and Enterprise, it isn&rsquo;t.</p>
<p>Worth knowing before you hand ChatGPT subscriptions to your team.</p>
]]></content:encoded></item><item><title>Jevons paradox in the AI era</title><link>https://aguilera.ee/blog/jevons-paradox/</link><pubDate>Thu, 25 Dec 2025 00:00:00 +0000</pubDate><author>eduardo@aguilera.ee (Eduardo Aguilera)</author><guid>https://aguilera.ee/blog/jevons-paradox/</guid><description>&lt;p&gt;Smart CEOs are hiring more people in the AI era, not fewer.&lt;/p&gt;
&lt;p&gt;Jevons paradox: when a technology makes a resource more efficient to use, total
consumption of that resource often goes up. Lower cost raises demand and creates
more work overall.&lt;/p&gt;
&lt;p&gt;When steam engines got fuel efficient, coal consumption rose. It started the
industrial revolution, not its end.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve felt it firsthand, testing 43 files in an hour. GitHub&amp;rsquo;s data shows
developers using Copilot write more code, not less. Features that took weeks now
get prototyped in hours by one engineer.&lt;/p&gt;</description><content:encoded><![CDATA[<p>Smart CEOs are hiring more people in the AI era, not fewer.</p>
<p>Jevons paradox: when a technology makes a resource more efficient to use, total
consumption of that resource often goes up. Lower cost raises demand and creates
more work overall.</p>
<p>When steam engines got fuel efficient, coal consumption rose. It started the
industrial revolution, not its end.</p>
<p>I&rsquo;ve felt it firsthand, testing 43 files in an hour. GitHub&rsquo;s data shows
developers using Copilot write more code, not less. Features that took weeks now
get prototyped in hours by one engineer.</p>
<p>The question is whether you cut headcount or raise throughput.</p>
<p><a href="https://github.blog/news-insights/research/research-quantifying-github-copilots-impact-on-developer-productivity-and-happiness/">GitHub&rsquo;s research on Copilot and developer productivity</a>.</p>
]]></content:encoded></item><item><title>Stop using the wrong AI for the job</title><link>https://aguilera.ee/blog/wrong-ai-for-the-job/</link><pubDate>Thu, 25 Dec 2025 00:00:00 +0000</pubDate><author>eduardo@aguilera.ee (Eduardo Aguilera)</author><guid>https://aguilera.ee/blog/wrong-ai-for-the-job/</guid><description>&lt;p&gt;Not every model trains on the same data. Each one leads its own category.
Berkeley&amp;rsquo;s LMArena lets you compare models side by side and casts votes on a
public leaderboard.&lt;/p&gt;
&lt;p&gt;The leaders in December 2025:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Text: Gemini 3 Pro&lt;/li&gt;
&lt;li&gt;Coding: Claude Opus 4.5&lt;/li&gt;
&lt;li&gt;Text-to-image: GPT Image 1.5&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I asked Claude and Gemini for a title for this post. Gemini was thorough: three
options across three angles, with a recommendation. Claude gave me half as many
and no reasoning.&lt;/p&gt;</description><content:encoded><![CDATA[<p>Not every model trains on the same data. Each one leads its own category.
Berkeley&rsquo;s LMArena lets you compare models side by side and casts votes on a
public leaderboard.</p>
<p>The leaders in December 2025:</p>
<ul>
<li>Text: Gemini 3 Pro</li>
<li>Coding: Claude Opus 4.5</li>
<li>Text-to-image: GPT Image 1.5</li>
</ul>
<p>I asked Claude and Gemini for a title for this post. Gemini was thorough: three
options across three angles, with a recommendation. Claude gave me half as many
and no reasoning.</p>
<p>Claude&rsquo;s suggestion was &ldquo;Are You Using the Wrong AI?&rdquo;. Gemini&rsquo;s is the title that
kept you reading.</p>
]]></content:encoded></item><item><title>Three questions before any prompt</title><link>https://aguilera.ee/blog/prompt-structure/</link><pubDate>Thu, 25 Dec 2025 00:00:00 +0000</pubDate><author>eduardo@aguilera.ee (Eduardo Aguilera)</author><guid>https://aguilera.ee/blog/prompt-structure/</guid><description>&lt;p&gt;Three questions I ask before writing any prompt:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Who can answer this? Give it a role.&lt;/li&gt;
&lt;li&gt;What information solves the problem? Add constraints, context, numbers.&lt;/li&gt;
&lt;li&gt;What is the goal? Not &amp;ldquo;help me&amp;rdquo;. State an outcome.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Put together:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;You&amp;rsquo;re a senior engineering manager who has scaled teams from 5 to 20 people.&lt;/p&gt;
&lt;p&gt;My team of 8 developers spends 40% of sprint time on code reviews. Today: PRs
need 2 approvals, no size limits, reviews happen async.&lt;/p&gt;</description><content:encoded><![CDATA[<p>Three questions I ask before writing any prompt:</p>
<ol>
<li>Who can answer this? Give it a role.</li>
<li>What information solves the problem? Add constraints, context, numbers.</li>
<li>What is the goal? Not &ldquo;help me&rdquo;. State an outcome.</li>
</ol>
<p>Put together:</p>
<blockquote>
<p>You&rsquo;re a senior engineering manager who has scaled teams from 5 to 20 people.</p>
<p>My team of 8 developers spends 40% of sprint time on code reviews. Today: PRs
need 2 approvals, no size limits, reviews happen async.</p>
<p>Give me 3 process changes where AI can cut this time.</p>
</blockquote>
<p>The structure does the work. The role narrows the answer, the numbers ground it,
the goal points it somewhere.</p>
]]></content:encoded></item><item><title>Multiply yourself with Claude Code agents</title><link>https://aguilera.ee/blog/claude-code-agents/</link><pubDate>Sat, 06 Dec 2025 00:00:00 +0000</pubDate><author>eduardo@aguilera.ee (Eduardo Aguilera)</author><guid>https://aguilera.ee/blog/claude-code-agents/</guid><description>&lt;p&gt;Scripts and macros automate tasks. They can&amp;rsquo;t adapt when something unexpected
happens. Claude Code&amp;rsquo;s &lt;code&gt;/agents&lt;/code&gt; command gives you context-aware automation that
can.&lt;/p&gt;
&lt;p&gt;Here is how I tested 43 files in about an hour.&lt;/p&gt;
&lt;h2 id="the-agent"&gt;The agent&lt;/h2&gt;
&lt;p&gt;An agent is a prompt with its own context window. Each one tackles its assigned
task, handles the nuances, and keeps you in the loop.&lt;/p&gt;
&lt;p&gt;Test the prompt on a single file first. A QA engineer prompt:&lt;/p&gt;</description><content:encoded><![CDATA[<p>Scripts and macros automate tasks. They can&rsquo;t adapt when something unexpected
happens. Claude Code&rsquo;s <code>/agents</code> command gives you context-aware automation that
can.</p>
<p>Here is how I tested 43 files in about an hour.</p>
<h2 id="the-agent">The agent</h2>
<p>An agent is a prompt with its own context window. Each one tackles its assigned
task, handles the nuances, and keeps you in the loop.</p>
<p>Test the prompt on a single file first. A QA engineer prompt:</p>
<blockquote>
<p>Be a QA Engineer.</p>
<p>Analyze the given file, understand the purpose of the class, and write a unit
test in <code>&lt;folder&gt;</code>.</p>
<p>Use a black box strategy: pass inputs, assert outputs. Don&rsquo;t mock anything
without planning it with me first.</p>
</blockquote>
<p>Once it works, save it with <code>/agents</code> as &ldquo;qa-engineer&rdquo;.</p>
<h2 id="the-coordinator">The coordinator</h2>
<p>Then create a coordinator that spawns agents in parallel:</p>
<blockquote>
<p>Be an AI Agents Coordinator.</p>
<p>Unit test all of these files:</p>
<p><code>file1.ts</code>
<code>file2.ts</code></p>
<p>Spawn one qa-engineer agent per file. All unit tests go in <code>./tests/</code>.</p>
</blockquote>
<p>Results: 43 files, about an hour, 100 dollars on Opus 4.5.</p>
<p>Each agent has its own 200k token context window. Understand your usage before
going wide.</p>
]]></content:encoded></item></channel></rss>