github/spec-kit · error · BundlerError

No bundle.yml found in '{bundle_dir}'.

Error message

No bundle.yml found in '{bundle_dir}'.

What it means

load_manifest_from_dir(bundle_dir) expects a bundle directory containing bundle.yml; it raises when <bundle_dir>/bundle.yml does not exist. This is a cheap existence check before BundleManifest.from_file is attempted, so the user gets a clear 'missing file' message instead of a lower-level parse error.

Source

Thrown at src/specify_cli/bundler/services/resolver.py:131

        )
    if manifest.requires.mcp:
        warnings.append("Requires MCP servers: " + ", ".join(manifest.requires.mcp))

    return InstallPlan(
        bundle_id=manifest.bundle.id,
        version=manifest.bundle.version,
        role=manifest.bundle.role,
        effective_integration=effective_integration,
        components=list(manifest.components),
        warnings=warnings,
    )


def load_manifest_from_dir(bundle_dir: Path) -> BundleManifest:
    """Load ``bundle.yml`` from a bundle directory."""
    manifest_path = Path(bundle_dir) / "bundle.yml"
    if not manifest_path.exists():
        raise BundlerError(f"No bundle.yml found in '{bundle_dir}'.")
    return BundleManifest.from_file(manifest_path)

View on GitHub (pinned to bf88c9f9a8)

Solutions

  1. Ensure the exact file <bundle_dir>/bundle.yml exists (the filename is fixed, not .yaml).
  2. If the manifest is named differently, rename it to bundle.yml.
  3. If the file was not committed (gitignore/checkout), restore or re-add it.
  4. Pass the manifest file path directly instead of the directory if your layout differs.

Example fix

# before
my-bundle/
  bundle.yaml

# after
my-bundle/
  bundle.yml
Defensive patterns

Strategy: validation

Validate before calling

from pathlib import Path

bundle_dir = Path("./my-bundle")
if not (bundle_dir / "bundle.yml").exists():
    raise SystemExit(f"{bundle_dir} has no bundle.yml; refusing to load")

Type guard

from pathlib import Path

def is_bundle_dir(path: Path) -> bool:
    return path.is_dir() and (path / "bundle.yml").is_file()

Try / catch

try:
    manifest = load_manifest_from_dir(bundle_dir)
except BundlerError as exc:
    if "No bundle.yml" in str(exc):
        # point user to the manifest file or fix naming
        ...

Prevention

When it happens

Trigger: Calling load_manifest_from_dir(Path('./my-bundle')) where the directory exists but the manifest is named bundle.yaml, manifest.yml, or sits in a subdirectory; or the path points at a bundle's parent folder.

Common situations: Renaming bundle.yml to bundle.yaml for consistency with other config; a git checkout that skipped the file via .gitignore; pointing at the repo root instead of the bundle folder.

Related errors


AI-assisted analysis of github/spec-kit@bf88c9f9a8 (2026-08-14). Data as JSON: /api/errors/691fb6a9e6630fe0. Report an issue: GitHub.