No good team lets the same person write the requirement, implement it, and sign it off themselves. Our agent system follows exactly this principle — and that is what makes it reliable.
The do-it-all agent is the problem
A single agent that plans, builds, and signs off its own work is structurally blind to its own mistakes. We therefore distributed the work across specialized agents with clearly limited permissions.
The roles
- The orchestrator (conductor). Single entry point. It plans, routes, and manages the state — it does not code itself. Write permissions: only inside the state area. Executable commands: only the vetted, approved scripts of the system.
- The Power BI specialist (BI specialist). Builds semantic models and reports via the open Power BI project format. Tools: report and model authoring tools, a Desktop bridge to Power BI, Fabric and cloud CLIs, Python/Node. It may write report and model files, but never the central state files.
- The data-engineering worker. Handles Spark, Warehouse/SQL, KQL, eventstreams, dataflows, and migrations.
- The independent reviewer (checker). Independent, read-only. It receives only screenshots and the acceptance criteria — deliberately without the orchestrator's conclusions — and judges per criterion:
PASSorNEEDS_CHANGES. No self-grading.
Plus functional personas as reference for governance, migration, and data questions.
Skills: the shared expertise
The agents do not "know" everything themselves — they load skills: more than 30 encapsulated, reusable functional workflows. For Power BI, for example:
- Semantic-model authoring — TMDL, star schema, DAX guidelines, performance patterns, naming conventions.
- Report authoring — visuals, slicers, tables, cards, formatting, theming.
- Report design — layout, color, typography, accessibility, visual selection, anti-patterns.
- Report planning and management — planning and publishing.
- Template compliance — binding to a mandatory corporate template.
For the data side there are skills for Spark, SQL Warehouse, Eventhouse, dataflows, and migrations (Synapse/HDInsight/Databricks), and more. Which agent uses which skills is declared in a central routing ruleset.
Communication through files, not chatter
The orchestrator does not delegate via an informal message, but through a fixed handover block in the standardized handover document — assignment, criteria to be met, constraints. The worker reads it and writes its RESULT back in the same format. As with the game of "telephone", too much gets lost informally; a structured contract artifact is unambiguous, verifiable, and persistent.
Whoever builds should not sign off. This separation is not distrust — it is quality.
How do you separate "building" and "signing off" in your BI pipelines? 👇
#MicrosoftFabric #PowerBI #MultiAgentSystems #SoftwareArchitecture #AIAgents #SeparationOfConcerns




