Skip to main content

Agent Workflow Protocol — an open standard for orchestrating multi-agent AI workflows with YAML definitions, DAG execution, and recursive delegation loops (A0-A4 autonomy)

Project description

AWP — Agent Workflow Protocol

The open standard for orchestrating multi-agent AI workflows.

Define workflows in YAML. Run them in Python. Scale from a single agent to recursive delegation loops — with built-in budgets, validation, and safety controls.

License: MIT Python 3.10+


Installation

pip install awp-agents

# With data science extras (pandas, numpy, Pillow)
pip install awp-agents[data]

# With data source extras (SQL, S3)
pip install awp-agents[sources-all]

# Everything
pip install awp-agents[all]

3 Lines to a Running Workflow

import os
os.environ["LLM_API_KEY"] = "sk-or-v1-..."
os.environ["LLM_BASE_URL"] = "https://openrouter.ai/api/v1"

from awp.data import AgentWorkflow

result = AgentWorkflow(
    inputs={"data": {"revenue": [100, 200, 150], "month": ["Jan", "Feb", "Mar"]}},
    task="Analyze the revenue trend and identify the peak month",
    model="openrouter/anthropic/claude-sonnet-4",
).run()

print(result["status"])     # "complete"
print(result["artifacts"])  # ["./output/chart.png", ...]

Works with any OpenAI-compatible API: OpenRouter (50+ models), OpenAI, Anthropic, Ollama (local, free), Azure, Bedrock.

What Happens Under the Hood

AgentWorkflow creates a delegation loop: a manager agent breaks your task into subtasks and spawns specialized worker agents. Workers execute Python code in sandboxes (pandas, matplotlib, sklearn, etc.), create files, and report results. The manager validates outputs, iterates until done, and returns everything in a single call.

Data Science Integration

Pass DataFrames, numpy arrays, images, and files directly — AWP handles serialization:

import pandas as pd
import numpy as np
from awp.data import AgentWorkflow

result = AgentWorkflow(
    inputs={
        "sales": pd.DataFrame({"date": [...], "revenue": [...], "region": [...]}),
        "embeddings": np.random.rand(1000, 768),
        "logo": "/path/to/logo.png",
        "config": {"target": "churn", "metric": "f1"},
    },
    task="EDA, feature engineering, train 3 models, select best, create report.",
    model="openrouter/anthropic/claude-sonnet-4",
    packages=["scikit-learn", "matplotlib", "seaborn"],
    output_dir="./results",
).run()

Supported Input Types

Python Type Processing
pd.DataFrame CSV + schema (shape, dtypes, describe)
np.ndarray .npy + schema (shape, dtype, statistics)
Image path (.png, .jpg, ...) Copy + PIL metadata (dimensions, mode)
File/directory path Copy to workspace
dict / list JSON export
str / int / float Inline in prompt
Source Resolved at runtime (see Data Sources)

Data Sources — Fetch External Data

Declare external data as inputs. AWP resolves them before the workflow starts:

from awp.data import AgentWorkflow, Source

result = AgentWorkflow(
    inputs={
        "api": Source.url("https://api.example.com/data.json",
                          headers={"Authorization": "Bearer $API_TOKEN"}),
        "db":  Source.sql("SELECT * FROM sales", dsn="sqlite:///data.db"),
        "s3":  Source.s3("s3://bucket/reports/q4.csv"),
        "logs": Source.glob("logs/**/*.json", root="/var/log/app"),
        "rest": Source.api("https://api.github.com/repos/user/repo",
                           jq=".stargazers_count"),
    },
    task="Cross-reference all data sources and produce a report.",
    model="openrouter/anthropic/claude-sonnet-4",
    secrets={"API_TOKEN": os.getenv("API_TOKEN", "")},
).run()

Sources: url, sql, s3, glob, api, base64, clipboard. All support caching, retries, and timeouts. Secret references ($SECRET_NAME) are substituted without exposing values to agents.

Custom Tools, Skills & Secrets

External Tools

Register your own Python functions, dict-based tools, or MCP servers:

from awp.data import AgentWorkflow, ExternalTool

@ExternalTool(name="finance.stock_price", secrets=["API_KEY"])
def get_stock_price(*, ticker: str, period: str = "1mo") -> dict:
    """Get stock price data."""
    import yfinance as yf
    return {"prices": yf.download(ticker, period=period).to_dict()}

# MCP server (auto-discovers tools via JSON-RPC)
mcp_tools = ExternalTool.from_mcp("http://localhost:8080/mcp")

result = AgentWorkflow(
    inputs={"tickers": ["AAPL", "MSFT"]},
    task="Compare stock performance.",
    model="openrouter/anthropic/claude-sonnet-4",
    external_tools=[get_stock_price, *mcp_tools],
    secrets={"API_KEY": os.getenv("API_KEY", "")},
).run()

Skills — Domain Knowledge

Inject Markdown-based domain knowledge. The manager selectively forwards relevant skills to workers:

result = AgentWorkflow(
    inputs={"data": df},
    task="Analyze according to internal methodology.",
    model="openrouter/anthropic/claude-sonnet-4",
    skills=["skills/methodology.md", "skills/domain/"],
).run()

Secrets

API keys injected into the tool registry. Agents never see the values:

secrets={"YFINANCE_API_KEY": "...", "SERP_API_KEY": "..."}

Runtime Tool & Skill Generation (A3+)

At autonomy level A3+, agents generate new tools and skills at runtime. The workflow author controls what's allowed via namespace capabilities:

dynamic_tools:
  enabled: true
  allowed_namespaces:
    - "scoring"                               # compute only (default)
    - name: "api_client"                      # grant network access
      capabilities: [compute, network]
      network_allowlist: ["api.example.com"]
    - name: "data_proc"                       # grant filesystem access
      capabilities: [compute, filesystem]
Capability Unlocks Always Denied
compute pandas, numpy, math, json, ... os, subprocess, sys, ctypes, importlib, signal, multiprocessing
network requests, httpx, urllib (same)
filesystem pathlib, glob, shutil (same)

Agents cannot grant themselves additional permissions. The "always denied" set is enforced regardless of capabilities or sandbox type.

Workflow Studio (Browser UI)

AWP includes a full browser-based UI for running and monitoring workflows in real time.

One-liner (works on Linux, macOS, and Windows):

pip install awp-agents && awp studio

If awp is not on your PATH after install, use:

pip install awp-agents && python -m awp studio

Opens at http://127.0.0.1:8420. Live WebSocket streaming, agent graph visualization, artifact gallery, session persistence, and settings management — all included.

Options: --port 9000, --no-open, --base-dir ./my-workflows, --dev.

YAML Workflows & CLI

Define agents in YAML, run with the CLI:

awp: "1.0"
workflow:
  name: research-pipeline
  version: "1.0.0"
  description: "3-agent research pipeline"

orchestration:
  graph:
    - id: planner
      agent: agents/planner
      share_output: [research_plan]
    - id: researcher
      agent: agents/researcher
      depends_on: [planner]
      share_output: [findings]
    - id: writer
      agent: agents/writer
      depends_on: [researcher]
awp studio                                     # Launch browser UI
awp validate my-workflow/                      # Validate (R1-R26)
awp compliance my-workflow/ --level A2         # Check autonomy level
awp visualize my-workflow/ --format mermaid    # Render DAG
awp run my-workflow/ --task "..."              # Execute

The Autonomy Spectrum (A0-A4)

Level Name Engine What's New
A0 Prescribed DAG Fixed pipeline, no LLM decisions
A1 Adaptive DAG Conditional execution, state sharing
A2 Delegating Delegation Loop Manager-worker with budget
A3 Self-Tooling Delegation Loop Runtime tool/skill creation + safety envelope
A4 Self-Organizing Recursive Delegation Sub-managers, full observability

Safety scales with autonomy: A2 requires budgets, A3 requires a safety envelope, A4 requires full observability. This is enforced by the validator.

Budget & Safety

Every delegation loop runs within a hard safety envelope:

budget:
  max_loops: 15
  max_total_workers: 20
  max_total_tokens: 500000
  max_wall_time: 300
  max_depth: 3

The manager cannot override these limits — they are enforced by the runtime.

The 7-Layer Model

AWP organizes agent configuration into 7 semantic layers:

  1. Manifest — Metadata, version, dependencies
  2. Identity — Agent name, role, model parameters
  3. Capabilities — Tools, skills, data sources, sandbox
  4. Communication — Message bus, channels
  5. Memory — 4-tier memory (working, episodic, semantic, procedural)
  6. Orchestration — DAG graph, delegation loop, budget
  7. Observability — Tracing, metrics, audit trail

Architecture

awp-agents
├── awp.models      — Pydantic models for all 7 layers
├── awp.parser      — YAML → typed Python objects
├── awp.validator   — Rule engine (R1-R26)
├── awp.runtime     — DAG engine + delegation loop + code executors
├── awp.data        — Programmatic API (AgentWorkflow, Source, ExternalTool)
├── awp.cli         — Command-line interface (incl. `awp studio`)
├── awp.packager    — .awp.zip archive support
├── awp.visualizer  — Mermaid DAG rendering
└── server          — Workflow Studio (FastAPI + React SPA)

Links

License

MIT License. See LICENSE.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

awp_agents-1.0.14.tar.gz (1.7 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

awp_agents-1.0.14-py3-none-any.whl (1.7 MB view details)

Uploaded Python 3

File details

Details for the file awp_agents-1.0.14.tar.gz.

File metadata

  • Download URL: awp_agents-1.0.14.tar.gz
  • Upload date:
  • Size: 1.7 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.5

File hashes

Hashes for awp_agents-1.0.14.tar.gz
Algorithm Hash digest
SHA256 1c4fc794179009d6d4feee58cf8dbc6998725304cfe0b088b4575ec3a78dfcd4
MD5 a477f9e458435c2229098ae2579f8cb7
BLAKE2b-256 1e3649edf8af7d22503fe6c2facf3609c4760ebd5e138e6e94875b638c1b76c2

See more details on using hashes here.

File details

Details for the file awp_agents-1.0.14-py3-none-any.whl.

File metadata

  • Download URL: awp_agents-1.0.14-py3-none-any.whl
  • Upload date:
  • Size: 1.7 MB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.5

File hashes

Hashes for awp_agents-1.0.14-py3-none-any.whl
Algorithm Hash digest
SHA256 1389e97f78b46e0c099b71f50c7e846b2ff65ce1682cb78540b055b3d4a33fcd
MD5 05c091f40615e05c8dd6af9864703eb2
BLAKE2b-256 e3dca6d8902f1f2a54dcc1a0c8d4837ff2461c871002a0c72908325d9d0741c7

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page