Skip to content

Multi-Agent Team

Three developers using different agent tools on a shared project, demonstrating cross-tool context sharing, conflict resolution, and multi-agent coordination.

Scenario

A team of three is building an e-commerce platform:

  • Alex uses Claude Code (backend, API design)
  • Maria uses Cursor (frontend, React components)
  • Sam uses Gemini (infrastructure, deployment)

All three share a single context store synced via git.

Setup

Alex initializes the project

cd ~/projects/shopfront
context-teleport init --name shopfront --repo-url git@github.com:team/shopfront.git
context-teleport register claude-code

Maria and Sam join

# Maria
cd ~/projects/shopfront
context-teleport register cursor

# Sam
cd ~/projects/shopfront
context-teleport register gemini

Each registration writes the tool's MCP config with the appropriate MCP_CALLER:

  • Alex's config: "MCP_CALLER": "mcp:claude-code"
  • Maria's config: "MCP_CALLER": "mcp:cursor"
  • Sam's config: "MCP_CALLER": "mcp:gemini"

Day 1: Establishing shared context

Alex (Claude Code) -- API architecture

Alex: "Document our API architecture: REST with FastAPI,
       versioned endpoints under /api/v1, OpenAPI docs enabled."

Agent: [calls context_add_knowledge(key="api-architecture", content="...")]
       Knowledge entry saved. (author: mcp:claude-code)

Alex: "Record decision: Use Stripe for payments over building our own"

Agent: [calls context_record_decision(title="Use Stripe for payments", ...)]
       Decision recorded.

Alex: "Push"
Agent: [calls context_sync_push(message="API architecture and Stripe decision")]

Maria (Cursor) -- Frontend patterns

Maria opens Cursor. The agent auto-onboards with Alex's context.

Maria: "Pull latest context first"
Agent: [calls context_sync_pull()]
       Pulled. 1 knowledge entry, 1 decision from Alex.

Maria: "Add frontend architecture: React 18 with TypeScript,
        Zustand for state, TanStack Query for server state"

Agent: [calls context_add_knowledge(key="frontend-architecture", content="...")]
       Saved. (author: mcp:cursor)

Maria: "Create a skill for our component pattern"
Agent: [calls context_add_skill(
           name="react-component",
           description="Standard React component with TypeScript and Zustand",
           instructions="..."
       )]

Maria: "Push"
Agent: [calls context_sync_push(message="Frontend architecture and component skill")]

Sam (Gemini) -- Infrastructure

Sam: "Pull context"
Agent: [calls context_sync_pull()]
       Got API architecture (from claude-code), frontend architecture (from cursor),
       and react-component skill.

Sam: "Add deployment architecture: Docker Compose for local,
      Kubernetes on GKE for staging and production.
      CI/CD via GitHub Actions."

Agent: [calls context_add_knowledge(key="infrastructure", content="...")]
       [calls context_record_decision(title="GKE over ECS for Kubernetes hosting", ...)]
       Saved. (author: mcp:gemini)

Day 5: Cross-tool skill sharing

Alex creates a backend skill that Maria and Sam can use:

Alex: "Create a skill for our API error response format"
Agent: [calls context_add_skill(name="api-errors", description="Standard API error response format", instructions="...")]
Agent: [calls context_sync_push()]

Maria pulls and her Cursor agent can now use the same skill:

Maria: "I need to handle API errors in the frontend"
Agent: [reads context://skills/api-errors]
       I see the API error format from the backend team.
       Here's a TypeScript error handler that matches...

The skill was created by mcp:claude-code and consumed by mcp:cursor -- seamless cross-tool sharing.

Day 8: Handling conflicts

Alex and Maria both update the api-architecture knowledge entry simultaneously.

Alex pushes first

Alex: "Update API architecture: add WebSocket support for real-time order updates"
Agent: [calls context_add_knowledge(key="api-architecture", content="...updated...")]
Agent: [calls context_sync_push(message="Add WebSocket support")]
       Pushed.

Maria's push conflicts

Maria: "Update API architecture: add rate limiting on public endpoints"
Agent: [calls context_add_knowledge(key="api-architecture", content="...updated...")]
Agent: [calls context_sync_push(message="Add rate limiting")]
       Error: push failed, remote has changes.

Resolution with agent strategy

Maria: "Pull with agent resolution"
Agent: [calls context_sync_pull(strategy="agent")]
       Conflict in knowledge/api-architecture.md.
       Let me examine it.

       [calls context_conflict_detail(file_path=".context-teleport/knowledge/api-architecture.md")]
       Alex added a WebSocket section, you added a Rate Limiting section.
       These are different sections, so I can merge them cleanly.

       [calls context_resolve_conflict(file_path="...", content="...merged with both sections...")]
       [calls context_merge_finalize()]
       Merged. Both WebSocket support and rate limiting are preserved.

Section-level merge handled this automatically because the changes were in different ## sections.

Session handoffs

When Alex finishes for the day and Maria picks up:

Alex: "Wrap up, I'm handing off to Maria"
Agent: [calls context_update_state(
           current_task="Implementing order checkout flow",
           blockers="Stripe webhook integration needs testing"
       )]
       [calls context_append_session(
           agent="claude-code",
           summary="Implemented order creation and payment initiation. Webhook handler stubbed.",
           knowledge_added="",
           decisions_added=""
       )]
       [calls context_sync_push()]

Maria opens Cursor and asks for the handoff:

Maria: "What was Alex working on?"
Agent: [uses context_handoff prompt]
       Alex (claude-code) was working on the order checkout flow.
       Blocker: Stripe webhook integration needs testing.
       He implemented order creation and payment initiation,
       with a stubbed webhook handler.

Attribution tracking

The team can see who wrote what:

context-teleport knowledge list
# Shows entries with their authors:
#   api-architecture     (mcp:claude-code)
#   frontend-architecture (mcp:cursor)
#   infrastructure       (mcp:gemini)

This is tracked in knowledge/.meta.json and visible through the CLI and MCP resources.

Key takeaways

Pattern Implementation
Shared knowledge All tools read/write the same store
Agent attribution MCP_CALLER env var tags every write
Cross-tool skills SKILL.md format is the same everywhere
Conflict resolution Section-level merge handles most cases automatically
Session handoffs context_handoff prompt provides continuity
Auto-onboarding New sessions start with full project context