Implementing Agent Protocol
Build a Compliant Agent in Minutes
For Agent Developers
Option 1: Use the Official SDK (Recommended)
The Agent Protocol SDK handles all API infrastructure, letting you focus solely on your agent’s logic.
Python Implementation:
python
from agent_protocol import Agent, Task, Step # Define your agent logic async def task_handler(task: Task) -> None: # Your agent's task execution logic print(f"Executing task: {task.input}") async def step_handler(step: Step) -> Step: # Your agent's step execution logic step.output = "Step completed successfully" return step # Create agent with the protocol agent = Agent(task_handler=task_handler, step_handler=step_handler) # Start the server if __name__ == "__main__": agent.start(port=8000) Installation:
bash
pip install agent-protocol JavaScript/TypeScript Implementation:
typescript
import { Agent } from 'agent-protocol'; const agent = new Agent({ taskHandler: async (task) => { // Your task logic }, stepHandler: async (step) => { // Your step logic return step; } }); agent.start(8000); Installation:
bash
npm install agent-protocol Option 2: Implement the API Manually
If you prefer full control, you can implement the REST API directly using any web framework.
Example with FastAPI (Python):
python
from fastapi import FastAPI, HTTPException from pydantic import BaseModel from typing import List, Optional import uuid app = FastAPI() # Data models class TaskInput(BaseModel): input: str additional_input: Optional[dict] = None class Task(BaseModel): task_id: str input: str artifacts: List[str] = [] class Step(BaseModel): step_id: str task_id: str name: str status: str output: str is_last: bool = False # In-memory storage (use database in production) tasks = {} steps = {} @app.post("/ap/v1/agent/tasks", response_model=Task) async def create_task(task_input: TaskInput): task_id = str(uuid.uuid4()) task = Task( task_id=task_id, input=task_input.input, artifacts=[] ) tasks[task_id] = task return task @app.post("/ap/v1/agent/tasks/{task_id}/steps", response_model=Step) async def execute_step(task_id: str): if task_id not in tasks: raise HTTPException(status_code=404, detail="Task not found") # Your agent logic here step_id = str(uuid.uuid4()) step = Step( step_id=step_id, task_id=task_id, name="Agent Step", status="completed", output="Step result", is_last=False ) steps[step_id] = step return step # Add other endpoints... View Complete Implementation Examples →
For Agent Users (Integration)
Using the Client Library:
python
from agent_protocol_client import AgentApi, ApiClient, Configuration # Configure client config = Configuration(host="http://localhost:8000") client = ApiClient(configuration=config) agent = AgentApi(client) # Create a task task_input = {"input": "Write a Python script to analyze CSV data"} task = agent.create_agent_task(body=task_input) print(f"Task created: {task.task_id}") # Execute steps until completion while True: step = agent.execute_agent_task_step(task_id=task.task_id) print(f"Step output: {step.output}") if step.is_last: break print("Task completed!") Client Libraries Available:
- Python:
pip install agent-protocol-client - JavaScript/TypeScript:
npm install agent-protocol-client - Go: Coming soon
- Rust: Coming soon
Testing Your Implementation
1. Start your agent:
bash
python your_agent.py # Agent running on http://localhost:8000 2. Test with curl:
bash
# Create a task curl -X POST http://localhost:8000/ap/v1/agent/tasks \ -H "Content-Type: application/json" \ -d '{"input": "Hello, agent!"}' # Execute a step curl -X POST http://localhost:8000/ap/v1/agent/tasks/TASK_ID/steps 3. Use benchmarking tools:
bash
# Install AutoGPT's benchmark pip install agbenchmark # Run against your agent agbenchmark --test=your_agent_url Best Practices
1. Stateless Design
- Store task/step data in a database, not in memory
- Enable horizontal scaling
2. Async Operations
- Use async/await for step execution
- Don’t block the API during long-running operations
3. Error Handling
- Return meaningful error messages
- Use appropriate HTTP status codes
4. Artifact Management
- Store large files externally (S3, etc.)
- Return URIs instead of embedding data
5. Documentation
- Document your agent’s capabilities
- Provide usage examples
