> ## Documentation Index
> Fetch the complete documentation index at: https://praison.ai/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# bundles • AI Agent SDK

> Skill bundles: named, reusable sets of skills.

# bundles

<Badge color="blue">AI Agent</Badge>

Skill bundles: named, reusable sets of skills.

A *bundle* is a small manifest that references existing skills by name and is
itself selectable as one unit. It is composition over the existing skills
layer — not a new execution primitive. A bundle expands to its member skills,
which then flow through the unchanged budget + prompt-injection path.

Bundles are discovered alongside skills:

* a top-level `BUNDLE.yaml` / `BUNDLE.yml` inside a skill directory, or
* any `*.yaml` / `*.yml` file inside a `bundles/` subdirectory of a
  skill root.

Selection uses a `@` marker everywhere a skill is selected
(`skills=["@backend-dev"]`), mirroring how skills already behave:
forgiving membership, precedence-with-logging, and budget-awareness.

## Import

```python theme={"theme":{"light":"vitesse-light","dark":"vitesse-dark"}}
from praisonaiagents.skills import bundles
```

## Classes

<CardGroup cols={2}>
  <Card title="BundleManifest" icon="brackets-curly" href="../classes/BundleManifest">
    A named set of skills selectable as one unit.
  </Card>
</CardGroup>

## Functions

<CardGroup cols={2}>
  <Card title="strip_bundle_marker()" icon="function" href="../functions/strip_bundle_marker">
    Return the bundle name for a `@name` selector (or the name itself).
  </Card>

  <Card title="is_bundle_selector()" icon="function" href="../functions/is_bundle_selector">
    True if `selector` is a `@bundle` reference.
  </Card>

  <Card title="discover_bundles()" icon="function" href="../functions/discover_bundles">
    Discover bundle manifests alongside skills.
  </Card>
</CardGroup>

### Constants

| Name            | Value |
| --------------- | ----- |
| `BUNDLE_MARKER` | `'@'` |
