<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:googleplay="http://www.google.com/schemas/play-podcasts/1.0"><channel><title><![CDATA[The Buildup]]></title><description><![CDATA[We make tech projects and bring builders together.

Weekly newsletter about technical experiments, project updates, and tech trends.

Join IRL events and daily chat with other makers.]]></description><link>https://www.thebuildup.dev</link><image><url>https://substackcdn.com/image/fetch/$s_!sUex!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d9ba966-2178-478a-b25e-3e58cc78b393_1024x1024.png</url><title>The Buildup</title><link>https://www.thebuildup.dev</link></image><generator>Substack</generator><lastBuildDate>Wed, 14 Oct 2026 22:58:41 GMT</lastBuildDate><atom:link href="https://www.thebuildup.dev/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Robin]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[thebuildupdev@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[thebuildupdev@substack.com]]></itunes:email><itunes:name><![CDATA[Robin]]></itunes:name></itunes:owner><itunes:author><![CDATA[Robin]]></itunes:author><googleplay:owner><![CDATA[thebuildupdev@substack.com]]></googleplay:owner><googleplay:email><![CDATA[thebuildupdev@substack.com]]></googleplay:email><googleplay:author><![CDATA[Robin]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[Ghostty + Herdr: A fast & effective agentic dev workflow]]></title><description><![CDATA[How I run multiple coding agents in parallel effectively]]></description><link>https://www.thebuildup.dev/p/ghostty-herdr-a-fast-and-effective</link><guid isPermaLink="false">https://www.thebuildup.dev/p/ghostty-herdr-a-fast-and-effective</guid><dc:creator><![CDATA[Robin]]></dc:creator><pubDate>Mon, 14 Sep 2026 13:02:51 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/e733341e-94d2-4af9-ad64-c260b6f418f9_400x400.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Ever tried running five coding agents at once and lost track of it? That&#8217;s the problem this whole setup exists to solve.</p><p>In this article I&#8217;ll talk about the evolution of my local agentic dev workflow, that changed quite a lot <a href="https://www.thebuildup.dev/p/the-workflow-that-changed-how-i-build">since last time we talked about it</a>.</p><p>I&#8217;ve been using ghostty for several months now and for a few reasons, it clicked for me really quickly.</p><p></p><h2>Ghostty</h2><p>A few reasons I&#8217;m using ghostty:</p><ul><li><p><strong>It&#8217;s blazing fast and smooth</strong>. It&#8217;s a native macos app with GPU acceleration baked in.</p></li><li><p><strong>It&#8217;s simple and pure on install</strong>. You can configure most of it (starting by what it looks like) but it comes with zero default config.</p></li></ul><p>I&#8217;ve started using it as my main terminal (replacing iTerm2), and my workflow stayed quite simple:</p><ul><li><p>One project per tab</p></li><li><p>Up to 4 panes per tab</p></li></ul><p>I&#8217;m only using the simple keybinding to move between those panes. And voila. Simple, effective &amp; enjoyable on a daily basis.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!FNMC!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F989b0d10-b657-47ab-b9cd-5c7bd615b50b_1440x984.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!FNMC!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F989b0d10-b657-47ab-b9cd-5c7bd615b50b_1440x984.png 424w, https://substackcdn.com/image/fetch/$s_!FNMC!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F989b0d10-b657-47ab-b9cd-5c7bd615b50b_1440x984.png 848w, https://substackcdn.com/image/fetch/$s_!FNMC!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F989b0d10-b657-47ab-b9cd-5c7bd615b50b_1440x984.png 1272w, https://substackcdn.com/image/fetch/$s_!FNMC!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F989b0d10-b657-47ab-b9cd-5c7bd615b50b_1440x984.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!FNMC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F989b0d10-b657-47ab-b9cd-5c7bd615b50b_1440x984.png" width="1440" height="984" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/989b0d10-b657-47ab-b9cd-5c7bd615b50b_1440x984.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:984,&quot;width&quot;:1440,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:176240,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.thebuildup.dev/i/215599037?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F989b0d10-b657-47ab-b9cd-5c7bd615b50b_1440x984.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!FNMC!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F989b0d10-b657-47ab-b9cd-5c7bd615b50b_1440x984.png 424w, https://substackcdn.com/image/fetch/$s_!FNMC!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F989b0d10-b657-47ab-b9cd-5c7bd615b50b_1440x984.png 848w, https://substackcdn.com/image/fetch/$s_!FNMC!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F989b0d10-b657-47ab-b9cd-5c7bd615b50b_1440x984.png 1272w, https://substackcdn.com/image/fetch/$s_!FNMC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F989b0d10-b657-47ab-b9cd-5c7bd615b50b_1440x984.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><h2>Where Herdr comes in</h2><p><strong>Quick context if you&#8217;ve never heard of it:</strong> Herdr is a terminal multiplexer, like tmux, but built for coding agents. It runs <em>inside</em> your existing terminal (Ghostty, Kitty, iTerm2, even inside tmux), ships as a single Rust binary, and gives you workspaces, tabs and tiled panes. The twist: it detects the agent running in each pane (Claude Code, Codex, OpenCode, and a growing list) and shows its state in a sidebar: <strong>working</strong>, <strong>idle</strong>, <strong>done</strong>, or <strong>blocked</strong> waiting on you. Sessions persist in a background server, so you can detach, reattach, or even SSH in from another machine and your agents are still running. It also exposes a local socket API and CLI, which means your agents can drive Herdr themselves. Keep that last bit in mind, it matters later.</p><p>I started experiencing with Herdr about two weeks ago and man, I fell in love with it. I&#8217;ve completely reworked my usual agentic coding workflow and it&#8217;s never been so enjoyable to manage several agents at once !</p><p></p><h3>Why use Herdr in the first place you might ask ?</h3><p>In my case, it answered to 4 main reasons (+ one extra that came later in):</p><ol><li><p>Herdr improves my parallel agent coding flow</p></li><li><p>It survives ghostty crashes (happens sometimes for me when I switch between light &amp; dark theme)</p></li><li><p>It&#8217;s controllable and customisable using ai agents</p></li><li><p>There is a plugin system (and it&#8217;s super easy to create yours)</p></li></ol><p>(and a bonus point that landed more recently, it handle remote hosts too !)</p><p></p><h3>What &#8220;parallel agent flow&#8221; actually looks like</h3><p>Here&#8217;s a typical session for me now:</p><ul><li><p>One Herdr <strong>workspace per project</strong>, same rule as my Ghostty tabs before. Inside a workspace, one <strong>tab per task</strong>, and inside each tab: an agent pane, a pane for tests or a dev server.</p></li><li><p><strong>5 to 6</strong> <strong>workspaces</strong> running at once while I juggle through them</p><p></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ZaEQ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbca9d31e-5a30-4698-89fa-0c78bcbbab16_3410x2028.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ZaEQ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbca9d31e-5a30-4698-89fa-0c78bcbbab16_3410x2028.png 424w, https://substackcdn.com/image/fetch/$s_!ZaEQ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbca9d31e-5a30-4698-89fa-0c78bcbbab16_3410x2028.png 848w, https://substackcdn.com/image/fetch/$s_!ZaEQ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbca9d31e-5a30-4698-89fa-0c78bcbbab16_3410x2028.png 1272w, https://substackcdn.com/image/fetch/$s_!ZaEQ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbca9d31e-5a30-4698-89fa-0c78bcbbab16_3410x2028.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ZaEQ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbca9d31e-5a30-4698-89fa-0c78bcbbab16_3410x2028.png" width="1456" height="866" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/bca9d31e-5a30-4698-89fa-0c78bcbbab16_3410x2028.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:866,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:749823,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.thebuildup.dev/i/215599037?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbca9d31e-5a30-4698-89fa-0c78bcbbab16_3410x2028.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!ZaEQ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbca9d31e-5a30-4698-89fa-0c78bcbbab16_3410x2028.png 424w, https://substackcdn.com/image/fetch/$s_!ZaEQ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbca9d31e-5a30-4698-89fa-0c78bcbbab16_3410x2028.png 848w, https://substackcdn.com/image/fetch/$s_!ZaEQ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbca9d31e-5a30-4698-89fa-0c78bcbbab16_3410x2028.png 1272w, https://substackcdn.com/image/fetch/$s_!ZaEQ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbca9d31e-5a30-4698-89fa-0c78bcbbab16_3410x2028.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p></li></ul><p>That said, I spent a couple of hours configuring herdr before starting to properly use it, and the following section explains why.</p><p></p><h3>Setting up Herdr</h3><p>In order to get started with Herdr, I asked an agent (using claude code in my case) to rebind a few keystrokes so that I could use it easily.</p><p>I first needed to be able to use both Ghostty and Herdr shortcuts together without having to use the <code>ctrl+b</code> mode of Herdr that I don&#8217;t like that much.</p><p>After this, I setup my herdr theme to match my ghostty themes dynamically, and from there I started to work with herdr.</p><p>Concretely, the Ghostty side looks like this:</p><pre><code><code># Herdr: forward ghostty-style shortcuts as Herdr prefix sequences
# (\x02 = Ctrl+B, Herdr's prefix key). These replace ghostty's native
# splits/tabs so Herdr owns the layout.
keybind = cmd+d=text:\x02v
keybind = cmd+shift+d=text:\x02-
keybind = cmd+t=text:\x02N
keybind = cmd+alt+t=text:\x02c
keybind = cmd+alt+left=text:\x02h
keybind = cmd+alt+right=text:\x02l
keybind = cmd+alt+up=text:\x02k
keybind = cmd+alt+down=text:\x02j

# Native ghostty escape hatches: same key plus shift
# (or ctrl where shift was already taken)
keybind = cmd+shift+t=new_tab
keybind = cmd+ctrl+d=new_split:right
keybind = cmd+ctrl+shift+d=new_split:down
keybind = cmd+shift+alt+left=goto_split:left
keybind = cmd+shift+alt+right=goto_split:right
keybind = cmd+shift+alt+up=goto_split:up
keybind = cmd+shift+alt+down=goto_split:down

# Jumping: cmd+N = Herdr workspace N, cmd+alt+N = Herdr tab N
# (esc+digit = alt+digit chord), alt+shift+N = ghostty tab N
# (cmd+shift+3/4/5 are macOS screenshot shortcuts, hence alt+shift)
keybind = cmd+digit_1=text:\x021
keybind = cmd+alt+digit_1=text:\x1b1
keybind = alt+shift+digit_1=goto_tab:1
# ...same three bindings repeat for digits 2&#8211;9
</code></code></pre><p>And on the Herdr side, almost nothing changes. The digits just get pointed at the right unit:</p><pre><code><code>[keys]
# Workspaces are the per-project unit; give them the plain digits
switch_workspace = "prefix+1..9"
# Tabs move to direct alt+digit chords (esc+digit encoding)
switch_tab = "alt+1..9"
</code></code></pre><p><strong>The trick</strong>: Herdr still thinks I&#8217;m a regular <code>ctrl+b</code> user, Ghostty just types the prefix for me. <code>cmd+d</code> sends <code>ctrl+b v</code> (split), <code>cmd+t</code> sends <code>ctrl+b N</code> (new workspace), <code>cmd+1</code> sends <code>ctrl+b 1</code> (workspace 1). No mode switching, and my memory from months of Ghostty stays the same.</p><p>The digit keys end up as a three-layer system, and it&#8217;s the part I use most:</p><ul><li><p><code>cmd+N</code> &#8594; Herdr workspace N (one per project)</p></li><li><p><code>cmd+alt+N</code> &#8594; Herdr tab N (one per task)</p></li><li><p><code>alt+shift+N</code> &#8594; native Ghostty tab N</p></li></ul><p>The last customisation step was setting up my Herdr theme to match my Ghostty theme dynamically, so switching light/dark in Ghostty switches Herdr too.</p><p>After a few days of usage, i stumbled myself wanting three things:</p><ol><li><p>A menu bar integration to monitor my agents without having to be on my terminal</p></li><li><p>A remote connection to my mac from my phone / iPad to use herdr</p></li><li><p>A raycast/macos like command bar to do basic actions like renaming tabs and spaces</p></li></ol><p>So I started digging to add those three things !</p><p><em>Spoiler: I solved #1 and #3. #2 is still a work in progress, more on that at the end.</em></p><p></p><h3>Using swiftbar to add custom menu bar activities</h3><div class="captioned-image-container"><figure><div class="image-link image2" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!iG0y!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F681492ae-140f-4500-bda2-ad61bf5ef4dc_226x80.png 424w, https://substackcdn.com/image/fetch/$s_!iG0y!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F681492ae-140f-4500-bda2-ad61bf5ef4dc_226x80.png 848w, https://substackcdn.com/image/fetch/$s_!iG0y!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F681492ae-140f-4500-bda2-ad61bf5ef4dc_226x80.png 1272w, https://substackcdn.com/image/fetch/$s_!iG0y!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F681492ae-140f-4500-bda2-ad61bf5ef4dc_226x80.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!iG0y!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F681492ae-140f-4500-bda2-ad61bf5ef4dc_226x80.png" width="226" height="80" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/681492ae-140f-4500-bda2-ad61bf5ef4dc_226x80.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:80,&quot;width&quot;:226,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:32348,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.thebuildup.dev/i/215599037?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F681492ae-140f-4500-bda2-ad61bf5ef4dc_226x80.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!iG0y!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F681492ae-140f-4500-bda2-ad61bf5ef4dc_226x80.png 424w, https://substackcdn.com/image/fetch/$s_!iG0y!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F681492ae-140f-4500-bda2-ad61bf5ef4dc_226x80.png 848w, https://substackcdn.com/image/fetch/$s_!iG0y!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F681492ae-140f-4500-bda2-ad61bf5ef4dc_226x80.png 1272w, https://substackcdn.com/image/fetch/$s_!iG0y!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F681492ae-140f-4500-bda2-ad61bf5ef4dc_226x80.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></div></figure></div><p></p><p>SwiftBar allows you to create custom macos menu bar items, without having to compile anything. Install it once using homebrew and get started. In my case, I asked my coding agent to add two things:</p><ol><li><p>A way to monitor all my Herdr agents</p></li><li><p>A way to turn on/off ssh connection to my mac + monitor who is connected, from where</p></li></ol><p>The results is two dynamic menu bar items, indicating my agents status &amp; ssh connection state.</p><p>I&#8217;ve committed the results in my public tips &amp; tricks repo that I use on all the machines I use if you want to have a closer look <a href="https://github.com/Binb1/awesome-tips">https://github.com/Binb1/awesome-tips</a></p><p></p><h3>Building a custom herdr plugin</h3><p>First things first, you need to know that I&#8217;m a command palette pro user. I think that command palettes are great UX wise in most tools, and I felt like Herdr could definitely use one. So I decided to <a href="https://github.com/Binb1/herdr-palette">create my own small plugin</a> !</p><p><strong>What it does:</strong> hit a shortcut, get a searchable list of actions: rename the current tab, rename the workspace, jump to a workspace, split, close. The things I was previously doing with three different keybindings I could never remember.</p><p>You can install this plugin running <code>&gt; herdr plugin install Binb1/herdr-palette</code></p><p>The doc to create plugins is pretty stragithforward, publishing them is too. There are already a lot of cool plugins out there btw!</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!lViB!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6158caf7-ab69-4f9f-a9ef-4f7cf16688e9_1426x866.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!lViB!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6158caf7-ab69-4f9f-a9ef-4f7cf16688e9_1426x866.png 424w, https://substackcdn.com/image/fetch/$s_!lViB!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6158caf7-ab69-4f9f-a9ef-4f7cf16688e9_1426x866.png 848w, https://substackcdn.com/image/fetch/$s_!lViB!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6158caf7-ab69-4f9f-a9ef-4f7cf16688e9_1426x866.png 1272w, https://substackcdn.com/image/fetch/$s_!lViB!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6158caf7-ab69-4f9f-a9ef-4f7cf16688e9_1426x866.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!lViB!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6158caf7-ab69-4f9f-a9ef-4f7cf16688e9_1426x866.png" width="1426" height="866" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6158caf7-ab69-4f9f-a9ef-4f7cf16688e9_1426x866.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:866,&quot;width&quot;:1426,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:131650,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.thebuildup.dev/i/215599037?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6158caf7-ab69-4f9f-a9ef-4f7cf16688e9_1426x866.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!lViB!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6158caf7-ab69-4f9f-a9ef-4f7cf16688e9_1426x866.png 424w, https://substackcdn.com/image/fetch/$s_!lViB!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6158caf7-ab69-4f9f-a9ef-4f7cf16688e9_1426x866.png 848w, https://substackcdn.com/image/fetch/$s_!lViB!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6158caf7-ab69-4f9f-a9ef-4f7cf16688e9_1426x866.png 1272w, https://substackcdn.com/image/fetch/$s_!lViB!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6158caf7-ab69-4f9f-a9ef-4f7cf16688e9_1426x866.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><h2>Wrap-up</h2><p>This new dev workflow was both fun and fast to setup.</p><p>Just to be clear, is using Herdr a must ? Nope. Is it fun to use, and does it bring productivity boost ? <strong>Absolutely !</strong></p><p>If you got a few spare hours to manggle with this, I can only recommend it !</p><p>I&#8217;m planning to explore the best options to leverage this setup remotely (from my phone mainly) in the coming weeks, still havn&#8217;t found the perfect setup for now.</p><p>If you&#8217;re interested in using my custom setup, I have a public repo where I store the useful things form my different projects right here <a href="https://github.com/Binb1/awesome-tips">https://github.com/Binb1/awesome-tips</a></p><p>Hoping that this can help you out, See you in the next one !</p><p></p><div><hr></div><h3>About me</h3><p>I&#8217;m Robin, a builder with a software engineering background. I currently work as a Forward Deployed Engineer at <a href="https://www.moqa.studio/">@Moqa Studio</a>, a studio I co-founded in 2023, where we ship practical AI agents and engines for tech companies.</p><p>On the side, I&#8217;ve been shipping iOS apps since 2014, and I write about tech on <a href="https://www.thebuildup.dev/">The Buildup</a>.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.thebuildup.dev/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading The Buildup! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p>]]></content:encoded></item><item><title><![CDATA[How do I get the most out of Claude Code?]]></title><description><![CDATA[After spending way too much time with Claude Code, I explain the biggest tips to save time using it]]></description><link>https://www.thebuildup.dev/p/how-do-i-get-the-most-out-of-claude</link><guid isPermaLink="false">https://www.thebuildup.dev/p/how-do-i-get-the-most-out-of-claude</guid><dc:creator><![CDATA[Augustin]]></dc:creator><pubDate>Mon, 07 Sep 2026 11:51:27 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/70113528-f503-47e6-80b5-ba42987f3eea_793x411.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><em>Claude Code changes fast. I wrote this on 7 September 2026. Some commands, defaults and model names will have moved by the time you read it. The habits should hold longer.</em></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!z8QK!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fddb3c71e-a6ca-47fe-ba4a-1847da44f5b4_793x411.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!z8QK!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fddb3c71e-a6ca-47fe-ba4a-1847da44f5b4_793x411.png 424w, https://substackcdn.com/image/fetch/$s_!z8QK!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fddb3c71e-a6ca-47fe-ba4a-1847da44f5b4_793x411.png 848w, https://substackcdn.com/image/fetch/$s_!z8QK!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fddb3c71e-a6ca-47fe-ba4a-1847da44f5b4_793x411.png 1272w, https://substackcdn.com/image/fetch/$s_!z8QK!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fddb3c71e-a6ca-47fe-ba4a-1847da44f5b4_793x411.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!z8QK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fddb3c71e-a6ca-47fe-ba4a-1847da44f5b4_793x411.png" width="793" height="411" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ddb3c71e-a6ca-47fe-ba4a-1847da44f5b4_793x411.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:411,&quot;width&quot;:793,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:5844,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://www.thebuildup.dev/i/207268724?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fddb3c71e-a6ca-47fe-ba4a-1847da44f5b4_793x411.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!z8QK!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fddb3c71e-a6ca-47fe-ba4a-1847da44f5b4_793x411.png 424w, https://substackcdn.com/image/fetch/$s_!z8QK!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fddb3c71e-a6ca-47fe-ba4a-1847da44f5b4_793x411.png 848w, https://substackcdn.com/image/fetch/$s_!z8QK!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fddb3c71e-a6ca-47fe-ba4a-1847da44f5b4_793x411.png 1272w, https://substackcdn.com/image/fetch/$s_!z8QK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fddb3c71e-a6ca-47fe-ba4a-1847da44f5b4_793x411.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Since January, 3,091 of the 3,567 commits on my current project are co-signed by Claude. That is 86%.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.thebuildup.dev/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading The Buildup! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>During summer 2025, I started to use Claude code, as a very good coding assistant,</p><blockquote><p>&#8594; A bug, Claude fixed it.<br>&#8594; A component, Claude built it.<br>&#8594; A refactor, Claude did it.</p></blockquote><p>But the more I use it, the less I think that is the interesting part.</p><p>The interesting part is what happens when you stop asking Claude to <strong>write code</strong> and start asking it to <strong>do work</strong>.</p><blockquote><p>&#8594; Investigate this bug.<br>&#8594; Understand this codebase.<br>&#8594; Build this feature.<br>&#8594; Run the tests.<br>&#8594; Look at the screenshots.<br>&#8594; Try another approach.<br>&#8594; Review what you just did.<br>&#8594; Open a PR.</p></blockquote><p>That is a different mental model.</p><p>And with the latest Claude Code features, it is becoming obvious. Anthropic is pushing Claude Code toward longer, more autonomous work: subagents, agent teams, hooks, worktrees, persistent memory, goals.</p><p>So here are the things I care about when using Claude Code on a real product.<br><br>The ones that changed how I work, with the actual bugs and files they come from.</p><h2>1. Give Claude a problem (better than a task)</h2><p>The old way:</p><blockquote><p>Fix the trip save function, some trips have no points.</p></blockquote><p>The better way:</p><blockquote><p>Some multi-day trips arrive in the database with a real distance and zero GPS points. Don&#8217;t change anything yet. Find every path where a recording can be saved without its track.</p></blockquote><p>The first asks for code in a function I had already blamed. The second asks Claude to understand something.</p><p>It found three ways a save could lose its data. I would have fixed the first one and shipped.</p><p>The expensive thing is not Claude generating 500 lines of code. It is Claude generating 500 lines of the wrong code.</p><h2>2. Let it explore before you tell it where the bug is</h2><p>Long trips showed up cropped on the shared web page. I was sure it was the mobile recorder, again. Instead of &#8220;fix the recorder&#8221;:</p><blockquote><p>Find out why traces longer than a few hours are cut on the share page.</p></blockquote><p>Claude followed the chain from the page to the database and came back with: the recorder is fine, the API layer caps every response at 1,000 rows, including stored procedures. Then it checked something I would not have, that the usual paging header is ignored on those calls, so the fix had to be explicit paging. A second, unrelated page had the same bug.</p><p>Autocomplete helps me write what I already decided. Claude Code helps me decide what should be written.</p><h2>3. Explore and plan before implementing</h2><p>For anything that touches the boat, I do not skip the first two. For an anchor alarm (drop a virtual anchor, get woken up if the boat drifts):</p><blockquote><p>Explore how background GPS tracking and notifications work in this app. Don&#8217;t modify anything.</p><p>Give me a plan for an anchor drag alarm on top of it. Phone locked, bad GPS, keep the existing architecture unless there&#8217;s a strong reason not to.</p></blockquote><p>The plan is where the decisions surfaced: a default radius of four boat lengths, a breach that must persist twelve seconds, and a rule that a GPS gap can delay the alarm but never suppress it. I would have discovered that rule at three in the morning, from a false alarm.</p><p>Plan mode adds overhead. If you can describe the diff in one sentence, skip it.</p><h2>4. Context</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!P2g2!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ac03355-5fa8-492d-b919-dfafb3e561e2_1362x724.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!P2g2!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ac03355-5fa8-492d-b919-dfafb3e561e2_1362x724.png 424w, https://substackcdn.com/image/fetch/$s_!P2g2!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ac03355-5fa8-492d-b919-dfafb3e561e2_1362x724.png 848w, https://substackcdn.com/image/fetch/$s_!P2g2!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ac03355-5fa8-492d-b919-dfafb3e561e2_1362x724.png 1272w, https://substackcdn.com/image/fetch/$s_!P2g2!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ac03355-5fa8-492d-b919-dfafb3e561e2_1362x724.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!P2g2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ac03355-5fa8-492d-b919-dfafb3e561e2_1362x724.png" width="1362" height="724" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6ac03355-5fa8-492d-b919-dfafb3e561e2_1362x724.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:724,&quot;width&quot;:1362,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:143216,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.thebuildup.dev/i/207268724?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ac03355-5fa8-492d-b919-dfafb3e561e2_1362x724.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!P2g2!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ac03355-5fa8-492d-b919-dfafb3e561e2_1362x724.png 424w, https://substackcdn.com/image/fetch/$s_!P2g2!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ac03355-5fa8-492d-b919-dfafb3e561e2_1362x724.png 848w, https://substackcdn.com/image/fetch/$s_!P2g2!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ac03355-5fa8-492d-b919-dfafb3e561e2_1362x724.png 1272w, https://substackcdn.com/image/fetch/$s_!P2g2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6ac03355-5fa8-492d-b919-dfafb3e561e2_1362x724.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Claude Code sends the whole conversation on every turn, and quality drops as the window fills.</p><p>An hour on a database test, then a landing page to rewrite? <code>/clear</code>. New session.</p><p>Same for files. Point Claude at the two files that matter. The folder with 38 of them can stay closed.</p><p>Same for tools. Run <code>/context</code> once in a fresh session and look at what is loaded before you type. Every MCP server in there should have a job in this session.</p><p>When the problem is the same but the conversation got huge, <code>/compact</code>.  What has to survive lives elsewhere: rules in <code>CLAUDE.md</code>, workflows in skills, learnings in memory.</p><div class="captioned-image-container"><figure><div class="image-link image2" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!IXyP!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc9d90e1e-c042-4c46-84ca-91bbe15e67e1_1386x272.png 424w, https://substackcdn.com/image/fetch/$s_!IXyP!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc9d90e1e-c042-4c46-84ca-91bbe15e67e1_1386x272.png 848w, https://substackcdn.com/image/fetch/$s_!IXyP!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc9d90e1e-c042-4c46-84ca-91bbe15e67e1_1386x272.png 1272w, https://substackcdn.com/image/fetch/$s_!IXyP!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc9d90e1e-c042-4c46-84ca-91bbe15e67e1_1386x272.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!IXyP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc9d90e1e-c042-4c46-84ca-91bbe15e67e1_1386x272.png" width="1386" height="272" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c9d90e1e-c042-4c46-84ca-91bbe15e67e1_1386x272.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:272,&quot;width&quot;:1386,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:47698,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.thebuildup.dev/i/207268724?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc9d90e1e-c042-4c46-84ca-91bbe15e67e1_1386x272.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!IXyP!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc9d90e1e-c042-4c46-84ca-91bbe15e67e1_1386x272.png 424w, https://substackcdn.com/image/fetch/$s_!IXyP!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc9d90e1e-c042-4c46-84ca-91bbe15e67e1_1386x272.png 848w, https://substackcdn.com/image/fetch/$s_!IXyP!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc9d90e1e-c042-4c46-84ca-91bbe15e67e1_1386x272.png 1272w, https://substackcdn.com/image/fetch/$s_!IXyP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc9d90e1e-c042-4c46-84ca-91bbe15e67e1_1386x272.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></div></figure></div><p>Memory is the part that changed recently. Claude Code keeps a memory folder per project, and mine has about forty files. One says: if a database test passes locally and fails in CI, reset the local database first, because new migrations only get applied on a fresh start. Claude wrote that down after it cost us a round-trip to CI, and the lesson has held since.</p><p>After a long investigation, I ask for it explicitly:</p><blockquote><p>Write down what we learned so the next session can continue without repeating this.</p></blockquote><p>The conversation is temporary. The knowledge is permanent.</p><p></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.thebuildup.dev/p/how-do-i-get-the-most-out-of-claude?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.thebuildup.dev/p/how-do-i-get-the-most-out-of-claude?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p><h2>5. <code>CLAUDE.md</code></h2><p>Mine answers one question: what would I explain to a new developer on their first day? The lines that earn their place are the ones Claude could only learn from me. &#8220;This is a B2C app, no team accounts&#8221; is there because the boilerplate is B2B and Claude kept building team features. &#8220;Regenerate the types after every migration&#8221; is there because it forgot.</p><p>If I have said it twice, it goes in. If it only matters for one workflow, it becomes a skill, because every line of the file rides along in every session, including the ones where it is dead weight.</p><p>The file gets better through corrections. Claude once proposed a new enum value to fix a calculation. I said no. Three days later it proposed a heuristic to detect the same case. This time I wrote the refusal down, with the reason, and the idea has stayed away since.</p><h2>6. Skills</h2><p>If I say the same thing three times, it should be a skill.</p><p>Most of mine live outside the code. One writes product descriptions. It is mostly rules: every adjective comes with a number, every section rests on a verified fact, and a list of words stays out. A validation script greps the output for all of it. A rule with a script behind it is a test. The rest is prayer.</p><p>Subagents are the same idea with their own context window. Mine are canned prompts with a name: database, tests, forms, code review. They earn their place because a schema review&#8217;s noise stays in their window and out of mine.</p><h2>7. Hooks</h2><p>A hook turns &#8220;please run the formatter&#8221; into &#8220;the formatter runs&#8221;.</p><p>I have zero. <code>CLAUDE.md</code> asks Claude to run typecheck, lint and format after every task. It is an instruction, so it is optional. A commit from July is titled &#8220;fix pre-existing errors surfaced by the unblocked Lint gate&#8221;. That is what optional looks like.</p><p>First hook to add: after every edit, run the formatter. Second: before every test run, rewrite the command so only failures come back. Start with one annoying manual step. The framework can wait.</p><h2>8. Choose the model</h2><div class="captioned-image-container"><figure><div class="image-link image2" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!RhMl!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F571b074c-a217-4215-be8a-1ab061897295_2232x416.png 424w, https://substackcdn.com/image/fetch/$s_!RhMl!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F571b074c-a217-4215-be8a-1ab061897295_2232x416.png 848w, https://substackcdn.com/image/fetch/$s_!RhMl!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F571b074c-a217-4215-be8a-1ab061897295_2232x416.png 1272w, https://substackcdn.com/image/fetch/$s_!RhMl!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F571b074c-a217-4215-be8a-1ab061897295_2232x416.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!RhMl!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F571b074c-a217-4215-be8a-1ab061897295_2232x416.png" width="1456" height="271" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/571b074c-a217-4215-be8a-1ab061897295_2232x416.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:271,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:118499,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.thebuildup.dev/i/207268724?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F571b074c-a217-4215-be8a-1ab061897295_2232x416.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!RhMl!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F571b074c-a217-4215-be8a-1ab061897295_2232x416.png 424w, https://substackcdn.com/image/fetch/$s_!RhMl!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F571b074c-a217-4215-be8a-1ab061897295_2232x416.png 848w, https://substackcdn.com/image/fetch/$s_!RhMl!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F571b074c-a217-4215-be8a-1ab061897295_2232x416.png 1272w, https://substackcdn.com/image/fetch/$s_!RhMl!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F571b074c-a217-4215-be8a-1ab061897295_2232x416.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></div></figure></div><p>My default is Fable, 1M context, xhigh effort. Expensive, and right for my codebase. When it fails, it is because it knew too little about an SDK&#8217;s internals, and a bigger model fixes that. Anthropic&#8217;s rule: too little knowledge, bigger model. Too little effort, higher effort.</p><p>I go cheaper wherever the thinking is already done. All my subagents run on Sonnet.</p><p>Set it once. Changing model or effort mid-session drops the prompt cache and re-reads the whole conversation at full price.</p><h2>9. Git</h2><p>Claude commits and writes the message. That is where the rationale lives now: the commit lists what failed and why, and a comment in the recorder says &#8220;this is exactly how multi-day trips lost their trace&#8221;. Written for the next agent as much as for me.</p><p>Reverting is free. A follow-up looked right in the session and did not work on the boat. Reverted, and the memory file says: dead end, here is the unsolved problem if you retry.</p><p>Checkpoints and <code>/rewind</code> are for the session. Git is for the product.</p><h2>10. Parallelize only parallel work</h2><p>Generating 32,000 descriptions was parallel work: waves of 200, ten subagents at a time, one merge agent per wave.</p><p>A bug in one recorder is the opposite. Five agents would each have needed to understand the same three modules before deciding anything.</p><p>When the work is parallel, worktrees: a refactor in one, a content loop in another, main free for a hotfix. Each agent gets its own filesystem.</p><h2>11. <code>/usage</code></h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!d4sg!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F786f0a9b-995f-43d3-aff2-a558a0654b8e_1574x848.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!d4sg!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F786f0a9b-995f-43d3-aff2-a558a0654b8e_1574x848.png 424w, https://substackcdn.com/image/fetch/$s_!d4sg!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F786f0a9b-995f-43d3-aff2-a558a0654b8e_1574x848.png 848w, https://substackcdn.com/image/fetch/$s_!d4sg!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F786f0a9b-995f-43d3-aff2-a558a0654b8e_1574x848.png 1272w, https://substackcdn.com/image/fetch/$s_!d4sg!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F786f0a9b-995f-43d3-aff2-a558a0654b8e_1574x848.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!d4sg!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F786f0a9b-995f-43d3-aff2-a558a0654b8e_1574x848.png" width="1456" height="784" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/786f0a9b-995f-43d3-aff2-a558a0654b8e_1574x848.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:784,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:140021,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.thebuildup.dev/i/207268724?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F786f0a9b-995f-43d3-aff2-a558a0654b8e_1574x848.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!d4sg!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F786f0a9b-995f-43d3-aff2-a558a0654b8e_1574x848.png 424w, https://substackcdn.com/image/fetch/$s_!d4sg!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F786f0a9b-995f-43d3-aff2-a558a0654b8e_1574x848.png 848w, https://substackcdn.com/image/fetch/$s_!d4sg!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F786f0a9b-995f-43d3-aff2-a558a0654b8e_1574x848.png 1272w, https://substackcdn.com/image/fetch/$s_!d4sg!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F786f0a9b-995f-43d3-aff2-a558a0654b8e_1574x848.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>A long loop hits the plan&#8217;s five-hour limit, waits, resumes. That works because the loop knows where the limit is. <code>/usage</code> shows it, and now attributes usage to each skill, subagent and MCP server.</p><p>One consequence: content generation runs inside Claude Code sessions rather than through the API. Same models, one bill.</p><p></p><h2>Bonus: spend your weekly allowance early</h2><p>The weekly cap expires, and Anthropic resets it early for everyone more often than you would expect. Each reset replaces whatever was left with a full allowance. Spent early, your week counts twice. Saved, it gets overwritten.</p><p>So run the heavy jobs in the first three days after a reset: migrations, content loops, large refactors. Keep the tail of the week for reviews and small fixes. <code>/usage</code> shows the reset time, and a session stopped by a limit now waits and resumes on its own.</p><p></p><h2>The skill is now delegating</h2><p>What to give it, what to keep, when to let it run, when to hit Escape.</p><p>Delegation works when the repository is ready for it. For me that meant a short <code>CLAUDE.md</code>, a few subagents, skills with validators, a memory folder, tests named like specs, commits that explain why. All of it is engineering, and all of it compounds: every mistake makes the next run better.</p><p>The goal is Claude doing more of the work while I keep control of the result.</p><p></p><div><hr></div><p></p><p>Thanks for reading <em><a href="https://www.thebuildup.dev/">The Buildup</a>. Robin and I share what we are building: the code, the failures, the numbers, and what is worth following in tech that week.</em></p><p><em>We are the two people co-founder at <a href="https://moqa.studio/">Moqa Studio</a>, an AI agency in Paris. We build AI agents and systems for businesses, and we help engineering teams work the way this article describes. If your team wants to get there faster, <a href="https://moqa.studio/">say hello</a>.</em></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.thebuildup.dev/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption"></p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[5 mistakes we made building an MCP server (so you don't have to)]]></title><description><![CDATA[We connected Notion, Linear, GitHub, Slack, and emails to Claude via MCP. It was supposed to save hours. Instead, it taught us how badly we understood what LLMs actually need.]]></description><link>https://www.thebuildup.dev/p/5-mistakes-we-made-building-an-mcp</link><guid isPermaLink="false">https://www.thebuildup.dev/p/5-mistakes-we-made-building-an-mcp</guid><dc:creator><![CDATA[Augustin]]></dc:creator><pubDate>Thu, 19 Feb 2026 11:04:13 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!dt-E!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffffad644-1f29-4c99-af39-216aae306e6f_1280x720.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!dt-E!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffffad644-1f29-4c99-af39-216aae306e6f_1280x720.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!dt-E!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffffad644-1f29-4c99-af39-216aae306e6f_1280x720.jpeg 424w, https://substackcdn.com/image/fetch/$s_!dt-E!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffffad644-1f29-4c99-af39-216aae306e6f_1280x720.jpeg 848w, https://substackcdn.com/image/fetch/$s_!dt-E!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffffad644-1f29-4c99-af39-216aae306e6f_1280x720.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!dt-E!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffffad644-1f29-4c99-af39-216aae306e6f_1280x720.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!dt-E!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffffad644-1f29-4c99-af39-216aae306e6f_1280x720.jpeg" width="1280" height="720" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/fffad644-1f29-4c99-af39-216aae306e6f_1280x720.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:720,&quot;width&quot;:1280,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:76704,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://www.thebuildup.dev/i/187874629?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffffad644-1f29-4c99-af39-216aae306e6f_1280x720.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!dt-E!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffffad644-1f29-4c99-af39-216aae306e6f_1280x720.jpeg 424w, https://substackcdn.com/image/fetch/$s_!dt-E!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffffad644-1f29-4c99-af39-216aae306e6f_1280x720.jpeg 848w, https://substackcdn.com/image/fetch/$s_!dt-E!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffffad644-1f29-4c99-af39-216aae306e6f_1280x720.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!dt-E!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffffad644-1f29-4c99-af39-216aae306e6f_1280x720.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>I got tired of being the guy who knows where things are.</p><p>Every week, Robin, my co-founder at <a href="https://moqa.studio/">Moqa Studio</a> pings me: "Where's the API spec?". It&#8217;s in Notion. &#8220;Did the client reply about the deadline?&#8221; Check Gmail. &#8220;What&#8217;s the status on that bug?&#8221; Linear. &#8220;Did you mention something about the auth flow?&#8221; Probably Slack, maybe two weeks ago.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.thebuildup.dev/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading The Buildup! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>I was the human search engine across five tools. And I hated it.</p><p>So I did what any developer would do, I over-engineered a solution. I built a Python MCP server that connects Claude directly to our entire knowledge base: Notion, Linear, GitHub, Slack, and Gmail. One interface. Ask a question, get an answer from wherever the information lives.</p><p>It took a weekend to get it running. It took three more weeks to make it actually work. Because the prototype was terrible, and I didn&#8217;t realize it until we started using it.</p><p>Here&#8217;s every mistake I made.</p><div><hr></div><h2>1: We wrapped every API endpoint as a tool</h2><p>Our first instinct, expose every useful endpoint as its own MCP tool. Small, composable, RESTful. We&#8217;d been building APIs for years, this felt natural.</p><pre><code><code># &#10060; Our first attempt &#8212; 23 tools
@server.tool()
async def notion_search_pages(query: str) -&gt; str:
    """Search Notion pages."""
    ...

@server.tool()
async def notion_get_page(page_id: str) -&gt; str:
    """Get a Notion page by ID."""
    ...

@server.tool()
async def linear_list_issues(team_id: str) -&gt; str:
    """List Linear issues for a team."""
    ...

@server.tool()
async def slack_search_messages(query: str) -&gt; str:
    """Search Slack messages."""
    ...

# ... 19 more tools like this
</code></code></pre><p>We had 23 tools. It was a disaster.</p><p>When a user asked &#8220;What&#8217;s the latest on this project?&#8221;, Claude had to read all 23 tool descriptions (~10,000 tokens just for the catalog), pick which to call, orchestrate multiple round-trips, and keep all intermediate results in memory.</p><p>What actually happened? Claude picked 2-3 tools, ignored the rest, and hallucinated the gaps. Every conversation was inconsistent.</p><h3>The Fix</h3><p>We collapsed 23 tools into 7 outcome-oriented ones.</p><pre><code><code># &#9989; After: one tool replaces five API calls
@server.tool()
async def get_project_status(project_name: str) -&gt; str:
    """Get a complete status overview of a project.
    Use when the user asks about progress, status, or updates.
    Returns: open tickets, recent commits, latest docs, 
    and recent discussions &#8212; all in one call.
    """
    return {
        "linear": await _get_project_tickets(project_name),
        "github": await _get_recent_commits(project_name),
        "notion": await _get_project_docs(project_name),
        "slack": await _get_recent_discussions(project_name),
    }
</code></code></pre><p>The orchestration happens in our code, not in the LLM&#8217;s context window. One call instead of five.</p><p><strong>Rule:</strong> if the agent needs to chain 3+ tools to answer a common question, you need a higher-level tool.</p><div><hr></div><h2>2: Our Tool descriptions were written for engineers</h2><p>We wrote descriptions the way we&#8217;d write code comments:</p><pre><code><code>@server.tool()
async def search_knowledge_base(query: str) -&gt; str:
    """Search the knowledge base."""
    ...
</code></code></pre><p>Claude kept ignoring this tool. A user asked &#8220;Find the API documentation for the payment module&#8221; and Claude answered from memory instead of searching. Confidently wrong.</p><h3>The Fix</h3><pre><code><code>@server.tool()
async def search_knowledge_base(
    query: str,
    sources: list[str] = ["notion", "linear", "github", "slack", "gmail"],
    limit: int = 10
) -&gt; str:
    """Search across the company knowledge base for any information 
    about projects, clients, technical decisions, or internal discussions.
    
    Use this as your FIRST tool when the user asks about any topic. 
    Searches Notion docs, Linear tickets, GitHub repos, 
    Slack conversations, and email threads simultaneously.
    
    Returns a ranked list with: source, title, snippet, date, 
    relevance score, and doc_id for fetching full content.
    
    Examples of when to use this:
    - "What did we decide about the authentication approach?"
    - "Find everything related to the latest project"
    - "Any emails from the client about the deadline?"
    """
    ...
</code></code></pre><p>Three things: <strong>when to use it</strong> (&#8221;FIRST tool when...&#8221;), <strong>domain-specific terms</strong> (projects, clients, Notion, Linear), <strong>what comes back</strong> (exact return shape).</p><p>Tool selection accuracy went from ~60% to ~95%.</p><blockquote><p>Treat tool descriptions like product copy. You&#8217;re selling the tool to an LLM.</p></blockquote><div><hr></div><h2>3: Raw API responses murdered the context window</h2><p>Our tools returned whatever the API gave us. A Notion page? Full JSON with blocks, properties, metadata, permissions, audit history. A single page was returning 8,000+ tokens.</p><pre><code><code># &#10060; Returning raw API response
@server.tool()
async def get_document(source: str, doc_id: str) -&gt; str:
    if source == "notion":
        page = await notion.pages.retrieve(doc_id)
        blocks = await notion.blocks.children.list(doc_id)
        return json.dumps({"page": page, "blocks": blocks})  # 8,000+ tokens &#128128;
</code></code></pre><p>Three pages = 24,000 tokens of raw JSON. Claude would read the first document and hallucinate the rest. Research confirms this: when the context window saturates, the model doesn&#8217;t gracefully degrade, it <strong>selectively forgets</strong> earlier tokens.</p><h3>The Fix</h3><p>Extract only what Claude needs:</p><pre><code><code># &#9989; Curated, token-efficient responses
@server.tool()
async def get_document(source: str, doc_id: str) -&gt; str:
    if source == "notion":
        page = await notion.pages.retrieve(doc_id)
        blocks = await notion.blocks.children.list(doc_id)
        return json.dumps({
            "title": _extract_title(page),
            "last_edited": page["last_edited_time"],
            "content": _blocks_to_text(blocks),  # Plain text, no JSON nesting
            "tags": _extract_tags(page),
        })  # ~800 tokens &#9989;
</code></code></pre><p>Same for Linear &#8212; full API response was ~3,000 tokens. After curation: ~300 tokens. 90% reduction. Claude could now handle 10+ documents in a single conversation.</p><blockquote><p>Never return raw API payloads. Curate the output like you&#8217;re designing a dashboard.</p></blockquote><div><hr></div><h2>4: The agent made random tool calls without workflow instructions</h2><p>Even with good tools and descriptions, Claude&#8217;s behavior was a coin flip. Sometimes it searched first, then fetched details. Other times it skipped search entirely and guessed a doc_id. No predictable pattern.</p><p>We assumed Claude would figure out the right workflow. It didn&#8217;t. LLMs don&#8217;t have a mental model of your system.</p><h3>The Fix</h3><p>Explicit workflow instructions, embedded directly in descriptions:</p><pre><code><code>@server.tool()
async def get_document(source: str, doc_id: str) -&gt; str:
    """Fetch the full content of a specific document, ticket, or thread.
    
    Use AFTER search_knowledge_base when you need complete content 
    of a specific result. The doc_id comes from search results.
    
    Do NOT call this tool without first searching &#8212; you need a valid doc_id.
    """
</code></code></pre><p>That last line, <code>"Do NOT call this tool without first searching"</code>, reduced hallucinated doc_id calls by ~80%.</p><p>We also added a system-level workflow:</p><pre><code><code>SYSTEM_INSTRUCTIONS = """
WORKFLOW for answering questions about the company:
1. ALWAYS start with search_knowledge_base
2. Use get_document to fetch full content of top 2-3 results
3. For project overviews, use get_project_status instead
4. NEVER guess or use training data for company-specific questions
"""
</code></code></pre><div><hr></div><h2>5: We almost shipped without auth on a multi-Client server</h2><p>This one still makes me uncomfortable.</p><p>Our first deployment ran on a shared server. One MCP instance, connected to all our tools, accessible by anyone on the team. Anyone asking about a project could theoretically pull up confidential client emails or private Slack channels from any workspace.</p><p>We didn&#8217;t think about it because during development, everything was local. <code>stdio</code> transport, our own laptops, our own credentials. Worked perfectly.</p><h3>The Fix</h3><p>Three changes:</p><ol><li><p><strong>Per-user credentials.</strong> Each user connects with their own OAuth tokens. No shared service accounts.</p></li><li><p><strong>Scoped access.</strong> Tools only return data from workspaces the user already has access to.</p></li><li><p><strong>Read-only by default.</strong> No write operations. No creating tickets, no sending emails. If we add writes later, every one requires explicit user confirmation.</p></li></ol><blockquote><p>The moment you move from local to remote deployment, you need auth, scoping, and audit logging. Day one.</p></blockquote><div><hr></div><h2>The Checklist</h2><p>If I were starting over:</p><ul><li><p>Map the 5-7 most common questions your team asks across tools, design tools around those</p></li><li><p>Start with 5 tools max. Add more only when you see a clear gap</p></li><li><p>Write descriptions first (400+ chars, domain-specific), implement handlers second</p></li><li><p>Return curated responses, never raw API payloads</p></li><li><p>Embed workflow instructions in descriptions</p></li><li><p>Per-user auth from day one, read-only by default</p></li><li><p>Test by asking real questions, not by checking if API calls succeed</p></li></ul><p>Our 7 tools now cover ~90% of the questions the team was asking. The remaining 10% can wait.</p><div><hr></div><h2>Final Thought</h2><p>Building an MCP server isn&#8217;t an infrastructure project. It&#8217;s a product design project for a non-human user.</p><p>The protocol works fine. Your server probably doesn&#8217;t. Ours didn&#8217;t either, until we stopped thinking like API engineers and started thinking like designers building for a user that reads every word you write, but doesn&#8217;t understand any of it the way you do.<br><br>We've since deployed variations of this setup for client projects at <a href="https://moqa.studio/">Moqa Studio</a>, same patterns, different tool stacks. The checklist holds up every time.<br></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.thebuildup.dev/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading The Buildup! If this kind of behind the scenes breakdown is useful, let us know in the comments.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[The workflow that changed how I build features]]></title><description><![CDATA[A practical guide to Claude Code]]></description><link>https://www.thebuildup.dev/p/the-workflow-that-changed-how-i-build</link><guid isPermaLink="false">https://www.thebuildup.dev/p/the-workflow-that-changed-how-i-build</guid><dc:creator><![CDATA[Robin]]></dc:creator><pubDate>Thu, 18 Dec 2025 15:21:48 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/0f4cf17b-b9c4-4ee0-a8ae-30e55e90e231_1920x1080.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!pR8Y!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa46297e8-d402-415b-ab10-7c62f6560feb_1920x1080.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!pR8Y!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa46297e8-d402-415b-ab10-7c62f6560feb_1920x1080.jpeg 424w, https://substackcdn.com/image/fetch/$s_!pR8Y!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa46297e8-d402-415b-ab10-7c62f6560feb_1920x1080.jpeg 848w, https://substackcdn.com/image/fetch/$s_!pR8Y!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa46297e8-d402-415b-ab10-7c62f6560feb_1920x1080.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!pR8Y!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa46297e8-d402-415b-ab10-7c62f6560feb_1920x1080.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!pR8Y!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa46297e8-d402-415b-ab10-7c62f6560feb_1920x1080.jpeg" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a46297e8-d402-415b-ab10-7c62f6560feb_1920x1080.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1645186,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://www.thebuildup.dev/i/181970529?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa46297e8-d402-415b-ab10-7c62f6560feb_1920x1080.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!pR8Y!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa46297e8-d402-415b-ab10-7c62f6560feb_1920x1080.jpeg 424w, https://substackcdn.com/image/fetch/$s_!pR8Y!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa46297e8-d402-415b-ab10-7c62f6560feb_1920x1080.jpeg 848w, https://substackcdn.com/image/fetch/$s_!pR8Y!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa46297e8-d402-415b-ab10-7c62f6560feb_1920x1080.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!pR8Y!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa46297e8-d402-415b-ab10-7c62f6560feb_1920x1080.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Whether you&#8217;re new to Claude Code or feel like you&#8217;ve been using it wrong, you&#8217;re in the right place.</p><p>Most developers approach it the same way:<br><strong>&#8594;</strong> &#8220;Build feature X&#8221; <br><strong>&#8594;</strong> Get messy output <br><strong>&#8594;</strong> Conclude the tool isn&#8217;t ready. <br>I was one of them until I fundamentally changed my approach.</p><p>Here&#8217;s the thing about being a developer: you&#8217;re constantly learning. New frameworks, new patterns, new tools. Most bring incremental improvements. But every once in a while, something fundamentally reshapes how you work.</p><p>Claude Code was that for me.</p><p>In this guide, I&#8217;ll walk you through the workflow that transformed my development process: setting up persistent context, mastering Plan Mode, and configuring specialized subagents.</p><p>This isn&#8217;t an exhaustive exploration of everything Claude Code can do. It&#8217;s a practical guide focused on what actually works well for me day to day.</p><p>Let&#8217;s dive in. &#129343;</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.thebuildup.dev/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading The Buildup! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p><h2>What is Claude Code, really?</h2><p>Here&#8217;s the crucial mindset shift: <strong>visualize</strong> <strong>Claude Code as a developer tool</strong>, not a magic box that does everything for you.</p><p>It can be incredibly effective when used well. It can also mess up codebases when used poorly. The difference lies entirely in your approach.</p><p></p><h2>Core principles for success</h2><p>Three elements make the difference between frustration and flow:</p><ol><li><p><strong>The claude.md file</strong> for persistent project context</p></li><li><p><strong>Plan Mode</strong> for thinking before building</p></li><li><p><strong>Specialized subagents</strong> for delegating to the right expert</p></li></ol><p>Get these right, and Claude Code becomes a genuinely powerful part of your toolkit. Let&#8217;s break them down.</p><h3>1. A good claude.md file</h3><p>First thing: set up a <code>claude.md</code> file in your project root. Think of this as a persistent guide that Claude references on almost every prompt.</p><p>What belongs in there?</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!89hT!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6c5a2be9-61cb-4031-88da-dbf6395aec22_1250x566.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!89hT!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6c5a2be9-61cb-4031-88da-dbf6395aec22_1250x566.png 424w, https://substackcdn.com/image/fetch/$s_!89hT!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6c5a2be9-61cb-4031-88da-dbf6395aec22_1250x566.png 848w, https://substackcdn.com/image/fetch/$s_!89hT!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6c5a2be9-61cb-4031-88da-dbf6395aec22_1250x566.png 1272w, https://substackcdn.com/image/fetch/$s_!89hT!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6c5a2be9-61cb-4031-88da-dbf6395aec22_1250x566.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!89hT!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6c5a2be9-61cb-4031-88da-dbf6395aec22_1250x566.png" width="1250" height="566" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6c5a2be9-61cb-4031-88da-dbf6395aec22_1250x566.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:566,&quot;width&quot;:1250,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:305846,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.thebuildup.dev/i/181970529?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6c5a2be9-61cb-4031-88da-dbf6395aec22_1250x566.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!89hT!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6c5a2be9-61cb-4031-88da-dbf6395aec22_1250x566.png 424w, https://substackcdn.com/image/fetch/$s_!89hT!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6c5a2be9-61cb-4031-88da-dbf6395aec22_1250x566.png 848w, https://substackcdn.com/image/fetch/$s_!89hT!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6c5a2be9-61cb-4031-88da-dbf6395aec22_1250x566.png 1272w, https://substackcdn.com/image/fetch/$s_!89hT!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6c5a2be9-61cb-4031-88da-dbf6395aec22_1250x566.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>The more context here, the less you repeat yourself. Update it as your project evolves.</p><h3>2. Plan Mode: think before you build</h3><p>With your claude.md in place, you&#8217;re ready for the next piece of the puzzle: how you actually build features.</p><p>This is the cornerstone of using Claude Code properly.</p><p>It&#8217;s tempting to ask Claude to &#8220;implement feature X&#8221; directly. Don&#8217;t.</p><p>For complex features, this rarely works well. The code might function, but it lacks coherence with your existing architecture.</p><p><strong>Why?</strong> When you jump straight to implementation, Claude makes assumptions about your architecture, naming conventions, and patterns. These assumptions compound. You end up with code that technically works but feels foreign to your codebase.</p><p><strong>The fix: Plan Mode.</strong></p><p>Toggle it by pressing <code>Shift + Tab</code> twice. Describe the feature you want in detail. Claude will analyze your codebase and draft a structured plan.</p><p>Here&#8217;s the key: read that plan carefully. Iterate on it. Ask Claude to break it down into ordered implementation tasks. This step is where you save hours of refactoring later.</p><h3>3. Specialized subagents</h3><p>Once you have a solid plan, here&#8217;s where things get really powerful: specialized subagents.</p><p>These handle different parts of your codebase. Each subagent operates in its own context window, keeping your main conversation clean and focused.</p><p>Think of them as specialized team members. You wouldn&#8217;t ask your backend developer to handle your design system. Same logic here.</p><p><strong>Common configurations:</strong></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!yMHD!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fafe96f59-da64-4dc0-adfe-b77ac2f3847b_1244x482.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!yMHD!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fafe96f59-da64-4dc0-adfe-b77ac2f3847b_1244x482.png 424w, https://substackcdn.com/image/fetch/$s_!yMHD!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fafe96f59-da64-4dc0-adfe-b77ac2f3847b_1244x482.png 848w, https://substackcdn.com/image/fetch/$s_!yMHD!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fafe96f59-da64-4dc0-adfe-b77ac2f3847b_1244x482.png 1272w, https://substackcdn.com/image/fetch/$s_!yMHD!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fafe96f59-da64-4dc0-adfe-b77ac2f3847b_1244x482.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!yMHD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fafe96f59-da64-4dc0-adfe-b77ac2f3847b_1244x482.png" width="1244" height="482" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/afe96f59-da64-4dc0-adfe-b77ac2f3847b_1244x482.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:482,&quot;width&quot;:1244,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:257662,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.thebuildup.dev/i/181970529?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fafe96f59-da64-4dc0-adfe-b77ac2f3847b_1244x482.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!yMHD!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fafe96f59-da64-4dc0-adfe-b77ac2f3847b_1244x482.png 424w, https://substackcdn.com/image/fetch/$s_!yMHD!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fafe96f59-da64-4dc0-adfe-b77ac2f3847b_1244x482.png 848w, https://substackcdn.com/image/fetch/$s_!yMHD!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fafe96f59-da64-4dc0-adfe-b77ac2f3847b_1244x482.png 1272w, https://substackcdn.com/image/fetch/$s_!yMHD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fafe96f59-da64-4dc0-adfe-b77ac2f3847b_1244x482.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><p><strong>How to set up subagents</strong> Setting up subagents is straightforward. Run <code>/agents</code> in Claude Code to open the management interface. From there you can create new agents at project level (stored in <code>.claude/agents/</code>) or user level (stored in <code>~/.claude/agents/</code>).</p><p>Each subagent is a Markdown file with YAML frontmatter:</p><pre><code><code>---
name: frontend dev
description: Frontend specialist. Use for React components, styling, and state management.
tools: Read, Edit, Bash, Grep, Glob
model: sonnet
---

You are a frontend expert specializing in React and TypeScript.

When invoked:
1. Review the component requirements
2. Check existing patterns in the codebase
3. Implement following established conventions
4. Ensure proper typing and error handling

Focus on clean, maintainable component architecture.
</code></code></pre><p><strong>Pro tip</strong>: Let Claude generate the initial subagent for you, then customize it. Run <code>/agents</code>, select &#8220;Create New Agent,&#8221; and describe what you need. Claude will draft the configuration. You refine from there.</p><p>The <code>description</code> field matters. Make it specific and action oriented. Include phrases like &#8220;Use proactively&#8221; if you want Claude to invoke it automatically when relevant.</p><p></p><h2>The full development workflow</h2><p>Now that you understand the three core elements, let&#8217;s see how they work together. This is the workflow I follow for every feature I build:</p><pre><code><code>&#9484;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9488;
&#9474;                     CLAUDE CODE WORKFLOW                        &#9474;
&#9492;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9496;
                              &#9474;
                              &#9660;
&#9484;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9488;
&#9474;  1. SETUP                                                       &#9474;
&#9474;     claude.md + subagents + MCP (Linear/Jira)                   &#9474;
&#9492;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9496;
                              &#9474;
                              &#9660;
&#9484;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9488;
&#9474;  2. PLAN MODE (Shift+Tab x2)                                    &#9474;
&#9474;     Describe feature &#8594; Claude analyzes codebase &#8594; Draft plan    &#9474;
&#9492;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9496;
                              &#9474;
                              &#9660;
                    &#9484;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9488;
                    &#9474;  Plan looks     &#9474;
                    &#9474;  good?          &#9474;&#9668;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9488;
                    &#9492;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9496;               &#9474;
                      &#9474;           &#9474;                   &#9474;
                     Yes          No                  &#9474;
                      &#9474;           &#9474;                   &#9474;
                      &#9474;           &#9660;                   &#9474;
                      &#9474;   &#9484;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9488;           &#9474;
                      &#9474;   &#9474; Iterate &amp;     &#9474;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9496;
                      &#9474;   &#9474; refine plan   &#9474;
                      &#9474;   &#9492;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9496;
                      &#9660;
&#9484;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9488;
&#9474;  3. IMPLEMENTATION                                              &#9474;
&#9474;     Dispatch to specialized subagents                           &#9474;
&#9474;     (frontend / backend / testing / docs)                       &#9474;
&#9492;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9496;
                              &#9474;
                              &#9660;
&#9484;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9488;
&#9474;  4. REVIEW                                                      &#9474;
&#9474;     Ask Claude to check for unnecessary complexity              &#9474;
&#9492;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9496;
                              &#9474;
                              &#9660;
&#9484;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9488;
&#9474;  5. PR                                                          &#9474;
&#9474;     Claude opens PR with clear description                      &#9474;
&#9492;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9496;
</code></code></pre><p>That&#8217;s the bird&#8217;s eye view. Let&#8217;s zoom in on how to actually implement this, starting from scratch.</p><p></p><h2>Setting up a new project: the checklist</h2><p>Starting from scratch? Here&#8217;s how to get everything wired up from day one.</p><p>Complete these steps:</p><ol><li><p>Set up your <code>claude.md</code> with project context and coding standards</p></li><li><p>Configure specialized agents for your stack (frontend, backend, GitHub, documentation, architecture)</p></li><li><p>Connect your ticketing platform via MCP (Linear, Jira, or markdown todos)</p></li></ol><p>The MCP integration is worth the setup. With Linear, Claude can read ticket descriptions, update statuses, and create subtasks. Planning and execution in one loop. It will then open the PR and link it to your Linear issue. Pretty convenient. (I&#8217;ll get into more details about that in a coming post)</p><p></p><h2>The feature development pattern</h2><p>With your project configured, here&#8217;s the step by step pattern I follow for every new feature:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Bm51!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5dcde51-d0a9-4b13-9860-458e14c2dc3b_1338x688.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Bm51!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5dcde51-d0a9-4b13-9860-458e14c2dc3b_1338x688.png 424w, https://substackcdn.com/image/fetch/$s_!Bm51!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5dcde51-d0a9-4b13-9860-458e14c2dc3b_1338x688.png 848w, https://substackcdn.com/image/fetch/$s_!Bm51!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5dcde51-d0a9-4b13-9860-458e14c2dc3b_1338x688.png 1272w, https://substackcdn.com/image/fetch/$s_!Bm51!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5dcde51-d0a9-4b13-9860-458e14c2dc3b_1338x688.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Bm51!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5dcde51-d0a9-4b13-9860-458e14c2dc3b_1338x688.png" width="1338" height="688" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f5dcde51-d0a9-4b13-9860-458e14c2dc3b_1338x688.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:688,&quot;width&quot;:1338,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:391084,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.thebuildup.dev/i/181970529?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5dcde51-d0a9-4b13-9860-458e14c2dc3b_1338x688.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Bm51!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5dcde51-d0a9-4b13-9860-458e14c2dc3b_1338x688.png 424w, https://substackcdn.com/image/fetch/$s_!Bm51!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5dcde51-d0a9-4b13-9860-458e14c2dc3b_1338x688.png 848w, https://substackcdn.com/image/fetch/$s_!Bm51!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5dcde51-d0a9-4b13-9860-458e14c2dc3b_1338x688.png 1272w, https://substackcdn.com/image/fetch/$s_!Bm51!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5dcde51-d0a9-4b13-9860-458e14c2dc3b_1338x688.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><p>Taking the time to plan and brainstorm the perfect plan for your feature is what makes the code output good. Don&#8217;t skip this part !</p><p></p><h2>Common mistakes to avoid</h2><p>Before you run off to implement all of this, let me save you some pain. These are the traps I fell into early on:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!RW0K!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F829fa7e0-2806-4ad8-a181-3570922f2073_1340x752.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!RW0K!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F829fa7e0-2806-4ad8-a181-3570922f2073_1340x752.png 424w, https://substackcdn.com/image/fetch/$s_!RW0K!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F829fa7e0-2806-4ad8-a181-3570922f2073_1340x752.png 848w, https://substackcdn.com/image/fetch/$s_!RW0K!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F829fa7e0-2806-4ad8-a181-3570922f2073_1340x752.png 1272w, https://substackcdn.com/image/fetch/$s_!RW0K!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F829fa7e0-2806-4ad8-a181-3570922f2073_1340x752.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!RW0K!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F829fa7e0-2806-4ad8-a181-3570922f2073_1340x752.png" width="1340" height="752" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/829fa7e0-2806-4ad8-a181-3570922f2073_1340x752.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:752,&quot;width&quot;:1340,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:396101,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.thebuildup.dev/i/181970529?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F829fa7e0-2806-4ad8-a181-3570922f2073_1340x752.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!RW0K!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F829fa7e0-2806-4ad8-a181-3570922f2073_1340x752.png 424w, https://substackcdn.com/image/fetch/$s_!RW0K!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F829fa7e0-2806-4ad8-a181-3570922f2073_1340x752.png 848w, https://substackcdn.com/image/fetch/$s_!RW0K!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F829fa7e0-2806-4ad8-a181-3570922f2073_1340x752.png 1272w, https://substackcdn.com/image/fetch/$s_!RW0K!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F829fa7e0-2806-4ad8-a181-3570922f2073_1340x752.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><h2>Personal perspective</h2><p>Having used Claude Code extensively over the past months, I&#8217;ve watched my own productivity transform. So did my workflow. I write less code now, and spend more time reviewing PRs and talking to an AI in my console.</p><p>The impact is real. I ship faster and spend less time debugging.</p><p>Claude Code became truly useful when I stopped asking it to &#8220;build feature X&#8221; and started treating it like a junior developer on my team. One that needs clear context, a solid plan, and specific responsibilities. That framing changed everything.</p><p>At this point, it would be difficult for me to go back to my regular coding experience. I would feel much less effective without this tool in my toolkit.</p><p>Overall, I&#8217;m a big fan of Claude Code and I really enjoy this new approach to coding. It allows me to focus more on features and architecture, while only diving into the code when the topic is genuinely interesting.</p><p></p><h2>Coming up next</h2><p>This guide covers the fundamentals, but there&#8217;s more to explore. In upcoming posts we will get into</p><ul><li><p><strong>Linear workflow integration</strong> for automated project development</p></li><li><p><strong>Deep dive</strong> into the most useful MCP tools and subagents</p></li><li><p><strong>Claude code for marketing</strong></p></li></ul><p>See you in the next one,</p><p><strong>Robin</strong></p><div><hr></div><p><em>What&#8217;s your experience with AI assisted coding? Drop your thoughts below.</em> &#128071;</p><h4>Useful resources</h4><p><a href="https://code.claude.com/docs/en/overview">The Claude Code documentation is awesome</a> <br><a href="https://github.com/wshobson/agents">Wshobson set of claude code agents &amp; plugins</a></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.thebuildup.dev/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading The Buildup! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Build your own MCP servers using N8N (Nocode)]]></title><description><![CDATA[If you&#8217;ve been following the AI automation space, you&#8217;ve probably heard about the Model Context Protocol (MCP).]]></description><link>https://www.thebuildup.dev/p/build-your-own-mcp-servers-using</link><guid isPermaLink="false">https://www.thebuildup.dev/p/build-your-own-mcp-servers-using</guid><dc:creator><![CDATA[Augustin]]></dc:creator><pubDate>Tue, 14 Oct 2025 15:03:18 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/e0b5398a-c259-4851-abcd-f6000e01cd5f_1600x900.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Every new service means new code. Every API update breaks something. And you&#8217;re stuck maintaining integration spaghetti instead of building actual features.</p><p>Model Context Protocol (MCP) was supposed to fix this, it&#8217;s like USB-C for AI. But here&#8217;s what nobody&#8217;s saying, you don&#8217;t need to write a single line of Python to use it. n8n turns MCP development from a multi-day coding marathon into a drag-and-drop afternoon.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.thebuildup.dev/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading The Buildup! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!KHII!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0599c00a-8046-4f19-9e71-cb31dfaa89a3_1036x576.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!KHII!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0599c00a-8046-4f19-9e71-cb31dfaa89a3_1036x576.png 424w, https://substackcdn.com/image/fetch/$s_!KHII!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0599c00a-8046-4f19-9e71-cb31dfaa89a3_1036x576.png 848w, https://substackcdn.com/image/fetch/$s_!KHII!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0599c00a-8046-4f19-9e71-cb31dfaa89a3_1036x576.png 1272w, https://substackcdn.com/image/fetch/$s_!KHII!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0599c00a-8046-4f19-9e71-cb31dfaa89a3_1036x576.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!KHII!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0599c00a-8046-4f19-9e71-cb31dfaa89a3_1036x576.png" width="1036" height="576" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0599c00a-8046-4f19-9e71-cb31dfaa89a3_1036x576.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:576,&quot;width&quot;:1036,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:112847,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://www.thebuildup.dev/i/175193776?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0599c00a-8046-4f19-9e71-cb31dfaa89a3_1036x576.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!KHII!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0599c00a-8046-4f19-9e71-cb31dfaa89a3_1036x576.png 424w, https://substackcdn.com/image/fetch/$s_!KHII!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0599c00a-8046-4f19-9e71-cb31dfaa89a3_1036x576.png 848w, https://substackcdn.com/image/fetch/$s_!KHII!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0599c00a-8046-4f19-9e71-cb31dfaa89a3_1036x576.png 1272w, https://substackcdn.com/image/fetch/$s_!KHII!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0599c00a-8046-4f19-9e71-cb31dfaa89a3_1036x576.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2>Why n8n works so well for MCP development</h2><p>I&#8217;ll be honest, if you&#8217;re hand-coding MCP servers, you&#8217;re either unaware of better options or you enjoy pain.</p><h3>Visual tool management</h3><p>MCP server development requires defining tools, handling authentication, and managing server lifecycle, all through code. n8n flips this on its head by providing a visual interface where each workflow step becomes a potential MCP tool. You&#8217;re essentially building with building blocks instead of writing boilerplate.</p><h3>Bidirectional MCP integration</h3><p>What makes n8n unique in the MCP ecosystem is its bidirectional approach. You can turn n8n workflows into MCP servers that AI agents can call, and simultaneously use n8n as an MCP client to consume external tools. This dual capability means you can create sophisticated automation pipelines that bridge multiple MCP services without custom integration code.</p><h3>Enterprise-ready infrastructure</h3><p>n8n handles the operational concerns that often trip up custom MCP implementations: authentication, error handling, logging, and scalability. When you deploy an n8n MCP server, you&#8217;re getting production-ready infrastructure that can handle real workloads, not just proof-of-concept demos.</p><h2>Building a developer assistant in 20 minutes</h2><p>Let me show you something practical. We&#8217;re building a developer assistant that combines GitHub with custom code analysis tools. Two MCP servers. Zero Python files.</p><h2>Architecture overview</h2><p>Our developer assistant uses 2 MCP servers:</p><p><strong>GitHub MCP server</strong> (external service integration)</p><ul><li><p>get/comment on issues</p></li><li><p>list repository issues</p></li><li><p>read file contents</p></li><li><p>full GitHub API access</p></li></ul><p><strong>Custom dev tools MCP server</strong> (internal tools)</p><ul><li><p>code quality analyzer</p></li><li><p>documentation generator</p></li><li><p>StackOverflow search</p></li><li><p>PR change summarizer</p></li></ul><p>The AI agent discovers and orchestrates these tools automatically. No manual coordination required.</p><h2>Prerequisites setup</h2><p>You&#8217;ll need:</p><ul><li><p>n8n instance (self-hosted or n8n Cloud)</p></li><li><p>community packages enabled: <code>N8N_COMMUNITY_PACKAGES_ALLOW_TOOL_USAGE=true</code></p></li><li><p>MCP community nodes installed: <code>n8n-nodes-mcp</code></p></li><li><p>GitHub personal access token</p></li><li><p>OpenAI API key</p></li></ul><p></p><div><hr></div><h2>Implementing the GitHub MCP server</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!wVzk!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf8e86f7-5c91-4deb-b414-d2dfdc1fe994_1160x692.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!wVzk!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf8e86f7-5c91-4deb-b414-d2dfdc1fe994_1160x692.png 424w, https://substackcdn.com/image/fetch/$s_!wVzk!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf8e86f7-5c91-4deb-b414-d2dfdc1fe994_1160x692.png 848w, https://substackcdn.com/image/fetch/$s_!wVzk!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf8e86f7-5c91-4deb-b414-d2dfdc1fe994_1160x692.png 1272w, https://substackcdn.com/image/fetch/$s_!wVzk!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf8e86f7-5c91-4deb-b414-d2dfdc1fe994_1160x692.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!wVzk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf8e86f7-5c91-4deb-b414-d2dfdc1fe994_1160x692.png" width="1160" height="692" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/cf8e86f7-5c91-4deb-b414-d2dfdc1fe994_1160x692.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:692,&quot;width&quot;:1160,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:138607,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.thebuildup.dev/i/175193776?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf8e86f7-5c91-4deb-b414-d2dfdc1fe994_1160x692.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!wVzk!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf8e86f7-5c91-4deb-b414-d2dfdc1fe994_1160x692.png 424w, https://substackcdn.com/image/fetch/$s_!wVzk!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf8e86f7-5c91-4deb-b414-d2dfdc1fe994_1160x692.png 848w, https://substackcdn.com/image/fetch/$s_!wVzk!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf8e86f7-5c91-4deb-b414-d2dfdc1fe994_1160x692.png 1272w, https://substackcdn.com/image/fetch/$s_!wVzk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcf8e86f7-5c91-4deb-b414-d2dfdc1fe994_1160x692.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h3>Step 1: create the MCP server trigger</h3><p>Start by creating a new workflow and adding the MCP server trigger node. This transforms your workflow into an MCP server endpoint.</p><pre><code><code>Node: MCP Server Trigger
Path: github-tools</code></code></pre><p>The trigger generates a unique URL like <code>/mcp/github-tools/sse</code> that MCP clients can connect to.</p><h3>Step 2: add GitHub tool nodes</h3><p>Connect GitHub nodes to your MCP trigger. Each becomes a discoverable tool:</p><p><strong>Get issue node:</strong></p><pre><code><code>Resource: Issue
Operation: Get
Parameters: $fromAI(&#8217;issue_number&#8217;, &#8216;GitHub issue number&#8217;, &#8216;number&#8217;)</code></code></pre><p><strong>Comment on issue node:</strong></p><pre><code><code>Resource: Issue  
Operation: Create Comment
Issue Number: $fromAI(&#8217;issue_number&#8217;, ...)
Body: $fromAI(&#8217;comment_body&#8217;, &#8216;Comment text&#8217;, &#8216;string&#8217;)</code></code></pre><p><strong>List issues node:</strong></p><pre><code><code>Resource: Repository
Operation: Get Issues
Limit: 10</code></code></pre><p><strong>Get file node:</strong></p><pre><code><code>Resource: File
Operation: Get
File Path: $fromAI(&#8217;file_path&#8217;, &#8216;File path in repository&#8217;, &#8216;string&#8217;)</code></code></pre><h3>Step 3: configure authentication</h3><p>Add your GitHub personal access token to each GitHub node. The MCP server will handle this securely when tools are invoked.</p><p></p><h2>Building the custom dev tools MCP server</h2><p>This is where MCP&#8217;s value really shines: creating specialized internal tools.</p><ol><li><p><code>MCP Server Trigger (path: dev-tools)</code></p></li><li><p><code>Execute Workflow Trigger (receives function calls)</code></p></li><li><p><code>Switch Node (routes to appropriate tool)</code></p></li><li><p><code>Tool Workflow Nodes (expose tools to MCP) </code></p></li></ol><h3><strong>Tool 1: Code quality analyzer</strong></h3><p>What developers on Reddit actually want: something that catches console.logs, old <code>var</code> declarations, and nested if-hell before code review.</p><p><strong>How it works in n8n:</strong></p><ul><li><p>Add a Code node</p></li><li><p>Check for common issues (debug statements, old syntax, missing comments)</p></li><li><p>Return a JSON score and suggestions</p></li></ul><blockquote><p>Skip the fancy static analysis. The 80/20 rule applies, catching obvious issues catches 80% of problems. Your custom tool can focus on your team&#8217;s specific code smells.</p></blockquote><h3><strong>Tool 2: StackOverflow search</strong></h3><p>Use an HTTP request node hitting StackOverflow&#8217;s API. Format the results. Done.</p><blockquote><p>Always use <code>{dynamicTyping: true, skipEmptyLines: true}</code> when parsing external API responses. Trust me on this one.</p></blockquote><h3><strong>Tool 3: PR summariser</strong></h3><p>Takes GitHub PR data and returns a human readable summary. Perfect for daily standups.</p><blockquote><p>Keep summaries short. A good summary is 1-2 sentences max. The AI can always fetch more details if needed.</p></blockquote><h2>Connecting your AI agent</h2><p>Now comes the fun part: letting your AI agent discover and use these tools automatically.</p><ol><li><p><strong>Add MCP Client nodes</strong> pointing to your server endpoints</p></li><li><p><strong>Configure your AI agent</strong> (OpenAI GPT-4, Claude, whatever)</p></li><li><p><strong>Add a Chat Trigger</strong> for the web interface</p></li></ol><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!reCa!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F367c7694-c318-479e-b73c-6baaf0a34e4a_1288x1020.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!reCa!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F367c7694-c318-479e-b73c-6baaf0a34e4a_1288x1020.png 424w, https://substackcdn.com/image/fetch/$s_!reCa!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F367c7694-c318-479e-b73c-6baaf0a34e4a_1288x1020.png 848w, https://substackcdn.com/image/fetch/$s_!reCa!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F367c7694-c318-479e-b73c-6baaf0a34e4a_1288x1020.png 1272w, https://substackcdn.com/image/fetch/$s_!reCa!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F367c7694-c318-479e-b73c-6baaf0a34e4a_1288x1020.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!reCa!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F367c7694-c318-479e-b73c-6baaf0a34e4a_1288x1020.png" width="1288" height="1020" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/367c7694-c318-479e-b73c-6baaf0a34e4a_1288x1020.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1020,&quot;width&quot;:1288,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:172796,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.thebuildup.dev/i/175193776?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F367c7694-c318-479e-b73c-6baaf0a34e4a_1288x1020.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!reCa!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F367c7694-c318-479e-b73c-6baaf0a34e4a_1288x1020.png 424w, https://substackcdn.com/image/fetch/$s_!reCa!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F367c7694-c318-479e-b73c-6baaf0a34e4a_1288x1020.png 848w, https://substackcdn.com/image/fetch/$s_!reCa!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F367c7694-c318-479e-b73c-6baaf0a34e4a_1288x1020.png 1272w, https://substackcdn.com/image/fetch/$s_!reCa!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F367c7694-c318-479e-b73c-6baaf0a34e4a_1288x1020.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>System prompt that actually works:</p><pre><code><code>You are a developer assistant. You help with code reviews, 
documentation, and development workflows. You have access 
to GitHub and custom dev tools. Use them proactively.</code></code></pre><blockquote><p>Don&#8217;t over-engineer your system prompts. Be clear, be direct, be brief.</p></blockquote><div><hr></div><h2>2 real examples</h2><ol><li><p><em>Analyze this code quality</em></p></li></ol><pre><code><code>function test() {
  var x = 1;
  console.log(x);
  if (x) {
    if (x &gt; 0) {
      if (x &lt; 10) {
        return x;
      }
    }
  }
}</code></code></pre><p><strong>Agent response:</strong></p><p><em>"Score: 70/100. Issues: debug statements, old var declarations, deep nesting. Suggestions: Remove console.log, use const/let, reduce nesting depth."</em></p><p>The AI automatically chose the right tool, executed it, and formatted the response.</p><ol start="2"><li><p><em>&#8220;Search StackOverflow for async/await best practices, then generate documentation for my async function&#8221;</em></p></li></ol><p><strong>Agent response:</strong></p><p><em>&#8220;Found 5 relevant posts. Based on those, here&#8217;s your documentation...&#8221;</em></p><p>This required ZERO configuration beyond defining the tools. The AI agent figured out it needed two tools and orchestrated them automatically.</p><p></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.thebuildup.dev/p/build-your-own-mcp-servers-using?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.thebuildup.dev/p/build-your-own-mcp-servers-using?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p><p></p><div><hr></div><h1>My tips</h1><p>After digging through Reddit threads, n8n forums, and GitHub issues, here&#8217;s what experienced users actually do:</p><h3>Start small, then scale</h3><p>Maybe automate something simple, like notifying your team when a new client signs up. As you get comfortable, you can build more complex workflows.</p><p>Why this matters: Complex workflows are just simple workflows connected together. Master the basics first.</p><h3>Use Sub-workflows for complex agents</h3><p>From n8n forums: for complex AI agents with many tools, use the Call Workflow node. Each tool becomes a separate workflow.</p><p>Benefits:</p><ul><li><p>Easier to debug (test tools individually)</p></li><li><p>Better organization (not one giant workflow)</p></li><li><p>No performance penalty on n8n Cloud</p></li></ul><p>Simple agents with 2-3 tools? Just use built-in nodes. Don&#8217;t over-engineer.</p><h3>Naming conventions save lives</h3><p>The biggest complaint on Reddit is messy workflows that nobody can understand 3 months later.</p><p>What works:</p><ul><li><p>Name every node descriptively</p></li><li><p>Use consistent patterns (<code>Get-[Thing]</code>, <code>Check-[Condition]</code>, <code>Send-[Action]</code>)</p></li><li><p>Add notes for complex logic</p></li><li><p>Document weird workarounds immediately</p></li></ul><h3>Error handling</h3><p>Production workflows WILL fail. APIs timeout. Services go down. Users send garbage data.</p><p>Essential practices:</p><ul><li><p>Add Error Trigger nodes to catch failures</p></li><li><p>Set up retry logic (3 attempts with exponential backoff)</p></li><li><p>Send alerts to Slack/email when things break</p></li><li><p>Log everything&#8212;you&#8217;ll need it for debugging</p></li></ul><blockquote><p>n8n&#8217;s error handling saved us hundreds of hours monthly. We get alerted immediately when something breaks, with full context.</p></blockquote><h3>Security</h3><p><strong>Do these things:</strong></p><ul><li><p>Store API keys in n8n&#8217;s credential manager (NEVER in code)</p></li><li><p>Use bearer token authentication for production MCP endpoints</p></li><li><p>Run behind a reverse proxy (nginx/Caddy)</p></li><li><p>Enable rate limiting</p></li><li><p>Set up environment variables properly</p></li></ul><blockquote><p>Most security breaches happen because someone hardcoded credentials &#8220;just for testing.&#8221; Don&#8217;t be that person.</p><p></p></blockquote><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.thebuildup.dev/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.thebuildup.dev/subscribe?"><span>Subscribe now</span></a></p><p></p><h2>Common issues</h2><h3>MCP client can&#8217;t connect</h3><p>Check these:</p><ol><li><p>Is the workflow activated?</p></li><li><p>Does the MCP path match your client config exactly?</p></li><li><p>Are SSE connections allowed through your firewall?</p></li><li><p>Is your SSL certificate valid?</p></li></ol><p>When in doubt, check the execution logs. They&#8217;re there for a reason.</p><h3>Tools aren&#8217;t appearing in my AI agent</h3><p>Fix these:</p><ol><li><p>Clear, descriptive tool descriptions (the AI uses these!)</p></li><li><p>Proper <code>$fromAI()</code> parameter definitions</p></li><li><p>Restart your AI agent after adding tools</p></li><li><p>Check that tool nodes are actually connected to the MCP trigger</p></li></ol><blockquote><p>90% of missing tools issues are unclear descriptions. The AI needs to understand when to use each tool.</p></blockquote><h3>Everything is slow</h3><p>Optimize<strong>:</strong></p><ul><li><p>Use caching for frequently accessed data</p></li><li><p>Set reasonable HTTP timeouts (don&#8217;t wait forever)</p></li><li><p>Monitor your n8n instance resources</p></li><li><p>Consider using async operations</p></li></ul><p>If a tool takes &gt;5 seconds, users will complain. If it takes &gt;10 seconds, they&#8217;ll assume it&#8217;s broken.</p><p></p><div><hr></div><p></p><h2>Conclusion</h2><p>You can keep hand-coding MCP servers if you want. Some problems need custom code. But for 80% of use cases? Visual development is faster, more maintainable, and easier to hand off. We now use a similar workflow at <a href="https://moqa.studio/">Moqa Studio</a>.<br></p><p>Like and drop a comment below if you want the complete workflow JSON to get started. Way easier than building from scratch.<br>Also, if you found this useful, share it with a developer who&#8217;s still writing custom integrations by hand.</p><div class="pullquote"><p><br>Now stop reading and go build something.<br></p></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.thebuildup.dev/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading The Buildup! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[The developer job is changing]]></title><description><![CDATA[AI is changing the way devs code faster than expected]]></description><link>https://www.thebuildup.dev/p/the-developer-job-has-already-changed</link><guid isPermaLink="false">https://www.thebuildup.dev/p/the-developer-job-has-already-changed</guid><dc:creator><![CDATA[Robin]]></dc:creator><pubDate>Fri, 26 Sep 2025 11:30:25 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/c7a4d2f1-53cd-4237-a65c-7f84991f5c81_1920x1080.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!pWBO!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7db71194-5fbb-4083-b190-60af748600e4_793x411.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!pWBO!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7db71194-5fbb-4083-b190-60af748600e4_793x411.png 424w, https://substackcdn.com/image/fetch/$s_!pWBO!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7db71194-5fbb-4083-b190-60af748600e4_793x411.png 848w, https://substackcdn.com/image/fetch/$s_!pWBO!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7db71194-5fbb-4083-b190-60af748600e4_793x411.png 1272w, https://substackcdn.com/image/fetch/$s_!pWBO!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7db71194-5fbb-4083-b190-60af748600e4_793x411.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!pWBO!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7db71194-5fbb-4083-b190-60af748600e4_793x411.png" width="793" height="411" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7db71194-5fbb-4083-b190-60af748600e4_793x411.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:411,&quot;width&quot;:793,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:11674,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://thebuildupdev.substack.com/i/174574149?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7db71194-5fbb-4083-b190-60af748600e4_793x411.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!pWBO!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7db71194-5fbb-4083-b190-60af748600e4_793x411.png 424w, https://substackcdn.com/image/fetch/$s_!pWBO!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7db71194-5fbb-4083-b190-60af748600e4_793x411.png 848w, https://substackcdn.com/image/fetch/$s_!pWBO!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7db71194-5fbb-4083-b190-60af748600e4_793x411.png 1272w, https://substackcdn.com/image/fetch/$s_!pWBO!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7db71194-5fbb-4083-b190-60af748600e4_793x411.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Picture this: You describe a feature. <br><br>AI agents explore your codebase, implement the solution, write tests, create PRs, and handle Git workflows. <br><br>You focus on architecture and strategy. <br>This isn&#8217;t future tech, this is Claude Code right now. <br><br>The dev role is evolving from <strong>code writer</strong> to <strong>code conductor</strong>. </p><p>And honestly? It&#8217;s the biggest shift since we moved from assembly to high-level languages.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.thebuildup.dev/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading The Buildup! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p><h1>Why this evolution matters</h1><p>Traditional developer workflow is dead:</p><ul><li><p>&#10060; <strong>Old</strong>: Write code &#8594; Debug &#8594; Test &#8594; Commit &#8594; PR</p></li><li><p>&#9989; <strong>New</strong>: Plan features &#8594; Review AI implementations &#8594; Guide architecture</p></li></ul><p>&#10240;Future belongs to devs who can orchestrate AI agents, not just write syntax.</p><p></p><h1>The game changing features &#127919;</h1><h3>1. Multi-agent dream teams &#129302;</h3><p>Specialized subagents that collaborate like senior developers:</p><ul><li><p><strong>Code Reviewer Agent</strong>: Security patterns, performance optimization</p></li><li><p><strong>Debugger Agent</strong>: Root cause analysis, systematic problem-solving</p></li><li><p><strong>Data Science Agent</strong>: ML implementations, analytics architecture</p></li><li><p><strong>DevOps Agent</strong>: Deployment, infrastructure, CI/CD</p></li></ul><p>&#10240;</p><p><strong>Real workflow:</strong></p><pre><code><code>&#8220;Implement user analytics with privacy compliance&#8221;

&#8594; Data Science Agent designs architecture
&#8594; Code Reviewer validates privacy patterns
&#8594; Main Agent implements solution
&#8594; DevOps Agent handles monitoring
&#8594; All collaborate on testing
</code></code></pre><p>This is intelligent collaboration, not just parallel processing.</p><p></p><h3>2. Autonomous git mastery &#128202;</h3><p>Git becomes conversational and smart:</p><ul><li><p><strong>Contextual commits</strong> based on business impact</p></li><li><p><strong>Intelligent branch management</strong> with proper naming</p></li><li><p><strong>Smart conflict resolution</strong> understanding code context</p></li><li><p><strong>PR creation</strong> with impact analysis and testing notes</p></li></ul><p>Example:</p><pre><code><code>&#8220;Refactor payment processing edge cases&#8221;

 &#8594; Creates branch: fix/payment-edge-cases-handling
 &#8594; Implements comprehensive solution
 &#8594; Generates: &#8220;feat(payments): Add retry logic and timeout handling
    - Implements exponential backoff for failed transactions
    - Adds comprehensive error logging
    - Includes unit tests for timeout scenarios&#8221;
 &#8594; Creates PR with security analysis
</code></code></pre><p></p><h3>3. Universal tool integration (MCP) &#128279;</h3><p>Claude Code becomes your development orchestrator:</p><ul><li><p><strong>JIRA</strong>: &#8220;Implement JIRA 1234&#8221; &#8594; Complete implementation + ticket updates</p></li><li><p><strong>Database</strong>: Direct queries with context awareness</p></li><li><p><strong>Monitoring</strong>: Analyze Sentry errors &#8594; Implement fixes</p></li><li><p><strong>Design</strong>: Figma &#8594; Pixel perfect implementations</p></li></ul><p>Each integration multiplies capabilities exponentially.</p><p></p><h3>4. Human like codebase exploration &#128373;&#65039;</h3><p>Explores codebases like a senior dev, not through embeddings:</p><ul><li><p>Uses glob, grep, find organically</p></li><li><p>Traces execution flow across services</p></li><li><p>Maps dependencies and business logic</p></li><li><p>Understands architectural patterns</p></li></ul><p>Instead of explaining your codebase, Claude investigates and adapts.</p><p></p><h3>5. Production ready safety hooks &#127907;</h3><p>Intelligent guardrails for enterprise use:</p><ul><li><p><strong>Pre-modification</strong>: Security scans, permission checks</p></li><li><p><strong>Post-change</strong>: Auto-format, tests, documentation updates</p></li><li><p><strong>Custom workflows</strong>: Slack notifications, deployment triggers</p></li></ul><pre><code><code># Critical file protection
if [[ &#8220;$file&#8221; == *&#8221;production-config&#8221;* ]]; then
    exit 1  # &#10060; Protected
fi
# Auto-validation pipeline
prettier &#8594; tests &#8594; staging &#8594; team notification
</code></code></pre><p></p><h1>What this really means</h1><p><strong>The New Developer Skillset:</strong></p><ul><li><p><strong>Architectural thinking</strong> over syntax memorization</p></li><li><p><strong>AI orchestration</strong> across multiple specialized agents</p></li><li><p><strong>Strategic code review</strong> for business logic validation</p></li><li><p><strong>Problem decomposition</strong> into AI-actionable tasks</p></li></ul><p>&#10240;<strong>Industry Reality Check:</strong></p><ul><li><p>Development velocity increases 10x, not 2x</p></li><li><p>Code quality becomes consistent across teams</p></li><li><p>Complex software barriers drop dramatically</p></li><li><p>Senior devs become solution architects + AI conductors</p></li></ul><p></p><h1>Jump in the boat now</h1><p>Claude Code isn&#8217;t another tool, it&#8217;s the foundation of post-traditional development. The devs who win won&#8217;t write the most code. They&#8217;ll orchestrate AI agents to build better software faster. </p><p>The developer job isn&#8217;t disappearing. It&#8217;s evolving into something more strategic, creative, and infinitely more powerful.</p><p></p><p></p><div><hr></div><p><strong>Ready to conduct the orchestra?</strong> Check out Claude Code at </p><p>https://docs.claude.com</p><p></p><p><em>Want me to deep dive into any specific feature? Multi-agent workflows? Git automation? MCP integrations? Hit me up. I&#8217;m obsessed with how this tech is reshaping development.</em></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.thebuildup.dev/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading The Buildup! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[🔥 Claude Code from anywhere with your mobile phone]]></title><description><![CDATA[Or how to spin up a good dev setup on mobile phone]]></description><link>https://www.thebuildup.dev/p/claude-code-from-anywhere-with-your</link><guid isPermaLink="false">https://www.thebuildup.dev/p/claude-code-from-anywhere-with-your</guid><dc:creator><![CDATA[Robin]]></dc:creator><pubDate>Mon, 25 Aug 2025 18:36:07 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/d52ea746-d663-44d2-b006-853630c302d7_1920x1080.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!kuAW!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F426c3562-bf3b-446d-80f4-8a188cbee20b_643x1023.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!kuAW!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F426c3562-bf3b-446d-80f4-8a188cbee20b_643x1023.jpeg 424w, https://substackcdn.com/image/fetch/$s_!kuAW!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F426c3562-bf3b-446d-80f4-8a188cbee20b_643x1023.jpeg 848w, https://substackcdn.com/image/fetch/$s_!kuAW!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F426c3562-bf3b-446d-80f4-8a188cbee20b_643x1023.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!kuAW!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F426c3562-bf3b-446d-80f4-8a188cbee20b_643x1023.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!kuAW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F426c3562-bf3b-446d-80f4-8a188cbee20b_643x1023.jpeg" width="313" height="497.97667185069986" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/426c3562-bf3b-446d-80f4-8a188cbee20b_643x1023.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1023,&quot;width&quot;:643,&quot;resizeWidth&quot;:313,&quot;bytes&quot;:90294,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://thebuildupdev.substack.com/i/171910839?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F426c3562-bf3b-446d-80f4-8a188cbee20b_643x1023.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!kuAW!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F426c3562-bf3b-446d-80f4-8a188cbee20b_643x1023.jpeg 424w, https://substackcdn.com/image/fetch/$s_!kuAW!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F426c3562-bf3b-446d-80f4-8a188cbee20b_643x1023.jpeg 848w, https://substackcdn.com/image/fetch/$s_!kuAW!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F426c3562-bf3b-446d-80f4-8a188cbee20b_643x1023.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!kuAW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F426c3562-bf3b-446d-80f4-8a188cbee20b_643x1023.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><p></p><p>My problem on this one was super simple: I wanted to be able to work on some projects or quick things quickly while on the go.</p><p>I use Claude code a lot, and really wanted to be able to use it while on the go, from my phone.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.thebuildup.dev/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading The Buildup! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>This is what this setup is all about, and more.</p><h1>Context</h1><p>In this article, we will explore a workflow that setup in order to be able to:</p><ul><li><p>Ask Claude Code to edit stuff on my projects &amp; validate changes by opening PRs</p></li><li><p>Have a Telegram bot notify me when a PR is opened</p></li><li><p>Review &amp; merge that PR on github mobile</p></li></ul><p>Here is a quick demo video of the full flow</p><div class="native-video-embed" data-component-name="VideoPlaceholder" data-attrs="{&quot;mediaUploadId&quot;:&quot;9dbe0108-a146-4e67-856f-3158fc8558cc&quot;,&quot;duration&quot;:null}"></div><p></p><p><strong>What We're Building</strong></p><ul><li><p>Claude Code project manipulation from mobile devices</p></li><li><p>Automated PR creation for each AI-generated change</p></li><li><p>Telegram notification system for instant PR awareness</p></li><li><p>Mobile-optimized code review and merge workflows</p></li></ul><h1>Let&#8217;s set this up</h1><h3>Step 1 : Spin up a VPS</h3><p>Create a small VPS (Virtual Private Server) with the provider of your choice.</p><p>I used Hetzner because their prices were extremely good (4.99$ /month), but you can use whatever VPS provider you like the most (DigitalOcean, &#8230;)</p><p>I also went for ubuntu as my operating system on my vps.</p><h3>Step 2 : Setup your VPS</h3><p>ssh into your VPS and install some must have</p><pre><code>ssh root@your-vps-ip

# Essential updates

apt update &amp;&amp; apt upgrade -y

apt install git curl nodejs npm tmux nginx -y

# Verify Node 18+

node -v</code></pre><h3>Step 3 : Git auth</h3><p>Generate SSH key on VPS:</p><pre><code>ssh-keygen -t ed25519 -C "your_email@example.com"

eval "$(ssh-agent -s)"

ssh-add ~/.ssh/id_ed25519

# Copy this to GitHub SSH keys

cat ~/.ssh/id_ed25519.pub</code></pre><p>From there you can clone the repo of your choice to start to work on it</p><pre><code>git clone git@github.com:username/repo.git

cd repo</code></pre><h3>Step 4 : Install Claude Code</h3><pre><code># Global install (no sudo)

npm install -g @anthropic-ai/claude-code

# Authenticate

claude login

# Follow OAuth flow

# Test installation

claude doctor</code></pre><p>From here, you can already ssh from your phone and have Claude Code work on your projects, which is awesome.</p><h3>(Optional) Step 5 : Create Claude Code subagents</h3><p>I like working with Claude Code subagents</p><p>I highly recommend creating a small PR creator subagent to create and write PRs on your project.</p><p>Here is an example:</p><pre><code># PR Expert Agent

You are a PR expert. Your job is to:

- Create detailed pull requests with clear descriptions

- Follow conventional commit standards

- Include testing instructions

- Add relevant labels and reviewers

When creating PRs:

1. Write descriptive titles

2. Include "What changed" and "Why"

3. Add testing steps

4. Tag breaking changes</code></pre><h3>Step 6 : n8n + Telegram bot</h3><p>I created a short n8n flow in order to have a Telegram bot notify me whenever I have a new PR on one of my projects.</p><p>Here is what it looks like</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!6QAY!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff143ae7d-f06e-4e5a-97f4-72491eb5d273_1672x874.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!6QAY!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff143ae7d-f06e-4e5a-97f4-72491eb5d273_1672x874.png 424w, https://substackcdn.com/image/fetch/$s_!6QAY!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff143ae7d-f06e-4e5a-97f4-72491eb5d273_1672x874.png 848w, https://substackcdn.com/image/fetch/$s_!6QAY!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff143ae7d-f06e-4e5a-97f4-72491eb5d273_1672x874.png 1272w, https://substackcdn.com/image/fetch/$s_!6QAY!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff143ae7d-f06e-4e5a-97f4-72491eb5d273_1672x874.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!6QAY!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff143ae7d-f06e-4e5a-97f4-72491eb5d273_1672x874.png" width="1456" height="761" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f143ae7d-f06e-4e5a-97f4-72491eb5d273_1672x874.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:761,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:144562,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://thebuildupdev.substack.com/i/171910839?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff143ae7d-f06e-4e5a-97f4-72491eb5d273_1672x874.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!6QAY!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff143ae7d-f06e-4e5a-97f4-72491eb5d273_1672x874.png 424w, https://substackcdn.com/image/fetch/$s_!6QAY!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff143ae7d-f06e-4e5a-97f4-72491eb5d273_1672x874.png 848w, https://substackcdn.com/image/fetch/$s_!6QAY!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff143ae7d-f06e-4e5a-97f4-72491eb5d273_1672x874.png 1272w, https://substackcdn.com/image/fetch/$s_!6QAY!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff143ae7d-f06e-4e5a-97f4-72491eb5d273_1672x874.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><p>There is:</p><ul><li><p>A github trigger node on PR creation (you have to setup one for each of your projects)</p></li><li><p>A switch that is going to look at the action (PR opened / closed)</p></li><li><p>Two Telegram message nodes that will send a message depending the context</p><ul><li><p>PR opened with the link and some details</p></li><li><p>PR merged</p></li></ul><p></p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!irMh!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5df0f3d-2a17-4b2a-b269-b88e65602ee6_770x366.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!irMh!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5df0f3d-2a17-4b2a-b269-b88e65602ee6_770x366.png 424w, https://substackcdn.com/image/fetch/$s_!irMh!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5df0f3d-2a17-4b2a-b269-b88e65602ee6_770x366.png 848w, https://substackcdn.com/image/fetch/$s_!irMh!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5df0f3d-2a17-4b2a-b269-b88e65602ee6_770x366.png 1272w, https://substackcdn.com/image/fetch/$s_!irMh!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5df0f3d-2a17-4b2a-b269-b88e65602ee6_770x366.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!irMh!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5df0f3d-2a17-4b2a-b269-b88e65602ee6_770x366.png" width="770" height="366" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b5df0f3d-2a17-4b2a-b269-b88e65602ee6_770x366.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:366,&quot;width&quot;:770,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:79157,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://thebuildupdev.substack.com/i/171910839?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5df0f3d-2a17-4b2a-b269-b88e65602ee6_770x366.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!irMh!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5df0f3d-2a17-4b2a-b269-b88e65602ee6_770x366.png 424w, https://substackcdn.com/image/fetch/$s_!irMh!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5df0f3d-2a17-4b2a-b269-b88e65602ee6_770x366.png 848w, https://substackcdn.com/image/fetch/$s_!irMh!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5df0f3d-2a17-4b2a-b269-b88e65602ee6_770x366.png 1272w, https://substackcdn.com/image/fetch/$s_!irMh!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5df0f3d-2a17-4b2a-b269-b88e65602ee6_770x366.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>In order to set the Telegram nodes, you will need to create a Telegram bot using father-bot (super simple)</p><h3>Step 7 : Enjoy your flow</h3><p>From there, cliking on the PR link will open Github mobile on your phone.</p><p>You can review the code and merge the PR accordingly !</p><h1>Conclusion</h1><p>I&#8217;m a big fan of this flow and use it daily at the moment.</p><p>Will probably keep upgrading it in the coming weeks !</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.thebuildup.dev/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading The Buildup! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[MCP: A quick overview]]></title><description><![CDATA[Model Context Protocol general introduction]]></description><link>https://www.thebuildup.dev/p/mcp-a-quick-overview</link><guid isPermaLink="false">https://www.thebuildup.dev/p/mcp-a-quick-overview</guid><dc:creator><![CDATA[Robin]]></dc:creator><pubDate>Fri, 11 Apr 2025 11:07:22 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!R-aC!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad29ff96-bdda-40a7-894e-137aee688ce9_1920x1080.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!R-aC!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad29ff96-bdda-40a7-894e-137aee688ce9_1920x1080.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!R-aC!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad29ff96-bdda-40a7-894e-137aee688ce9_1920x1080.png 424w, https://substackcdn.com/image/fetch/$s_!R-aC!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad29ff96-bdda-40a7-894e-137aee688ce9_1920x1080.png 848w, https://substackcdn.com/image/fetch/$s_!R-aC!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad29ff96-bdda-40a7-894e-137aee688ce9_1920x1080.png 1272w, https://substackcdn.com/image/fetch/$s_!R-aC!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad29ff96-bdda-40a7-894e-137aee688ce9_1920x1080.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!R-aC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad29ff96-bdda-40a7-894e-137aee688ce9_1920x1080.png" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ad29ff96-bdda-40a7-894e-137aee688ce9_1920x1080.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:333079,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://thebuildupdev.substack.com/i/161088501?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad29ff96-bdda-40a7-894e-137aee688ce9_1920x1080.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!R-aC!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad29ff96-bdda-40a7-894e-137aee688ce9_1920x1080.png 424w, https://substackcdn.com/image/fetch/$s_!R-aC!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad29ff96-bdda-40a7-894e-137aee688ce9_1920x1080.png 848w, https://substackcdn.com/image/fetch/$s_!R-aC!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad29ff96-bdda-40a7-894e-137aee688ce9_1920x1080.png 1272w, https://substackcdn.com/image/fetch/$s_!R-aC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad29ff96-bdda-40a7-894e-137aee688ce9_1920x1080.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>With MCP rapidly gaining traction in the AI community, I wanted to understand what makes this new protocol suddenly so important.</p><p>Let's explore why Model Context Protocol is becoming the standard way for AI to connect to external tools and data.</p><p></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.thebuildup.dev/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading The Buildup! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p><h2><strong>MCP explained: What exactly is it?</strong></h2><p>When you build AI applications, you typically need to connect to:</p><p>&#128313; Databases for retrieving information &#128313; APIs for external services &#128313; File systems for document access &#128313; Other tools your users need</p><p>Before MCP, each of these connections required:</p><ul><li><p>Custom integration code</p></li><li><p>Different authentication methods</p></li><li><p>Separate maintenance for each service</p></li><li><p>Significant development overhead</p></li></ul><p>Model Context Protocol creates a standardized way for AI to interact with ALL of these systems through one consistent interface.</p><p>Think of it like the USB standard for AI - one protocol to connect everything.</p><h2><strong>Why MCP matters: The integration problem it solves</strong></h2><p>Most people don't realize how much time AI developers spend on integrations rather than actual AI capabilities.</p><h3><strong>The current reality without MCP:</strong></h3><ol><li><p>An AI agent that needs to check your calendar, then email a colleague, then update a database requires THREE separate custom integrations</p></li><li><p>Each integration has its own:</p><ul><li><p>Authentication system</p></li><li><p>Data formatting requirements</p></li><li><p>Error handling approach</p></li><li><p>Maintenance burden</p></li></ul></li><li><p>Adding a new tool means writing entirely new code</p></li></ol><p>This is why most AI applications stay limited to a handful of services - integration complexity creates a barrier.</p><p>MCP breaks through this barrier with one standard protocol for everything.</p><h2><strong>Technical breakdown: How MCP actually works</strong></h2><p>MCP uses a client-server architecture with JSON-RPC messages:</p><ul><li><p><strong>MCP Clients</strong>: AI models or applications that want to use external tools</p></li><li><p><strong>MCP Servers</strong>: Services that provide capabilities to the AI</p></li></ul><p>The protocol exposes three key components:</p><ol><li><p><strong>Tools</strong>: Functions the AI can call (like "sendEmail" or "searchDatabase")</p></li><li><p><strong>Resources</strong>: Data the AI can access (like files or database records)</p></li><li><p><strong>Prompts</strong>: Templates the AI can use for specific tasks</p></li></ol><p>The magic happens through dynamic discovery - AI models can automatically detect what capabilities are available without being explicitly programmed for each one.</p><h2><strong>MCP advantages: Why developers are adopting it</strong></h2><p>The benefits of MCP extend beyond just standardization:</p><p>&#9989; <strong>Universal compatibility</strong>: Works with any AI model (Claude, GPT, open-source LLMs)</p><p>&#9989; <strong>Bidirectional communication</strong>: Both retrieving data AND taking actions</p><p>&#9989; <strong>Reduced development time</strong>: Connect new services in minutes, not days</p><p>&#9989; <strong>Future-proof</strong>: Add new tools without changing your core application</p><p>&#9989; <strong>Context sharing</strong>: Maintain conversation state across different tools</p><p>As one developer put it: "MCP took our integration time from weeks to hours."</p><h2><strong>Current limitations: What to be aware of</strong></h2><p>MCP isn't perfect yet. Current challenges include:</p><p>&#9888;&#65039; <strong>Deployment complexity</strong>: Primarily local servers for now, though cloud options are coming</p><p>&#9888;&#65039; <strong>Security considerations</strong>: Authentication and permissions systems are still maturing</p><p>&#9888;&#65039; <strong>Performance overhead</strong>: Multiple connections can introduce latency</p><p>&#9888;&#65039; <strong>Tool quality variance</strong>: Effectiveness depends on how well tool interfaces are described</p><p>For simple projects with minimal integration needs, MCP might be overkill. But for complex AI applications connecting to multiple systems, the benefits far outweigh these limitations.</p><h2><strong>Available MCP servers: What you can use today</strong></h2><p>The ecosystem is growing rapidly. As of March 2025, <a href="https://github.com/punkpeye/awesome-mcp-servers">over 1,000 MCP servers are available</a> for services including:</p><ul><li><p>Slack and Discord</p></li><li><p>Google Workspace (Gmail, Drive, Calendar)</p></li><li><p>Database connectors (PostgreSQL, MongoDB)</p></li><li><p>Notion, Figma, and other productivity tools</p></li><li><p>CRM systems like Salesforce</p></li><li><p>Search engines and knowledge bases</p></li><li><p>Custom enterprise tools</p></li></ul><p>This collection of pre-built servers means you can often find what you need without building from scratch.</p><h2><strong>The roadmap: What's coming next for MCP</strong></h2><p>According to the <a href="https://modelcontextprotocol.io/development/roadmap">official MCP roadmap</a>, several key improvements are in development:</p><ol><li><p><strong>Remote servers with OAuth</strong>: Simplifying cloud deployments</p></li><li><p><strong>Registry system</strong>: Central discovery for available MCP servers</p></li><li><p><strong>Stateless connections</strong>: Improved scalability</p></li><li><p><strong>Performance optimizations</strong>: Reducing latency overhead</p></li><li><p><strong>Enhanced security</strong>: Better authentication and permissions</p></li></ol><p>These improvements address most of the current limitations, positioning MCP to become even more widely adopted.</p><h2><strong>Real-world example: MCP in action</strong></h2><p>To illustrate MCP's power, consider this financial advisor AI application:</p><p><strong>Without MCP</strong>: The developer would need to write custom integrations for banking APIs, investment platforms, spreadsheet access, and email services - each with different authentication, data formats, and maintenance requirements.</p><p><strong>With MCP</strong>: The developer connects pre-built MCP servers for each service, and the AI can:</p><ul><li><p>Check account balances</p></li><li><p>Analyze investment performance</p></li><li><p>Update budget spreadsheets</p></li><li><p>Send summary reports via email</p></li></ul><p>All through a single, consistent interface - dramatically reducing development time and complexity.</p><h2><strong>Comparison with alternatives: Where MCP fits</strong></h2><p>How does MCP compare to other approaches?</p><p><strong>Custom API integrations</strong>:</p><ul><li><p>Much more development work</p></li><li><p>Less flexibility and scalability</p></li><li><p>Higher maintenance burden</p></li></ul><p><strong>OpenAI plugins</strong>:</p><ul><li><p>Limited to OpenAI's ecosystem</p></li><li><p>Less standardized</p></li><li><p>Primarily one-way information retrieval</p></li></ul><p><strong>LangChain tools</strong>:</p><ul><li><p>Developer-focused rather than AI-focused</p></li><li><p>Requires more code for each integration</p></li><li><p>Less dynamic discovery</p></li></ul><p>MCP provides a more standardized, flexible, and AI-native approach to tool integration.</p><h2><strong>Conclusion: The future of AI connectivity</strong></h2><p>MCP solves a real pain point for AI developers - the integration mess. While it's still early days, MCP has the potential to become the standard way AI systems connect to external tools and data.</p><p>Just as USB standardized physical device connections and HTTP standardized web communications, MCP is standardizing how AI interfaces with the digital world.</p><p>As the protocol matures and adoption continues to accelerate, we'll likely see MCP become the foundation for more sophisticated AI applications that seamlessly interact with our digital tools and information.</p><p>The question isn't whether to use MCP, but when and how to integrate it into your AI development strategy.</p><h2><strong>What now?</strong></h2><ul><li><p>Explore the <a href="https://github.com/punkpeye/awesome-mcp-servers">collection of available MCP servers</a></p></li><li><p>Check the <a href="https://modelcontextprotocol.io/development/roadmap">official MCP roadmap</a> for upcoming features</p></li><li><p>Consider which of your AI projects would benefit from standardized tool access</p></li><li><p>Join the growing MCP community to share experiences and best practices</p></li></ul><p></p><div class="captioned-button-wrap" data-attrs="{&quot;url&quot;:&quot;https://www.thebuildup.dev/p/mcp-a-quick-overview?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="CaptionedButtonToDOM"><div class="preamble"><p class="cta-caption">Thanks for reading The Buildup! This post is public so feel free to share it.</p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.thebuildup.dev/p/mcp-a-quick-overview?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.thebuildup.dev/p/mcp-a-quick-overview?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p></div><p></p>]]></content:encoded></item><item><title><![CDATA[How Secure is Telegram? A Deep Dive into the Messaging App's Privacy]]></title><description><![CDATA[Let's unpack the tech behind those "private" chats.]]></description><link>https://www.thebuildup.dev/p/how-secure-is-telegram-a-deep-dive</link><guid isPermaLink="false">https://www.thebuildup.dev/p/how-secure-is-telegram-a-deep-dive</guid><dc:creator><![CDATA[Robin]]></dc:creator><pubDate>Fri, 11 Apr 2025 11:01:48 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!aT8D!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c4c3632-f357-47d7-a1cb-d3a7e0246813_1200x675.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!aT8D!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c4c3632-f357-47d7-a1cb-d3a7e0246813_1200x675.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!aT8D!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c4c3632-f357-47d7-a1cb-d3a7e0246813_1200x675.jpeg 424w, https://substackcdn.com/image/fetch/$s_!aT8D!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c4c3632-f357-47d7-a1cb-d3a7e0246813_1200x675.jpeg 848w, https://substackcdn.com/image/fetch/$s_!aT8D!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c4c3632-f357-47d7-a1cb-d3a7e0246813_1200x675.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!aT8D!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c4c3632-f357-47d7-a1cb-d3a7e0246813_1200x675.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!aT8D!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c4c3632-f357-47d7-a1cb-d3a7e0246813_1200x675.jpeg" width="1200" height="675" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2c4c3632-f357-47d7-a1cb-d3a7e0246813_1200x675.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:675,&quot;width&quot;:1200,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:181492,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://thebuildupdev.substack.com/i/161088285?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c4c3632-f357-47d7-a1cb-d3a7e0246813_1200x675.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!aT8D!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c4c3632-f357-47d7-a1cb-d3a7e0246813_1200x675.jpeg 424w, https://substackcdn.com/image/fetch/$s_!aT8D!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c4c3632-f357-47d7-a1cb-d3a7e0246813_1200x675.jpeg 848w, https://substackcdn.com/image/fetch/$s_!aT8D!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c4c3632-f357-47d7-a1cb-d3a7e0246813_1200x675.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!aT8D!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c4c3632-f357-47d7-a1cb-d3a7e0246813_1200x675.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>With Telegram's CEO arrested in France, I got curious: How secure is Telegram, really?</p><p>Let's unpack the tech behind those "private" chats.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.thebuildup.dev/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading The Buildup! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><h2><strong>Telegram's chat types: What you need to know</strong></h2><p>When you start a new chat on Telegram:</p><p>&#128992; By default, you get:</p><ul><li><p>Regular private messages</p></li><li><p>Group chats</p></li><li><p>Channels</p></li></ul><p>These are NOT end-to-end encrypted</p><p>&#128994; You have to manually choose:</p><ul><li><p>"Secret Chats" for one-on-one convos</p></li></ul><p>This is the ONLY option with end-to-end encryption</p><p>Most users never switch to Secret Chats. Let's see why this matters.</p><h2><strong>Telegram's two encryption methods :</strong></h2><h3><strong>1&#65039;&#8419; Default encryption (what most people use):</strong></h3><ul><li><p>Uses MTProto, Telegram's custom protocol</p></li><li><p>Messages are encrypted... but Telegram has the keys</p></li><li><p>Telegram can read your messages if they want to</p></li></ul><h3><strong>2&#65039;&#8419; Secret Chats encryption:</strong></h3><ul><li><p>Uses improved MTProto 2.0</p></li><li><p>True end-to-end encryption</p></li><li><p>Only you and the recipient have the keys</p></li><li><p>Telegram can't read these messages</p></li></ul><p>The takeaway? Unless you're actively using Secret Chats, your Telegram messages aren't really private. So what's wrong with server encryption, it still is encryption right?</p><h2><strong>The problem with Telegram's default encryption:</strong></h2><ul><li><p>Messages are encrypted between you and Telegram's servers</p></li><li><p>BUT Telegram holds the encryption keys</p></li><li><p>This means:</p><ul><li><p>Telegram can decrypt and read your messages anytime</p></li><li><p>Your privacy relies on trusting Telegram won't abuse this access</p></li></ul></li></ul><p>Compare this to true end-to-end encryption:</p><ul><li><p>Even the service provider can't read your messages</p></li><li><p>Your chats are private, period.</p></li></ul><p>Bottom line: With Telegram's default, you're trusting them with your privacy. With true E2E, you don't have to trust anyone.</p><h2><strong>Why Telegram's encryption approach matters:</strong></h2><ol><li><p>Government requests:</p><ul><li><p>Telegram could be forced to hand over your messages</p></li><li><p>With true E2E, this wouldn't be possible</p></li></ul></li><li><p>Data breaches:</p><ul><li><p>If hackers breach Telegram's servers, your chats could be exposed</p></li><li><p>E2E encryption would protect you even if servers were compromised</p></li></ul></li><li><p>Trust issues:</p><ul><li><p>You're betting Telegram won't misuse your data</p></li><li><p>But why take that risk when other apps offer real privacy?</p></li></ul></li></ol><p>The big question: Do you trust Telegram with your private conversations? Let's have a look at other messaging apps.</p><h2><strong>Comparison with other messaging apps:</strong></h2><p><strong>Signal:</strong></p><ul><li><p>Open-source protocol developed by cryptography expert Moxie Marlinspike</p></li><li><p>Used by WhatsApp, Facebook Messenger (secret convos), and Google (encrypted RCS)</p></li><li><p>E2E encryption by default for all chats</p></li><li><p>Minimizes metadata collection</p></li><li><p>Non-profit organization, focused on privacy</p></li></ul><p><strong>WhatsApp:</strong></p><ul><li><p>Uses Signal Protocol for E2E encryption</p></li><li><p>E2E encryption by default since 2016</p></li><li><p>Owned by Meta, raising some trust concerns</p></li></ul><p><strong>iMessage:</strong></p><ul><li><p>Apple's proprietary E2E encryption</p></li><li><p>E2E encrypted by default since 2011</p></li><li><p>Limited to Apple devices</p></li></ul><p>Key point: These apps use E2E by default, unlike Telegram. But remember: even with E2E, apps may still collect metadata (who you talk to, when, etc.). This is also a privacy concern.</p><h2><strong>Conclusion: Telegram's security reality</strong></h2><p>Telegram's security isn't as straightforward as it seems:</p><ul><li><p>Default chats aren't truly private</p></li><li><p>Only "Secret Chats" offer real E2E encryption</p></li><li><p>Other major apps (Signal, WhatsApp, iMessage) use E2E by default</p></li></ul><p>The arrest of Telegram's CEO highlights the complex balance between privacy and accountability.</p><h2><strong>About the CEO's arrest</strong></h2><p>Pavel Durov faces charges in France for:</p><ul><li><p>Failure to moderate illegal content</p></li><li><p>Alleged hosting of:</p><ul><li><p>Drug trafficking</p></li><li><p>Child sexual abuse material</p></li><li><p>Fraud on the platform</p></li></ul></li></ul><p>This case highlights the complex balance between user privacy and platform accountability. It also raises questions: How much access should governments have to our communications? Can strong encryption coexist with effective moderation?</p><h2><strong>What now?</strong></h2><ul><li><p>Check your Telegram settings. Are you using Secret Chats when needed?</p></li><li><p>Consider alternatives like Signal for sensitive conversations</p></li><li><p>Stay informed about the privacy policies of your messaging apps</p></li></ul><p>What do you think? Is Telegram secure enough for you? Share this article to spread awareness! &#128257; Drop a comment with your thoughts &#128173;</p><h2><strong>Interesting sources:</strong></h2><ul><li><p>Detailed technical breakdown of Telegram's encryption by a cryptography expert</p><ul><li><p><a href="https://blog.cryptographyengineering.com/2024/08/25/telegram-is-not-really-an-encrypted-messaging-app/">Is Telegram really an encrypted messaging app?</a></p></li></ul></li><li><p>In-depth look at Durov's arrest and Telegram's content moderation challenges</p><ul><li><p><a href="https://www.theverge.com/2024/8/27/24229935/telegram-pavel-durov-france-arrest-moderation-crime">Telegram's CEO has taken a hands-off approach for years &#8212; now his luck might have run out</a></p></li></ul></li><li><p>Explores the legal implications of holding tech CEOs accountable for platform content</p><ul><li><p><a href="https://www.nytimes.com/2024/08/28/technology/durov-telegram-liability-platforms.html">Can Tech Executives Be Held Responsible for What Happens on Their Platforms?</a></p></li></ul></li></ul><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.thebuildup.dev/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading The Buildup! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item></channel></rss>