afps-spec

Agent Format Packaging Standard (AFPS)

AFPS v1.0

AFPS is an open specification for declaring portable AI workflow packages. It standardizes how agents, skills, tools, and providers are described, versioned, and distributed. It focuses on package definition and composition, not on tool calling or agent-to-agent transport.

Ecosystem Positioning

Existing AI agent standards define capabilities — what an agent can do and how it communicates. AFPS defines goals — what the agent should accomplish, packaged with everything it needs.

                ┌───────────────────────────────┐
  Goal          │  AFPS Agent                   │  "Process my inbox and
                │  prompt.md + manifest.json    │  summarize support requests"
                ├───────────────────────────────┤
  Capability    │  Skills (SKILL.md)            │  "Rewrite in a professional tone"
                │  Tools (source + manifest)    │  "Fetch JSON from a URL"
                │  MCP Tools                    │  "Read a file, query a database"
                ├───────────────────────────────┤
  Connection    │  Providers (OAuth2, API key)  │  "Gmail, OpenAI, Slack"
                ├───────────────────────────────┤
  Transport     │  MCP / A2A                    │  Runtime protocols
                └───────────────────────────────┘

An agent’s prompt.md is the equivalent of what a user would type to give an agent its objective. Skills and tools are the capabilities the agent draws on to reach that objective. Providers are the authenticated service connections. AFPS packages all of this into a portable, versioned .afps artifact (a standard ZIP file).

No existing standard covers the goal layer: structured workflow packages with dependency resolution, semantic versioning, provider auth metadata, and a distribution format. AFPS fills that gap.

Quick Start

Create a minimal agent package with two files:

manifest.json

{
  "name": "@my-org/hello-world",
  "version": "1.0.0",
  "type": "agent",
  "schemaVersion": "1.0",
  "displayName": "Hello World",
  "author": "My Org",
  "dependencies": {}
}

prompt.md

Summarize the latest unread emails and list any action items.

ZIP both files together (using the .afps extension by convention) — that’s a valid AFPS agent package. See examples/ for more, or read the primer for a guided introduction.

How an agent composes its dependencies

A real agent declares the skills, tools, and providers it needs:

                  ┌──────────────────────────────┐
                  │  @acme/customer-intake       │
                  │  type: agent                 │
                  │  prompt.md = the objective   │
                  └──────┬───────────────────────┘
                         │ dependencies
          ┌──────────────┼──────────────┐
          ▼              ▼              ▼
  ┌──────────────┐ ┌────────────┐ ┌────────────┐
  │ @acme/gmail  │ │ @acme/     │ │ @acme/     │
  │ provider     │ │ rewrite-   │ │ fetch-json │
  │ (OAuth2)     │ │ tone       │ │ tool       │
  │              │ │ skill      │ │            │
  └──────────────┘ └────────────┘ └────────────┘

The agent’s manifest lists these in a single dependencies field with semver ranges. See the full example.

Repository Contents

Scope

AFPS defines:

AFPS does not define:

Origin

AFPS was created by Appstrate and published as an independent open specification.

Implementations

See IMPLEMENTATIONS.md for known implementations.

Contributing

See GOVERNANCE.md for the change process. To propose a normative or editorial change, open an issue using the spec change template.

License

All content in this repository is licensed under CC-BY-4.0.