Observed since 20 Oct, 23:17 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
Declarative Agent Schema
A Python SDK for working with AgentSchema - a declarative specification for defining AI agents in a code-first YAML format. This SDK provides strongly-typed Python classes for loading, manipulating, and saving agent definitions.
pip install agentschema
import yaml
from agentschema.core import AgentDefinition, LoadContext
# Load from a YAML file
with open("my_agent.yaml", "r") as f:
data = yaml.safe_load(f)
agent = AgentDefinition.load(data)
print(f"Agent: {agent.name}")
print(f"Description: {agent.description}")
print(f"Kind: {agent.kind}")
from agentschema.core import (
PromptAgent,
Model,
FunctionTool,
PropertySchema,
Property,
SaveContext,
)
# Create a simple prompt-based agent
agent = PromptAgent(
name="my-assistant",
description="A helpful assistant that can answer questions",
model=Model(
name="gpt-4o",
),
instructions="You are a helpful assistant. Answer questions clearly and concisely.",
tools=[
FunctionTool(
name="get_weather",
description="Get the current weather for a location",
),
],
inputSchema=PropertySchema(
properties={
"question": Property(
type="string",
description="The user's question",
),
},
),
)
# Save to YAML
yaml_output = agent.to_yaml()
print(yaml_output)
# Save to JSON
json_output = agent.to_json()
print(json_output)
AgentSchema supports multiple agent types:
A straightforward agent that uses a language model with optional tools:
from agentschema.core import PromptAgent, Model
agent = PromptAgent(
name="chat-agent",
kind="prompt",
model=Model(name="gpt-4o"),
instructions="You are a helpful assistant.",
)
An agent that runs in a container with custom logic:
from agentschema.core import ContainerAgent
agent = ContainerAgent(
name="custom-agent",
kind="hosted",
endpoint="https://my-agent.azurewebsites.net",
)
Agents can use various tool types:
from agentschema.core import FunctionTool
tool = FunctionTool(
name="search",
description="Search for information",
)
from agentschema.core import OpenApiTool, RemoteConnection
tool = OpenApiTool(
name="weather_api",
description="Get weather information",
specification="./weather.openapi.json",
connection=RemoteConnection(
name="weather_connection",
endpoint="https://api.weather.com",
),
)
from agentschema.core import McpTool
tool = McpTool(
name="filesystem",
description="Access filesystem operations",
command="npx",
args=["-y", "@modelcontextprotocol/server-filesystem", "/path/to/dir"],
)
from agentschema.core import CodeInterpreterTool
tool = CodeInterpreterTool(
name="code_interpreter",
description="Execute Python code",
)
from agentschema.core import FileSearchTool
tool = FileSearchTool(
name="file_search",
description="Search through documents",
)
Define how tools connect to external services:
from agentschema.core import (
ReferenceConnection,
RemoteConnection,
ApiKeyConnection,
AnonymousConnection,
)
# Reference an existing connection by name
ref_conn = ReferenceConnection(name="my-existing-connection")
# Remote endpoint connection
remote_conn = RemoteConnection(
name="api-connection",
endpoint="https://api.example.com",
)
# API key authentication
api_key_conn = ApiKeyConnection(
name="secure-connection",
endpoint="https://api.example.com",
key="${API_KEY}", # Environment variable reference
)
# Anonymous (no auth) connection
anon_conn = AnonymousConnection(
name="public-connection",
endpoint="https://public-api.example.com",
)
Customize how data is loaded with pre/post processing hooks:
from agentschema.core import AgentDefinition, LoadContext
def preprocess(data):
# Transform data before parsing
data["name"] = data.get("name", "").lower()
return data
def postprocess(agent):
# Transform agent after instantiation
print(f"Loaded agent: {agent.name}")
return agent
context = LoadContext(
pre_process=preprocess,
post_process=postprocess,
)
agent = AgentDefinition.load(data, context)
Control serialization format and behavior:
from agentschema.core import SaveContext
# Default: collections as objects with name as key
context = SaveContext(
collection_format="object", # or "array" for list format
use_shorthand=True, # Use compact representations when possible
)
yaml_output = agent.to_yaml(context)
Collection formats:
"object" (default): Collections use the item's name as the key
tools:
my_tool:
kind: function
description: A tool
"array": Collections are lists of objects
tools:
- name: my_tool
kind: function
description: A tool
import yaml
from agentschema.core import AgentDefinition
with open("agent.yaml", "r") as f:
data = yaml.safe_load(f)
agent = AgentDefinition.load(data)
yaml_content = agent.to_yaml()
with open("agent_output.yaml", "w") as f:
f.write(yaml_content)
Here's a complete example of a travel assistant agent:
from agentschema.core import (
PromptAgent,
Model,
FunctionTool,
OpenApiTool,
RemoteConnection,
PropertySchema,
Property,
)
agent = PromptAgent(
name="travel-assistant",
description="A travel assistant that helps plan trips",
metadata={
"tags": ["travel", "assistant"],
"authors": ["your-name"],
},
model=Model(name="gpt-4o"),
tools=[
FunctionTool(
name="get_travel_info",
description="Get basic travel information",
),
OpenApiTool(
name="tripadvisor",
description="Get travel recommendations from TripAdvisor",
specification="./tripadvisor.openapi.json",
connection=RemoteConnection(
name="tripadvisor_connection",
endpoint="https://api.tripadvisor.com",
),
),
],
inputSchema=PropertySchema(
properties={
"destination": Property(
type="string",
description="The travel destination",
),
"duration": Property(
type="integer",
description="Trip duration in days",
),
},
),
instructions="""You are a knowledgeable travel assistant.
Help users plan their trips by providing recommendations for:
- Attractions and activities
- Restaurants and dining
- Hotels and accommodations
- Local tips and customs
Always provide specific, actionable recommendations.""",
)
# Output as YAML
print(agent.to_yaml())
This package includes type stubs (py.typed) for full IDE support with type checking. All classes are fully typed using Python's type hints.
For more information about the AgentSchema specification, visit:
We welcome contributions! Please see the main repository for contribution guidelines.
This project is licensed under the MIT License - see the LICENSE file for details.
Download counts and popularity will appear here as the collector receives them.
| Version | Published | Direct dependencies | Open version |
|---|---|---|---|
| 1.0.0b8 | 23 Mar 2026 | 12 |
This describes our collected data; it is not a security assessment.
Observed since 20 Oct, 23:17 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
package:0dabacb6d702092cde34a9e3be5bae9e2ddceb62ab2163d44f2b6c8717c2c510