A 3-Part Thought Leadership Series by Nate Lomax
In Part 1 we explored the leap from coding copilots to autonomous agents and delved into the architecture and challenges of building a platform that integrates AI into enterprise workflows seamlessly.
Continuing the series, we dig into the adapter-based architecture and tenant orchestrator that lets Symphony integrate safely across diverse enterprise toolchains via MCP-powered, context-aware feedback loops.
The Architecture That Makes Agentic AI Practical
Symphony’s most important architectural decision wasn’t about models or prompts. It was about abstraction.
We realized early that enterprise teams don’t share a single stack. Some use Azure DevOps. Others GitHub. Some Jira. Some Linear. AI agents evolve even faster.
So we designed Symphony around three independent adapter types:
- Agent adapters – abstract Claude, Codex, OpenCode, and future agents
- Repo adapters – abstract GitHub, Azure Repos, Bitbucket
- Work manager adapters – abstract Azure Boards, Jira, Linear

Each adapter implements a clean interface. None of them know about each other. The only place they come together is inside the Tenant Orchestrator.
The Tenant Orchestrator
The orchestrator wires together the correct adapters per tenant and coordinates workflows across them. When an agent finishes coding, the orchestrator then instigates a cycle.
Each adapter stays focused on its domain. The orchestrator handles the choreography. This design gives us combinatorial flexibility:
- Add a new AI agent? Implement one adapter.
- Add GitHub? Implement repo + work manager adapters.
- Everything else stays untouched.
That’s how Symphony becomes a platform – not a point solution.
MCP: Giving Agents Hands
Agents don’t natively know how to interact with DevOps platforms. So we built an MCP (Model Context Protocol) server that exposes tools like:
- get-work-item
- submit-changes
- add-pull-request-comment
- update-work-item
Agents simply call tools. MCP handles authentication, platform APIs, reviewers, and linking work items.

The agent focuses on code. The platform handles operations.
Context-Aware Feedback Loops
Symphony also preserves full context across iterations. When reviewers leave comments, the next agent run includes:
- Original requirements
- Previous PR
- Reviewer feedback
The agent picks up where it left off – just like a human developer.

You can even @mention the agent directly on pull requests.
It joins the conversation.
By this point, we had autonomous agents working across platforms.
But real-world production brought harder challenges: multi-tenancy, credential isolation, lightweight automations, and unexpected use cases.
In Part 3, we’ll cover what we learned building Symphony in the wild — and where it’s headed next.