Package Manifest (aw.yml)
Use aw.yml to describe an installable agentic workflow package.
gh aw add uses this manifest when installing packages, and
gh aw compile validates repository-root manifests before compilation.
For the normative file-format definition, see the Package Management (Spec).
Package reference formats
Section titled “Package reference formats”Repository references support two forms:
OWNER/REPOOWNER/REPO/PATH/TO/PACKAGE
The package root is the folder that contains aw.yml.
Fields
Section titled “Fields”| Field | Type | Required | Notes |
|---|---|---|---|
manifest-version | string | No | Current supported value: "1". Defaults to "1" when omitted. |
min-version | string | No | Minimum compatible gh aw version in vMAJOR.minor.patch form, such as v0.38.0. |
name | string | Yes | Human-readable package name. Must be non-empty after trimming whitespace. |
emoji | string | No | Optional package emoji for display in package metadata. |
icon | string | No | Optional package icon: an emoji, a GitHub primer octicon name in :name: format (e.g. :check-circle:), or a package resource path to an SVG file. |
description | string | No | Optional package description. gh aw add warns when it exceeds 255 characters. |
private | boolean | No | Marks the package as unavailable for installation. Defaults to false; gh aw add refuses packages set to true. |
experimental | boolean | No | Marks the package as experimental. Defaults to false; gh aw add displays a warning when set to true. |
files | array of strings | No | Deprecated; use includes. Package-root-relative paths. Agentic markdown workflows under workflows/ or .github/workflows/; raw GitHub Actions YAML (.yml) is also accepted as direct children of .github/workflows/. |
includes | array | No | Installable entries, or paths to other aw.yml manifests whose installable files are included recursively. Each entry is either a path string (same rules as files, plus skill and agent paths), a path ending in /* that matches supported direct children, or a source-to-destination mapping. |
resources | array | No | Repository assets copied from package-relative source paths to allowlisted repository-relative destination paths. |
config | array | No | Experimental ordered repository setup actions applied by gh aw add-wizard. |
Repository labels
Section titled “Repository labels”Use a repo-label config action to create a repository label or reconcile an
existing label’s description and color:
config: - type: repo-label name: automation description: Managed by an agentic workflow color: 1f6febThe name must be non-empty and at most 50 characters. The description must
be non-empty and at most 100 characters. color must be a six-character
hexadecimal value without a leading #.
Imported manifests
Section titled “Imported manifests”Use includes entries naming aw.yml files to compose a package from manifests in the same repository:
name: Central Agentic Opsincludes: - activity/aw.yml - ambient-context/aw.yml - dashboard/aw.ymlThese paths are resolved relative to the manifest that declares them and must name an
aw.yml file within the top-level package root. Imports are recursive. The imported
manifests’ workflows, resources, skills, and agents are combined into one install list;
metadata and config continue to come from the top-level manifest.
gh aw rejects import cycles and any files that would install to the same destination,
including case-insensitive destination clashes. A manifest that only declares imports does
not auto-discover workflows from its own directory.
Installable workflows
Section titled “Installable workflows”If files is present, valid entries become the install bundle. Two entry kinds are supported:
- Agentic workflow markdown — paths ending in
.mdunderworkflows/or.github/workflows/.gh aw addcompiles these to lock files and fetches their dependencies. - Raw GitHub Actions YAML — paths ending in
.yml(but not.lock.yml) that are direct children of.github/workflows/.gh aw addcopies these verbatim to.github/workflows/<name>.ymlwith no frontmatter processing, no dependency fetch, and no compilation. Nested subdirectories under.github/workflows/and.ymlfiles underworkflows/are not accepted.
Path resolution rules
Section titled “Path resolution rules”- A string entry that starts with
.github/is resolved relative to the consuming repository root, even inside a nested package. For example,.github/workflows/nightly.mdinfactory/aw.ymlrefers to the repository-root file, not tofactory/.github/workflows/nightly.md. - Every other string entry (such as
workflows/review.md) is resolved relative to the package root. - A string entry may end in a single
/*wildcard (such asworkflows/*) to include supported direct children of that directory. The wildcard does not recurse, and*is not supported in any other position. Matches are filtered by the same workflow, skill, and agent path rules as explicit entries. - A mapping entry always resolves
sourcerelative to the package root anddestinationrelative to the consuming repository root. - A mapping
sourcemay end in/*. For wildcard mappings,destinationmust be the.github/workflows/folder, and each matching file keeps its source filename.
Source-to-destination mappings
Section titled “Source-to-destination mappings”Use mapping entries to keep workflow assets inert in the distribution repository while still installing them into the consuming repository’s .github/workflows/:
name: Factoryincludes: - source: payload/workflows/reviewer.md destination: .github/workflows/reviewer.md kind: agentic-workflow - source: payload/workflows/controller.yml destination: .github/workflows/controller.yml kind: action-workflow - source: payload/extra-workflows/* destination: .github/workflows/With a nested package reference such as owner/repo/factory, the files above are fetched from factory/payload/workflows/ and installed to .github/workflows/. Because the sources live outside .github/workflows/ in the distribution repository, they never run there.
The optional kind field is either agentic-workflow (.md) or action-workflow (.yml) and must match the source extension.
Mappings are rejected when source or destination is absolute, contains .., points at a symbolic link, uses an unsupported extension (or .lock.yml), changes the file extension between source and destination, or targets anything other than a direct child of .github/workflows/. A wildcard mapping is the exception: it targets the .github/workflows/ folder, then preserves each matching source filename. Two entries installing to the same destination are rejected before any file is written.
gh aw add, gh aw add-wizard, and gh aw update all use these same mapping rules.
String entries can also install skill directories under skills/ or .github/skills/ when they contain SKILL.md, and agent Markdown files under agents/ or .github/agents/.
If files is omitted, or no valid entries remain after filtering,
gh aw add discovers installable markdown files under:
workflows/.github/workflows/
If no installable workflow files are resolved, validation fails.
Resources
Section titled “Resources”The resources field copies repository assets as-is without executing them during installation. Each entry maps a package-relative source to a repository-relative destination. Supported destinations are:
- Direct children of
.github/ISSUE_TEMPLATE/with a.ymlor.yamlextension .github/CODEOWNERS- Files under
.github/aw/ .mjsand.cjshelper scripts under.github/workflows/shared/
Resource destinations must be unique, including case-insensitive comparisons. Path traversal, symbolic links, non-regular local files, and destinations outside the allowlist are rejected. Installed resources are tracked with package-scoped ownership metadata in .github/aw/packages/*.json.
Package documentation
Section titled “Package documentation”Package documentation must be README.md at the package root.
The manifest does not support a docs field.
Missing README.md causes package validation to fail.
The embedded JSON schema source of truth is pkg/parser/schemas/aw_manifest_schema.json.
Example
Section titled “Example”name: Repo Assistemoji:description: Friendly repository automation for review and issue triageincludes: - packages/common/aw.yml - workflows/review.md # agentic workflow — compiled on install - .github/workflows/nightly-review.md # repository-root-relative string entry - .github/workflows/ci.yml # raw Actions YAML — copied verbatim - source: payload/workflows/reviewer.md # package-relative source destination: .github/workflows/reviewer.md