We find giving the agents independent remits makes them significantly better at challenging problematic requirements, because they aren’t all automatically aligned on the same goals.
The agents from each area then having queues and messaging subsystems to coordinate their work when there are multiple streams happening, although concurrency is less of an issue than we expected. Generally will detect and flag competing requirements, which has saved us from some subtle issues. We don’t always require code owners to review every PR in their area, but they do at least always have a log of what work was done and why, which is separate from the noise of the parent work.
This does all work out a bit slower than just letting each agent get on with its job, but it’s working pretty well for us.