The Ten Trees project is an Oqtane Blazor application I have been building for a tree mentorship program. It is a good test case for working with AI agents because it has real requirements, a real customer, and real BDD feature files that need to stay in sync with what the customer actually said in their last meeting.
This is a short video about a session where I had two agents running at the same time on different tasks in the same repo. Nothing exotic. Just a useful pattern worth showing.
The Setup
A new Oqtane release came out with page directive support. If you build Oqtane modules, you know the manual step this replaces: after scaffolding a module, you go into the admin panel and add a page for it by hand. Now you can put a directive in the module’s Index component and Oqtane creates the page automatically on startup.
That is the kind of feature that shows up under ‘Other’ in a changelog and saves you ten minutes every time you start a new module for the rest of your life.
I wanted to get that directive into all five module index files in the Ten Trees repo. So I gave that task to Claude Code, pointed it at the repo, and let it go.
Meanwhile
We had just done a March check-in call with the Ten Trees customer. The zoom summary and full transcript were already sitting in the specs folder. While Claude Code was working on the directive task, I opened GitHub Copilot in agent mode and asked it to read the transcript, compare it against the existing BDD feature files, and flag anything that needed updating.
It did a proper gap analysis. Cohort management, tree mentors, educator roles, platform admin versus program admin. Most of what the customer said was already covered in the feature files. One scenario needed a minor update. The agent touched the project plan as well, which I did not ask for but was not wrong.
One file changed. I committed it and pushed to main.
Skills
Claude Code picked up the Oqtane module development skill from the repo automatically. That skill file lives at .claude/skills/kanban/SKILL.md and tells the agent what Oqtane module files look like, where things go, and to go pull the latest Oqtane source as a reference without tracking it.
That last part matters. The agent cloned the Oqtane framework repo to use as a reference, found the page directive pattern in the new release, and applied it consistently across all five modules. That is the kind of context that used to live in your head or in a README file nobody read before starting a new task.
I keep a few skills available at github.com/markdav-is/marks-skills. The accessibility and validation skill for Blazor and Bootstrap is useful. There is also a Kanban skill that manages a task list in the file system directly, which sounds odd but turns out to be faster for agent-heavy work than hitting an MCP server on every operation.
The Pull Request
Claude Code opened a PR when it was done. The change was four attribute lines across five files. For something this small I skipped the review step and merged it directly.
For a more substantial change the right move is to have the second agent review the first agent’s pull request. One checks the other’s work. That is a workflow worth building into the habit even when it feels like overkill, because the times it catches something are the times you are glad you did it.
What This Is
This is not a story about replacing developers or burning through tokens on autopilot. Both agents were working inside tools I was already using, on tasks I already knew how to do. The agents handled the execution so I could be thinking about something else while the work was getting done.
When I launched the app after the merge, the pages showed up at the top of the screen. One for each module. That is a small thing. The Ten Trees customer can now add a village named Sherwood and a contact named Mark without me having to configure a nav menu by hand. Small things add up.
Catch you next time.



