Skip to main content

Bundle

A bundle is a portable, self-describing collection of Common Agent resources encoded as a multi-document YAML file. Bundles are the standard format for distributing and importing agents, tools, and schedules.

Documents within a bundle are separated by ---.

Format​

The optional first document is a Bundle Descriptor with kind: commonagents.info/v1/bundledescription. All subsequent documents are resource manifests.

kind: "commonagents.info/v1/bundledescription"
name: "My Agent Bundle"
description: |
# My Agent Bundle
A collection of agents and tools for common workflows.
author: "Acme Corp"
version: "1.0.0"
url: "https://github.com/acme/agents"
templateVariables:
- name: "owner"
description: "GitHub organisation or user"
required: true
- name: "default_branch"
description: "Branch to operate on"
default: "main"
---
kind: "commonagents.info/v1/agent"
name: "coder_agent"
description: "An autonomous software engineering agent."
prompt: |
You are an expert software engineer...
capabilities:
github_file: "*"
---
kind: "commonagents.info/v1/tool"
name: "github_file"
description: "Reads and writes files in a GitHub repository."
stateless_http:
base_url: "https://api.github.com/repos/{template.owner}/project/{template.default_branch}"

Bundle Descriptor​

If a descriptor document is present, the runtime treats it as bundle metadata and requires it to be the first document.

FieldTypeRequiredDescription
kindstring✅Identifies this document as a bundle descriptor. A value other than "commonagents.info/v1/bundledescription" is not defined by this specification
namestring✅Display name of the bundle
descriptionstringMarkdown description of the bundle
authorstringWho created or maintains the bundle
versionstringSemver version string
urlstringLink to the bundle homepage or repository
templateVariablesTemplateVariable[]Parameters the bundle collects from the user and substitutes into its resource documents at import time

Template Variables​

A bundle may parameterise its resource documents with template variables. Each variable is declared in the descriptor's templateVariables list and referenced from any resource document with a {template.<name>} token. When the bundle is imported, the runtime collects a value for each variable and substitutes it into the documents before they are stored — no {template.<name>} token survives into the persisted resource.

Template variables are for non-secret configuration only (organisation, repository, region, base URL). Secrets are provided through connections, not template variables.

Each TemplateVariable has the following fields:

FieldTypeRequiredDescription
namestring✅The variable identifier, referenced as {template.<name>}
descriptionstringHelp text shown to the user when collecting a value
defaultstringValue used when the user provides none
requiredboolWhen true, the import fails unless a value is provided or a default is set

Substitution rules:

  • The token grammar is {template.<name>}. It shares the single-brace form of CEL template interpolation, but a {template.*} token is resolved entirely at import time — it is never a runtime interpolation root.
  • Substitution applies to every resource document; the descriptor document itself is never substituted.
  • A {template.<name>} token whose name is not declared in templateVariables fails the import.
  • A required variable with neither a provided value nor a default fails the import.

Resource Documents​

For each document after the descriptor, the runtime attempts to load it as a resource manifest using its kind field. Documents with unrecognised kind values are silently skipped.

KindDescription
commonagents.info/v1/agentAgent definition
commonagents.info/v1/toolTool definition
commonagents.info/v1/scheduleSchedule definition

Rules​

  1. A bundle may contain zero or one descriptor document.
  2. When present, the descriptor is the first document.
  3. The descriptor name field is required; all other fields are optional.
  4. Bundles without a descriptor are valid — they are a plain collection of resources.
  5. When templateVariables is present, the runtime collects a value for each variable before the import completes and substitutes them into the resource documents.
  6. A {template.<name>} reference to a variable not declared in templateVariables fails the import.

Size Limits​

Runtimes SHOULD enforce reasonable limits to prevent abuse. The following are recommended defaults:

LimitRecommended value
Max bundle size (remote fetch)10 MB
Max bundle size (direct upload)2 MB
Max documents per bundle200
Max single document size512 KB