<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Karl Wirth</title>
    <description>The latest articles on Forem by Karl Wirth (@stravukarl).</description>
    <link>https://forem.com/stravukarl</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3773173%2Ff1d605ca-2e92-4f44-b6a5-75c04a4a5ac7.png</url>
      <title>Forem: Karl Wirth</title>
      <link>https://forem.com/stravukarl</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/stravukarl"/>
    <language>en</language>
    <item>
      <title>The Bugs AI Writes: Five Patterns That Show Up in AI-Generated Code</title>
      <dc:creator>Karl Wirth</dc:creator>
      <pubDate>Mon, 20 Apr 2026 16:17:15 +0000</pubDate>
      <link>https://forem.com/stravukarl/the-bugs-ai-writes-five-patterns-that-show-up-in-ai-generated-code-bl3</link>
      <guid>https://forem.com/stravukarl/the-bugs-ai-writes-five-patterns-that-show-up-in-ai-generated-code-bl3</guid>
      <description>&lt;p&gt;Reviewing AI-generated code has quietly become one of the most time-consuming parts of modern software development. As AI coding tools move from autocomplete to autonomous agents, developers are spending more of their day reading diffs they didn't write.&lt;/p&gt;

&lt;p&gt;VentureBeat recently reported that 43% of AI-generated code changes need debugging in production. ByteIota found AI code produces 1.7x more issues per pull request than human code. And 60% of AI code faults are "silent failures" that compile and pass tests but produce wrong results.&lt;/p&gt;

&lt;p&gt;The stats alone aren't useful unless you know what to look for. Across thousands of AI-generated diffs, the bug patterns are consistent enough to categorize.&lt;/p&gt;

&lt;h2&gt;
  
  
  Pattern 1: Plausible but wrong logic
&lt;/h2&gt;

&lt;p&gt;The most common and hardest to catch. AI writes code that looks correct and passes basic tests but handles edge cases incorrectly.&lt;/p&gt;

&lt;p&gt;Example: an agent writes a date parser that handles common formats fine but silently converts ambiguous dates like "04/05/2026" using US formatting when the codebase uses ISO 8601. No error, no crash, just wrong data.&lt;/p&gt;

&lt;p&gt;AI agents optimize for the happy path. They write code that works for the test cases you'd think to write, but miss implicit conventions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Catch it:&lt;/strong&gt; Review AI code like code from a smart contractor who just joined. Check assumptions about data formats, timezone handling, null behavior, and business rules.&lt;/p&gt;

&lt;h2&gt;
  
  
  Pattern 2: Confident refactoring that breaks callers
&lt;/h2&gt;

&lt;p&gt;When an agent refactors a module, it makes the module internally cleaner while subtly changing the external contract. Renamed parameters, changed return types, modified defaults.&lt;/p&gt;

&lt;p&gt;TypeScript catches the obvious interface changes. It doesn't catch behavioral changes three files away where code depended on the old behavior.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Catch it:&lt;/strong&gt; When reviewing a refactor, search the codebase for every caller of the refactored interface. If the agent says "simplified the return type," check whether any caller depended on the complexity that was removed.&lt;/p&gt;

&lt;h2&gt;
  
  
  Pattern 3: Tests that test implementation, not behavior
&lt;/h2&gt;

&lt;p&gt;AI writes tests that pass by construction. A common example: tests where the expected value is literally copied from the function's return value rather than independently calculated.&lt;/p&gt;

&lt;p&gt;Another variant: mocking everything so the test validates the mocking framework, not the code.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Catch it:&lt;/strong&gt; Ask: "Would this test fail if the function returned a hardcoded value?" Favor integration tests over unit tests for AI code. Mocks should be the exception.&lt;/p&gt;

&lt;h2&gt;
  
  
  Pattern 4: Copy-paste drift across similar components
&lt;/h2&gt;

&lt;p&gt;When creating multiple similar components, the agent copies from the first but doesn't copy consistently. One endpoint validates input, another doesn't. One component handles loading states, its sibling doesn't.&lt;/p&gt;

&lt;p&gt;Each component looks fine in isolation. The inconsistency only shows when you compare them.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Catch it:&lt;/strong&gt; Diff similar components against each other. Any difference should be intentional. Inconsistencies usually mean the pattern should be extracted into a shared abstraction.&lt;/p&gt;

&lt;h2&gt;
  
  
  Pattern 5: Dependency and import sprawl
&lt;/h2&gt;

&lt;p&gt;AI agents install packages liberally. Asked to add a date picker, they'll pull in a new date library even when one already exists in the project.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Catch it:&lt;/strong&gt; Check whether the project already has a library for the same purpose. Document preferred libraries in CLAUDE.md so the agent knows what's available.&lt;/p&gt;

&lt;h2&gt;
  
  
  The review process for AI code
&lt;/h2&gt;

&lt;p&gt;AI code review requires different assumptions than traditional review:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Assume no institutional knowledge.&lt;/strong&gt; The agent doesn't know your conventions unless documented.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Review boundaries, not internals.&lt;/strong&gt; Bugs live at interfaces: function signatures, API contracts, error handling, data formats.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Test behavior, not implementation.&lt;/strong&gt; Run the code under real conditions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Check what wasn't changed.&lt;/strong&gt; If the agent added a feature, check whether existing error handling still applies.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scope tasks tightly.&lt;/strong&gt; A 30-minute, 3-file task is reviewable. A 2-hour, 20-file task is a coin flip.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why this scales poorly without process
&lt;/h2&gt;

&lt;p&gt;The 43% debugging rate isn't because AI writes bad code. Traditional review catches human mistakes (logic errors, forgotten cases, typos). AI makes different mistakes. Teams that handle this well:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Document everything the agent needs to know (architecture decisions, conventions, preferred libraries)&lt;/li&gt;
&lt;li&gt;Scope tasks small enough to review thoroughly&lt;/li&gt;
&lt;li&gt;Treat review as a first-class activity, not something to rush through&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The code quality bar doesn't change because the author isn't human. The failure modes are less familiar, which means the review process needs to be more deliberate.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published on &lt;em&gt;[*nimbalyst.com/blog&lt;/em&gt;](&lt;a href="https://nimbalyst.com/blog/bugs-ai-writes-patterns-in-ai-generated-code/" rel="noopener noreferrer"&gt;https://nimbalyst.com/blog/bugs-ai-writes-patterns-in-ai-generated-code/&lt;/a&gt;)&lt;/em&gt;. Nimbalyst is a visual workspace built on Claude Code for managing AI coding workflows.*&lt;/p&gt;




&lt;h2&gt;
  
  
  Author Bio (for all three posts)
&lt;/h2&gt;

&lt;p&gt;Karl Wirth is the founder of &lt;a href="https://nimbalyst.com" rel="noopener noreferrer"&gt;Nimbalyst&lt;/a&gt;, a desktop workspace built on top of Claude Code that adds visual editing, multi-agent orchestration, session management, and scheduled automations to AI-assisted development. He writes about AI coding tools, agent orchestration, and running a small company that ships a lot.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>codequality</category>
      <category>llm</category>
      <category>programming</category>
    </item>
    <item>
      <title>Claude Code Routines: A Practical Guide from Someone Already Automating AI Workflows</title>
      <dc:creator>Karl Wirth</dc:creator>
      <pubDate>Mon, 20 Apr 2026 16:15:03 +0000</pubDate>
      <link>https://forem.com/stravukarl/claude-code-routines-a-practical-guide-from-someone-already-automating-ai-workflows-4dd6</link>
      <guid>https://forem.com/stravukarl/claude-code-routines-a-practical-guide-from-someone-already-automating-ai-workflows-4dd6</guid>
      <description>&lt;p&gt;Three days ago, Anthropic shipped Routines for Claude Code. If you missed it: a routine packages a prompt, repos, and connectors into a configuration that runs on a schedule, responds to API calls, or triggers on GitHub events. Runs on Anthropic's cloud, laptop can be closed.&lt;/p&gt;

&lt;p&gt;I've been building similar automation workflows for months using different tooling (Nimbalyst automations, custom scripts). Routines makes this pattern accessible to every Claude Code user. Here's what I've learned about which automations actually work and where the limits are.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Three Triggers
&lt;/h2&gt;

&lt;p&gt;Routines support scheduled (hourly/daily/weekly), API (HTTP POST with bearer token), and GitHub event triggers. Each run creates a full Claude Code cloud session with shell access, skills, and connectors.&lt;/p&gt;

&lt;h2&gt;
  
  
  Workflows That Deliver Real Value
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Issue triage (daily/nightly):&lt;/strong&gt; Scan new GitHub issues, cross-reference with your codebase to identify affected modules, apply labels, estimate priority, post a summary to Slack. The AI doesn't just categorize text; it reads the code and makes informed severity assessments.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Documentation drift (weekly):&lt;/strong&gt; Scan merged PRs, identify docs referencing changed APIs, open update PRs. This catches staleness before it becomes a support burden. Nobody has time to do this manually, which is exactly why it should be automated.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Deploy verification (event-triggered):&lt;/strong&gt; After deploys, run smoke checks, scan error logs, post a go/no-go assessment. Not replacing your test suite, but adding an AI review layer that reads logs with more context than threshold checks.&lt;/p&gt;

&lt;h2&gt;
  
  
  Constraints to Know
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Usage caps:&lt;/strong&gt; Pro gets 5 runs/day, Max gets 15, Team/Enterprise gets 25. Plan your cadences accordingly.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No mid-run interaction:&lt;/strong&gt; Routines run fully autonomously. Best for tasks producing reports, PRs, or messages. Not for work requiring human judgment during execution.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cloud-only:&lt;/strong&gt; Clones your repo to Anthropic's infrastructure. No access to local tooling or network services.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Getting Started
&lt;/h2&gt;

&lt;p&gt;Visit &lt;code&gt;claude.ai/code/routines&lt;/code&gt; or type &lt;code&gt;/schedule&lt;/code&gt; in the CLI.&lt;/p&gt;

&lt;p&gt;Start with weekly documentation drift detection:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Scan PRs merged in the past 7 days. For each, identify docs
referencing modified functions or APIs. If outdated, open a PR
with suggested updates.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Review the first few outputs, calibrate the prompt, then let it run.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Layered Approach
&lt;/h2&gt;

&lt;p&gt;The most productive setup uses multiple layers:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Event-driven routines&lt;/strong&gt; for immediate responses (PR triggers)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scheduled routines&lt;/strong&gt; for periodic maintenance (nightly triage, weekly doc checks)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Local automations&lt;/strong&gt; for environment-specific work (custom tooling, workspace context)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Interactive sessions&lt;/strong&gt; for complex, judgment-heavy work&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Trying to push everything through one approach leaves gaps. Routines handle the cloud-native, repetitive layer well. For local environment work, you need complementary tooling.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Bigger Picture
&lt;/h2&gt;

&lt;p&gt;In the first two weeks of April, Cursor shipped Cursor 3 (agent-first workspace), Windsurf launched 2.0 (Agent Command Center + Devin), and Anthropic redesigned Claude Code with Routines. All converging on the same idea: the developer's role is shifting toward orchestrating agents, not writing every line.&lt;/p&gt;

&lt;p&gt;Routines are the automation edge of this shift. Start with one, run it for two weeks, calibrate, then add more. Build your automation layer incrementally.&lt;/p&gt;




&lt;p&gt;I'm Karl, building &lt;a href="https://nimbalyst.com" rel="noopener noreferrer"&gt;Nimbalyst&lt;/a&gt;, a visual workspace on top of Claude Code. I write about AI-native development workflows and what actually works in practice.&lt;/p&gt;

&lt;p&gt;Original article on &lt;a href="https://nimbalyst.com/blog/claude-code-routines-practical-guide/" rel="noopener noreferrer"&gt;nimbalyst.com/blog&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>claude</category>
      <category>automation</category>
      <category>development</category>
    </item>
    <item>
      <title>What actually breaks when you run 5+ Claude Code agents in parallel</title>
      <dc:creator>Karl Wirth</dc:creator>
      <pubDate>Mon, 20 Apr 2026 16:13:31 +0000</pubDate>
      <link>https://forem.com/stravukarl/what-actually-breaks-when-you-run-5-claude-code-agents-in-parallel-1lbd</link>
      <guid>https://forem.com/stravukarl/what-actually-breaks-when-you-run-5-claude-code-agents-in-parallel-1lbd</guid>
      <description>&lt;p&gt;The parallel-agent workflow stopped being a frontier a few weeks ago. Cursor 3's Agents Window, Windsurf 2.0's free parallel agents, and Anthropic's April 14 Claude Code desktop redesign (multi-session sidebar, per-session worktrees, rebuilt diff viewer, Routines for scheduling) all ship the same core idea: run many agents in isolated worktrees from one surface. If you were still juggling raw terminal tabs last week, upgrade this week.&lt;/p&gt;

&lt;p&gt;I've been running four to six parallel sessions every day for the last two months, across and ahead of these releases. Here's what the new tools still don't fix.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. A session list is not the same as knowing what an agent is doing.&lt;/strong&gt; A sidebar with a row per session and a status chip beats &lt;code&gt;zsh&lt;/code&gt;, &lt;code&gt;zsh 2&lt;/code&gt;, &lt;code&gt;zsh 3&lt;/code&gt;. It doesn't tell me that session 3 is stuck reconciling three conflicting test fixtures and that I already have notes about those fixtures in another session from last Tuesday. The session is a row. The work is a richer object than a row.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Finding the pinging session is better, not solved.&lt;/strong&gt; "Session 3 needs input" is a real improvement over terminal bells. What's missing is the connective tissue: I want "session 3 (refactor file watcher, linked to tracker #432) is asking whether to keep the old onChange signature" so I can answer in context instead of alt-tabbing into a transcript and reading back.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Cross-session diff review is still brutal.&lt;/strong&gt; Every new tool rebuilt the diff viewer. None of them handle the common case where three parallel agents touch coupled code (file watcher + new IPC handlers + tests for both) and need a single combined review, not three separate ones.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Context handoff between agents is still manual.&lt;/strong&gt; Agent A designs a data model. Agent B writes the migration. Agent C writes tests. Each agent can read the code. What they can't recover is the reasoning from the previous session's transcript, which is where most of the important context lives. Every tool has a transcript, and every transcript is trapped in the session that produced it. It's worse when you mix Claude Code and Codex in the same day (I do — they're better at different things), because now the transcripts aren't even in the same tool. I still end up copy-pasting.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. Scheduled work needs the whole workspace.&lt;/strong&gt; Claude Code Routines and Cursor's scheduled agents are here. What's still missing is scheduling that can read and write across the whole workspace: open sessions, tracker items, notes, decisions, yesterday's transcripts. A stateless scheduled script does 60% of that. A scheduled agent with full workspace context does all of it.&lt;/p&gt;

&lt;p&gt;The parallel-agent layer is now table stakes. Session management with worktrees is shipped by every serious AI coding tool. The workspace around the sessions (work as a first-class object, cross-session review, shared context that travels, scheduled agents with full workspace access) is still mostly empty, and it has to work across the agents you actually use, not just one vendor's. I'm building into that gap with &lt;a href="https://nimbalyst.com" rel="noopener noreferrer"&gt;Nimbalyst&lt;/a&gt;, a desktop workspace that runs sessions across Claude Code and Codex in the same project, treats every session as a card on a kanban, keeps transcripts, notes, diagrams, and data models in the same file tree so any agent can read them, and runs scheduled automations that share that context.&lt;/p&gt;

&lt;p&gt;If you've hit these same gaps, I'd love to hear how you're solving them. Drop a comment or reply with your setup.&lt;/p&gt;




&lt;p&gt;Original article on &lt;a href="https://nimbalyst.com/blog/parallel-claude-code-agents-what-breaks-after-worktrees/" rel="noopener noreferrer"&gt;nimbalyst.com/blog&lt;/a&gt;.&lt;/p&gt;




</description>
      <category>claudecode</category>
      <category>ai</category>
      <category>webdev</category>
      <category>programming</category>
    </item>
    <item>
      <title>I Tried Every Claude Code Editor. Here Is What Actually Works</title>
      <dc:creator>Karl Wirth</dc:creator>
      <pubDate>Wed, 15 Apr 2026 18:47:54 +0000</pubDate>
      <link>https://forem.com/stravukarl/i-tried-every-claude-code-editor-here-is-what-actually-works-2ok</link>
      <guid>https://forem.com/stravukarl/i-tried-every-claude-code-editor-here-is-what-actually-works-2ok</guid>
      <description>&lt;p&gt;Claude Code itself is not the hard part.&lt;/p&gt;

&lt;p&gt;The hard part is everything around it: planning the work, tracking multiple sessions, reviewing diffs, and keeping branch state sane once you stop using it like a toy and start using it like part of your real workflow.&lt;/p&gt;

&lt;p&gt;That is what I was optimizing for when I went looking for the best Claude Code interface.&lt;/p&gt;

&lt;p&gt;Two disclosures up front:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;I care more about workflow than pretty chat UI&lt;/li&gt;
&lt;li&gt;I am the founder of Nimbalyst, so I am biased and I should say that plainly&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I tried the common options and kept coming back to one question:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Does this tool make Claude Code easier to supervise once the agent is doing serious work?&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Raw Terminal
&lt;/h2&gt;

&lt;p&gt;This is still the cleanest starting point.&lt;/p&gt;

&lt;p&gt;Open a terminal, run &lt;code&gt;claude&lt;/code&gt;, and get to work. Nothing is faster for one-off tasks, scripted workflows, or short focused sessions. If you already live in tmux, you can get surprisingly far with this setup.&lt;/p&gt;

&lt;p&gt;Where it breaks is not coding. It is management.&lt;/p&gt;

&lt;p&gt;Once you have multiple sessions, the terminal becomes a memory test. Which tab owns which task? Which session changed what? Which one is waiting for input? Which branch is safe to merge?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; single-session workflows, shell-heavy users, quick tasks&lt;/p&gt;

&lt;h2&gt;
  
  
  3. VS Code + Integrated Terminal
&lt;/h2&gt;

&lt;p&gt;This is probably the most common real-world setup.&lt;/p&gt;

&lt;p&gt;VS Code gives you a file tree, editor, git panel, and diff viewer in the same place where Claude Code is running. That is enough for a lot of people. You get a better review surface than raw terminal without changing your stack.&lt;/p&gt;

&lt;p&gt;The weakness is that Claude Code is still basically "a terminal tab inside VS Code." The editor helps with inspection, but it does not really help with orchestration. If you open three concurrent sessions, you are still juggling tabs manually.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; developers who already live in VS Code and usually run one or two sessions&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Zed
&lt;/h2&gt;

&lt;p&gt;Zed is the option I would pick if my main complaint was editor drag.&lt;/p&gt;

&lt;p&gt;It is fast, visually quiet, and better than heavier editors at staying out of the way. Claude Code works well there because a good terminal, quick navigation, and responsive diff inspection already solve a lot of the daily pain.&lt;/p&gt;

&lt;p&gt;The tradeoff is ecosystem depth. If you rely on very specific extensions or highly customized IDE workflows, Zed may feel narrower than VS Code. But if your editor job is mostly "be fast while Claude Code does the heavy lifting," Zed is excellent.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; developers who want speed and minimal overhead&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Nimbalyst
&lt;/h2&gt;

&lt;p&gt;Nimbalyst is the tool that is designed for the actual bottleneck: agent supervision.&lt;/p&gt;

&lt;p&gt;The useful part is not just that it can run Claude Code. It is that it treats sessions, tasks, plans, mockups, markdown, excalidraw, diffs, and supporting artifacts as part of the same job. You can manage multiple sessions, inspect file changes by session, work from plan documents, and review outputs in a way that feels built for parallel agent work instead of retrofitted after the fact.&lt;/p&gt;

&lt;p&gt;It also matters that Nimbalyst is not just a shell around the agent. It includes a local code editor, document editors, mockups, diagrams, file history, and mobile monitoring. That makes it materially different from tools whose main value is "nicer transcript UI."&lt;/p&gt;

&lt;p&gt;The tradeoff is obvious: it is a bigger system. If you only run one Claude Code session at a time, Nimbalyst may be more workflow than you need. If you run several, the value shows up quickly.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; developers and teams managing multiple Claude Code sessions, plans, and reviews at once&lt;/p&gt;

&lt;h2&gt;
  
  
  What About Cursor and Windsurf?
&lt;/h2&gt;

&lt;p&gt;They matter, but I think of them differently.&lt;/p&gt;

&lt;p&gt;Cursor and Windsurf are strong AI-native editors. I would absolutely consider them if your primary goal is inline AI editing inside the editor itself. But for Claude Code specifically, they are usually complements, not true wrappers. Claude Code still tends to live in a terminal panel while the editor's own AI system handles the native experience.&lt;/p&gt;

&lt;p&gt;That makes them good choices for mixed workflows and less clean choices if your question is narrowly:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;"What interface is best for Claude Code itself?"&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Comparison Table
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tool&lt;/th&gt;
&lt;th&gt;Best at&lt;/th&gt;
&lt;th&gt;Breaks when&lt;/th&gt;
&lt;th&gt;Right user&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Raw terminal&lt;/td&gt;
&lt;td&gt;Speed and control&lt;/td&gt;
&lt;td&gt;You run multiple sessions&lt;/td&gt;
&lt;td&gt;tmux and shell-heavy users&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;VS Code&lt;/td&gt;
&lt;td&gt;Familiar editing + diffs&lt;/td&gt;
&lt;td&gt;Session coordination gets messy&lt;/td&gt;
&lt;td&gt;most developers&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Zed&lt;/td&gt;
&lt;td&gt;Fast, low-friction editing&lt;/td&gt;
&lt;td&gt;You need a broader ecosystem&lt;/td&gt;
&lt;td&gt;performance-focused users&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Nimbalyst&lt;/td&gt;
&lt;td&gt;Multi-session supervision&lt;/td&gt;
&lt;td&gt;You only want a lightweight wrapper&lt;/td&gt;
&lt;td&gt;daily Claude Code users&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  What Actually Matters More Than the UI
&lt;/h2&gt;

&lt;p&gt;No interface saves you from a bad workflow.&lt;/p&gt;

&lt;p&gt;The three things that matter most are still:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Write a plan before starting the agent&lt;/li&gt;
&lt;li&gt;Use git worktrees for concurrent sessions&lt;/li&gt;
&lt;li&gt;Review diffs carefully before merging&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If you get those right, even the terminal can work.&lt;/p&gt;

&lt;p&gt;If you get those wrong, the nicest GUI in the world will mostly help you fail more comfortably.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final Take
&lt;/h2&gt;

&lt;p&gt;If you use Claude Code occasionally, stay simple. VS Code is enough.&lt;/p&gt;

&lt;p&gt;If you are using Claude Code as a daily operating system for real work, the problem changes. You stop needing "a better chat box" and start needing a better control plane.&lt;/p&gt;

&lt;p&gt;That is where Nimbalyst is focused.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Karl Wirth is the founder of Nimbalyst, a local workspace for Claude Code and Codex.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>claudecode</category>
      <category>ai</category>
      <category>devtool</category>
    </item>
    <item>
      <title>Claude Code Development Workflow: Tools and Setup Guide for 2026</title>
      <dc:creator>Karl Wirth</dc:creator>
      <pubDate>Wed, 15 Apr 2026 18:44:16 +0000</pubDate>
      <link>https://forem.com/stravukarl/claude-code-development-workflow-tools-and-setup-guide-for-2026-3m5i</link>
      <guid>https://forem.com/stravukarl/claude-code-development-workflow-tools-and-setup-guide-for-2026-3m5i</guid>
      <description>&lt;p&gt;Claude Code gets dramatically better when you stop treating it like "a chatbot in a terminal" and start treating it like part of a repeatable engineering workflow.&lt;/p&gt;

&lt;p&gt;The difference is usually not model quality. It is setup quality. Teams that get strong results do the same few things over and over: give the agent persistent context, write plans before prompting, isolate concurrent work, and review output like it came from a fast junior engineer.&lt;/p&gt;

&lt;p&gt;This is the setup I recommend if you want Claude Code to be useful on real projects, not just impressive in demos.&lt;/p&gt;

&lt;h2&gt;
  
  
  TL;DR Setup Checklist
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Add a project-level &lt;code&gt;CLAUDE.md&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Create short plan docs before starting implementation&lt;/li&gt;
&lt;li&gt;Use git worktrees for concurrent sessions&lt;/li&gt;
&lt;li&gt;Auto-approve safe operations, but keep risky ones gated&lt;/li&gt;
&lt;li&gt;Pick one review surface and use it consistently&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Running concurrent sessions in one directory
&lt;/h3&gt;

&lt;p&gt;Every serious Claude Code workflow starts here.&lt;/p&gt;

&lt;p&gt;Without a root &lt;code&gt;CLAUDE.md&lt;/code&gt;, every session has to rediscover your architecture, commands, conventions, and constraints. That wastes prompt budget and leads to avoidable mistakes. With it, the agent starts from a usable baseline.&lt;/p&gt;

&lt;p&gt;A good &lt;code&gt;CLAUDE.md&lt;/code&gt; is short, concrete, and opinionated:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="gh"&gt;# CLAUDE.md&lt;/span&gt;

&lt;span class="gu"&gt;## Project Overview&lt;/span&gt;
Monorepo for a React frontend, Node API, and PostgreSQL database.

&lt;span class="gu"&gt;## Development Commands&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; Start web: &lt;span class="sb"&gt;`npm run dev:web`&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; Start api: &lt;span class="sb"&gt;`npm run dev:api`&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; Test: &lt;span class="sb"&gt;`npm run test`&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; Lint: &lt;span class="sb"&gt;`npm run lint`&lt;/span&gt;

&lt;span class="gu"&gt;## Architecture&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="sb"&gt;`/apps/web`&lt;/span&gt; - React frontend
&lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="sb"&gt;`/apps/api`&lt;/span&gt; - HTTP API
&lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="sb"&gt;`/packages/ui`&lt;/span&gt; - shared components
&lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="sb"&gt;`/packages/db`&lt;/span&gt; - schema and queries

&lt;span class="gu"&gt;## Conventions&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; TypeScript strict mode
&lt;span class="p"&gt;-&lt;/span&gt; Zod for request validation
&lt;span class="p"&gt;-&lt;/span&gt; Never query the DB directly from route handlers

&lt;span class="gu"&gt;## Guardrails&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; Do not change auth middleware without explicit review
&lt;span class="p"&gt;-&lt;/span&gt; Keep migrations backward compatible
&lt;span class="p"&gt;-&lt;/span&gt; Prefer existing patterns over new abstractions
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The key is specificity. "Use TypeScript" is weak. "Use TypeScript strict mode and validate requests with Zod" is useful.&lt;/p&gt;

&lt;p&gt;Claude Code gets much better once it can inspect more than the current file tree.&lt;/p&gt;

&lt;p&gt;The three categories that matter most are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Repository context&lt;/strong&gt;: GitHub or git tooling so the agent can understand issues, PRs, and branch state&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Data context&lt;/strong&gt;: schema or safe query access for local/dev databases&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Project context&lt;/strong&gt;: any internal tools, docs, or MCP servers your team already relies on&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The mistake here is over-configuring. Do not hand the agent ten tools you barely trust. Start with the few that meaningfully improve accuracy.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Set Permission Rules So the Agent Is Fast but Not Reckless
&lt;/h2&gt;

&lt;p&gt;The default "ask me for everything" experience is safe and miserable. The opposite extreme, where the agent can do anything without friction, is how you end up approving bad work after the fact.&lt;/p&gt;

&lt;p&gt;A practical default looks like this:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Auto-approve reads inside the repo&lt;/li&gt;
&lt;li&gt;Auto-approve writes inside the repo&lt;/li&gt;
&lt;li&gt;Auto-approve test runs and other common safe commands&lt;/li&gt;
&lt;li&gt;Keep approvals for installs, git history rewrites, and anything outside the project&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You want Claude Code to move quickly through normal implementation, but you still want a hard pause on operations that change system state or create cleanup work.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Write a Plan Before You Prompt
&lt;/h2&gt;

&lt;p&gt;This is the highest-leverage habit in the entire workflow.&lt;/p&gt;

&lt;p&gt;Do not start with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;build me user authentication
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Start with a plan document in markdown that you iterate on with the agent:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="gh"&gt;# Feature: User Authentication&lt;/span&gt;

&lt;span class="gu"&gt;## Goal&lt;/span&gt;
Session-based auth with registration, login, and password reset.

&lt;span class="gu"&gt;## Constraints&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; Use bcrypt
&lt;span class="p"&gt;-&lt;/span&gt; Store sessions in PostgreSQL
&lt;span class="p"&gt;-&lt;/span&gt; Rate limit login attempts
&lt;span class="p"&gt;-&lt;/span&gt; All routes under &lt;span class="sb"&gt;`/api/auth/*`&lt;/span&gt;

&lt;span class="gu"&gt;## Acceptance Criteria&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; [ ] User can register
&lt;span class="p"&gt;-&lt;/span&gt; [ ] User can log in and get a session cookie
&lt;span class="p"&gt;-&lt;/span&gt; [ ] User can reset password
&lt;span class="p"&gt;-&lt;/span&gt; [ ] Failed logins are rate limited
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then point Claude Code at the file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;claude &lt;span class="s2"&gt;"implement docs/auth-plan.md"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is better than a long natural-language prompt because the plan becomes reusable. You can refine it, hand it to another agent, or review the finished work against it.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Use Git Worktrees for Parallel Sessions
&lt;/h2&gt;

&lt;p&gt;If you run more than one Claude Code session at a time in the same checkout, you are choosing pain.&lt;/p&gt;

&lt;p&gt;Use worktrees instead:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git worktree add ../project-auth &lt;span class="nt"&gt;-b&lt;/span&gt; feature/auth
git worktree add ../project-tests &lt;span class="nt"&gt;-b&lt;/span&gt; feature/auth-tests
git worktree list
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now each session gets:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;its own branch&lt;/li&gt;
&lt;li&gt;its own working directory&lt;/li&gt;
&lt;li&gt;no file collisions with the others&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That is the foundation for reliable parallel work.&lt;/p&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# API work&lt;/span&gt;
&lt;span class="nb"&gt;cd&lt;/span&gt; ../project-auth
claude &lt;span class="s2"&gt;"implement docs/auth-plan.md"&lt;/span&gt;

&lt;span class="c"&gt;# Test work&lt;/span&gt;
&lt;span class="nb"&gt;cd&lt;/span&gt; ../project-tests
claude &lt;span class="s2"&gt;"write tests for docs/auth-plan.md"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Worktrees are the single best upgrade for anyone moving from "one agent sometimes" to "multiple agents regularly."&lt;/p&gt;

&lt;h2&gt;
  
  
  6. Pick a Session Management Pattern
&lt;/h2&gt;

&lt;p&gt;Once you have parallel sessions, you need a way to keep them straight.&lt;/p&gt;

&lt;p&gt;Three reasonable options:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Terminal tabs&lt;/strong&gt;: fine for one or two sessions&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;tmux&lt;/strong&gt;: still the power-user default for keyboard-heavy workflows&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Nimbalyst&lt;/strong&gt;: useful if you want a visual board for sessions, file changes, diffs, and plan artifacts in one place&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The right choice depends on your failure mode.&lt;/p&gt;

&lt;p&gt;If your issue is "I lose track of which session is running where," a visual session surface helps.&lt;/p&gt;

&lt;p&gt;If your issue is "I want everything on one keyboard-first screen," tmux is still excellent.&lt;/p&gt;

&lt;h2&gt;
  
  
  7. Review Like the Agent Is Usually 90% Right
&lt;/h2&gt;

&lt;p&gt;Claude Code is often right enough to feel finished before it actually is.&lt;/p&gt;

&lt;p&gt;That is why review matters. The common misses are not obvious syntax errors. They are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;slightly wrong edge-case handling&lt;/li&gt;
&lt;li&gt;assumptions about existing abstractions&lt;/li&gt;
&lt;li&gt;tests that prove the happy path but not the failure path&lt;/li&gt;
&lt;li&gt;code that works but does not match local conventions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For small changes, &lt;code&gt;git diff&lt;/code&gt; or your editor is enough.&lt;/p&gt;

&lt;p&gt;For larger changes, use a proper review surface:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;editor diff view&lt;/li&gt;
&lt;li&gt;draft pull request&lt;/li&gt;
&lt;li&gt;a tool that tracks per-session file changes and inline diffs&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The more files an agent touches, the less acceptable "quick skim and merge" becomes.&lt;/p&gt;

&lt;h2&gt;
  
  
  8. My Default Claude Code Loop
&lt;/h2&gt;

&lt;p&gt;This is the loop I would teach a team:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Write or update a short plan&lt;/li&gt;
&lt;li&gt;Create a worktree&lt;/li&gt;
&lt;li&gt;Start Claude Code against that plan&lt;/li&gt;
&lt;li&gt;Let it run until it blocks or finishes&lt;/li&gt;
&lt;li&gt;Review the diff against the plan&lt;/li&gt;
&lt;li&gt;Fix or redirect&lt;/li&gt;
&lt;li&gt;Merge and remove the worktree&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That is the whole system. Most of the value comes from doing that loop consistently.&lt;/p&gt;

&lt;h2&gt;
  
  
  Common Mistakes
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Starting from a blank prompt
&lt;/h3&gt;

&lt;p&gt;If you skip the plan, Claude Code fills in the blanks with its own assumptions.&lt;/p&gt;

&lt;h3&gt;
  
  
  Over-specifying implementation
&lt;/h3&gt;

&lt;p&gt;Tell the agent what good looks like, what constraints matter, and what must not break. Do not micromanage every function unless there is a real reason.&lt;/p&gt;

&lt;h3&gt;
  
  
  Reviewing too late
&lt;/h3&gt;

&lt;p&gt;Do not wait until a giant session is "done" before looking. Review earlier on bigger tasks.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final Take
&lt;/h2&gt;

&lt;p&gt;The best Claude Code workflow is not complicated. It is disciplined.&lt;/p&gt;

&lt;p&gt;Persistent context, short plans, worktree isolation, and careful review beat almost every fancy trick. Once those pieces are in place, you can decide whether you want to stay in a terminal, live in tmux, or use a more visual workspace around the agent.&lt;/p&gt;

&lt;p&gt;Without that foundation, the tool choice barely matters.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Karl Wirth is the founder of Nimbalyst, a local visual workspace for building with Claude Code and Codex.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>claudecode</category>
      <category>ai</category>
      <category>productivity</category>
      <category>tooling</category>
    </item>
    <item>
      <title>Best Practices for Coding with Agents</title>
      <dc:creator>Karl Wirth</dc:creator>
      <pubDate>Mon, 09 Mar 2026 15:58:45 +0000</pubDate>
      <link>https://forem.com/stravukarl/best-practices-for-coding-with-agents-mho</link>
      <guid>https://forem.com/stravukarl/best-practices-for-coding-with-agents-mho</guid>
      <description>&lt;p&gt;You already know coding agents can write code. The interesting question is what happens when you stop thinking of them as code generators and start treating them as junior developers who need good specs, clear test criteria, and visual references — just like a human would.&lt;/p&gt;

&lt;p&gt;We build Nimbalyst this way every day. Here’s our workflow:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Write a plan in markdown. Edit this. Iterate.&lt;/li&gt;
&lt;li&gt;Have the agent enrich it with architecture diagrams and data models. Edit this. Iterate.&lt;/li&gt;
&lt;li&gt;Iterate on mockups until the UI is right&lt;/li&gt;
&lt;li&gt;Have the agent write tests from the acceptance criteria. Edit this. Iterate.&lt;/li&gt;
&lt;li&gt;Tell it to implement until tests pass&lt;/li&gt;
&lt;li&gt;Walk away. Check in from your phone.&lt;/li&gt;
&lt;li&gt;Review the work. Suggest changes.&lt;/li&gt;
&lt;li&gt;Commit&lt;/li&gt;
&lt;li&gt;Update plan document, documentation, website&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Each step produces context that the next step consumes. By the time the agent starts writing code, it has the spec, the architecture diagram, the database schema, the mockup, and the test suite — all in one workspace, all visible to it. That’s why it works.&lt;/p&gt;

&lt;h2&gt;
  
  
  Plan First
&lt;/h2&gt;

&lt;p&gt;Every feature starts as a markdown file with YAML frontmatter: status, priority, owner, acceptance criteria. We type /plan and iterate on the document with the agent until the goals and implementation approach are solid.&lt;/p&gt;

&lt;p&gt;Plan document with YAML frontmatter, status bar, and inline AI diff in Nimbalyst&lt;/p&gt;

&lt;p&gt;The plan isn’t a throwaway note. It tracks status as work progresses (draft -&amp;gt; in-development -&amp;gt; in-review -&amp;gt; completed), versions with git alongside the code, and serves as the single source of truth. When the agent later implements, it reads this document. When we review the work, we compare against it.&lt;/p&gt;

&lt;p&gt;The difference between this and a Jira ticket: the plan is a rich markdown document that the agent can actually parse and act on, not a text field nobody reads.&lt;/p&gt;

&lt;h2&gt;
  
  
  Diagrams and Data Models in the Same Workspace
&lt;/h2&gt;

&lt;p&gt;A text plan can only communicate so much. We ask the agent to add visual context:&lt;/p&gt;

&lt;p&gt;“Add an architecture diagram showing the WebSocket connection flow between the client, server, and notification service.”&lt;/p&gt;

&lt;p&gt;It creates an Excalidraw diagram in the workspace. We see it rendered, drag things around, tell the agent to adjust (“move the queue between the API and the notification service”), and iterate until the architecture is clear.&lt;/p&gt;

&lt;p&gt;Excalidraw architecture diagram with AI chat sidebar in Nimbalyst&lt;/p&gt;

&lt;p&gt;For database work, we ask for a data model:&lt;/p&gt;

&lt;p&gt;“Create a data model for the notifications schema.”&lt;/p&gt;

&lt;p&gt;The agent generates a .datamodel file that renders as a visual ERD. Tables, foreign keys, field types, all editable. We review it, ask for changes, the agent updates it.&lt;/p&gt;

&lt;p&gt;Data model rendered as visual ERD with AI chat in Nimbalyst&lt;/p&gt;

&lt;p&gt;The critical thing: these artifacts live alongside the plan and the code. When the agent later implements, it doesn’t need us to re-explain the architecture or the schema. It reads them directly.&lt;/p&gt;

&lt;h2&gt;
  
  
  Mockup, Annotate, Iterate
&lt;/h2&gt;

&lt;p&gt;For anything with a UI, we create mockups before touching code. The agent generates .mockup.html files — real HTML/CSS that renders live in the workspace.&lt;/p&gt;

&lt;p&gt;HTML mockup with before/after diff slider and AI chat in Nimbalyst&lt;/p&gt;

&lt;p&gt;We review visually. Use annotation tools to circle what needs changing. The agent sees the annotations, understands the spatial context, and regenerates. Three or four rounds and the mockup matches what’s in our heads.&lt;/p&gt;

&lt;p&gt;This replaces the Figma-to-engineering handoff entirely. The mockup is already in the workspace. When the agent implements the UI, it already knows what it should look like. No exporting, no describing screenshots in words, no “make it look like the design.”&lt;/p&gt;

&lt;h2&gt;
  
  
  Tests Before Implementation
&lt;/h2&gt;

&lt;p&gt;Before writing any implementation code, we have the agent write tests. This is where the earlier context pays off.&lt;/p&gt;

&lt;p&gt;“Write Playwright E2E tests for the notification center based on the plan and mockup.”&lt;/p&gt;

&lt;p&gt;The agent reads the acceptance criteria from the plan, references the mockup for expected UI behavior, and generates test cases. We review them, add edge cases, and now we have an executable definition of “done.”&lt;/p&gt;

&lt;p&gt;Every test fails. That’s the point.&lt;/p&gt;

&lt;h2&gt;
  
  
  Implement Until Green
&lt;/h2&gt;

&lt;p&gt;Now we tell the agent:&lt;/p&gt;

&lt;p&gt;“Implement the notification system. Run tests after each major change. Keep going until all tests pass.”&lt;/p&gt;

&lt;p&gt;The agent works iteratively. Implements the database migration from the data model. Runs tests — schema tests pass. Builds the WebSocket server. Runs tests — connection tests go green. Implements the frontend. Runs Playwright — catches a CSS issue from the screenshot, fixes it, reruns. Eventually: all green.&lt;/p&gt;

&lt;p&gt;This isn’t prompt-and-pray. The agent has the plan for architecture guidance, the data model for the schema, the mockup for the UI, and the test suite for verification. It loops through code-test-fix cycles autonomously.&lt;/p&gt;

&lt;h2&gt;
  
  
  Walk Away, Check In From Your Phone
&lt;/h2&gt;

&lt;p&gt;Once the plan is solid, the tests are reviewed, and the agent is pointed in the right direction, we don’t sit and watch. We go to lunch. Take a meeting. Go for a walk.&lt;/p&gt;

&lt;p&gt;The agent keeps working.&lt;/p&gt;

&lt;p&gt;When it finishes or needs input, we get a notification on our phones. The Nimbalyst mobile app shows session status, the full transcript of what the agent did, and file diffs. If the agent needs a decision, we tap our answer and it continues. If all tests pass, we review the changes from wherever we are.&lt;/p&gt;

&lt;p&gt;Nimbalyst mobile app showing active agent sessions and status&lt;/p&gt;

&lt;p&gt;Nimbalyst mobile app showing file diff review on phone&lt;/p&gt;

&lt;p&gt;This is not “set it and forget it.” We stay engaged. But the engagement happens on our terms — on the train, at the coffee shop, between meetings. The agent’s work doesn’t stall because we’re not at our desk.&lt;/p&gt;

&lt;h2&gt;
  
  
  Review the Work
&lt;/h2&gt;

&lt;p&gt;When the agent finishes, we review. Nimbalyst shows every file the agent touched in a sidebar, with full diffs for each one. We click through the changes, see exactly what was added, modified, or removed, and compare it against the plan and mockup.&lt;/p&gt;

&lt;p&gt;Diff review showing file changes with red/green inline diff in Nimbalyst&lt;/p&gt;

&lt;p&gt;This isn’t reading a pull request cold. We wrote the plan, reviewed the tests, and approved the mockup. The review is checking whether the agent followed through on decisions we already made. It usually did. When it didn’t, we tell it what to fix and it iterates.&lt;/p&gt;

&lt;p&gt;The files sidebar makes this fast. We see the full scope of changes at a glance — no scrolling through a massive diff. Click a file, review it, move on.&lt;/p&gt;

&lt;h2&gt;
  
  
  Commit
&lt;/h2&gt;

&lt;p&gt;Once the review looks good, we commit directly from the workspace. Nimbalyst has a built-in git commit flow — the agent proposes a commit message based on the changes, we review or edit it, and commit.&lt;/p&gt;

&lt;p&gt;Git commit dialog with AI-proposed commit message in Nimbalyst&lt;/p&gt;

&lt;p&gt;No switching to a terminal. No copying file lists. The commit happens in context, right after the review, while everything is still fresh. The agent’s proposed message is usually accurate because it knows what it did and why — it read the plan.&lt;/p&gt;

&lt;h2&gt;
  
  
  Update the Plan and Docs
&lt;/h2&gt;

&lt;p&gt;After committing, we close the loop. The plan document gets updated: status moves from in-development to completed, acceptance criteria get checked off, and any implementation notes get added for future reference.&lt;/p&gt;

&lt;p&gt;Session kanban board showing work items across phases in Nimbalyst&lt;/p&gt;

&lt;p&gt;We also update documentation, CHANGELOG entries, and website content if the feature is user-facing. Because the agent has full context of what was built, it can draft these updates too. We review and merge.&lt;/p&gt;

&lt;p&gt;This step matters more than it seems. Without it, plans drift from reality, docs go stale, and the next person (or agent) working in the area starts from incomplete context. Closing the loop keeps the workspace honest.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Context Continuity Is the Real Unlock
&lt;/h2&gt;

&lt;p&gt;Coding agents are good at writing code. What limits them is context fragmentation.&lt;/p&gt;

&lt;p&gt;In a typical setup, the spec lives in Confluence, the mockup in Figma, the tasks in Jira, the tests in your IDE, and the agent runs in the terminal. The agent gets fragments through MCP calls or copy-pasted text. It’s reading a book one sentence at a time through an API.&lt;/p&gt;

&lt;p&gt;This workflow works because every artifact — plan, diagram, data model, mockup, test, code — lives in the same workspace and is directly readable by the agent. No handoffs. No context translation. No “let me describe what the Figma mockup looks like.”&lt;/p&gt;

&lt;p&gt;The result:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Plans give the agent architectural direction it can actually follow&lt;/li&gt;
&lt;li&gt;Diagrams show how pieces connect without verbal explanation&lt;/li&gt;
&lt;li&gt;Data models define the exact schema to implement&lt;/li&gt;
&lt;li&gt;Mockups provide a pixel-accurate UI target&lt;/li&gt;
&lt;li&gt;Tests give a machine-verifiable definition of done&lt;/li&gt;
&lt;li&gt;One workspace means none of this is lost in translation&lt;/li&gt;
&lt;li&gt;The agent isn’t smarter in this workflow. It just has everything it needs.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The Workflow
&lt;/h2&gt;

&lt;p&gt;Plan. Enrich with visuals. Mockup the UI. Write tests. Implement until green. Review from anywhere. Commit. Close the loop.&lt;/p&gt;

&lt;p&gt;We ship features this way every day. The agent handles the mechanical iteration. We focus on the decisions that actually require a human: what to build, what the architecture should look like, whether the tests cover the right scenarios, and whether the final result is what we wanted.&lt;/p&gt;

&lt;p&gt;That’s how we build Nimbalyst, and it’s how Nimbalyst is designed to let you build too.&lt;/p&gt;

</description>
      <category>development</category>
      <category>coding</category>
      <category>ai</category>
      <category>agents</category>
    </item>
    <item>
      <title>Context Is the New Code</title>
      <dc:creator>Karl Wirth</dc:creator>
      <pubDate>Mon, 09 Mar 2026 15:54:24 +0000</pubDate>
      <link>https://forem.com/stravukarl/context-is-the-new-code-50n5</link>
      <guid>https://forem.com/stravukarl/context-is-the-new-code-50n5</guid>
      <description>&lt;h2&gt;
  
  
  The Prompt Isn’t the Problem
&lt;/h2&gt;

&lt;p&gt;The prompt is the last mile. The tip of the iceberg. What actually determines the quality of AI-generated code is everything you give the agent before the prompt: your spec, your architecture diagram, your mockup, your data model, your existing codebase, your test suite, your acceptance criteria.&lt;/p&gt;

&lt;p&gt;That’s context. And context is the new code.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Evidence
&lt;/h2&gt;

&lt;p&gt;Consider two approaches to the same task. Same Claude Code model. Same feature request: “Build a team management settings page.” Same developer.&lt;/p&gt;

&lt;p&gt;Approach 1: Prompt only The developer opens a Claude Code session and types: “Build a team management settings page where admins can invite members, assign roles, and remove people.”&lt;/p&gt;

&lt;p&gt;The result is a generic CRUD page. Hardcoded role values. No error handling for edge cases. No loading states. No confirmation dialogs. No empty state. Functional but shallow. The AI had to guess at every design decision, and it shows.&lt;/p&gt;

&lt;p&gt;Approach 2: Context-rich session The developer writes the same prompt, but the Claude Code session also has access to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A 2-page spec with acceptance criteria, edge cases, and error states&lt;/li&gt;
&lt;li&gt;A visual wireframe showing the exact layout, including empty state and delete confirmation&lt;/li&gt;
&lt;li&gt;An entity diagram showing Team, TeamMember, and Invitation entities with relationships&lt;/li&gt;
&lt;li&gt;The existing codebase’s component library and style patterns&lt;/li&gt;
&lt;li&gt;Three relevant test files showing the project’s testing patterns&lt;/li&gt;
&lt;li&gt;The result is a production-quality page matching the existing design system. Proper role-based access control. Loading skeletons. Error boundaries. Confirmation dialogs. Empty state. Tests following project conventions. Practically shippable.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The second approach doesn’t just produce marginally better code — it produces categorically different output. The AI stops guessing and starts executing. Same model, same prompt, radically different results. The difference is context.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Context Beats Prompts
&lt;/h2&gt;

&lt;p&gt;A prompt tells the AI what to do. Context tells the AI what you know, what you’ve decided, and what good looks like.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Context provides constraints&lt;/strong&gt;&lt;br&gt;
“Build a settings page” has infinite solutions. A mockup showing the exact layout has one. Constraints improve output because they reduce the solution space to the right answer.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Context provides patterns&lt;/strong&gt;&lt;br&gt;
When Claude Code can see your existing components, it follows your patterns. When it can see your test suite, it writes tests the same way. Without context, it invents patterns. With context, it matches yours.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Context provides decisions&lt;/strong&gt;&lt;br&gt;
A spec with edge cases represents decisions you’ve already made. “When you remove the last admin, show an error” is a decision. Without that context, the AI either ignores the edge case or makes a different decision. Your context encodes your judgment.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Context provides standards&lt;/strong&gt;&lt;br&gt;
A data model with specific field names, types, and constraints is a standard. It eliminates the “what should I name this column?” decisions that produce inconsistent code when made ad hoc.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Craft of Context
&lt;/h2&gt;

&lt;p&gt;If context is the new code, then crafting context is the new programming.&lt;/p&gt;

&lt;p&gt;Here’s what good context looks like for a feature:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Plan/Spec (markdown): What the feature does, who it’s for, acceptance criteria, edge cases, error states, non-requirements (what it explicitly doesn’t do)&lt;/li&gt;
&lt;li&gt;Architecture (Mermaid or Excalidraw diagram): How the feature fits into the existing system. Services, databases, APIs involved.&lt;/li&gt;
&lt;li&gt;Mockup (HTML/CSS): What the UI should look like. Layout, components, interactions, states (loading, error, empty).&lt;/li&gt;
&lt;li&gt;Data model (visual schema): Entities, relationships, fields, constraints, indexes.&lt;/li&gt;
&lt;li&gt;Existing code (codebase access): Component library, style conventions, test patterns, API conventions.&lt;/li&gt;
&lt;li&gt;Test cases (markdown): What success looks like. Expected behaviors, user flows, and validation criteria the AI can code against.&lt;/li&gt;
&lt;li&gt;And here’s the key: you’re not building all this context by hand. You’re building it with your AI agents. Claude Code helps you write the spec, generate the architecture diagram, scaffold the mockup, draft the data model. The AI is your co-author for context, not just for code. You bring the judgment and decisions; the agent helps you capture and structure them.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each piece of context eliminates a category of decisions the AI would otherwise make randomly (or badly). The more context, the less variance. The less variance, the higher quality.&lt;/p&gt;

&lt;p&gt;Excalidraw architecture diagram providing visual context for AI agents in Nimbalyst&lt;/p&gt;

&lt;h2&gt;
  
  
  The Context Workspace
&lt;/h2&gt;

&lt;p&gt;This is why we built Nimbalyst as an integrated workspace rather than a standalone AI chat.&lt;/p&gt;

&lt;p&gt;If context matters most, then the tool should optimize for context creation and delivery:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;WYSIWYG markdown for writing specs that Claude Code can read and edit&lt;/li&gt;
&lt;li&gt;Mermaid and Excalidraw diagrams embedded in specs for architecture context&lt;/li&gt;
&lt;li&gt;MockupLM for visual mockups that Claude Code can see and reference&lt;/li&gt;
&lt;li&gt;Excalidraw for data model and architecture diagrams that Claude Code uses as a blueprint&lt;/li&gt;
&lt;li&gt;Session linking so context from previous sessions carries forward&lt;/li&gt;
&lt;li&gt;File-to-session tracking so the AI knows which sessions touched which files&lt;/li&gt;
&lt;li&gt;Everything in one workspace. Everything visible to Claude Code. No copy-pasting context from one tool to another. No “let me describe what the mockup looks like.”&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The Implication for Teams
&lt;/h2&gt;

&lt;p&gt;If context is the new code, then context quality is the new code quality.&lt;/p&gt;

&lt;p&gt;Code review becomes context review. “Did you provide enough context before asking the agent to code?” “Is the spec missing edge cases?” “Does the mockup match the design system?” “Is the data model normalized?”&lt;/p&gt;

&lt;p&gt;The best developers won’t be the best coders. They’ll be the best context crafters — people who can build complete, precise, well-structured context that produces excellent AI-generated code on the first try.&lt;/p&gt;

&lt;p&gt;FAQ&lt;br&gt;
Q: This sounds like you’re just saying “write better specs.” A: Partly, yes. But it’s more than specs. It’s the combination of specs + visual mockups + data models + existing code patterns all being visible to the AI simultaneously. That integration is the key — not any single piece of context.&lt;/p&gt;

&lt;p&gt;Q: Doesn’t this make the PM role more important than the developer role? A: It makes context creation more important than code writing. Whether that’s the PM’s job or the developer’s job depends on your team structure. Many developers write their own specs. The point is that whoever crafts the context determines the output quality.&lt;/p&gt;

&lt;p&gt;Q: What about complex code where context isn’t enough? A: Context doesn’t replace engineering expertise. For performance optimization, distributed systems, complex algorithms — you need deep technical knowledge. Context gets you 80% of features. The other 20% still needs human engineering judgment.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>development</category>
      <category>agents</category>
      <category>programming</category>
    </item>
    <item>
      <title>The Future is Small Teams</title>
      <dc:creator>Karl Wirth</dc:creator>
      <pubDate>Mon, 09 Mar 2026 15:13:26 +0000</pubDate>
      <link>https://forem.com/stravukarl/the-future-is-small-teams-29pp</link>
      <guid>https://forem.com/stravukarl/the-future-is-small-teams-29pp</guid>
      <description>&lt;p&gt;We’re a small team building software for small teams. That’s not an accident, it’s our thesis.&lt;/p&gt;

&lt;p&gt;The future of building software, and honestly the future of building anything, belongs to small teams of 3 to 7 people. Not solo founders grinding alone. Not 500-person departments or 10,000 person companies with layers of coordination. Small, tight groups where everyone knows what everyone else is doing, where decisions happen in minutes instead of meetings, and where each person brings real leverage because they’re each commanding their own teams of AI agents.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Small Teams Win Now
&lt;/h2&gt;

&lt;p&gt;Small teams have always had advantages: speed, trust, low communication overhead. But those advantages used to hit a ceiling. A 4-person team simply couldn’t produce the output of a 40-person team, no matter how efficient they were.&lt;/p&gt;

&lt;p&gt;AI agents change that math completely.&lt;/p&gt;

&lt;p&gt;Today, a single person working with AI agents can do the work that used to require a team of 5-10 people. They can write code, generate documentation, analyze data, create marketing assets, and manage workflows, all with AI handling the execution while they provide direction and judgment.&lt;/p&gt;

&lt;p&gt;Multiply that by 3-5 people, and you have a unit that can match or exceed the output of teams many times their size. Each person becomes a force multiplier, not just a contributor.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Coordination Cliff
&lt;/h2&gt;

&lt;p&gt;Here’s the thing that doesn’t scale: coordination.&lt;/p&gt;

&lt;p&gt;Brooks’s Law told us decades ago that adding people to a late software project makes it later. The underlying reason hasn’t changed — communication overhead grows exponentially with team size. With n people, you have n(n-1)/2 possible communication channels. At 5 people, that’s 10 channels. At 10 people, it’s 45. At 20, it’s 190.&lt;/p&gt;

&lt;p&gt;AI agents amplify this problem in a new way. When each person is running multiple agent sessions, each producing code, documents, and decisions, the surface area of what needs to be coordinated explodes. It’s not just keeping 5 people aligned — it’s keeping 5 people and their dozens of concurrent workstreams aligned.&lt;/p&gt;

&lt;p&gt;Small teams navigate this naturally. At 3-5 people, you can maintain a shared mental model of the entire project. You know what everyone is working on. You can make decisions in a quick conversation rather than a formal process. You can review each other’s AI-generated output without it becoming a full-time job.&lt;/p&gt;

&lt;p&gt;Beyond that size, the coordination cost starts eating the productivity gains from AI. You need project managers, alignment meetings, documentation standards, approval workflows — all the overhead that slows large organizations down. The AI makes each individual more productive, but the organization can’t absorb that productivity because it gets lost in coordination.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Small Teams Actually Need
&lt;/h2&gt;

&lt;p&gt;If small teams are the future, what do they need from their tools?&lt;/p&gt;

&lt;p&gt;Individual leverage. Each person needs to be maximally effective on their own. That means deep AI integration — not a chatbot in a sidebar, but an AI agent that can read your codebase, execute tasks, create artifacts, and maintain context across long working sessions. The individual unit of work needs to be powerful.&lt;/p&gt;

&lt;p&gt;Shared context without overhead. The team needs to stay aligned without status meetings and Slack threads. That means shared workspaces where you can see what others are working on, what their AI agents have produced, and what decisions have been made — all without anyone having to write a status update.&lt;/p&gt;

&lt;p&gt;Lightweight collaboration. When you do need to coordinate, it should be fast and direct. Review someone’s AI-generated code. Comment on a plan document. See what changed in the last session. Not through a heavyweight process, but through tools that make collaboration feel as natural as working alone.&lt;/p&gt;

&lt;p&gt;Unified workspace. Small teams can’t afford to juggle 10 different tools. They need their documents, code, diagrams, plans, and conversations in one place — not because “all-in-one” is a feature, but because context switching is the enemy of the tight feedback loops that make small teams fast.&lt;/p&gt;

&lt;h2&gt;
  
  
  What We’re Building
&lt;/h2&gt;

&lt;p&gt;This is exactly what we’re building with Nimbalyst.&lt;/p&gt;

&lt;p&gt;For individual work, Nimbalyst gives you an AI-native workspace where Claude Code agents run directly in your editor. You can write code, create documents, draw diagrams, manage plans, and execute complex multi-step tasks all with an AI agent that has full context on your project. You’re not copy-pasting between a chat window and your tools. The agent works where you work.&lt;/p&gt;

&lt;p&gt;For collaboration, we’re building the connective tissue that keeps small teams aligned. Shared workspaces where your teammates’ work is visible. Session histories that let you understand what happened while you were away. The goal is to give small teams the shared awareness that large organizations try to achieve with meetings and managers — but without the overhead.&lt;/p&gt;

&lt;p&gt;We use Nimbalyst to build Nimbalyst. We’re a small team. We run agent sessions for everything from feature development to marketing content to bug fixes. And every day we learn what works and what’s missing when a handful of people are trying to move fast with AI.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Bet
&lt;/h2&gt;

&lt;p&gt;Our bet is simple: the teams that will build the best products over the next decade will be small. Not because small is trendy, but because the economics have fundamentally shifted. AI agents give individuals leverage that used to require headcount. And the coordination costs of large teams haven’t gotten any cheaper — if anything, they’ve gotten worse as the pace of AI-assisted work has accelerated.&lt;/p&gt;

&lt;p&gt;3-7 people, each with their own teams of agents, sharing a workspace, moving fast, staying aligned. That’s the unit we’re building for. That’s the future we see.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>developer</category>
      <category>workplace</category>
    </item>
    <item>
      <title>No More Marketing Bottleneck: How We Automated the Software-to-Marketing Pipeline</title>
      <dc:creator>Karl Wirth</dc:creator>
      <pubDate>Mon, 02 Mar 2026 15:34:08 +0000</pubDate>
      <link>https://forem.com/stravukarl/no-more-marketing-bottleneck-how-we-automated-the-software-to-marketing-pipeline-441f</link>
      <guid>https://forem.com/stravukarl/no-more-marketing-bottleneck-how-we-automated-the-software-to-marketing-pipeline-441f</guid>
      <description>&lt;p&gt;Most companies have a gap between shipping software and telling the world about it. A feature is built. Then someone writes release notes. Someone else updates the docs. Someone asks for screenshots. A marketer rewrites the changelog for the website. A designer records a demo video. Weeks pass. The marketing site still describes the old version.  &lt;/p&gt;

&lt;p&gt;This problem might have been tolerable pre-AI, but at the speed with which we are releasing features with coding agents, it is unacceptable. &lt;/p&gt;

&lt;p&gt;We closed that gap. At Nimbalyst, when we release a feature, we run a coding-agent powered pipeline to update our documentation, synch it to GitBook, generate our website content for Cloudflare, cut product videos and screenshots with Playwright, and update the website with those videos. &lt;/p&gt;

&lt;h2&gt;
  
  
  The Problem: Every Feature Ships Twice
&lt;/h2&gt;

&lt;p&gt;Building a feature is one job. Telling people about it is a second job that's just as much work:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Release notes&lt;/strong&gt; need to be written and formatted&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Documentation&lt;/strong&gt; in needs new pages or updated sections with accompanying videos and screenshots&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Website copy&lt;/strong&gt; needs to reflect the new capability&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Screenshots&lt;/strong&gt; need to be captured in both light and dark mode&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Product videos&lt;/strong&gt; need to show the feature in action&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Changelog entries&lt;/strong&gt; need to be added&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In most teams, each of these is a manual handoff. Developer finishes the feature, writes a Slack message, product manager drafts docs, marketer updates the website, designer records a video. The chain is slow, lossy, and nobody owns the whole thing.&lt;/p&gt;

&lt;p&gt;We decided the whole thing should be a coding-agent-powered pipeline.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Automated Pipeline
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1sp4nnx210x98fii866g.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1sp4nnx210x98fii866g.png" alt="Feature to Marketing Pipeline" width="800" height="299"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here's what happens when we ship a feature for Nimbalyst:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Feature ships → Content gets written
&lt;/h3&gt;

&lt;p&gt;When a feature is released, in Nimbalyst, we ask our coding agent (use both Claude Code and Codex) to write a short markdown document describing the feature for our website and our documentation. It leverages the feature plan document, the code itself, and the release notes to do so. We edit what it wrote and iterate on this with the coding agent.  &lt;/p&gt;

&lt;p&gt;When we are satisfied with the response, we instruct the coding agent to change the documentation in github, update the relevant YAML data files that drive our website copy, and write a blog. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8lm2gb26f3rdv1453c6h.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8lm2gb26f3rdv1453c6h.png" alt="Markdown" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Content → YAML Files → Website deploy → Cloudflare Pages
&lt;/h3&gt;

&lt;p&gt;Our website copy lives in YAML files in a git repo, not a CMS. That means Claude Code can edit marketing content the same way it edits source code. There's no proprietary editor to navigate, no API to call, no format to translate. A feature description becomes website copy in the same git repo, in the same session, reviewed with the same diff tools.  &lt;/p&gt;

&lt;p&gt;When needed, we open the YAML files that were changed in Nimbalyst either to spot check or to make some manual edits that are easily made by hand then described. We might not like what the coding agent did and then we ask for a rework or addition.  &lt;/p&gt;

&lt;p&gt;We run our staging site locally with npm dev and can review the updated page there.  &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpj9vdwf99l85tx5ze2u3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpj9vdwf99l85tx5ze2u3.png" alt="YAML" width="800" height="453"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Our marketing site is Astro on Cloudflare Pages. Git push to &lt;code&gt;main&lt;/code&gt; and it deploys. Updated YAML copy, new blog posts, revised feature descriptions — they all go live with a git push. You can see the result at &lt;a href="https://nimbalyst.com" rel="noopener noreferrer"&gt;nimbalyst.com&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;As noted, we follow this same process for our new blog, but we have a /blog command for this.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Docs update → GitBook syncs
&lt;/h3&gt;

&lt;p&gt;Our documentation lives in a markdown file that syncs to GitBook. When the coding agent writes or updates a doc, it again is just a markdown file in a git repo. Push to main, GitBook picks it up. No manual copy-paste into a docs platform, no separate editing workflow.&lt;/p&gt;

&lt;p&gt;Again, we review the changes made in the markdown file in Nimbalyst and iterate on it with the coding agent, for example, asking for a mermaid diagram or excalidraw to illustrate a key point.  &lt;/p&gt;

&lt;p&gt;Our coding agents write docs that are accurate because the have the full context — they can read the source code, the plan, understand the implementation, and write documentation that matches what the feature actually does, not what someone remembers it doing. See the finished product at &lt;a href="https://docs.nimbalyst.com" rel="noopener noreferrer"&gt;docs.nimbalyst.com&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Text → Screenshots and Videos → Live on our Docs and Website
&lt;/h3&gt;

&lt;p&gt;So far so good, but text is easier. What about the images and videos needed to explain the feature.  We use Playwright to capture product videos directly from our running application. Not screen recordings where someone clicks through a demo — automated, scripted captures that show exactly the workflow we want, every time.&lt;/p&gt;

&lt;p&gt;Our YAML data files include structured &lt;code&gt;screenshot&lt;/code&gt; comment blocks that describe what each image or video should show (editable by human, updatable by agent).  Playwright reads these specs, sets up the application state, and captures the assets. Light mode and dark mode variants. Specific crop regions — full window, editor pane, sidebar, toolbar, zoom.  &lt;/p&gt;

&lt;p&gt;When the product changes, we re-run the Playwright pipeline and get updated visuals that match the current UI. No re-record. No "the screenshots are from three versions ago" problem.&lt;/p&gt;

&lt;p&gt;Each Playwright spec choreographs a complete sequence: launch the app, set up realistic data, navigate to the right screen, trigger AI interactions, and capture at the exact moment the UI tells the story. The specs capture both light and dark theme variants automatically, and video specs include a DOM-injected cursor that shows natural mouse movement — making the footage look like a real person using the product, not a robotic test run.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgwy7mpuedhdbmbl62962.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgwy7mpuedhdbmbl62962.png" alt="Playwright Spec" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The screenshots and videos follow the same pipeline as text content. They are stored in git and pushed to the website and/or the documentation site or included as part of the blog.  We use the same screenshot and video creation process to make assets for social when we need them. &lt;/p&gt;

&lt;h3&gt;
  
  
  5. Everything is connected and reviewable
&lt;/h3&gt;

&lt;p&gt;Every piece of this pipeline produces artifacts in a git repo: changelog entries, documentation, website copy, screenshot specs, images, videos. We can have our coding agent read, leverage, and update every aspect of the pipeline and website. And we humans can do the same...  reviewing and approving the agent's changes with red/green diffs and editing and updating all in markdown, code files, html mockups, and sessions. We see exactly what changed, can revert anything, and have a complete history of every marketing asset.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgp3t8ryjxsemppjlbypv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgp3t8ryjxsemppjlbypv.png" alt="Features YAML" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Why This Matters
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Speed compounds
&lt;/h3&gt;

&lt;p&gt;A single feature update might touch five different marketing surfaces. If each takes an hour of manual work, that's half a day per feature. Ship ten features a month and you've lost a full week to marketing maintenance. Ship 10 features every few days and you simply cannot keep up if this is manual. &lt;/p&gt;

&lt;p&gt;Automated, the same updates take minutes. The content is drafted, reviewed as a diff, and deployed in one session. &lt;/p&gt;

&lt;h3&gt;
  
  
  Accuracy by default
&lt;/h3&gt;

&lt;p&gt;When Claude Code or Codex write docs and marketing copy, each is reading the actual source code, plan files, specs, and diagrams. The feature description on the website matches what the feature does because they're derived from the same context. No telephone game between developer, PM, and marketer where details get lost or simplified incorrectly.&lt;/p&gt;

&lt;h3&gt;
  
  
  Visuals stay current
&lt;/h3&gt;

&lt;p&gt;The Playwright pipeline means our screenshots and videos always show the current product. Every time the UI changes, we regenerate assets. The marketing site never shows an outdated interface — a problem that plagues every fast-moving product.&lt;/p&gt;

&lt;h3&gt;
  
  
  One repo, one workflow
&lt;/h3&gt;

&lt;p&gt;Documentation, marketing copy, blog posts, changelog entries, screenshot specs — they all live in git repos. We use the same tools for all of them: Nimbalyst for editing and review, Claude Code for drafting and updates, git for version control, Cloudflare and GitBook for deployment.&lt;/p&gt;

&lt;p&gt;There's no context-switching between a CMS, a docs platform, a design tool, and a video editor. It's all code and content in the same workspace.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Nimbalyst Difference
&lt;/h2&gt;

&lt;p&gt;You could build this pipeline with any coding agent in a terminal. But the full loop works better in a visual workspace like Nimbalyst:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Visual review matters.&lt;/strong&gt; When Claude Code or Codex updates website copy, we see the rendered result in the same workspace. When it writes a blog post, we see formatted markdown. When Playwright captures a screenshot, we can view it immediately. And not just see and review these files, we can visually edit in Nimbalyst and collaborate iteratively with the coding agents. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhgbwowmyxpywyjj27m9v.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhgbwowmyxpywyjj27m9v.png" alt="Red Green Diff Review" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Parallel sessions keep the pipeline moving.&lt;/strong&gt; We run Codex and Claude Code sessions in parallel. Nimbalyst manages these sessions so we can coordinate across them without losing context. You can easily see what files each session changed and open and edit them, the status of sessions, find and resume sessions, and commit from the session with AI assist. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzeh93nii7lx1zblvqad7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzeh93nii7lx1zblvqad7.png" alt="Parallel Sessions" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Diffs are the review mechanism.&lt;/strong&gt; Every change Claude Code makes, whether it's source code, YAML copy, or markdown docs, shows up as a reviewable diff. We approve marketing changes with the same rigor we approve code changes. That's only practical in a workspace designed for it.&lt;/p&gt;

&lt;h2&gt;
  
  
  What We Learned
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Treat marketing content as code.&lt;/strong&gt; We moved our website copy into YAML files, our website into github pushed to Cloudflare, and our docs into markdown, which made it possible to automate the entire marketing surface. If your content is trapped in a proprietary SAAS editor or a proprietary CMS, your coding agent will have a harder time with it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Invest in structured specs.&lt;/strong&gt; Our screenshot comment blocks in YAML files seem like overhead but they let Playwright regenerate every marketing visual automatically. The upfront structure pays for itself every time the product changes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The loop matters more than any single step.&lt;/strong&gt; Automating docs alone is useful. Automating website deploys alone is useful. But automating the full loop — feature to docs to website to videos is qualitatively different. Nothing falls through the cracks because there are no cracks.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ship features and ship the story simultaneously.&lt;/strong&gt; When the marketing pipeline is automated, you don't have a backlog of "features we shipped but haven't told anyone about." The story ships with the feature. Your website is always current. Your docs are always accurate. Your videos always show the real product.&lt;/p&gt;

&lt;p&gt;We went from a world where marketing was a separate project that lagged behind engineering to one where they're using the same tools at the same speed. See the finished product on our &lt;a href="https://nimbalyst.com" rel="noopener noreferrer"&gt;website&lt;/a&gt; and &lt;a href="https://docs.nimbalyst.com" rel="noopener noreferrer"&gt;documentation&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>tooling</category>
      <category>agents</category>
      <category>programming</category>
    </item>
  </channel>
</rss>
