<?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>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>
