Skip to main content

Plugin Manifest

The plugin manifest (plugin.yml) defines metadata for an Agloom plugin. It must be located at the root of the plugin directory.

File Location

<plugin-root>/plugin.yml

Plugin Directory Structure

<plugin-root>/
plugin.yml # Manifest (required)
AGLOOM.md # Plugin instructions (optional)
AGLOOM.local.md # Local plugin instructions (optional)
overlays/ # Per-adapter overlay files (optional)
claude/
opencode/
skills/ # Plugin skills (optional)
agents/ # Plugin agents (optional)
docs/ # Plugin docs (optional)
schemas/ # Plugin schemas (optional)

The plugin directory mirrors the structure of .agloom/ in a local project. A config.yml file must not be present in a plugin directory.

Schema

Required Fields

name

  • Type: string
  • Constraints: Lowercase letters (a-z), digits (0-9), and hyphens (-). Must start with a letter, end with a letter or digit. No consecutive hyphens (--). Length: 1--214 characters.
  • Regex: ^[a-z]([a-z0-9]|(-(?!-)))*[a-z0-9]$|^[a-z]$
name: my-eslint-config

Valid examples: my-plugin, eslint-config, a, plugin1.

Invalid examples: My-Plugin (uppercase), -plugin (starts with hyphen), plugin- (ends with hyphen), my--plugin (consecutive hyphens), my_plugin (underscore).

version

  • Type: string
  • Constraints: Must be a valid Semantic Versioning 2.0.0 string (validated via semver.valid()).
version: 1.0.0

Valid examples: 1.0.0, 0.1.0, 1.2.3-beta.1, 1.0.0+build.123.

Invalid examples: 1.0 (incomplete), v1.0.0 (v prefix), 1.0.0.0 (extra component).

description

  • Type: string
  • Constraints: Must be a non-empty string.
description: "Shared ESLint configuration for agloom projects"

author

  • Type: object
FieldTypeRequiredConstraints
namestringYesNon-empty string.
emailstringYesNon-empty string.
urlstringNoMust be a valid URL (parseable by the URL constructor).
author:
name: "John Doe"
email: "john@example.com"
url: "https://example.com"

Optional Fields

license

  • Type: string
  • Constraints: Non-empty string. Should be an SPDX identifier (e.g., MIT, Apache-2.0).
license: MIT

homepage

  • Type: string
  • Constraints: Must be a valid URL.
homepage: "https://github.com/example/my-eslint-config"

keywords

  • Type: array<string>
  • Default: []
  • Constraints: Each element must be a non-empty string.
keywords:
- eslint
- config

variables

  • Type: object
  • Default: null (plugin does not accept variables)

Declares variables that consumers can set via values in their config.yml. Each key is a variable name; each value is a VariableDeclaration object.

FieldTypeDefaultDescription
descriptionstringrequiredDescription of the variable.
requiredbooleanfalseIf true, the variable must be provided or have a default.
defaultstring-Default value. May contain ${env:VAR}.
sensitivebooleanfalseIf true, value must reference ${env:VAR} (no inline secrets).
variables:
team_name:
description: "Team name for commit messages"
required: true
api_token:
description: "API token for external service"
required: true
sensitive: true
lint_command:
description: "Custom lint command"
default: "pnpm run lint"
base_url:
description: "Base URL for API calls"
default: "${env:BASE_URL}"

Validation Rules

ConditionError Message
plugin.yml not foundPlugin manifest not found: <pluginDir>/plugin.yml
Invalid YAMLInvalid plugin manifest: <parse error>
name missingInvalid plugin manifest: 'name' is required.
name invalid formatInvalid plugin manifest: 'name' must contain only lowercase letters, digits, and hyphens...
version missingInvalid plugin manifest: 'version' is required.
version invalid semverInvalid plugin manifest: 'version' must be a valid semver string.
description missingInvalid plugin manifest: 'description' is required.
description not a non-empty stringInvalid plugin manifest: 'description' must be a non-empty string.
author missingInvalid plugin manifest: 'author' is required.
author not an objectInvalid plugin manifest: 'author' must be an object.
author.name missing or emptyInvalid plugin manifest: 'author.name' must be a non-empty string.
author.email missing or emptyInvalid plugin manifest: 'author.email' must be a non-empty string.
author.url invalid URLInvalid plugin manifest: 'author.url' must be a valid URL.
license not a non-empty stringInvalid plugin manifest: 'license' must be a non-empty string.
homepage invalid URLInvalid plugin manifest: 'homepage' must be a valid URL.
keywords not an arrayInvalid plugin manifest: 'keywords' must be an array of strings.
Keyword not a non-empty stringInvalid plugin manifest: each keyword must be a non-empty string.
variables not an objectInvalid plugin manifest: 'variables' must be an object.
Variable not an objectInvalid plugin manifest: variable '<key>' must be an object.
Variable description missing/emptyInvalid plugin manifest: variable '<key>' must have a non-empty 'description'.

Complete Example

name: my-eslint-config
version: 1.0.0
description: "Shared ESLint configuration for agloom projects"
license: MIT
author:
name: "John Doe"
email: "john@example.com"
url: "https://example.com"
homepage: "https://github.com/example/my-eslint-config"
keywords:
- eslint
- config
variables:
team_name:
description: "Team name"
required: true
api_token:
description: "API token"
required: true
sensitive: true
lint_command:
description: "Custom lint command"
default: "pnpm run lint"