Agent definitions are executable blueprints decoupled from any specific runtime SDK. Define once in YAML, deploy across Agno, CrewAI, or OpenAI Agents with the same governance and lifecycle management.
Define agents as YAML specs following the Open Agentic Resource Specification
type: agent_definition
enabled: true
version: "0.1"
metadata:
display_name: Customer Support Agent
description: Handles support tickets
spec:
name: customer-support
engine: agno # or crewai, openai_agent
definition:
model: openai-gpt-4o
instructions: |
You are a customer support agent.
Be helpful, concise, and professional.
Never share internal policies.
tools:
- ticket-lookup
- knowledge-search
resources:
prompts:
- support-system-prompt
guardrails:
- pii-redaction
- jailbreak-defense
knowledge:
- product-docs
- faq-databaseTwo ways to deploy agents—both get full governance through the Controller
Add governance to your existing agent code with zero config
from agno import Agent
from ev_core import EV
# Your existing agent
agent = Agent(
model="gpt-4o",
instructions="You are a helpful assistant"
)
# Wrap with EV - policies auto-apply
executor = await EV.build_executor(agent)
# Guardrails run at every lifecycle hook
response = await executor.run(
task="Help me draft release notes"
)
# EV.build_executor() automatically:
# - Detects the framework (Agno, CrewAI, etc.)
# - Applies configured guardrails
# - Tracks lifecycle events for observabilityBuild agents from declarative YAML definitions
from ev_core import EV
from ev_core.control.operators.agents import (
AgentDefinitionOperationContext,
AgentDefinitionOperationType,
BuildAgentDefinitionParams,
)
# Load agent from YAML definition
executor = await EV.operate(
AgentDefinitionOperationContext(
operation=AgentDefinitionOperationType.BUILD,
params=BuildAgentDefinitionParams(
name="customer-support"
)
)
)
# Complete definition loaded from registry:
# - Prompts
# - Tools
# - Guardrails
# - Knowledge bases
response = await executor.run(task="Handle ticket #1234")When resources are attached to an agent, they define its operational boundaries. An agent can only access the MCP connectors, knowledge bases, and tools that are explicitly declared. This ensures deterministic, auditable behavior.
# This agent can ONLY:
# - Use the ticket-lookup tool
# - Search product-docs knowledge
# - Have PII redacted from I/O
spec:
name: support-agent
definition:
tools:
- ticket-lookup # ✓ allowed
# - admin-panel # ✗ not declared
resources:
knowledge:
- product-docs # ✓ searchable
# - hr-policies # ✗ not declared
guardrails:
- pii-redaction # ✓ enforcedResolvers translate declarative resources into runtime artifacts. Like Terraform providers, each engine has a resolver that builds the SDK agent.
Resolves to Agno Agent with tools, memory, and instructions
Resolves to CrewAI Agent with role, goal, and backstory
Resolves to OpenAI Agents SDK with function calling
Extend with custom resolvers by implementing ResolverProvider and calling register_resolver_provider()
Define agents declaratively, enforce policies automatically, deploy across any framework.
Explore Prompts