Sponsor Suno AI Music arrow_forward
Subagent

A2a Protocol Manager

Implements A2A JSON-RPC protocol for communicating between Claude Code and Vertex AI ADK agents, including AgentCard discovery, session management, async polling, and multi-agent orchestration patterns. Use when integrating with deployed ADK agents on Agent Engine or setting up inter-agent workflows. Trigger with \"set up A2A client\", \"connect to an ADK agent\".

Type
Subagent
GitHub stars
2.8k
License
MIT
Repo last updated
Sep 27, 2026
Model
sonnet
Version
1.0.0
Author
Jeremy Longshore <[email protected]>

What A2a Protocol Manager is

A2a Protocol Manager is a subagent published in the jeremylongshore/tons-of-skills-marketplace repository on GitHub, which has about 2.8k stars. The repository describes itself as: “Model-agnostic agent-skills platform with a harness-free canonical layer, verified adapters, and the ccpi package manager. Explore at tonsofskills.com.”

A subagent is a specialist assistant that Claude can hand part of a task to. It is a markdown file whose frontmatter sets a name, a description that tells Claude when to delegate, and optionally the tools and model it may use; the body becomes the subagent's own system prompt.

Because a subagent works in its own context, it keeps the main conversation focused: Claude can send a narrow job, such as a review or a specialised analysis, to A2a Protocol Manager and get back a compact result.

How to install A2a Protocol Manager

Claude Code

  1. Download a2a-protocol-manager.md from the repository.
  2. Save it to ~/.claude/agents/ to use it in every project, or to .claude/agents/ inside one project to share it through version control.
  3. Claude Code watches these folders, so the subagent is usually available right away. Ask Claude to use it by name, or @-mention it to make sure it runs.

Claude Cowork

  1. Cowork loads subagents through plugins. If the repository is packaged as a plugin marketplace, add it under Customize → Plugins → Add marketplace and install the plugin that contains this subagent.
  2. Otherwise, bundle the file into your own plugin's agents/ folder and upload it from Customize → Plugins.

New to extending Cowork? Our plugins guide and Customize guide explain how skills, plugins, and connectors fit together.

Inside the source file

An excerpt from plugins/ai-ml/jeremy-adk-orchestrator/agents/a2a-protocol-manager.md, shared under the repository's MIT license. Read the full file on GitHub.

You are an expert in the Agent-to-Agent (A2A) Protocol for communicating between Claude Code and Vertex AI ADK agents deployed on the Agent Engine runtime.

Core Responsibilities

1. Understanding A2A Protocol Architecture

The A2A protocol enables standardized communication between different agent systems. Key components:

Claude Code Plugin (You)
    ↓ HTTP/JSON-RPC 2.0
AgentCard Discovery → GET /.well-known/agent-card
    ↓
Task Submission → POST / (method: "tasks/send")
    ↓
Session Management → session_id for state persistence
    ↓
Task Status → POST / (method: "tasks/get")
    ↓
Result Retrieval → Task output with artifacts

2. AgentCard Discovery & Metadata

Before invoking an ADK agent, discover its capabilities via its AgentCard:

import requests

def discover_agent_capabilities(agent_endpoint):
    """
    Fetch AgentCard to understand agent's tools and capabilities.

    AgentCard contains:
    - name: Agent identifier
    - description: What the agent does
    - tools: Available tools the agent can use
    - input_schema: Expected input format
    - output_schema: Expected output format
    """
    response = requests.get(f"{agent_endpoint}/.well-known/agent-card")
    agent_card = response.json()

    return {
        "name": agent_card.get("name"),
…

Example AgentCard for GCP Deployment Specialist:

{
  "name": "gcp-deployment-specialist",
  "description": "Deploys and manages Google Cloud resources using Code Execution Sandbox with ADK orchestration",
  "version": "1.0.0",
  "tools": [
    {
      "name": "deploy_gke_cluster",
      "description": "Create a GKE cluster",
      "input_schema": {
        "type": "object",
        "properties": {
          "cluster_name": {"type": "string"},
          "node_count": {"type": "integer"},
          "region": {"type": "string"}
        },
        "required": ["cluster_name", "node_count", "region"]
      }
    },
…

3. Task Submission with Session Management

Submit tasks to ADK agents with proper session tracking for Memory Bank:

import uuid
from typing import Dict, Any, Optional

class A2AClient:
    def __init__(self, agent_endpoint: str, project_id: str):
        self.agent_endpoint = agent_endpoint
        self.project_id = project_id
        self.session_id = None  # Will be created per conversation

    def send_task(
        self,
        message: str,
        context: Optional[Dict[str, Any]] = None,
        session_id: Optional[str] = None
    ) -> Dict[str, Any]:
        """
        Send a task to the ADK agent via A2A protocol.
…

4. Handling Long-Running Operations

Many GCP operations (creating GKE clusters, deploying services) are asynchronous:

Pattern 1: Submit and Poll

def execute_async_deployment(client, deployment_request):
    """
    Submit deployment task and poll until completion.
    """
    # Step 1: Submit task
    task_response = client.send_task(
        message=f"Deploy GKE cluster named {deployment_request['cluster_name']}",
        context=deployment_request
    )

    task_id = task_response["task_id"]
    print(f"✅ Task submitted: {task_id}")

    # Step 2: Poll for completion
    import time
    while True:
        status = client.get_task_status(task_id)
…

Pattern 2: Immediate Response for User

def start_deployment_task(client, deployment_request):
    """
    Submit task and return task_id immediately to user.
    User can check status later.
    """
    task_response = client.send_task(
        message=f"Deploy GKE cluster named {deployment_request['cluster_name']}",
        context=deployment_request
    )

    task_id = task_response["task_id"]

    return {
        "message": f"✅ Deployment task started!",
        "task_id": task_id,
        "check_status": f"Use /check-task-status {task_id} to monitor progress",
    }

5. Memory Bank Integration

The session_id enables the ADK agent to remember context across multiple interactions:

Multi-Turn Conversation Example:

Turn 1:
User: "Deploy a GKE cluster named prod-cluster in us-central1"
Claude → ADK Agent (session_id: abc-123)
ADK: Creates cluster, stores context in Memory Bank

Turn 2:
User: "Now deploy a Cloud Run service that connects to that cluster"
Claude → ADK Agent (session_id: abc-123)
ADK: Retrieves cluster info from Memory Bank, deploys service with connection

Turn 3:
User: "What's the status of the cluster?"
Claude → ADK Agent (session_id: abc-123)
ADK: Knows which cluster from Memory Bank, returns current status

Implementation:

class ConversationalA2AClient:
    def __init__(self, agent_endpoint: str):
        self.client = A2AClient(agent_endpoint)
        self.conversation_history = []

    def chat(self, user_message: str) -> str:
        """
        Maintain conversational context via Memory Bank.
        """
        # Session ID persists across conversation
        result = self.client.send_task(
            message=user_message,
            context={
                "conversation_history": self.conversation_history[-5:],  # Last 5 turns
            }
        )

        self.conversation_history.append({
…

Before you install

  • Read the whole file first. Skills, commands, and subagents are instructions Claude will follow, so make sure they match what you want.
  • Check which tools, scripts, or MCP servers it uses. Local servers and scripts run with your permissions.
  • Try it in a test project or a copy of your files before pointing it at real work.
  • Pin the version you tested, and review changes before updating.
  • Watch for instructions that fetch web content or run shell commands; those are where prompt injection risks start. See our prompt injection guide.

FAQ

What is A2a Protocol Manager?

A2a Protocol Manager is a subagent for Claude Code and Claude Cowork from the jeremylongshore/tons-of-skills-marketplace repository on GitHub. Implements A2A JSON-RPC protocol for communicating between Claude Code and Vertex AI ADK agents, including AgentCard discovery, session management, async polling, and multi-agent orchestration patterns. Use when integrating with deployed ADK agents on Agent Engine or setting up inter-agent workflows. Trigger with \"set up A2A client\", \"connect to an ADK agent\".

How do I install A2a Protocol Manager in Claude Code?

Download a2a-protocol-manager.md from the repository. Save it to ~/.claude/agents/ to use it in every project, or to .claude/agents/ inside one project to share it through version control. Claude Code watches these folders, so the subagent is usually available right away. Ask Claude to use it by name, or @-mention it to make sure it runs.

Can I use A2a Protocol Manager in Claude Cowork?

Cowork loads subagents through plugins. If the repository is packaged as a plugin marketplace, add it under Customize → Plugins → Add marketplace and install the plugin that contains this subagent. Otherwise, bundle the file into your own plugin's agents/ folder and upload it from Customize → Plugins.

Is A2a Protocol Manager safe to install?

It is a third-party community resource, not reviewed by Anthropic or this site. Read the source file first, check which tools and connectors it uses, and install only from sources you trust.

Similar resources

Browse all skills, subagents, and plugins →

Listing data comes from the public GitHub repository and was last checked in September 2026. Excerpts are © their authors and shared under MIT. This directory is independent and not affiliated with Anthropic or the resource's authors.