Skip to content

Configuration

fleet.json is the declarative desired state for the fleet. It answers three questions:

  • Which workflow profiles exist?
  • Which upstream source ref pins each profile?
  • Which repositories receive which profiles, extras, exclusions, and overrides?

gh-aw-fleet reads up to two config files from the working directory:

  • fleet.json: the committed base config. This repository ships a public dogfood example that tracks only rshade/gh-aw-fleet.
  • fleet.local.json: a gitignored private overlay for real fleet state, private repositories, and personal overrides.

When both files exist they are merged. Local profiles, repos, and defaults add to or override base entries. When only one file exists, that file is used directly. The CLI prints the loaded mode on stderr, for example (loaded fleet.json + fleet.local.json).

The loader also accepts .hujson variants before .json, so comments and trailing commas are allowed in fleet config files. Having both fleet.hujson and fleet.json for the same base is rejected as ambiguous.

{
"version": 1,
"defaults": {
"engine": "copilot"
},
"profiles": {
"default": {
"description": "Baseline every tracked repo gets.",
"tier": "standard",
"sources": {
"github/gh-aw": { "ref": "v0.79.2" },
"githubnext/agentics": {
"ref": "96b9d4c39aa22359c0b38265927eadb31dcf4e2a"
}
},
"workflows": [
{ "name": "audit-workflows", "source": "github/gh-aw" },
{ "name": "ci-doctor", "source": "githubnext/agentics" }
]
}
},
"repos": {
"acme/widgets": {
"profiles": ["default"],
"engine": "copilot",
"extra": [],
"exclude": [],
"cost_center": "platform"
}
}
}

version is the on-disk fleet config schema version. The current value is 1. It is independent from the JSON output envelope schema used by command output.

defaults holds fleet-wide defaults used when a repo does not override a value. The common field is engine, such as copilot.

A profile is a named workflow bundle. Repos opt into profiles through their profiles list.

Profile fields:

  • description: human-readable purpose and operating notes.
  • tier: optional advisory cost tier such as minimal, standard, or premium. The tool accepts any string and does not enforce behavior from it.
  • sources: upstream repositories and refs used by workflows in the profile.
  • workflows: workflow names and the source key each name resolves through.

The built-in default profile mirrors profiles/default.json. Keep those files in sync when changing the default profile.

Each source key maps to a ref:

"sources": {
"github/gh-aw": { "ref": "v0.79.2" },
"githubnext/agentics": { "ref": "96b9d4c39aa22359c0b38265927eadb31dcf4e2a" }
}

github/gh-aw production pins must use tagged releases, not main. The githubnext/agentics library may pin to main or to a commit until the library tags releases, but a commit SHA is more repeatable.

Path conventions differ by source:

  • githubnext/agentics uses workflow names under its implicit workflows/ directory.
  • github/gh-aw uses .github/workflows/<name>.md.

gh-aw-fleet owns that resolution and passes the final spec to gh aw add.

Each workflow entry names a workflow and the source key that provides it:

{ "name": "daily-malicious-code-scan", "source": "githubnext/agentics" }

Bumping one source ref in a profile re-pins every workflow in that profile from that source.

Repo keys are owner/name strings.

Repo fields:

  • profiles: required list of profile names to apply.
  • engine: optional per-repo engine override.
  • compile_strict: optional boolean override for gh aw compile --strict.
  • extra: optional workflows outside any profile.
  • exclude: optional workflow names to omit from the resolved profile set.
  • cost_center: optional free-form billing tag used by gh-aw-fleet consumption --by cost-center.

extra can reference local workflows or upstream sources. Local extras point at workflow markdown already present in the target repository.

Merging is per profile or repo entry, not per field. If fleet.local.json redefines profiles.default, that local object replaces the base profiles.default object wholesale. Include optional fields like tier in the local copy if you still want them after the overlay.