Skip to content

Home

Connect all the agents!

Key Features

🔌 ACP Integration

First-class support for the Agent Client Protocol (ACP):

  • Integrate directly into IDEs like Zed, VS Code, and others
  • Wrap external agents (Claude Code, Goose, Codex, fast-agent) as nodes
  • Unified node abstraction - ACP agents work like native agents
  • Compose ACP agents into teams with native agents

📝 Easy Agent Configuration

AgentPool excels at static YAML-based agent configuration:

  • Define agents with extreme detail in pure YAML (Pydantic-backed)
  • Expansive JSON schema for IDE autocompletion and validation, backed by an extremely detailed schema.
  • Multi-Agent setups with native as well as remote (ACP / AGUI) agents

🧩 Unified Node Architecture

Everything is a MessageNode - enabling seamless composition:

  • Native agents with a large set of default tools
  • ACP agents
  • AG-UI agents
  • Teams (parallel and sequential)
  • Human-in-the-loop-agents
  • All nodes share the same interface

Dependencies

Name Summary Marker
starlette The little ASGI library that shines. extra == "a2a"
docler Abstractions & Tools for OCR / document processing
pydocket A distributed background task system for Python functions
promptantic Generate pydantic models using prompts
pydantic-ai-slim Agent Framework / shim to use Pydantic with LLMs, slim package
epregistry A registry for entry points (cached and generically typed)
autoevals Universal library for evaluating AI models extra == "braintrust"
tree-sitter-cpp C++ grammar for tree-sitter extra == "coding"
mcpx-py An mcp.run client for Python extra == "mcp-run"
fastmcp The fast, Pythonic way to build MCP servers and clients.
fastapi FastAPI framework, high performance, easy to learn, fast to code, ready for production
logfire The best Python observability tool! 🪵🔥
copykitten A robust, dependency-free way to use the system clipboard in Python. extra == "clipboard"
rich Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal
upathtools UPath utilities
fastembed Fast, light, accurate library built for retrieval embedding generation python_full_version < "3.14" and extra == "mcp-discovery"
clawd-code-sdk Python SDK for Claude Code
composio SDK for integrating Composio with your applications. extra == "composio"
markitdown Utility tool for converting various files to Markdown python_full_version < "3.14" and extra == "markitdown"
toprompt Convert python objects to LLM-friendly descriptions
tree-sitter Python bindings to the Tree-sitter parsing library extra == "coding"
exxec Execution environments
pyarrow Python library for Apache Arrow python_full_version < "3.14" and extra == "mcp-discovery"
llmling-models Pydantic-AI models for AgentPool
jinjarope Jinja2 utilities, loaders & fsspec integration.
braintrust SDK for integrating Braintrust extra == "braintrust"
tree-sitter-c C grammar for tree-sitter extra == "coding"
keyring Store and access your passwords safely.
httpx The next generation HTTP client.
slashed Slash commands and autocompletions
yamling Enhanced YAML loading and dumping.
pydantic Data validation using Python type hints
anyvoice Common interface for streaming tts providers extra == "tts"
python-dotenv Read key-value pairs from a .env file and set them as environment variables
structlog Structured Logging for Python
grep-ast A tool to grep through the AST of a source file extra == "coding"
ast-grep-py Structural Search and Rewrite code at large scale using precise AST pattern. extra == "coding"
tree-sitter-python Python grammar for tree-sitter extra == "coding"
platformdirs A small Python package for determining appropriate platform-specific dirs, e.g. a user data dir.
tree-sitter-rust Rust grammar for tree-sitter extra == "coding"
tree-sitter-yaml YAML grammar for tree-sitter extra == "coding"
langfuse A client library for accessing langfuse extra == "langfuse"
apprise Push Notifications that work with just about every platform! extra == "notifications"
tiktoken tiktoken is a fast BPE tokeniser for use with OpenAI's models extra == "tiktoken"
schemez Pydantic shim for config stuff
tree-sitter-go Go grammar for tree-sitter extra == "coding"
tree-sitter-javascript JavaScript grammar for tree-sitter extra == "coding"
watchfiles Simple, modern and high performance file watching and code reload in python.
websockets An implementation of the WebSocket Protocol (RFC 6455 & 7692)
rustworkx A High-Performance Graph Library for Python extra == "coding"
tree-sitter-typescript TypeScript and TSX grammars for tree-sitter extra == "coding"
tokonomics Calcuate costs for LLM Usage based on token count
fsspec File-system specification
tree-sitter-json JSON grammar for tree-sitter extra == "coding"
Jinja2 A very fast and expressive template engine.
anyenv Compatibility layer for some basic operations to allow painless operation in PyOdide and Python pre-releases
sublime-search
docstring_parser Parse Python docstrings in reST, Google and Numpydoc format
mcp Model Context Protocol SDK
zstandard Zstandard bindings for Python extra == "zed"
psygnal Fast python callback/event system modeled after Qt Signals
pillow Python Imaging Library (Fork)
lancedb lancedb python_full_version < "3.14" and extra == "mcp-discovery"
fasta2a Convert an AI Agent into a A2A server! ✨ extra == "a2a"
SQLAlchemy Database Abstraction Library
searchly Search tools for agents
ag-ui-protocol extra == "ag-ui"
promptlayer PromptLayer is a platform for prompt engineering and tracks your LLM requests. extra == "promptlayer"
uvicorn The lightning-fast ASGI server.
ripgrep-rs A Python wrapper for ripgrep
sqlmodel SQLModel, SQL databases in Python, designed for simplicity, compatibility, and robustness.
evented Event emitters.
typer Typer, build great CLIs. Easy to code. Based on Python type hints.

License

MIT License - see LICENSE for details.

Quick Start

Basic Agent Configuration

# agents.yml
agents:
  assistant:
    display_name: "Technical Assistant"
    model: openai:gpt-4
    system_prompt: You are a helpful technical assistant.
    tools:
      - type: file_access

Python Usage

from agentpool import AgentPool

async def main():
    async with AgentPool("agents.yml") as pool:
        agent = pool.get_agent("assistant")
        response = await agent.run("What is Python?")
        print(response.data)

if __name__ == "__main__":
    import anyio
    anyio.run(main)