Bazel
Recommend AXM extensions from a Bazel module and target Bazel modules from an extension.
The two-way linking model applies to Bazel modules just as it does to other ecosystems. A module recommends through package-author metadata it ships with the module, and an extension targets the module through a Bazel purl.
The Bazel registry (Bzlmod / Bazel Central Registry) does not provide a
first-class field for arbitrary package metadata. Following the pattern other
sidecar-based ecosystems use (see
Go modules and
SwiftPM), AXM reads an
agent-extensions.json sidecar shipped at the module root. After Bazel fetches
the module, AXM reads the sidecar from the extracted external-repository
directory (external/<repo>/agent-extensions.json).
Recommend extensions from a module
Section titled Recommend extensions from a moduleAdd an agent-extensions.json file at the module root, alongside
MODULE.bazel, with an agentExtensions array. Each entry is an extension
reference (@owner/<type>/<name>):
// agent-extensions.json
{
"$schema": "https://axm.sh/schemas/agent-extensions.schema.json",
"agentExtensions": [{ "ref": "@acme/packs/widget-kit" }],
}Keep recommendations identity-only — omit versionRange. AXM resolves the
reference to the newest matching extension version and pins it in the user's
axm.lock. Prefer recommending a single pack so you keep one stable
reference while its contents evolve. Add a semver versionRange only when your
module genuinely pairs with a bounded major line of the extension.
Target Bazel modules from an extension
Section titled Target Bazel modules from an extensionOn the extension manifest (skill.json, pack.json, subagent.json, …), add a
packages array with a Bazel purl:
// pack.json
{
"packages": [{ "purl": "pkg:bazel/rules_widget" }],
}Use the module name as registered in the Bazel Central Registry as the purl name.
Version ranges
Section titled Version rangesDefault to identity-only. Add a VERS
versionRange with the bazel scheme only when the extension depends on module
APIs introduced or removed in a known range:
{
"packages": [
{
"purl": "pkg:bazel/rules_widget",
"versionRange": "vers:bazel/>=1.0.0|<2.0.0",
},
],
}Official status
Section titled Official statusWhen the Bazel module recommends an extension through the AgentXM Registry and that extension names the module as a companion via its purl, AXM derives official status for the pair — no extra flag. See Official extensions.
The Bazel package-author metadata convention is still being finalized. The sidecar location above mirrors the documented sidecar ecosystems; the
pkg:bazelpurl is the stable identity an extension uses to target a module. Confirm the current shape against thepolyglot-examplesfixtures before relying on it.