<?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>javierdecarli.com</title>
    <link>http://javierdecarli.com/</link>
    <description>Recent content on javierdecarli.com</description>
    <generator>Hugo</generator>
    <language>en-us</language>
    <lastBuildDate>Sun, 04 Oct 2026 00:00:00 +0000</lastBuildDate>
    <atom:link href="http://javierdecarli.com/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Claude Code setup 101</title>
      <link>http://javierdecarli.com/posts/claude-code-setup-101/</link>
      <pubDate>Sun, 04 Oct 2026 00:00:00 +0000</pubDate>
      <guid>http://javierdecarli.com/posts/claude-code-setup-101/</guid>
      <description>Minimun knowledge required for a good experience</description>
      <content:encoded><![CDATA[<p>It&rsquo;s pretty important to have a tight control on how our Claude Code is configured. The more we understand how it&rsquo;s set, the more confident we can be that our agents will do what we want them to do, and avoid unwanted consequences.</p>
<blockquote>
<p>As we&rsquo;re in the infancy of this tech, and things change very quickly, have in mind I&rsquo;m writting this on <strong><em>October 2026</em></strong>, and things might change drastically in the future.</p>
</blockquote>
<h2 id="understanding-configuration-levels">Understanding configuration levels</h2>
<p>Claude has 3 levels worth mentioning</p>
<ol>
<li><strong>Enterprise-level</strong>: This is the highest level and the one we have the least control. This is meant for your organization to push rules/restrictions to your harness. If you use Claude outside an organization (just for yourself), you can disregard this.</li>
<li><strong>User-level</strong>: These are configurations that rule all projects in our machine.</li>
<li><strong>Project-level</strong>: Rules that affect <em><strong>only the session</strong></em> started from that specific folder/workspace.</li>
</ol>
<h2 id="deterministic-vs-non-deterministic-rules-and-constrains">Deterministic vs non-deterministic rules and constrains</h2>
<p>There are reasons why we would add rules or constraints in different places.</p>
<h3 id="claudemd">CLAUDE.MD</h3>
<p>Claude&rsquo;s main entry point. This file will always be read first, loaded into the context and, most of the time, be the main set of instructions.</p>
<blockquote>
<p><strong><em>ANYWAYS&hellip;</em></strong> rules like &ldquo;don&rsquo;t use X tool&rdquo; or &ldquo;never execute Y&rdquo; are honestly a hit and miss. Many times I got to remind Claude to stop doing something I added in my user level <code>CLAUDE.MD</code> just to get the classic &ldquo;oh right, sorry, I missed that, it won&rsquo;t happen again&rdquo;. Hooks are the way to go for those cases.</p>
</blockquote>
<p>Keep more broad, less important information here, like &ldquo;response style&rdquo; or &ldquo;verbostity level&rdquo; because <code>CLAUDE.MD</code> is non-deterministic. <sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup></p>
<p>Also, keep this file as short as possible because this is information that is loaded in the &ldquo;context&rdquo;, that context is finite and we need it. Even though Anthropic doesn&rsquo;t provide a specific number, general consensus is less that 200 lines is good, less than 60 ideal. <sup id="fnref:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup></p>
<h3 id="hooks">Hooks</h3>
<p>On the other side, hooks are determinisitic <sup id="fnref:3"><a href="#fn:3" class="footnote-ref" role="doc-noteref">3</a></sup>. Just like git hooks, these will <em>always</em> be executed upon certain events.</p>
<p>Based on below categories, the events are:</p>
<table>
	<thead>
			<tr>
					<th>Category</th>
					<th>Events</th>
			</tr>
	</thead>
	<tbody>
			<tr>
					<td>Session</td>
					<td><code>SessionStart</code>, <code>Setup</code>, <code>SessionEnd</code></td>
			</tr>
			<tr>
					<td>Turn</td>
					<td><code>UserPromptSubmit</code>, <code>UserPromptExpansion</code>, <code>Stop</code>, <code>StopFailure</code></td>
			</tr>
			<tr>
					<td>Agentic Loop</td>
					<td><code>PreToolUse</code>, <code>PermissionRequest</code>, <code>PermissionDenied</code>, <code>PostToolUse</code>,</td>
			</tr>
			<tr>
					<td>Agent/Team</td>
					<td><code>SubagentStart</code>, <code>SubagentStop</code>, <code>TeammateIdle</code>, <code>TaskCreated</code>, <code>TaskCompleted</code></td>
			</tr>
			<tr>
					<td>File/Environment</td>
					<td><code>InstructionsLoaded</code>, <code>ConfigChange</code>, <code>CwdChanged</code>, <code>FileChanged</code>, <code>WorktreeCreate</code>, <code>WorktreeRemove</code>, <code>PreCompact</code>, <code>PostCompact</code></td>
			</tr>
			<tr>
					<td>Notifications</td>
					<td><code>Notification</code></td>
			</tr>
	</tbody>
</table>
<p>And based on those events there&rsquo;s supports for multiple handler types (per documentation <sup id="fnref:4"><a href="#fn:4" class="footnote-ref" role="doc-noteref">4</a></sup>):</p>
<table>
	<thead>
			<tr>
					<th>Handler Type</th>
					<th>Description</th>
			</tr>
	</thead>
	<tbody>
			<tr>
					<td>Command hooks</td>
					<td>Run shell commands (most common)</td>
			</tr>
			<tr>
					<td>HTTP hooks</td>
					<td>POST to an endpoint</td>
			</tr>
			<tr>
					<td>Prompt hooks</td>
					<td>Inject LLM prompts</td>
			</tr>
			<tr>
					<td>Agent hooks</td>
					<td>Spawn subagents</td>
			</tr>
			<tr>
					<td>MCP tool hooks</td>
					<td>Call MCP tools directly</td>
			</tr>
	</tbody>
</table>
<p>There&rsquo;s no need to memorize anything here, but understanding different levels, and the capabilities and limitations that exist gives us a great advantage at getting good results. That should be enough to know when to ask our agent to add a hook or a rule, and at what level depending our workflow.</p>
<div class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1">
<p>&ldquo;Non-Deterministic AI&rdquo; can yield different outputs from the same input due to its reliance on probabilities and variability.&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:2">
<p>These are very generic numbers that don&rsquo;t have into account how many <code>CLAUDE.MD</code> files our repo has (because it can contain many) or how much data we&rsquo;re loading into the context.&#160;<a href="#fnref:2" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:3">
<p>&ldquo;Deterministic AI&rdquo; produces the same output every time for a given input, ensuring predictability and repeatability.&#160;<a href="#fnref:3" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:4">
<p>The documentation goes pretty deep into verious topics like Lifecycle and even it provide some examples of event fires. Documentation in: <a href="https://code.claude.com/docs/en/hooks">https://code.claude.com/docs/en/hooks</a>&#160;<a href="#fnref:4" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</div>
]]></content:encoded>
    </item>
    <item>
      <title>Back to RSS</title>
      <link>http://javierdecarli.com/posts/going-back-to-rss/</link>
      <pubDate>Mon, 28 Sep 2026 00:00:00 +0000</pubDate>
      <guid>http://javierdecarli.com/posts/going-back-to-rss/</guid>
      <description>When ads and trackers completely destroy the experience</description>
      <content:encoded><![CDATA[<p>The web became a pretty hostile place to browse/navigate. It&rsquo;s almost mandatory to have an ad-blocker to stop intrusive ads, popups, trackers and other maliciuos content. And let&rsquo;s not even talk about mobile because the situation there is even worse.</p>
<p>I think this is making a lot of people to go back to more simple ways to get information. Of course, I don&rsquo;t think RSS will become popular but who knows. Anyways, I just added RSS support in case you want.</p>
<ul>
<li>Main RSS feed: <a href="https://javierdecarli.com/index.xml">https://javierdecarli.com/index.xml</a></li>
<li>Spanish RSS (in case you&rsquo;re interested): <a href="https://javierdecarli.com/es/index.xml">https://javierdecarli.com/es/index.xml</a></li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>The age of software decision making</title>
      <link>http://javierdecarli.com/posts/the-age-of-software-decision-making/</link>
      <pubDate>Wed, 02 Sep 2026 00:00:00 +0000</pubDate>
      <guid>http://javierdecarli.com/posts/the-age-of-software-decision-making/</guid>
      <description>Why I feel AI product generation will probably slow down</description>
      <content:encoded><![CDATA[<p>Talking with my friend <a href="https://sebasmonia.com/">Sebastian</a> we hit the topic of things that AI was helping us to achieve and also things that we dodged the bullet by steering the AI agent in the right direction, avoiding a bad &ldquo;long-term&rdquo; choice. These were situations where the AI agent went in one direction that was not the right one, or let&rsquo;s say, that <em>we know</em> would have bad consequences&hellip;</p>
<p>Those situations where you ask yourself &ldquo;But does it work?&rdquo; and the answer is yeah, for sure&hellip; but is not the right choice because it&rsquo;s either a problem in the long term, or a dead end, or maybe it&rsquo;s way too&hellip; &ldquo;myopic&rdquo;?</p>
<p>In some few cases could just be that the model might not be as strong as we think it is, but in most cases is definitely lack of context. Is the AIs fault for not knowing what is our final vision of the solution? well&hellip; that&rsquo;s pretty unfair. We are the only ones knowing the end goal of what we want to achieve, the AI only executes whatever we ask to solve &ldquo;right now&rdquo;. Same thing happens in all our (human) interactions, and has been happening forever.</p>
<p>Let&rsquo;s use this example: asking AI to generate a dashboard or a website. Everyone is doing this, and the non‑technical conclusion is always the same: “So fast! We don’t need developers anymore!” but how many users will consume that dashboard? One? Ten? Ten thousand? A million? The use case changes the implementation drastically. And what happens when we have 300 metrics? Where does metric 301 go? Does it belong on the first page? Is it redundant? Does it break the layout? The bigger the solution gets, the more complex developing and maintaining it becomes.</p>
<h2 id="these-are-not-new-problems">These are not new problems&hellip;</h2>
<p>Written in 1986 <a href="https://en.wikipedia.org/wiki/No_Silver_Bullet">&ldquo;No Silver Bullet—Essence and Accident in Software Engineering&rdquo;</a> is a paper on software engineering written by Fred Brooks that addresses the general problem. In that paper he brings two key concepts: &ldquo;accidental complexity&rdquo; and &ldquo;real complexity&rdquo;. <sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup></p>
<p>Accidental complexity is basically <em>problems that engineers create and can fix</em>. The technical details, the glue code, the integrations, the mechanics of walking the path toward the solution.</p>
<p>Essential complexity is <em>caused by the problem to be solved and nothing can remove it</em>. If users want a program to do 30 different things, then those 30 things are essential and the program must do those 30 different things.</p>
<p>Clearly Mr Brooks had no idea what AI would look like, but given how general the problem is, it&rsquo;s very relevant. AI addresses the accidental complexity and, given the right instructions and context, nails it but we&rsquo;re still left with a big chunk of the problem to solve.</p>
<h2 id="the-gap-between-knowing-and-understanding">The gap between knowing and understanding</h2>
<p>In Star Trek: The Next Generation there&rsquo;s an episode where Data (Lieutenant Commander Data which, if you never watch it, number one shame on you, number two he is an android) builds another android that he aids with cognitive and standard behavioral algorithms. During an interaction Data explains something that fits a problem perfectly but Picard (Commander Jean-Luc Picard) challenges him about whether the new android was learning, or whether she was simply executing algorithms to which Data responds:</p>
<p>“It is the difference between knowledge and experience.” <sup id="fnref:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup></p>
<p>And I feel that’s exactly what happens with AI today.</p>
<p>The AI agent produces analysis, design, code, tests, even full PRs. But it never experienced the problem, or any similar problem. It doesn’t understand the long‑term vision, the constraints, the tradeoffs which are basically the intuition behind the design. And that means <em>the quality of the solution is directly proportional to the quality of the instruction</em>.</p>
<h2 id="conclusion">Conclusion</h2>
<p>I feel it&rsquo;s all about the final vision and the design to arrive to the solution because of factors like technology limitations and, more important, the essential complexity of each problem. The narrative that anybody can build software solutions is just very naive because it assumes the AI agent will magically have enough context to make decisions and fill the gaps.</p>
<p>Can this ever happen? hard to predict&hellip; it will definitely be alleviated by having much more processing power and not having to worry about who is the target of the solution, but the essential complexity will always be there.</p>
<p>It&rsquo;s as unavoidable as the need to solve new problems.</p>
<div class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1">
<p>Does not mean an &ldquo;accident&rdquo; as used in common speech, a chance incident, normally harmful. Examples of accidents are color, taste, movement, and stagnation / <a href="https://en.wikipedia.org/wiki/Accident_%28philosophy%29">wikipedia source</a>&#160;<a href="#fnref:1" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
<li id="fn:2">
<p>This is why the episode is called &ldquo;The Offspring&rdquo; - Episode 16th of the third season, and the 64th episode of the series overall / <a href="https://en.wikipedia.org/wiki/The_Offspring_%28Star_Trek:_The_Next_Generation%29">more detail</a>&#160;<a href="#fnref:2" class="footnote-backref" role="doc-backlink">&#x21a9;&#xfe0e;</a></p>
</li>
</ol>
</div>
]]></content:encoded>
    </item>
    <item>
      <title>Transfering knowledge</title>
      <link>http://javierdecarli.com/posts/transfering-knowledge/</link>
      <pubDate>Sun, 09 Aug 2026 00:00:00 +0000</pubDate>
      <guid>http://javierdecarli.com/posts/transfering-knowledge/</guid>
      <description>Much harder that we all think it is</description>
      <content:encoded><![CDATA[<pre tabindex="0"><code>Tank: Let’s get to it…. Now, we’re supposed to start with these operation programs first, that’s major boring shit. Let’s do something a little more fun. How about combat training?
Neo: Jujitsu? I’m going to learn Jujitsu?… Holy shit.
Tank: Hey Mikey, I think he likes it. How about some more?
Neo: Hell yes.
Morpheus: How is he?
Tank: Ten hours straight. He’s… a machine.
Neo: I know Kung Fu.

Neo&#39;s training scene in the Nebuchadnezzar - The Matrix (1999)
</code></pre><p>I wish it was like that, huh?</p>
<p>Sharing knowledge/teaching/showing other people how to do things is a difficult process. Not only is it difficult but also mostly underestimated. For the &ldquo;untrained eye&rdquo;, teaching sounds simple until you actually have to do it.</p>
<h2 id="learning-is-messy">Learning is messy</h2>
<p>We all learn in different ways. Some people learn in a visual way (using mental maps, diagrams or other techniques), some people have fantastic auditive memory and comprehension skills, and learn better by recording lessons, or attending events/classes in person&hellip; regardless, the gist of it is that there&rsquo;s not a single universal way to learn, and we all function in different ways.</p>
<h2 id="attention-under-attack">Attention under attack</h2>
<p>To make things worse, nowadays we have big attention issues thanks to having every single device fighting for our attention. It&rsquo;s almost impossible to focus without putting some boundaries and I feel this is where a lot of people fall into that trap, get disappointed/discouraged/anxious and go into bad &ldquo;mental places&rdquo; making things worse. (of course, in a totally unconscious way)</p>
<h2 id="in-general-human-interaction-is-mostly-underestimated">In general, human interaction is mostly underestimated</h2>
<p>And on top of all that, we also underestimate the human part of the whole thing.</p>
<p>I generally feel there&rsquo;s a lot of &ldquo;human interaction&rdquo; type of activities that people tend to underestimate, probably because we miss that teaching isn’t just showing something or doing a demo. It’s paying attention to how people actually learn, respecting their pace, and not assuming the way we learn is the universal way. If we did that more often, half our “communication problems” would probably be alleviated.</p>
<p>Anyway, that’s my rant. Teaching is hard, learning is weird, attention is broken, and humans are complicated. But if we remember that, maybe we’ll stop expecting this process to be easy.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Make your work setup enjoyable</title>
      <link>http://javierdecarli.com/posts/make-your-work-setup-enjoyable/</link>
      <pubDate>Sun, 02 Aug 2026 00:00:00 +0000</pubDate>
      <guid>http://javierdecarli.com/posts/make-your-work-setup-enjoyable/</guid>
      <description>Little details...</description>
      <content:encoded><![CDATA[<p>I&rsquo;m very fortunate of working mostly remote (at least for now) and over the years I kept fine-tuning and improving my work setup. Little changes like a better keayboard, a comfy chair, bigger monitor(s), etc.</p>
<p>It changes a lot having a nice work setup. It changes your day and even how tired you get. We spend a lot of our day on that place (specially if you are a nerd like me) and the more enjoyable our place is, the better.</p>
<p>Spending a bit more on a nice device can change your day.</p>
<p>There you go&hellip; if you were waiting for an excuse to buy a gadget for your &ldquo;work-cave&rdquo; this is it. You&rsquo;re welcome!</p>
]]></content:encoded>
    </item>
    <item>
      <title>Here we go again...</title>
      <link>http://javierdecarli.com/posts/first-post/</link>
      <pubDate>Thu, 30 Jul 2026 00:00:00 +0000</pubDate>
      <guid>http://javierdecarli.com/posts/first-post/</guid>
      <description>(Re)Starting the blog idea once again</description>
      <content:encoded><![CDATA[<p>I&rsquo;ll add other sections as we go, but wanted to get at least one post out the door — once and for all.</p>
<p>This experiment only works if I stay consistent, and consistency requires keeping publishing simple. That&rsquo;s why I chose a very simple <a href="https://gohugo.io/">Hugo</a> template based on the <a href="https://themes.gohugo.io/themes/hugo-papermod/">PaperMod</a> theme. I might write about the process in the future.</p>
<p>Huge thanks to my friend <a href="https://sebasmonia.com">Sebastian</a> for planting the seed to try blogging again. Blogging to me always felt like a more &ldquo;pure&rdquo; way of interacting with the web, it kinda takes me back to when I was a kid getting into computers discovering things like irc, compilers like Turbo Pascal and the beginnings of the internet.</p>
<p>No data collection or cookies — I don&rsquo;t sell anything. I&rsquo;ll keep the site lean while preserving small, subtle design touches (colors, fonts).</p>
]]></content:encoded>
    </item>
  </channel>
</rss>
