PydanticAI-based multi-agent orchestration framework β define heterogeneous agents in one YAML file, compose them into teams and workflows, and expose them through ACP, OpenCode, MCP, and AG-UI protocols.
Documentation Β· Getting Started Β· API Reference
With raw frameworks, you write glue code for every agent pair β at 1Γ speed.
With WolfHarness, you define agents once in YAML and use them everywhere β at 10Γ.
Define your agents once in YAML. Then expose them through any protocol β ACP for IDEs, OpenCode for agentic TUI, MCP for tool exposure, or AG-UI for web frontends. No glue code, no duplication.
# agents.yml β single source of truth
agents:
coordinator:
type: native
model: openai:gpt-4o
tools:
- type: subagent # Can delegate to all other agents
system_prompt: "Coordinate tasks between available agents."
goose:
type: acp
provider: goose
description: "Goose for file operations"# Serve the same config through any protocol
wolfharness serve-acp agents.yml # Zed, Toad, ACP clients
wolfharness serve-opencode agents.yml # OpenCode TUI/Desktop
wolfharness serve-mcp agents.yml # MCP tools for other agentsAgents form teams (parallel), chains (sequential), or complex workflows β all from YAML.
teams:
review_pipeline:
mode: sequential
members: [analyzer, reviewer, formatter]
parallel_coders:
mode: parallel
members: [claude, goose]async with AgentPool("agents.yml") as pool:
# Parallel execution
results = await (analyzer & reviewer).run("Review this code")
# Sequential pipeline
result = await (analyzer | reviewer | formatter).run("Process this")Everything is configurable β models, tools, MCP servers, knowledge sources, triggers, connections, storage:
agents:
analyzer:
type: native
model:
type: fallback
models: [openai:gpt-4o, anthropic:claude-sonnet-4-0]
tools:
- type: subagent
- type: resource_access
mcp_servers:
- "uvx mcp-server-filesystem"
knowledge:
paths: ["docs/**/*.md"]
connections:
- type: node
name: reporter
filter_condition:
type: word_match
words: [error, warning]| Category | Features |
|---|---|
| Orchestration | Teams (parallel), chains (sequential), inter-agent delegation, event-driven triggers |
| Protocols | ACP, OpenCode, MCP, AG-UI, OpenAI API-compatible β one config, all protocols |
| Configuration | YAML-based agent definition, fallback models, tool registration, MCP server integration |
| Skills | Expose SKILLS.md files as slash commands across all protocols |
| Structured Output | Inline Pydantic schemas or Python types for response validation |
| Storage & Analytics | Configurable providers (SQLite, PostgreSQL) for interaction tracking and stats |
| File Abstraction | UPath-backed operations on local, S3, SSH, Docker filesystems |
| Streaming TTS | Voice output support for all agents |
| Observability | Logfire instrumentation on critical paths (RunLoop, Turn, delegation, protocol entry points) |
WolfHarness is built on PydanticAI and supports all its model providers:
| Provider | Models |
|---|---|
| OpenAI | GPT-4o, GPT-4o-mini, o1, o3, etc. |
| Anthropic | Claude Sonnet 4, Claude Opus 4, Claude Haiku 3.5, etc. |
| Gemini 2.5 Pro, Gemini 2.5 Flash, etc. | |
| DeepSeek | DeepSeek V4, DeepSeek R1, etc. |
| Mistral | Mistral Large, Mistral Small, etc. |
| Groq | Llama, Mixtral, etc. (fast inference) |
| OpenAI-compatible | Any OpenAI-protocol endpoint (vLLM, Ollama, Azure, etc.) |
All models support fallback chains β configure a primary and fallback, WolfHarness handles the failover:
model:
type: fallback
models: [openai:gpt-4o, anthropic:claude-sonnet-4-0]# Recommended β uv
uv tool install wolfharness
# Or pip
pip install wolfharness# agents.yml
agents:
assistant:
type: native
model: openai:gpt-4o
system_prompt: "You are a helpful assistant."wolfharness run assistant "Hello!"# ACP server β for Zed, Toad, and other ACP clients
wolfharness serve-acp agents.yml
# OpenCode server β for OpenCode TUI/Desktop
wolfharness serve-opencode agents.yml
# MCP server β expose tools to other agents
wolfharness serve-mcp agents.ymlfrom wolfharness import AgentPool
from pathlib import Path
async with AgentPool("agents.yml") as pool:
agent = pool.get_agent("assistant")
# Simple run
result = await agent.run("Hello")
# Streaming
async for event in agent.run_stream("Tell me a story"):
print(event)
# Multi-modal
result = await agent.run("Describe this", Path("image.jpg"))wolfharness run <name> "prompt" # Single run
wolfharness serve-acp <config.yml> # ACP server
wolfharness serve-opencode <config.yml> # OpenCode server
wolfharness serve-mcp <config.yml> # MCP server
wolfharness serve-agui <config.yml> # AG-UI server
wolfharness serve-api <config.yml> # OpenAI-compatible API
wolfharness watch --config <agents.yml> # React to triggers
wolfharness history stats --group-by model # View analytics
wolfharness task <agent_name> "description" # Create a background task| Status | Feature |
|---|---|
| β | v2.9.5 β Multi-protocol server (ACP, OpenCode, MCP, AG-UI, OpenAI API) |
| β | YAML-based agent configuration with fallback models |
| β | Teams (parallel) & chains (sequential) orchestration |
| β | Skill commands across all protocols |
| β | Storage & analytics (SQLite, PostgreSQL) |
| β | MCP server integration for agents |
| π | Enhanced tool confirmation UI in ACP |
| π | Remote filesystem abstraction (UPath) |
| π | Team-mode (dynamic LLM-driven team formation) |
| π | Agent evaluation & benchmarking framework |
| π | Lifecycle hooks system (M2) |
| π | Capability discovery protocol (M3) |
git clone https://github.com/wolf1069b/agentpool
cd agentpool
uv sync --all-extrasuv run pytest # Run tests
uv run pytest -m unit # Unit tests only
uv run ruff check src/ # Lint
uv run ruff format src/ # Format
uv run --no-group docs mypy src/ # Type check
duty lint # All checksThis project uses OpenSpec for all significant changes:
/opsx:explore β Investigate problems, map codebase
/opsx:propose β Create proposal with design + specs + tasks
/opsx:apply β Implement tasks
/opsx:archive β Archive completed change
See AGENTS.md for full development setup, code style, and testing conventions. See CONTRIBUTING.md for contribution guidelines.
Full docs, tutorials, and API reference at leoyzen.github.io/wolfharness.
Thanks to everyone who has contributed to WolfHarness!
Key contributors: Philipp Temminghoff (original author), Leoyzen (maintainer), Million, yankaifeng, tasia, and the broader iroot-llm team.
If you use WolfHarness in your research or project, please cite:
@software{wolfharness2025,
author = {{WolfHarness Contributors}},
title = {WolfHarness: PydanticAI-based Multi-Agent Orchestration Framework},
year = {2025},
url = {https://github.com/wolf1069b/agentpool},
license = {MIT}
}This project was renamed from AgentPool to WolfHarness (v2.10+). Backward-compatible shims are in place to ease the transition:
| Old | New | Status |
|---|---|---|
import agentpool |
import wolfharness |
β Shim with deprecation warning |
import agentpool_cli |
import wolfharness_cli |
β Shim with deprecation warning |
import agentpool_config |
import wolfharness_config |
β Shim with deprecation warning |
import agentpool_server |
import wolfharness_server |
β Shim with deprecation warning |
import agentpool_storage |
import wolfharness_storage |
β Shim with deprecation warning |
import agentpool_toolsets |
import wolfharness_toolsets |
β Shim with deprecation warning |
agentpool run ... |
wolfharness run ... |
β CLI alias with deprecation warning |
AGENTPOOL_CONFIG_DIR env var |
WOLFHARNESS_CONFIG_DIR |
The shims emit a DeprecationWarning and will be removed in a future release. Please update your imports and scripts accordingly.
MIT β see LICENSE.
Built on Β PydanticAI Β· ACP Β· OpenCode Β· MCP
WolfHarness is a fork of phil65/agentpool by Philipp Temminghoff. Grateful for the foundational work and ongoing inspiration from the upstream project.

