Skip to main content

Plugins

This guide teaches you how to use existing plugins and create your own.

What Are Plugins

Plugins are reusable packages of skills, agents, docs, schemas, instructions, and overlays. They let you share AI agent configurations across projects.

A plugin is a directory containing a plugin.yml manifest and an .agloom/-like structure. Plugins can be loaded from local paths or git repositories.

Using a Plugin

Add plugins to the plugins section of your .agloom/config.yml.

From a Git Repository

Use a git URL (SSH or HTTPS):

# .agloom/config.yml
adapters:
- claude
plugins:
- git@github.com:user/my-plugin
- https://github.com/user/another-plugin

You can pin a specific ref (branch, tag, or commit) and point to a subdirectory within the repo:

plugins:
- git@github.com:user/my-plugin#v1.0.0
- git@github.com:user/monorepo#main//packages/agloom-plugin

The #ref suffix specifies the git ref. The //path suffix specifies a subdirectory within the repository.

From a Local Path

Use a relative path:

plugins:
- ../shared-plugin

Object Form

For more control, use the object form:

plugins:
- git: git@github.com:user/my-plugin
ref: v1.0.0
path: subdir
values:
team_name: "platform"
api_token: "${env:API_TOKEN}"
- path: ../local-plugin
values:
feature_flag: "true"

The object form lets you specify ref, path, and values (see below).

Plugin Values

Plugins can declare variables that consumers must (or may) provide. Values are passed through the values field in the plugin entry.

For example, if a plugin declares a team_name variable:

# In the plugin's plugin.yml
variables:
team_name:
description: "Team name for commit messages"
required: true

You provide the value in your config:

# .agloom/config.yml
plugins:
- git: git@github.com:user/team-plugin
values:
team_name: "platform"

Values can reference environment variables using ${env:VAR}:

plugins:
- git: git@github.com:user/team-plugin
values:
team_name: "platform"
api_token: "${env:TEAM_API_TOKEN}"

Sensitive variables (declared with sensitive: true in the plugin manifest) must use ${env:VAR} -- inline values are rejected to prevent accidental commits of secrets.

See Variables for more on how interpolation works.

Creating a Plugin

Step 1: Create a directory with a plugin.yml manifest:

# my-plugin/plugin.yml
name: my-plugin
version: 1.0.0
description: "Shared coding conventions for our team"
author:
name: "Jane Doe"
email: "jane@example.com"

Step 2: Add content using the same structure as .agloom/:

my-plugin/
├── plugin.yml
├── skills/
│ └── code-review/
│ └── SKILL.md
├── agents/
│ └── reviewer.md
└── overlays/
└── claude/
└── .claude/
└── settings.json

Step 3: Optionally declare variables:

# my-plugin/plugin.yml
name: my-plugin
version: 1.0.0
description: "Shared coding conventions"
author:
name: "Jane Doe"
variables:
team_name:
description: "Team name"
required: true
slack_channel:
description: "Slack channel for notifications"
default: "#engineering"

See reference/plugin-manifest for the full manifest format.

Plugin Caching

Git plugins are cached locally in ~/.agloom/cache/plugins/. On subsequent transpile runs, Agloom uses the cached version instead of cloning again.

To force a fresh clone:

agloom transpile --refresh

To clear the entire cache:

agloom cache clean

How Plugins Merge

Plugins go through the same transpilation pipeline as your local .agloom/ content. Their instructions, skills, agents, docs, schemas, and overlays are merged into the final output.

The merge order follows the plugin declaration order in config.yml. Plugins listed first have lower priority -- later plugins and the local project can override earlier ones. The local project always has the highest priority.