
If you've started using AI coding agents seriously, you've probably hit this problem already. One agent is building a feature, another is fixing a bug, maybe a third is writing tests, and everything seems great until they start stepping on each other's work. The thing is, the bottleneck isn't really the models anymore. Claude Code, Codex, and other coding agents are already incredibly capable. The challenge now is managing them effectively when you have multiple tasks happening at the same time.
That's where Nimblelist comes in. It's an open-source visual workspace built around the idea that we're all becoming managers of agents. Instead of juggling terminal windows, chat sessions, task boards, documentation, and code reviews across different tools, Nimblelist brings everything into one place: your files, agent sessions, tasks, visual planning, and code reviews. So I'm going to show you how to safely build and test multiple production features simultaneously using AI agents. We'll start by creating a feature plan and architecture, then spin up multiple agents using Git worktrees so they can't interfere with each other. We'll force them to prove their work using automated Playwright test loops, and finally review everything using visual diffs before committing the code.
Start with a plan, not a prompt
Before we start throwing agents at the codebase, we need to give them a clear plan. One mistake I see a lot of people make is opening Claude Code or Codex and immediately asking it to build something. It can work for small tasks, but once you're dealing with larger features, the quality of the output is heavily influenced by the quality of the context you give it.
For this example, I'm going to build out three different parts of a SaaS application: a billing system, an authentication system, and a testing workflow. But before we touch any code, let's define what we're actually building.
Inside Nimblelist, I create a new Markdown document and use it as a simple PRD. But instead of writing the whole thing out myself, I just rough out an outline: the main requirements, the key user flows, the high-level functionality I have in mind. Nothing polished, just enough to point the agent in the right direction. Then I hand it over and ask the agent to flush it out.
This is where the back and forth starts. The agent takes my outline and expands it into a proper spec, and I go through what it came back with, accepting the parts that match what I was thinking, rejecting the stuff that misses the mark, and editing the sections that are close but not quite right. That iteration is the whole point. I'm not just dumping a prompt and walking away. Each pass tightens up the shared understanding between me and the agent. So by the time we're done, the PRD actually reflects what I want to build, not just what the model guessed on the first try.
We can take the planning one step further. Inside that same document, I'll add an Excalidraw diagram and embed it right into the markdown just by @-mentioning it. Now my architecture sketch, or a rough UI mockup, lives directly alongside the written spec. And I can go back and forth with the agent on that, too, tweaking the diagram as the plan comes together. It's just one more planning step, but it means the agent isn't only reading requirements. It's actually seeing the structure we have in mind before it writes a single line of code.
One thing I like here is that the planning document, the agent, and the rest of the project all live in the same workspace. I'm not constantly copying information between browser tabs, chat windows, and IDEs. Everything is already connected.
Now that we have the requirements written down, let's open up the agent panel and use the /plan command. What this does is have the agent analyze the specification and break the feature down into an implementation plan before writing any code. You can see it's identifying the major components we'll need, the database entities involved, and the relationships between different parts of the system. Instead of immediately generating files, it's helping us think through the architecture first.
We can take this a step further, as well. Using the /data model command, the agent can generate a visual representation of the database structure directly inside the workspace. So now instead of reading through paragraphs of requirements and mentally translating everything into tables and relationships, we can actually see the system we're about to build.
And this is really the first shift when working with AI agents effectively. You're not treating the model like an autocomplete tool. You're creating shared context first, making sure both you and the agent understand the problem before any implementation begins.
Run multiple agents in parallel without conflicts
Once we're happy with the plan, we can move on to the fun part: actually putting multiple agents to work at the same time. Let's say I want one agent working on authentication while another agent builds the billing system. In a traditional setup, both agents are operating inside the same repository. That sounds fine at first, but eventually they both touch shared files. Suddenly, you're dealing with conflicts, trying to figure out which agent broke what.
So here in Nimblelist, I'm going to switch over to agent mode. Instead of running everything in the same workspace, we're going to create separate Git worktrees for each task. For the first one, I'll create a worktree for the authentication refactor. Then, I'll create a second worktree for the billing system. Under the hood, these are completely separate working directories connected to the same repository, which means each agent can work independently without trampling over the other's changes.
Now, let's launch our first agent and assign it the authentication work. I'll have it refactor the JWT middleware and clean up some of the authorization flow. While that's running, I'll start a second agent inside the billing worktree and have it implement the Stripe webhook handling and subscription logic.
What's interesting is that both agents are now running at the same time. Instead of waiting for one task to finish before starting another, we're parallelizing the work while keeping everything isolated.
You can also see how Nimblelist tracks these sessions visually. Over on the left, I've got all my active sessions listed out. So rather than juggling a bunch of terminal windows and trying to remember which session is doing what, each agent becomes its own trackable unit. I can see what it's working on, jump back into previous sessions, and review the files it's modifying without digging through terminal history.
And it's not just a session list. Over here, I've got a Kanban board giving me a higher-level view of everything in flight. I can see which tasks are still in progress, which ones are ready for review, and which ones are done, all in one place. So the sessions on the left tell me what each agent is doing right now, and the board tells me where every piece of work sits in the bigger picture.
Don't trust the output, verify it
Now, even if the agents finish successfully, we still have another problem. The problem is that just because an agent says it's done, doesn't mean the feature actually works. This is where a lot of AI-assisted development breaks down. People generate code, skim through it for a few seconds, and then move on.
So instead of trusting the output, we're going to verify it. Back in Nimblelist, I'm going to use the /playwright skill. Rather than immediately fixing bugs, we're first asking the agent to create an end-to-end test that validates the behavior we want. For example, let's test the billing flow. The agent generates a Playwright test that creates a user, upgrades them to a paid plan, processes a subscription event, and verifies that the account status updates correctly.
When we run the test for the first time, it fails. That's actually what we want. The test is proving that the functionality doesn't exist yet, or that something in the implementation is incorrect. Now, the agent starts working through the failure, updating the application code, rerunning the test, checking the results, and continuing until the test passes.
What's nice about this workflow is that the agent isn't just generating code and hoping for the best. It's operating inside a feedback loop. Every change gets validated against an actual browser session and a real test scenario. You can see the Playwright runs happening here: the browser launching automatically, the agent inspecting failures, and then iterating until everything turns green.
This is one of the biggest mindset shifts when working with coding agents. The goal isn't to have the AI write perfect code on the first try. The goal is to build systems where the AI can verify its own work before it ever reaches production.
Review everything visually before you commit
At this point, the agents have completed their tasks, the tests are passing, and everything looks good. But before we merge anything into our main branch, we still need to review exactly what changed, because that's where the final layer of control comes in. At the end of the day, you're still responsible for the code that's going into your repository, which means we need a review process that's actually practical when an agent has touched a dozen different files.
This is where Nimble Assist's visual diff workflow becomes really useful. Over here, you can see every file that was modified during the session. Instead of scrolling through terminal output or jumping between Git commands, I can immediately see which files changed and open them one by one.
Let's take a look at the authentication work first. As I open the file, Nimble Assist shows the changes as visual red and green diffs. The red sections are what was removed, the green sections are what was added, and because everything is presented visually, it's much easier to understand the agent's reasoning than reading a giant wall of code. For example, this middleware refactor actually looks pretty solid. The agent simplified the authorization flow and cleaned up some duplicate logic. So I'd be happy to keep those changes.
Now, let's jump over to the billing worktree and do the same thing. We can review the webhook implementation, inspect the database updates, and make sure the logic matches the original plan we created earlier. Once we're happy with everything, the final step is getting these changes committed and merged back into the repository.
Inside Nimble Assist, we can open the Git view and see the complete set of approved changes. Since the platform keeps track of sessions, files, and tasks together, it's easy to understand where these changes came from and what they were supposed to accomplish. Now, instead of manually writing commit messages, I can use the built-in /commit skill. The agent analyzes the final diff, looks at the changes we've accepted, and generates a clean commit message that actually describes what happened. So rather than ending up with something vague like "update stuff" or "fix bug", we get a commit history that's meaningful and easy to navigate later.
Points clés à retenir
- The bottleneck in AI-assisted development is no longer the models themselves; it's managing multiple agents effectively.
- Before writing a single line of code, invest time in a shared plan: rough out a PRD, iterate with the agent, and embed visual diagrams so the agent sees the structure you have in mind.
- Use Git worktrees to isolate parallel agent tasks so they can't step on each other's files, and track every session visually with a session list and Kanban board.
- Never trust that an agent's output works just because it says it's done. Force verification through automated Playwright test loops where the agent iterates until tests pass.
- Review all changes with visual diffs before merging. A clear, visual diff makes it practical to understand an agent's reasoning across many files.
- Generate meaningful commit messages with a
/commitskill so your history stays clean and navigable.
And that's a complete workflow. We started by creating a plan, used multiple AI agents to work on different features in parallel, isolated them with Git worktrees, verified everything with Playwright tests, and then reviewed the generated code before committing it. What I like about Nimblelist is that all of those pieces live in the same workspace. Instead of jumping between terminal windows, documentation, task trackers, and code reviews, everything stays connected, which becomes a lot more important once you're managing multiple agents at the same time. If you want to try Nimblelist for yourself, it's open source, supports Claude Code, Codex, and other agent providers, and it's built specifically for this kind of agent-first workflow.
