Deploying AI Agent Teams with Claude and Gemini: A Practical Guide

Going from "we should use AI agents" to a production deployment is where most projects die. A field-tested playbook for shipping agent teams that actually work — on Claude, on Gemini, or both.

EngineeringClaudeGeminiAgents

Almost every "AI agent" project we see has the same shape. Somebody builds a demo where a single agent does something impressive in a notebook. Leadership gets excited. The team commits to a production rollout. Six months later, the demo is still a demo, scoped down to a Slack bot that nobody opens.

The difference between demo-grade and production-grade agent systems isn't model quality. It's architecture. Below is the playbook we actually use when we ship multi-agent systems on Claude and Gemini — compressed, opinionated, and field-tested.

1. Start with the team, not the agent

The most common mistake is designing one agent that tries to do everything. A real deployment looks more like a small org chart. Ours usually have three kinds of roles:

  • Specialists — single-purpose agents with a tight tool scope (a "researcher," a "drafter," a "reviewer"). Each one is simple enough to eval comprehensively.
  • Supervisors — agents whose only job is routing work and sequencing other agents. They should almost never call external tools themselves.
  • Humans — modeled as first-class participants in the workflow. Certain steps always escalate. Some loops pause for approval. These aren't failure modes; they're design elements.

Once you draw that org chart on a whiteboard, the MCP layer follows naturally: each specialist gets its own MCP with a minimal toolset.

2. Choose Claude or Gemini per role — not per project

Teams spend too much time picking "our model." In real deployments, we mix:

  • Claude for long-horizon reasoning, code-heavy specialists, and anything requiring disciplined adherence to a detailed system prompt. Claude Code, the Agent SDK, and Skills are the backbone here.
  • Gemini for Workspace-native flows, multimodal work (documents, images, video), and anything with heavy Google Cloud integration. Vertex AI Agent Builder and the ADK are the go-to tools.

Picking per-role sounds complicated. It's not. Once you have your specialists defined, it's usually obvious which platform fits each one.

3. Build the MCP server before the agent

This inverts how most teams start. The instinct is to prompt an agent first and figure out tooling later. Don't. The MCP layer is where 80% of the production pain lives, and it's where your eventual system will succeed or fail.

A good MCP server for each specialist has:

  • Typed, validated tool signatures. Every argument has a Zod/Pydantic schema. Every return value is deterministic.
  • Least-privilege scoping. The "drafter" agent's MCP only knows how to read drafts and write drafts. It doesn't have access to send email, update the CRM, or call the billing system.
  • Idempotency. Retries should be safe. This matters more than it sounds — agent runs will retry tool calls, and silently creating duplicate records is the fastest way to lose trust.
  • Telemetry baked in. Every tool call emits a structured trace. Every trace is indexed. You'll want this the first time something goes weird in production.
// A sketch of what a minimal MCP tool looks like
export const sendDraftForReview = tool({
  name: 'send_draft_for_review',
  description: 'Queue a draft for human review. Idempotent on draft_id.',
  input: z.object({
    draft_id: z.string().uuid(),
    reviewer: z.enum(['legal', 'ops', 'exec']),
    urgency: z.enum(['low', 'normal', 'high']).default('normal'),
  }),
  run: async (input, ctx) => {
    await db.reviews.upsert({
      where: { draft_id: input.draft_id },
      update: { reviewer: input.reviewer, urgency: input.urgency },
      create: { ...input, status: 'pending' },
    });
    ctx.trace('queued_for_review', input);
    return { ok: true };
  },
});

4. Coordinate with A2A, not with god-prompts

Multi-agent coordination is a real problem. The wrong answer is a 3,000-token system prompt listing every possible situation and what the supervisor should do. That pattern doesn't scale and doesn't survive model upgrades.

The right answer is the A2A protocol (Agent-to-Agent). A2A gives agents a structured way to send typed messages to each other, with clear request/response semantics, result types, and escalation paths. It looks a lot like a service mesh for agents.

Our rule of thumb: if your supervisor needs more than 300 tokens of prompt to coordinate its specialists, your architecture is wrong.

5. Treat human-in-the-loop as architecture, not compromise

Full autonomy is usually not what the client actually wants, even when they say it is. What they want is leverage: one human doing the work of ten. The fastest path to that is explicit, designed-in approval gates.

Some useful patterns:

  • Async approvals. The agent does the work, drafts the deliverable, and queues it for a human. The human approves or edits in the tool they already use (usually Gmail, Slack, or Teams).
  • Sampling review. The agent runs autonomously, but 5% of outputs are randomly sampled for human review and become training data for evals.
  • Hard stops on irreversibility. Anything that can't be undone — sent emails, spent money, public statements — always requires explicit human approval.

6. Ship evals before you ship the product

Evals are how you sleep at night. Without them, every deploy is a prayer. With them, you have an objective signal for whether your system just got better or worse.

For agent systems, useful eval categories include:

  • Task completion. Given a real-world input, does the agent produce the expected output? Use historical data as ground truth.
  • Tool hygiene. Did the agent call the right tools in the right order, with reasonable arguments? This catches regressions that pure output eval misses.
  • Cost and latency. Hard upper bounds. If a run takes 45 seconds when it should take 12, that's a regression regardless of output quality.
  • Safety. Does the agent correctly refuse out-of-scope requests? Does it escalate when it should?

Every deploy should run the eval suite. Failures block the deploy. This one rule, strictly enforced, prevents most agent-system catastrophes.

7. Make the rollout gradient, not binary

The last step is the one that kills the most projects. The team finishes building, launches a company-wide rollout, and three days in something goes sideways and the whole thing gets paused.

Instead, ship to a gradient of users:

  1. Week 1: the team that built it. Catch the obvious bugs.
  2. Week 2–3: a hand-picked group of 5–10 power users. Tight feedback loop, daily fixes.
  3. Week 4+: full rollout to the target function, with monitoring and the ability to roll back per user if needed.

This is slower than a big-bang launch and produces systems that actually work. The team that skips this phase spends the time anyway — just in incident response instead of in rollout.

The short version

Design the team first. Build the MCP before the agent. Coordinate with A2A. Treat humans as first-class. Ship evals before product. Roll out gradually.

None of this is revolutionary. It's all the boring operational discipline that separates a demo from a system people actually rely on. The teams who take it seriously ship in weeks; the ones who don't, don't ship at all.

If you're in the middle of trying to get a multi-agent system to production and want a second pair of eyes — we do this every day.

Shipping agents? Let's talk shop.

We've deployed agent teams across retail, data, legal, and ops. If you're building one, we've probably seen the failure mode you're about to hit.