Skip to main content

AgentAnycast Python SDK

Build P2P agents in Python. Discover, communicate, and collaborate with AI agents across any network -- encrypted, decentralized, NAT-traversing.

CI PyPI Python License

pip install agentanycast

Try it now -- start a demo agent in one command:

agentanycast demo

The daemon downloads automatically on first run. The demo prints the exact command to test it from another terminal.

Quick Start

Create an agent:

from agentanycast import Node, AgentCard, Skill

card = AgentCard(
    name="EchoAgent",
    description="Echoes back any message",
    skills=[Skill(id="echo", description="Echo the input")],
)

async with Node(card=card) as node:
    @node.on_task
    async def handle(task):
        text = task.messages[-1].parts[0].text
        await task.complete(artifacts=[{"parts": [{"text": f"Echo: {text}"}]}])

    print(f"Agent running — Peer ID: {node.peer_id}")
    await node.serve_forever()

Send a task to another agent:

async with Node(card=card) as node:
    handle = await node.send_task(
        peer_id="12D3KooW...",
        message={"role": "user", "parts": [{"text": "Hello!"}]},
    )
    result = await handle.wait()
    print(result.artifacts[0].parts[0].text)  # "Echo: Hello!"

Three Ways to Send a Task

# Direct — by Peer ID
await node.send_task(peer_id="12D3KooW...", message=msg)

# Anycast — by skill (relay resolves the target)
await node.send_task(skill="translate", message=msg)

# HTTP Bridge — to standard HTTP A2A agents
await node.send_task(url="https://agent.example.com", message=msg)

CLI

Add --verbose (or -v) before any command for debug output:

agentanycast --verbose demo
agentanycast demo                        # Start an echo agent
agentanycast discover translate          # Find agents by skill
agentanycast send 12D3KooW... "Hello!"   # Send a task
agentanycast status                      # Check node status
agentanycast info                        # Show Peer ID, DID, version

How It Works

┌─────────────┐         mDNS / Relay         ┌─────────────┐
│  Agent A    │<------------------------------>│  Agent B    │
│  (Python)   │     E2E encrypted (Noise)     │  (Python)   │
└──────┬──────┘                               └──────┬──────┘
       | gRPC                                        | gRPC
┌──────┴──────┐                               ┌──────┴──────┐
│ agentanycastd│                               │ agentanycastd│
│  (Go daemon)│<---------- libp2p ------------>│  (Go daemon) │
└─────────────┘                               └──────────────┘
  • LAN -- agents discover each other via mDNS. Zero configuration.
  • WAN -- deploy a self-hosted relay and point agents to it.
  • The Go daemon is auto-downloaded and managed by the SDK. No manual setup.

Framework Adapters

Turn existing frameworks into P2P agents with one function call:

pip install agentanycast[crewai]         # CrewAI
pip install agentanycast[langgraph]      # LangGraph
pip install agentanycast[google-adk]     # Google ADK
pip install agentanycast[openai-agents]  # OpenAI Agents SDK
pip install agentanycast[claude]         # Claude Agent SDK
pip install agentanycast[strands]        # AWS Strands Agents
from agentanycast.adapters.crewai import serve_crew
from agentanycast.adapters.langgraph import serve_graph
from agentanycast.adapters.adk import serve_adk_agent
from agentanycast.adapters.openai_agents import serve_openai_agent
from agentanycast.adapters.claude_agent import serve_claude_agent
from agentanycast.adapters.strands import serve_strands_agent

await serve_crew(crew, card=card, relay="...")
await serve_graph(graph, card=card, relay="...")
await serve_adk_agent(agent, card=card, relay="...")
await serve_openai_agent(agent, card=card, relay="...")
await serve_claude_agent(prompt_template="...", card=card)
await serve_strands_agent(agent, card=card)

Skill Discovery

agents = await node.discover("translate")
agents = await node.discover("translate", tags={"lang": "fr"})

Interoperability

# W3C DID
from agentanycast.did import peer_id_to_did_key, did_key_to_peer_id
did = peer_id_to_did_key("12D3KooW...")      # "did:key:z6Mk..."
pid = did_key_to_peer_id("did:key:z6Mk...")  # "12D3KooW..."

# MCP Tool <-> A2A Skill mapping
from agentanycast.mcp import mcp_tools_to_agent_card
card = mcp_tools_to_agent_card(mcp_tools, name="MCPAgent")

# A2A v1.0 JSON format
from agentanycast.compat.a2a_v1 import task_to_a2a_json, task_from_a2a_json

# OASF / AGNTCY Directory
from agentanycast.compat.oasf import card_to_oasf_record
from agentanycast.compat.agntcy import AGNTCYDirectory

API Reference

Node

Method Description
Node(card, relay?, home?, ...) Create a node with an AgentCard and optional config
async with Node(...) as node Context manager -- starts/stops daemon automatically
send_task(peer_id?, skill?, url?, message=) Send a task using any addressing mode
discover(skill, tags?) Find agents by skill with optional tag filtering
on_task(handler) Register handler for incoming tasks
serve_forever() Block and process incoming tasks until stopped

Core Types

Class Description
AgentCard Agent identity, capabilities, and metadata
Skill A single capability an agent can perform
TaskHandle Returned by send_task(). Call wait() for the result.
IncomingTask Passed to task handlers. Provides message data and response methods.

Node Options

Parameter Description Default
card Agent's AgentCard Required
relay Relay multiaddr for cross-network communication None (LAN only)
daemon_path Path to a local agentanycastd binary Auto-download
daemon_addr Address of an externally managed daemon Auto-managed
key_path Path to Ed25519 identity key file <home>/key
home Data directory. Use different values for multiple nodes. ~/.agentanycast
status_callback Optional callback for progress messages (download, startup) None

Development

pip install -e ".[dev]"    # Install in editable mode with dev deps
pytest                     # Run all tests
ruff check .               # Lint
ruff format .              # Format
mypy src/                  # Type check (strict)

Requirements

  • Python 3.10+
  • The agentanycastd daemon (auto-managed by the SDK)

Part of AgentAnycast -- see the main repo for architecture docs, protocol reference, and examples.

License

Apache License, Version 2.0

Release files for agentanycast 0.7.3

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for agentanycast 0.7.3
File Size Uploaded
agentanycast-0.7.3.tar.gz 105.8 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for agentanycast 0.7.3
File Interpreter ABI Platform
agentanycast-0.7.3-py3-none-any.whl Python 3 none any Details

Total release size: 190.1 kB

Release files / agentanycast-0.7.3.tar.gz

Download URL agentanycast-0.7.3.tar.gz
Size 105.8 kB
Tags Source
SHA-256 checksum
How to use checksums
9790a2756710e8038312d88022ad37a8bf2f4b2d1257ffac05978305ac8cdcde
BLAKE2b-256 checksum
How to use checksums
ccca5270e14acb3e4bdf99191cd58042d7f44f042fd4062961bbec03e83c2767
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Mar 27, 2026.

Transparency log

Release files / agentanycast-0.7.3-py3-none-any.whl

Download URL agentanycast-0.7.3-py3-none-any.whl
Size 84.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
2d77a49c56df96f3da22920c47af247b34c531600a01d38f7313f00f015ca471
BLAKE2b-256 checksum
How to use checksums
3521b61b9b9893154f673fe108e71c8695f97119e48443ce9b3343bc16055b08
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Mar 27, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.7.3 This release

2 release files

0.7.2

2 release files

0.7.1

2 release files

0.7.0

2 release files

0.3.0

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page