<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Claude Code | Daniel C Ferreira &lt;dcferreira></title><link>https://dcferreira.com/tag/claude-code/</link><atom:link href="https://dcferreira.com/tag/claude-code/index.xml" rel="self" type="application/rss+xml"/><description>Claude Code</description><generator>Wowchemy (https://wowchemy.com)</generator><language>en-us</language><lastBuildDate>Thu, 05 Nov 2026 00:00:00 +0000</lastBuildDate><image><url>https://dcferreira.com/media/icon_hu4876d3cb97a4ad0b3222b8f65edef0fe_436070_512x512_fill_lanczos_center_3.png</url><title>Claude Code</title><link>https://dcferreira.com/tag/claude-code/</link></image><item><title>How I use agents for work</title><link>https://dcferreira.com/post/2026-10-how-i-use-agents/</link><pubDate>Thu, 05 Nov 2026 00:00:00 +0000</pubDate><guid>https://dcferreira.com/post/2026-10-how-i-use-agents/</guid><description>&lt;p>I&amp;rsquo;ve had both friends and colleagues ask how I&amp;rsquo;m using agents for work. It&amp;rsquo;s easier to show than explain. Click the buttons in this animation to experience my typical morning:&lt;/p>
&lt;figure class="figframe" style="margin: 1.5rem 0">
&lt;iframe src="https://dcferreira.com/post-assets/how-i-use-agents/opener.html?v=1793837246" title="Join standup, then launch a worker for each task" loading="lazy" scrolling="no"
style="width: 100%; border: 0; display: block; height: 520px"
allowtransparency="true"
onload="(function (f) { function theme() { var t = document.body.classList.contains('dark') ? 'dark' : 'light'; f.style.colorScheme = t; try { f.contentDocument.documentElement.dataset.theme = t; } catch (e) {} } theme(); new MutationObserver(theme).observe(document.body, { attributes: true, attributeFilter: ['class'] }); function fit() { try { f.style.height = Math.ceil(f.contentDocument.body.getBoundingClientRect().height) + 'px'; } catch (e) {} } fit(); try { new ResizeObserver(fit).observe(f.contentDocument.body); } catch (e) {} })(this)">&lt;/iframe>
&lt;/figure>
&lt;p>The above is genuinely how I work nowadays. Most days I&amp;rsquo;m working on 3-10 tasks in parallel. The trick isn&amp;rsquo;t the agents or the harness. It&amp;rsquo;s that, &lt;strong>by the time I ask, they already have the context.&lt;/strong>&lt;/p>
&lt;p>If you write software and want to get more out of your agents, this is how I&amp;rsquo;ve set this up. My full setup is publicly available &lt;a href="https://github.com/dcferreira/brain-public" target="_blank" rel="noopener">here&lt;/a>, though it won&amp;rsquo;t make much sense without this post.&lt;/p>
&lt;h2 id="context-is-everything">Context is everything&lt;/h2>
&lt;p>It doesn&amp;rsquo;t matter how good the model is: if it doesn&amp;rsquo;t get the correct information, it won&amp;rsquo;t accomplish its task. My job these days is not to write code, but rather to ensure that my agents have access to the right context.&lt;/p>
&lt;p>So let&amp;rsquo;s talk about where my agents are getting their context from. This plot compares the sources before/after I had this setup described in this post, as well as its impact on my productivity:&lt;/p>
&lt;figure class="figframe" style="margin: 1.5rem 0">
&lt;iframe src="https://dcferreira.com/post-assets/how-i-use-agents/context-sources.html?v=1793837246" title="What agents read each week, and merge requests I opened" loading="lazy" scrolling="no"
style="width: 100%; border: 0; display: block; height: 560px"
allowtransparency="true"
onload="(function (f) { function theme() { var t = document.body.classList.contains('dark') ? 'dark' : 'light'; f.style.colorScheme = t; try { f.contentDocument.documentElement.dataset.theme = t; } catch (e) {} } theme(); new MutationObserver(theme).observe(document.body, { attributes: true, attributeFilter: ['class'] }); function fit() { try { f.style.height = Math.ceil(f.contentDocument.body.getBoundingClientRect().height) + 'px'; } catch (e) {} } fit(); try { new ResizeObserver(fit).observe(f.contentDocument.body); } catch (e) {} })(this)">&lt;/iframe>
&lt;/figure>
&lt;h3 id="my-second-brain">My Second Brain&lt;/h3>
&lt;p>The most important piece of context in my setup is the &amp;ldquo;second brain&amp;rdquo;. This brain is simply a text store where all agents are saving important information after every session. This turned out to be the most impactful source of context after I set up this system. In the first few weeks there&amp;rsquo;s not much there so it&amp;rsquo;s not super useful, but as it becomes populated the agents start relying on it more and more.&lt;/p>
&lt;p>In practice, this is an &lt;a href="https://obsidian.md/" target="_blank" rel="noopener">Obsidian&lt;/a> vault (that is, a bunch of markdown files), the capability to index it (I&amp;rsquo;m using &lt;a href="https://github.com/tobi/qmd" target="_blank" rel="noopener">qmd&lt;/a>), and some rules to get all Claude Code sessions to write to it.&lt;/p>
&lt;h3 id="meetings">Meetings&lt;/h3>
&lt;p>I have very few meetings myself, but find that the context in them is typically very important. I find it hard to remember all the details of what we speak about in a meeting, but agents excel at that. Despite it not being a very prominent source of information in the plot above, I&amp;rsquo;d rank its importance as 2nd only to the brain itself.&lt;/p>
&lt;p>In my setup I&amp;rsquo;m using &lt;a href="https://krisp.ai/" target="_blank" rel="noopener">Krisp&lt;/a> to record/transcribe meetings, and then use its &lt;a href="https://help.krisp.ai/hc/en-us/articles/25396920405148-Krisp-MCP#h_01M2SV0QW7001SFH0FNHMGPG00" target="_blank" rel="noopener">MCP service&lt;/a> to pull them into my vault. Fortunately for me I work remotely, so I know all meetings will go through my computer; if you work in person this might be hard to replicate.&lt;/p>
&lt;h3 id="logs">Logs&lt;/h3>
&lt;p>For bug fixing, logs are the most important source. If the agents can see the bugs happening, then you don&amp;rsquo;t need to explain what&amp;rsquo;s actually happening.&lt;/p>
&lt;p>I&amp;rsquo;ve been using &lt;a href="https://www.datadoghq.com/" target="_blank" rel="noopener">Datadog&lt;/a>, which also has an &lt;a href="https://docs.datadoghq.com/mcp_server/" target="_blank" rel="noopener">MCP service&lt;/a>. I find that the agents sometimes use Kubernetes commands directly also, for cases where something is happening live rather than a retrospective investigation.&lt;/p>
&lt;h3 id="communications">Communications&lt;/h3>
&lt;p>Then there&amp;rsquo;s the messaging platforms and docs. I use Slack to communicate with colleagues, Gmail for customers, and Notion as a wiki. All of these have pretty good MCP connections. I find agents are surprisingly good at searching Slack in particular, they often find things I couldn&amp;rsquo;t myself.&lt;/p>
&lt;h3 id="linking-them-together">Linking them together&lt;/h3>
&lt;p>As an example, a customer asked me to make some changes to how our code was matching names. This was one of many requests in a call with them, a small change for which I didn&amp;rsquo;t memorize all the details. After the meeting, the summary and tasks were added to the brain.&lt;/p>
&lt;p>The next day I started an agent with &amp;ldquo;make the changes to ignore middle names like we talked in yesterday&amp;rsquo;s call&amp;rdquo;, and the agent went to work. The agent knew the summarized information was second-hand, so went straight to the source call and found all the details. It turns out the rules were overly simplified in the summary that was saved in the brain! They were complex: &lt;em>first/last name alternative spellings were meant to be flagged for human review, when completely different they should be rejected, and only when they completely match (except for the middle name which would be ignored) should they be accepted&lt;/em>.&lt;/p>
&lt;p>Not only did I not tell the agent all of this, but I&amp;rsquo;d forgotten all of those details. I checked later and they did match the agreed rules during the 1 minute or so that we discussed in the call. I didn&amp;rsquo;t give the agent the rules, I just made sure it could find them!&lt;/p>
&lt;h2 id="a-typical-work-day">A typical work day&lt;/h2>
&lt;h3 id="before-standup">Before standup&lt;/h3>
&lt;p>I open up a new session and call a skill: an agent summarizes what I did yesterday, so I have an easy reference to read from during the standup. I find having some writing to look at helps me not forget topics I want to talk about. I also found—as I started doing more tasks per day—that I kept forgetting some things I had done.&lt;/p>
&lt;figure class="figframe" style="margin: 1.5rem 0">
&lt;iframe src="https://dcferreira.com/post-assets/how-i-use-agents/1-before-standup.html?v=1793837246" title="Before standup" loading="lazy" scrolling="no"
style="width: 100%; border: 0; display: block; height: 460px"
allowtransparency="true"
onload="(function (f) { function theme() { var t = document.body.classList.contains('dark') ? 'dark' : 'light'; f.style.colorScheme = t; try { f.contentDocument.documentElement.dataset.theme = t; } catch (e) {} } theme(); new MutationObserver(theme).observe(document.body, { attributes: true, attributeFilter: ['class'] }); function fit() { try { f.style.height = Math.ceil(f.contentDocument.body.getBoundingClientRect().height) + 'px'; } catch (e) {} } fit(); try { new ResizeObserver(fit).observe(f.contentDocument.body); } catch (e) {} })(this)">&lt;/iframe>
&lt;/figure>
&lt;h3 id="after-standup">After standup&lt;/h3>
&lt;p>Typically in a standup I&amp;rsquo;ll talk about what I&amp;rsquo;m doing today, and colleagues make requests of me. So after the call I have a todo list for the day, and I unleash my agents! I do this not only for programming tasks, but for almost all tasks: if I need to send a plot to Alice with the week&amp;rsquo;s data, I open a session so I don&amp;rsquo;t forget it. Each task has one dedicated agent.&lt;/p>
&lt;p>&lt;em>Note: this is the same animation I used in the intro of this post.&lt;/em>&lt;/p>
&lt;figure class="figframe" style="margin: 1.5rem 0">
&lt;iframe src="https://dcferreira.com/post-assets/how-i-use-agents/2-standup.html?v=1793837246" title="Standup" loading="lazy" scrolling="no"
style="width: 100%; border: 0; display: block; height: 480px"
allowtransparency="true"
onload="(function (f) { function theme() { var t = document.body.classList.contains('dark') ? 'dark' : 'light'; f.style.colorScheme = t; try { f.contentDocument.documentElement.dataset.theme = t; } catch (e) {} } theme(); new MutationObserver(theme).observe(document.body, { attributes: true, attributeFilter: ['class'] }); function fit() { try { f.style.height = Math.ceil(f.contentDocument.body.getBoundingClientRect().height) + 'px'; } catch (e) {} } fit(); try { new ResizeObserver(fit).observe(f.contentDocument.body); } catch (e) {} })(this)">&lt;/iframe>
&lt;/figure>
&lt;h3 id="during-the-day">During the day&lt;/h3>
&lt;p>Most of my time is context switching between the multiple tasks. I check what an agent needs from me, do what it takes to unblock it, and move on to the next agent. In practice I&amp;rsquo;m micromanaging all these agents, I&amp;rsquo;m choosing designs, I&amp;rsquo;m confirming bugs, I&amp;rsquo;m running commands myself and reporting results. &lt;strong>Each agent gets a bit of my attention, instead of one task getting all of it.&lt;/strong>&lt;/p>
&lt;p>To make it a bit easier to manage, I use tmux with some Claude Code hooks that change the tmux session name to include a 🔔 for the sessions that need me.&lt;/p>
&lt;figure class="figframe" style="margin: 1.5rem 0">
&lt;iframe src="https://dcferreira.com/post-assets/how-i-use-agents/3-the-day.html?v=1793837246" title="The day" loading="lazy" scrolling="no"
style="width: 100%; border: 0; display: block; height: 460px"
allowtransparency="true"
onload="(function (f) { function theme() { var t = document.body.classList.contains('dark') ? 'dark' : 'light'; f.style.colorScheme = t; try { f.contentDocument.documentElement.dataset.theme = t; } catch (e) {} } theme(); new MutationObserver(theme).observe(document.body, { attributes: true, attributeFilter: ['class'] }); function fit() { try { f.style.height = Math.ceil(f.contentDocument.body.getBoundingClientRect().height) + 'px'; } catch (e) {} } fit(); try { new ResizeObserver(fit).observe(f.contentDocument.body); } catch (e) {} })(this)">&lt;/iframe>
&lt;/figure>
&lt;h3 id="wrapping-up-tasks">Wrapping up tasks&lt;/h3>
&lt;p>When each agent finishes, they are &amp;ldquo;collected&amp;rdquo; and &amp;ldquo;torn down&amp;rdquo;. This just means that they write up a summary of the session (including what new information they learned) into the brain, and then clean up all the temporary files they left. This is often git worktrees, or some scripts that will never be needed again.&lt;/p>
&lt;p>Without this step, none of the above would work. &lt;strong>These summaries are the most important part of the brain setup!&lt;/strong> They&amp;rsquo;re what make the &amp;ldquo;pre-standup&amp;rdquo; skill work, and then everything else from there.&lt;/p>
&lt;p>I typically have one &amp;ldquo;brain&amp;rdquo; session which is in charge of doing this, and there are some skills on how to do it since it&amp;rsquo;s such a common process.&lt;/p>
&lt;figure class="figframe" style="margin: 1.5rem 0">
&lt;iframe src="https://dcferreira.com/post-assets/how-i-use-agents/4-wrap-up.html?v=1793837246" title="Wrap up" loading="lazy" scrolling="no"
style="width: 100%; border: 0; display: block; height: 470px"
allowtransparency="true"
onload="(function (f) { function theme() { var t = document.body.classList.contains('dark') ? 'dark' : 'light'; f.style.colorScheme = t; try { f.contentDocument.documentElement.dataset.theme = t; } catch (e) {} } theme(); new MutationObserver(theme).observe(document.body, { attributes: true, attributeFilter: ['class'] }); function fit() { try { f.style.height = Math.ceil(f.contentDocument.body.getBoundingClientRect().height) + 'px'; } catch (e) {} } fit(); try { new ResizeObserver(fit).observe(f.contentDocument.body); } catch (e) {} })(this)">&lt;/iframe>
&lt;/figure>
&lt;h3 id="during-the-week">During the week&lt;/h3>
&lt;p>Those systems described above all work on a daily basis. However, projects don&amp;rsquo;t typically work at day-scale, so I have a few more tricks:&lt;/p>
&lt;ol>
&lt;li>&lt;strong>Backlog:&lt;/strong> In the vault, there&amp;rsquo;s a backlog file. The sessions know to write there whenever there&amp;rsquo;s some follow-up work that will need doing. It doesn&amp;rsquo;t get done automatically, but it&amp;rsquo;s there so we can get to it when appropriate.&lt;/li>
&lt;li>&lt;strong>Weekly goals:&lt;/strong> When planning what to do each day, it&amp;rsquo;s useful to have goals that are one level higher. Therefore each week I plan out weekly goals (usually together with my team), and then when planning each day I have an easy reference point for what to prioritize.&lt;/li>
&lt;li>&lt;strong>Dreaming:&lt;/strong> All the sessions store what went wrong in their summary. Every now and then, I have an agent go over these problems and address them. They&amp;rsquo;re typically changes to the setup itself. One example: my machine has &lt;code>ls&lt;/code> aliased to &lt;a href="https://github.com/athityakumar/colorls" target="_blank" rel="noopener">colorls&lt;/a>, and therefore the scripts Claude made with &lt;code>ls&lt;/code> broke in unexpected ways. All agents were having to run into the issue and work around it, until one dreaming session noticed it and decided to put that note in &lt;code>CLAUDE.md&lt;/code>.&lt;/li>
&lt;/ol>
&lt;h2 id="prior-art-and-inspiration">Prior art and inspiration&lt;/h2>
&lt;p>Nothing in here is revolutionary, this is just how I&amp;rsquo;ve been working these days. The concept of the &amp;ldquo;2nd brain&amp;rdquo; was quite popular on Twitter and was introduced to me by Matt Camp at Unitary. I took the general ideas and adjusted them to my setup and ways of working.&lt;/p>
&lt;p>I&amp;rsquo;m not aware of any general framework doing all of this automatically right now. I think it likely is possible to do one, but I find it hard to adopt other people&amp;rsquo;s workflows precisely as they use it. If you&amp;rsquo;re like me, I think a custom setup like described here is the only way to go.&lt;/p>
&lt;h2 id="conclusion">Conclusion&lt;/h2>
&lt;p>Everything in this post is about context. Having the right context allows you to live one level of abstraction higher. I don&amp;rsquo;t promise that working like this leads to tasks getting done faster than manually, but it will allow you to do more tasks in the same time. With this workflow, &lt;strong>I&amp;rsquo;m working on 3-10 tasks simultaneously at any given time.&lt;/strong>&lt;/p>
&lt;p>I&amp;rsquo;m sharing my setup as a repo &lt;a href="https://github.com/dcferreira/brain-public" target="_blank" rel="noopener">here&lt;/a>. It includes the skills I use and a little bit on how to use them. It also includes more systems than those described here. I&amp;rsquo;m planning to write some follow-up posts: how I manage agents, when to trust agents, and forcing agents to follow my instructions (hint: this is just &lt;a href="https://github.com/dcferreira/agent-pawl" target="_blank" rel="noopener">pawl&lt;/a>).&lt;/p>
&lt;p>I don&amp;rsquo;t recommend you install those specific skills, but rather take ideas from it and start building your own. Have an agent read over it and recommend one or two ideas to start using in your workflows.&lt;/p>
&lt;p>We&amp;rsquo;re back at the vi configs era, but now we &amp;ldquo;config&amp;rdquo; them in English!&lt;/p></description></item></channel></rss>