Software & AI · 2026

Parley — A2A-First Python Framework for Multi-Agent AI Systems

Parley is a Python framework for building agent systems where A2A is the center of gravity, not an afterthought. Pluggable agents, swappable LLMs, tools, transports, and storage behind a small, stable API.

Parley agent framework

Overview

Most agent frameworks bolt communication on top of an internal graph, which means the moment you need two independent agents to talk you are fighting the framework. Parley inverts that: every agent is a complete runtime unit with its own card and capabilities, and the task-based A2A contract is the primary interface between them. That contract holds whether the agents run in one process or across a network.

The design is deliberately local-first and model-agnostic. One-action-at-a-time inference, schema validation, a JSON action fallback, and deterministic flows reduce reliance on hidden prompt behavior, which makes smaller self-hosted models viable. Tool calls, delegation, task state, policy decisions, approvals, runtime events, traces, and reports all have typed representations, so behavior is inspectable instead of implied.

Parley builds on ProtoLink by Nikolaos Maroulis, with a rebranded package and a redesigned developer dashboard; attribution is documented in the repository.

What it does

A2A at the core

The runtime is built on A2A primitives — AgentCard, Task, Message, Part, Artifact — so agents communicate through cards, tasks, and artifacts instead of framework-private graph state.

Agents as the composition surface

Each Agent is a complete runtime unit with its own card, capabilities, tools, and optional LLM. You compose behavior from agents rather than from opaque call chains.

Pluggable modules

Plug in only what an agent needs: an API or local LLM, RAG knowledge, built-in, native, or MCP tools, a transport, registry, storage and state, telemetry, auth, logging, policy, or durable run records.

LLM-agnostic and local-first

Provider-native tool calling is used when available, and a strict JSON action fallback keeps self-hosted models on Ollama, llama.cpp, LM Studio, or vLLM inside the same infer loop.

One runtime dependency

The base package depends only on Pydantic. HTTP servers, gRPC, hosted model SDKs, MCP, and telemetry providers install as extras, so a minimal install stays minimal.

Local to distributed

Develop with no network or provider, then move the same task contract onto HTTP, SSE JSON-RPC, WebSocket, or gRPC. Enable a2a=True for canonical A2A 1.0 JSON-RPC on the wire.

Tech stack

  • Python 3.10+
  • Pydantic
  • A2A 1.0
  • MCP
  • Ruff
  • MIT license

Why it matters

Agent systems become unmaintainable when the model, the tools, and the transport are all entangled in the same code. Keeping A2A types at the boundary means changing the model does not require rewriting the agent, its tools, or its communication layer — simple by default, explicit when it matters.