OpenAgent Specification

v1.0.0-draft

The universal manifest format for AI agents.

Overview

OpenAgent defines a universal manifest format (agent.yaml) for describing AI agents — their identity, persona, capabilities, experience, and marketplace metadata. It is framework-agnostic: any runtime (OpenClaw, LangChain, CrewAI, AutoGen, custom) can load and execute an OpenAgent-compliant agent.

Design Principles

  1. Agents are operators, not tools. Frameworks are interchangeable; the agent's persona + accumulated experience is the real value.
  2. YAML-first. Human-readable, supports comments, embeds markdown naturally.
  3. Declarative, not imperative. The manifest describes what an agent is, not how to run it.
  4. Progressive complexity. Only id, name, version, description, and persona are required. Everything else is optional.
  5. Experience as moat. Agents accumulate sanitized experience packs over time, creating compounding value.

File Format

  • Filename: agent.yaml (canonical) or agent.yml
  • Encoding: UTF-8
  • Schema: JSON Schema Draft 2020-12

Required Fields

FieldTypeDescription
idstringUnique identifier. Lowercase alphanumeric, dots, hyphens, underscores. 2-64 chars. Pattern: ^[a-z0-9][a-z0-9._-]{0,62}[a-z0-9]$
namestringDisplay name. 1-64 chars.
versionstringSemantic version. Pattern: ^\d+\.\d+\.\d+(-[a-zA-Z0-9.]+)?$
descriptionstringOne-line description. 1-500 chars.
personaobjectAgent personality definition. See Persona.

Minimal Example

id: "code-reviewer"
name: "CodeBot"
version: "1.0.0"
description: "Automated code review assistant"
persona:
  style: "precise and constructive"
  tone: "professional, encouraging"

Optional Fields

FieldTypeDescription
emojistringSignature emoji (max 8 chars).
avatarstringWorkspace-relative path, http(s) URL, or data: URI.
authorstringAuthor identifier (username or org).
licensestringSPDX license identifier or "proprietary".
homepagestringProject homepage URL.
repositorystringSource repository URL.
skillsarraySkills this agent uses. See Skills.
adaptersobjectFramework compatibility. See Adapters.
modelobjectModel requirements. See Model Requirements.
experienceobjectExperience index. See Experience.
collaborationobjectMulti-agent capabilities. See Collaboration.
runtimeobjectRuntime requirements. See Runtime Requirements.
marketplaceobjectMarketplace metadata. See Marketplace.

Persona

Defines the agent's personality, communication style, and behavioral principles.

FieldTypeRequiredDescription
stylestringPersonality style (e.g. "INTJ, logic-driven, code-first").
tonestringCommunication tone (e.g. "concise and technical").
languagestring[]BCP-47 language codes (e.g. ["zh", "en"]).
principlesstring[]Behavioral principles the agent follows.
persona:
  style: "INTJ,逻辑驱动,代码说话"
  language: ["zh", "en"]
  tone: "简洁技术流,不废话"
  principles:
    - "代码要可执行、可验证、可回滚"
    - "不给半成品,交付完整方案"
    - "优先使用已有轮子"

Skills

References to reusable skill packages. Skills define how to use specific tools or perform specific tasks.

FieldTypeRequiredDescription
namestringSkill name.
versionstringSemver range (e.g. "^1.0").
skills:
  - name: "coding-agent"
    version: "^1.0"
  - name: "github"
    version: "^1.0"
  - name: "healthcheck"

Adapters

Declares compatibility with frameworks, tools, sub-agents, and external services.

adapters.frameworks

Which agent frameworks/runtimes can run this agent.

FieldTypeRequiredDescription
namestringFramework name (e.g. "openclaw", "langchain", "crewai").
versionstringVersion constraint.
nativebooleantrue if natively supported.
adapterstringPath to adapter config.

adapters.tools

Three-tier tool requirements:

TierDescription
requiredAgent cannot function without these.
recommendedSignificantly improves capability.
optionalUse if available.

Each tool:

FieldTypeRequiredDescription
namestringTool name.
reasonstringWhy this tool is needed.

adapters.agent_apps

Sub-agent tools that can be invoked (e.g. Claude Code, Codex).

FieldTypeRequiredDescription
namestringAgent app name.
rolestringWhat role this fills (e.g. "coding").
requiredbooleanWhether mandatory. Default false.
alternativesstring[]Apps that can substitute.

adapters.services

External service dependencies.

FieldTypeRequiredDescription
namestringService name.
typestring"api", "runtime", "database", or "storage".
versionstringVersion constraint.
authstringAuthentication method.
adapters:
  frameworks:
    - name: "openclaw"
      version: ">=1.0"
      native: true
    - name: "claude-code"
      native: true

  tools:
    required:
      - name: "exec"
        reason: "Execute shell commands"
      - name: "read"
      - name: "write"
    recommended:
      - name: "web_search"
        reason: "Documentation lookup"
    optional:
      - name: "browser"

  agent_apps:
    - name: "claude-code"
      role: "coding"
      required: false
      alternatives: ["codex", "aider"]

  services:
    - name: "github"
      type: "api"
      auth: "gh cli / PAT"
    - name: "docker"
      type: "runtime"
      version: ">=20.0"

Model Requirements

Specifies LLM model requirements.

FieldTypeDescription
minimumstringMinimum model tier (e.g. "haiku", "sonnet").
recommendedstringRecommended model tier (e.g. "opus").
context_windowstringMinimum context window (e.g. "200k").
model:
  minimum: "sonnet"
  recommended: "opus"
  context_window: "200k"

Note: Model tiers are advisory. Runtimes map these to specific models (e.g. "sonnet"claude-sonnet-4-20250514).


Experience

Agents accumulate experience through sanitized experience packs. The manifest contains an index; full packs are stored separately.

FieldTypeDescription
levelstring"junior" | "mid" | "senior" | "expert"
packsintegerTotal number of experience packs.
domainsstring[]Domains of expertise.
highlightsarrayNotable experience entries.

Level Thresholds

EmojiLevelPacks
🌱junior1–10
🌿mid11–50
🌳senior51–200
expert200+

Experience Highlights

FieldTypeRequiredDescription
idstringExperience pack ID (pattern: ^exp-[a-z0-9-]+$).
summarystringOne-line summary (max 200 chars).
difficultystring"basic" | "intermediate" | "advanced" | "expert"
experience:
  level: "senior"
  packs: 47
  domains:
    - "Rust / Tokio / Axum"
    - "Pingora reverse proxy"
    - "WASM plugin system"
  highlights:
    - id: "exp-pingora-sse-001"
      summary: "SSE streaming downstream write blocked in reverse proxy"
      difficulty: "advanced"
    - id: "exp-wasm-abi-002"
      summary: "proxy-wasm ABI host implementation"
      difficulty: "expert"

Experience Pack Format

Full experience packs are stored as separate files (YAML or Markdown) in an experience/ directory.

FieldTypeRequiredDescription
idstringUnique ID (pattern: ^exp-[a-z0-9-]+$).
domainstringTechnology domain.
summarystringOne-line summary (max 200 chars).
detailstringFull experience in Markdown.
tagsstring[]Technology tags.
difficultystring"basic" | "intermediate" | "advanced" | "expert"
verifiedbooleanWhether human-reviewed.
accumulated_atstringISO 8601 date.
sourceobjectProvenance info.
sanitizationobjectSanitization metadata.

Sanitization Levels

Experience packs must be sanitized before publishing:

LevelMethodDescription
L1RegexAutomated PII removal (emails, IPs, paths, secrets, domains, repo URLs).
L2AILLM-assisted abstraction — generalize project-specific details into reusable patterns.
L3HumanAuthor review and approval.

Collaboration

Declares multi-agent interaction capabilities.

FieldTypeDefaultDescription
can_delegatebooleanfalseCan delegate tasks to other agents.
can_receivebooleantrueCan receive tasks from other agents.
protocolsstring[]Supported communication protocols.
collaboration:
  can_delegate: true
  can_receive: true
  protocols: ["openclaw/session"]

Runtime Requirements

System-level requirements for running the agent.

FieldTypeDescription
platformstring[]Supported platforms (e.g. ["darwin", "linux"]).
dependenciesstring[]System dependencies (e.g. "rust >= 1.75").
sandboxstring"required" | "recommended" | "optional" (default: "recommended").
runtime:
  platform: ["darwin", "linux"]
  dependencies:
    - "rust >= 1.75"
    - "gh cli"
  sandbox: "recommended"

Marketplace

Metadata for marketplace listing, search, and billing.

marketplace.pricing

FieldTypeDescription
modelstring"free" | "one-time" | "subscription" | "usage"
basestringBase price (e.g. "$15/month").
trialintegerNumber of free trial runs.

marketplace.stats

Platform-managed, read-only for authors:

FieldTypeDescription
usersintegerActive users.
ratingnumber0-5 rating.
tasks_completedintegerTotal tasks completed.
marketplace:
  category: "development"
  tags: ["rust", "proxy", "networking"]
  pricing:
    model: "subscription"
    base: "$15/month"
    trial: 10

Agent Directory Structure

my-agent/
├── agent.yaml              # Manifest (this spec)
├── SOUL.md                 # Full persona (for rendering)
├── AGENTS.md               # Working instructions
├── IDENTITY.md             # Identity details
├── experience/             # Experience packs
│   ├── index.yaml
│   ├── exp-problem-001.md
│   └── exp-solution-002.yaml
├── skills/                 # Bundled skills (if any)
├── avatars/
│   └── avatar.png
└── README.md               # Marketplace display page

Registry

Agents are distributed via Git-based registries (similar to Homebrew taps).

Registry Structure

registry-repo/
├── agents/
│   ├── agent-one/
│   │   ├── agent.yaml
│   │   ├── SOUL.md
│   │   └── experience/
│   ├── agent-two/
│   │   └── ...
│   └── ...
├── index.json              # Auto-generated search index
├── README.md
└── .github/workflows/
    └── validate.yml        # CI: validate agent.yaml on PRs

Operations

CommandDescription
install <id>Download agent from registry
search <query>Search agents by name, tags, domain
validate <path>Validate an agent.yaml file
publish <path>Submit agent to a registry (via PR)

JSON Schema

The canonical JSON Schema is available at:

Experience pack schema:


Compatibility

agent.yaml is designed to be backward-compatible with existing workspace formats:

  • An OpenClaw workspace with SOUL.md + AGENTS.md works without agent.yaml.
  • Adding agent.yaml enables marketplace features (publishing, search, billing).
  • Runtimes that don't understand agent.yaml simply ignore it.

Full Example

id: "rust-proxy-expert"
name: "锈刃"
version: "1.0.0"
description: "Rust reverse proxy and high-performance networking expert"
emoji: "⚙️"
avatar: "avatars/rust-blade.png"
author: "zoe"
license: "MIT"
homepage: "https://openagent.dev/agents/rust-proxy-expert"
repository: "https://github.com/openagent/registry"

persona:
  style: "INTJ, logic-driven, code-first"
  language: ["zh", "en"]
  tone: "concise and technical"
  principles:
    - "Code must be executable, verifiable, and rollback-safe"
    - "No half-baked deliverables — ship complete solutions"
    - "Prefer existing wheels over reinvention"

skills:
  - name: "coding-agent"
    version: "^1.0"
  - name: "github"
    version: "^1.0"

adapters:
  frameworks:
    - name: "openclaw"
      version: ">=1.0"
      native: true
    - name: "claude-code"
      native: true
  tools:
    required:
      - name: "exec"
        reason: "Shell commands, compilation, testing"
      - name: "read"
      - name: "write"
      - name: "edit"
    recommended:
      - name: "web_search"
        reason: "Documentation and troubleshooting"
  agent_apps:
    - name: "claude-code"
      role: "coding"
      alternatives: ["codex", "aider"]
  services:
    - name: "github"
      type: "api"

model:
  minimum: "sonnet"
  recommended: "opus"
  context_window: "200k"

experience:
  level: "senior"
  packs: 47
  domains:
    - "Rust / Tokio / Axum"
    - "Pingora reverse proxy"
    - "WASM plugin system"
  highlights:
    - id: "exp-pingora-sse-001"
      summary: "SSE streaming downstream write blocked in reverse proxy"
      difficulty: "advanced"
    - id: "exp-wasm-abi-002"
      summary: "proxy-wasm ABI host implementation"
      difficulty: "expert"

collaboration:
  can_delegate: true
  can_receive: true
  protocols: ["openclaw/session"]

runtime:
  platform: ["darwin", "linux"]
  dependencies:
    - "rust >= 1.75"
    - "gh cli"
  sandbox: "recommended"

marketplace:
  category: "development"
  tags: ["rust", "proxy", "networking", "backend", "systems"]
  pricing:
    model: "subscription"
    base: "$15/month"
    trial: 10

License

This specification is released under CC BY 4.0.

Contributing

Issues and PRs welcome at github.com/openagent/spec.