# Conda

Recommend AXM extensions from a Conda package and target Conda packages from an extension.

The [two-way linking](/docs/package-ecosystems/overview) model applies to Conda
packages just as it does to other ecosystems. A package recommends through
package-author metadata it ships, and an extension targets the package through a
Conda [purl](https://github.com/package-url/purl-spec).

AXM reads the recommendation primarily from an `agent-extensions.json` sidecar
installed at
`$CONDA_PREFIX/share/agent-extensions/<package>/agent-extensions.json`. As a
fallback, it reads an `agentExtensions` key nested under `extra` in the recipe —
Conda recipes are defined in `meta.yaml` (or `recipe.yaml`), whose `extra:`
section is carried into the installed package's `info/about.json`. This mirrors
the pattern PHP's Composer uses for its `extra` field (see
[Composer](/docs/package-ecosystems/composer)).

## Recommend extensions from a package

Ship an `agent-extensions.json` sidecar so it installs to
`share/agent-extensions/<package>/agent-extensions.json`, with an
`agentExtensions` list. Each entry is an extension reference
(`@owner/<type>/<name>`):

```jsonc
// share/agent-extensions/<package>/agent-extensions.json
{
  "$schema": "https://axm.sh/schemas/agent-extensions.schema.json",
  "agentExtensions": [{ "ref": "@acme/packs/widget-kit" }],
}
```

Alternatively, declare the recommendation in the recipe's `extra` section, which
AXM reads from the installed package's `info/about.json` as a fallback:

```yaml
# meta.yaml
extra:
  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
package genuinely pairs with a bounded major line of the extension.

## Target Conda packages from an extension

On the extension manifest (`skill.json`, `pack.json`, `subagent.json`, …), add a
`packages` array with a Conda [purl](https://github.com/package-url/purl-spec):

```jsonc
// pack.json
{
  "packages": [{ "purl": "pkg:conda/widget-kit" }],
}
```

Use the package name as published to its channel as the purl name. A `channel`
qualifier may be added when the package is not on the default channel, for
example `pkg:conda/widget-kit?channel=conda-forge`.

### Version ranges

Default to identity-only. Add a [VERS](https://github.com/package-url/vers-spec)
`versionRange` with the `conda` scheme only when the extension depends on
package APIs introduced or removed in a known range:

```jsonc
{
  "packages": [
    {
      "purl": "pkg:conda/widget-kit",
      "versionRange": "vers:conda/>=1.0.0|<2.0.0",
    },
  ],
}
```

## Official status

When the Conda package recommends an extension through the AgentXM Registry
**and** that extension names the package as a companion via its purl, AXM
derives **official** status for the pair — no extra flag. See
[Official extensions](/docs/package-ecosystems/overview#official-extensions).

> The Conda package-author metadata convention is still being finalized. The
> `share/agent-extensions` sidecar and `extra.agentExtensions` fallback
> locations above mirror the documented sidecar and Composer `extra` analogs;
> the `pkg:conda` purl is the stable identity an extension uses to target a
> package. Confirm the current shape against the
> [`polyglot-examples`](https://github.com/agentxm/polyglot-examples) fixtures
> before relying on it.