<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>codeTango</title><description>A technical blog about agentic AI development and operations.</description><link>https://codetango.vercel.app/</link><item><title>Anatomy of My Agentic Development Setup</title><link>https://codetango.vercel.app/blog/anatomy-of-an-agentic-dev-setup/</link><guid isPermaLink="true">https://codetango.vercel.app/blog/anatomy-of-an-agentic-dev-setup/</guid><description>My agentic development setup isn&apos;t one tool — it&apos;s three systems working together. Each serves a distinct role, and the value cis dervied from how they overlap.</description><pubDate>Sat, 14 Mar 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;My dev agent(s) are as crucial to my product outcome as any other first-class team member. Just like any new team member, my agentic setup is based on; issue tracking, workspace isolation, quality gate controls, and the ability to learn over time (self-update). Take a look...&lt;/p&gt;
&lt;h2&gt;The Three Pillars&lt;/h2&gt;
&lt;p&gt;In order to move from &apos;vibe&apos; to &apos;agentic&apos; coding, I&apos;ve ended up with this taxonomy. First we&apos;ll take a look at the three major components of my harness skaffolding. Then I&apos;ll describe how the agentic value arises within cross-sections of the components.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://codetango.vercel.app/diagrams/anatomy-three-pillars.svg&quot; alt=&quot;Venn diagram of the three pillars — Task Tracking, Workspace Isolation, and Agentic Config — with Ephemeral Plan, Long Term Memory, and Asynchronous Tasks at their intersections&quot; /&gt;&lt;/p&gt;
&lt;h3&gt;Task Tracking&lt;/h3&gt;
&lt;p&gt;The core functionality of the task tracker is the same as JIRA or Trello. Tasks are stored as indiviudal entities mapped to Epics, and may contain subtasks. Each task entity has a status property and the task lifecycle is represented as a progression through the statuses:&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://codetango.vercel.app/diagrams/anatomy-task-lifecycle.svg&quot; alt=&quot;Task lifecycle flow: undefined, ready, in progress, in review, completed&quot; /&gt;
&lt;em&gt;Task status lifecycle — states progress from light to dark as work moves toward completion&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;I use &lt;a href=&quot;https://github.com/beads-project/beads&quot;&gt;Beads&lt;/a&gt; task manager, which stores tasks, epics, and dependency relationships within the repo in the form of a Dolt database. I use &lt;a href=&quot;https://github.com/Dicklesworthstone/beads_viewer&quot;&gt;Beads Viewer&lt;/a&gt; atop Beads to easily triage and expose task dependencies.
The &lt;code&gt;.beads/&lt;/code&gt; directory in every workspace is symlinked to a single persistent checkout (&lt;code&gt;beads-sync/&lt;/code&gt;), so task state stays consistent no matter which branch I&apos;m on. This is what enables parallelism: multiple agent sessions can work on independent tasks simultaneously, each isolated, all reading from the same task graph.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;BannerFM/
├── main/                   ← primary checkout
├── beads-sync/             ← persistent shared task store
├── fix-auth-bug/           ← task workspace (ephemeral)
└── add-user-endpoint/      ← task workspace (ephemeral)

Each branch of main symlinks to ./beads --&amp;gt; beads-sync/.beads/
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;Workspace Isolation&lt;/h3&gt;
&lt;p&gt;Each task needs its own workspace so that changes don&apos;t bleed across workstreams. Without isolation, I found that agents working on one task would inadvertently stage or modify files belonging to another. Separate workspaces also mean separate git branches, which makes the eventual PR a clean diff of just that task&apos;s changes.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://codetango.vercel.app/diagrams/anatomy-workspace-blocks.svg&quot; alt=&quot;Block diagram of the workspace layout: main and beads-sync checkouts alongside ephemeral task workspaces&quot; /&gt;&lt;/p&gt;
&lt;p&gt;I use &lt;a href=&quot;https://cmux.com/&quot;&gt;&lt;strong&gt;cmux&lt;/strong&gt;&lt;/a&gt; to spin up a workspace per task — each gets its own terminal session and git branch. One of the biggest benefits is that &lt;a href=&quot;https://github.com/craigsc/cmux?tab=readme-ov-file#cmux--tmux-for-claude-code&quot;&gt;cmux was specifically designed&lt;/a&gt; to easily spin up Claude agents in terminal workspaces by leveraging git worktrees.&lt;/p&gt;
&lt;h3&gt;The Agent Configuration&lt;/h3&gt;
&lt;p&gt;The purpose of skaffolding, or agentic configuration, is to define the workflow the agent executes. It&apos;s the same workflow that I&apos;d force upon a new dev added unto my team. Research a topic and its tech, create a high level plan, break that down into ttasks, and implement tasks indiviudal as bit sized chunks. It&apos;s not rocket science, but it is methodical and repeatable.&lt;/p&gt;
&lt;p&gt;The whole dev process is kicked off with slash commands, the core of which realize the task lifecycle through four steps:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;┌─────────────────┐
│  /task-selector │  Pick from backlog or plan new work
└────────┬────────┘
         │
         ▼
┌─────────────────┐
│   /start-task   │  Create cmux workspace + git branch, claim task
└────────┬────────┘
         │
         ▼
┌─────────────────┐
│    Development  │  /build → /test → /code-review
│                 │  /scaffold-endpoint, /design-migration
└────────┬────────┘
         │
         ▼
┌─────────────────┐
│   /finish-task  │  Push, create PR, transition to review,
│                 │  verify merge, close task, cleanup
└─────────────────┘
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;I&apos;ve found that coding agents tend to go off the rails without a clear (and often re-enforced) directions. This means keeping the task a hand moderately scoped and providing plenty of knowledge regarding the codebase and its patterns. The approach that has been successfully for me is three pronged. Thhere force, my process puts a lot of upfront effort in planning. There are two planning phases:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;The &lt;strong&gt;brainstorming&lt;/strong&gt; skill runs research-driven Q&amp;amp;A to define epics and tasks, then auto-decomposes large tasks into properly-sized subtasks (~5 files, ~150 lines changed per task). This step produces only a high-level plan that persists in Beads tasks.&lt;/li&gt;
&lt;li&gt;The &lt;strong&gt;writing-plans&lt;/strong&gt; skill is triggered when the &lt;code&gt;/start-task&lt;/code&gt; slash command is invoked for a tasks with an &lt;code&gt;undefined&lt;/code&gt; status. This skill generates an detailed implementation plan as a markdown file.&lt;/li&gt;
&lt;/ol&gt;
&lt;h4&gt;Project Specs: Agent-Facing Knowledge&lt;/h4&gt;
&lt;p&gt;A &lt;code&gt;project-spec/&lt;/code&gt; directory contains five structured documents designed for agent parsing — not human narrative. Each spec uses tables, file-to-entity mappings, and explicit caveats rather than prose:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;overview&lt;/strong&gt; — implementation status matrix, domain hierarchy, universal conventions&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;architecture&lt;/strong&gt; — bootstrap sequence, interface ownership, constructor patterns, file lookup map&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;domain-model&lt;/strong&gt; — entity-to-file-to-table mapping, field type conventions, error system&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;api-surface&lt;/strong&gt; — endpoint table, response envelope structure, new-endpoint sequence&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;data-layer&lt;/strong&gt; — repo-to-table mapping, CRUD signatures, SQL patterns, documented known bugs with file/line references&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I think of these as the agent&apos;s mental model of the codebase. Instead of discovering architecture by reading source files — an expensive, error-prone process — the agent reads a structured summary that tells it where things are, how they connect, and what the gotchas are. At least in my experience, this has cut down significantly on the agent wandering through the codebase before it can start real work.
Update of the project specs is deterministic, as it is a skill triggered by pre-commit hook.&lt;/p&gt;
&lt;h2&gt;Putting It Together&lt;/h2&gt;
&lt;p&gt;The three pillars — issue tracking, workspace isolation, and agentic configuration — form a closed loop.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Ephemeral Plan&lt;/strong&gt; — Because task tracking decomposes work into scoped units and workspace isolation gives each unit its own branch, every task starts with a focused implementation plan that lives only as long as the task itself. The plan doesn&apos;t need to survive beyond the PR — it&apos;s disposable by design, which is what keeps it specific enough to be useful.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Long Term Memory&lt;/strong&gt; — Task tracking persists the full history of what was done and why, and the agentic config includes project specs that encode the current state of the codebase. Together, they give the agent a durable memory that spans sessions — the task graph provides context on past decisions, while the specs provide a structured snapshot of where things stand now.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Asynchronous Tasks&lt;/strong&gt; — Workspace isolation means each task runs in its own branch and terminal, and the agentic config defines the workflow each agent follows independently. This combination is what makes it possible to run multiple agents on separate tasks in parallel — each one follows the same procedures in its own isolated environment, without coordination overhead.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The result, for me, is a setup where the agent operates with roughly the same structure I&apos;d expect from a human teammate: picking work from a prioritized backlog, working in isolation, following established procedures, reviewing its own output, and keeping documentation current. I&apos;ve found that the scaffolding doesn&apos;t make the agent smarter — it improves &lt;em&gt;consistenty&lt;/em&gt;.&lt;/p&gt;
</content:encoded><category>Agentic Development</category><category>agents</category><category>orchestration</category><category>local-dev</category><category>deep-dive</category></item><item><title>Profiling Agentic Configurations</title><link>https://codetango.vercel.app/blog/profiling-agentic-configurations/</link><guid isPermaLink="true">https://codetango.vercel.app/blog/profiling-agentic-configurations/</guid><pubDate>Tue, 10 Feb 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Excerpt goes here.&lt;/p&gt;
&lt;h2&gt;The Baseline: &lt;a href=&quot;http://CLAUDE.md&quot;&gt;CLAUDE.md&lt;/a&gt; Only&lt;/h2&gt;
&lt;h2&gt;Adding Skills&lt;/h2&gt;
&lt;h2&gt;Adding Subagents&lt;/h2&gt;
&lt;h2&gt;Adding Hooks&lt;/h2&gt;
&lt;h2&gt;Combined Configurations&lt;/h2&gt;
&lt;h2&gt;Token Usage&lt;/h2&gt;
&lt;p&gt;&lt;img src=&quot;https://codetango.vercel.app/charts/token-usage-by-config.svg&quot; alt=&quot;Bar chart of output tokens consumed per agentic configuration: CLAUDE.md only is lowest, the Combined configuration is highest&quot; /&gt;
&lt;em&gt;Figure: sample Vega-Lite chart rendered to static SVG at build time (illustrative data).&lt;/em&gt;&lt;/p&gt;
&lt;h2&gt;Speed&lt;/h2&gt;
&lt;h2&gt;Output Quality&lt;/h2&gt;
&lt;h2&gt;Results Summary&lt;/h2&gt;
&lt;h2&gt;Takeaways&lt;/h2&gt;
</content:encoded><category>Agentic Development</category><category>agents</category><category>orchestration</category><category>evaluation</category><category>cost-management</category></item><item><title>How Stub and Mock</title><link>https://codetango.vercel.app/blog/how-stub-and-mock/</link><guid isPermaLink="true">https://codetango.vercel.app/blog/how-stub-and-mock/</guid><description>A quick visual guide to telling stubs and mocks apart in day-to-day testing.</description><pubDate>Mon, 27 May 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img src=&quot;https://codetango.vercel.app/diagrams/how-stub-pie.svg&quot; alt=&quot;Pie chart comparing counts of dogs, cats, and rats&quot; /&gt;&lt;/p&gt;
</content:encoded><category>Testing</category><category>mocks</category><category>stubs</category><category>testing</category></item><item><title>Beyond Mocks vs Stubs</title><link>https://codetango.vercel.app/blog/beyond-mocks-vs-stubs/</link><guid isPermaLink="true">https://codetango.vercel.app/blog/beyond-mocks-vs-stubs/</guid><description>A practical breakdown of mocks vs stubs and when each test double is the right tool.</description><pubDate>Sun, 26 May 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Lorem markdownum fratri studeat; sculpsit Anienis, cvrrvs est post &lt;em&gt;et putes&lt;/em&gt;.
Salmacis ab &lt;em&gt;nervos trahit&lt;/em&gt; in et Riphea aestus! Parte est ramis arma cursus:
iam implet fallere prementem nec, missum &lt;a href=&quot;http://que-qui.org/&quot;&gt;illa ducibusque&lt;/a&gt;
deus. Funeribus si inpia agris verbis Talibus Augusto. Hastam erat; duo tuos,
Indus non quo quisquis foret tria necemque praecipitique nimium, denique undis
illuc.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Penates &lt;strong&gt;exire vellera in&lt;/strong&gt; superos freta ceram, columbae cavari: corona
animo quidem et alti mihi. &lt;em&gt;Aures neu dum&lt;/em&gt;, muneraque Nereidum animalia et
exhalata quam exsurgo. Et ianua delapsam et si in meae oculos fecit, &lt;em&gt;quidem&lt;/em&gt;
avidissima supplex credas; fulva ore quae. Si quid.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Ide limes, croceo, neque nomen iniuria est oculos Charopem ignorant insuper
rigidos. Has unum ille fateri, abdita caeso, Aeneia: date &lt;a href=&quot;http://www.magicoimum.com/&quot;&gt;perit primasque
evanuit&lt;/a&gt; festinus. &lt;em&gt;Blanditias pavetque&lt;/em&gt;, a sustulit
austro, latebris ferebat, &lt;a href=&quot;http://caput-tibi.com/adestet&quot;&gt;nympham&lt;/a&gt;. Orbem advolat
dracones dimovit Ichnobatesque &lt;em&gt;ecce ducibusque dictis&lt;/em&gt; materiam crinis veteres
ira, vestem.&lt;/p&gt;
&lt;h2&gt;Traxit ficta tibi secunda certans laborem recuset&lt;/h2&gt;
&lt;p&gt;Placet pecudes: grandior! Est est ille et nymphis tenuere lenius. &lt;a href=&quot;http://soror.com/tantaet&quot;&gt;Pias ultima
regis&lt;/a&gt; pro &lt;a href=&quot;http://ut.com/acuti-cum&quot;&gt;expellitur laniatque
pronis&lt;/a&gt; viribus, sed et quaerit.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;def bubble_sort(items):
    for i in range(len(items)):
        for j in range(len(items) - 1 - i):
            if items[j] &amp;gt; items[j + 1]:
                items[j], items[j + 1] = items[j + 1], items[j]
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;func main() {
    fmt.Println(&quot;Hello, world!&quot;)
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;https://codetango.vercel.app/diagrams/beyond-mocks-cycle.svg&quot; alt=&quot;Cyclic graph: hello points to world, world to again, and again back to hello&quot; /&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Occupat dominae his moderamen vomunt forma tenebat. Rabidi esse ingens cava clamant caelesti saltuque hanc et stravere.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a href=&quot;http://cernit-gravi.com/&quot;&gt;Ad nato&lt;/a&gt;, veluti fert illa urbe lucis lacerti admovit
&lt;em&gt;hoc&lt;/em&gt; coniunx est suffundit. Auratis eram.&lt;/p&gt;
</content:encoded><category>Testing</category><category>mocks</category><category>stubs</category><category>testing</category></item></channel></rss>