github/spec-kit · error · PresetError
Preset '{pack_id}' is bundled with spec-kit and has no downl
Error message
Preset '{pack_id}' is bundled with spec-kit and has no download URL. It should be installed from the local package. Use 'specify preset add {pack_id}' to install from the bundled package, or reinstall spec-kit if the bundled files are missing: {REINSTALL_COMMAND} What it means
The pack exists but is flagged 'bundled' and carries no download_url. Bundled presets ship inside the spec-kit package itself, so remote download is refused; the error tells you to install locally via 'specify preset add <pack_id>' or reinstall spec-kit if the bundled files went missing.
Source
Thrown at src/specify_cli/presets/__init__.py:4830
Returns:
Path to the downloaded archive
Raises:
PresetError: If pack not found or download fails
"""
import urllib.error
pack_info = self.get_pack_info(pack_id)
if not pack_info:
raise PresetError(
f"Preset '{pack_id}' not found in catalog"
)
# Bundled presets without a download URL must be installed locally
if pack_info.get("bundled") and not pack_info.get("download_url"):
from ..extensions import REINSTALL_COMMAND
raise PresetError(
f"Preset '{pack_id}' is bundled with spec-kit and has no download URL. "
f"It should be installed from the local package. "
f"Use 'specify preset add {pack_id}' to install from the bundled package, "
f"or reinstall spec-kit if the bundled files are missing: {REINSTALL_COMMAND}"
)
if not pack_info.get("_install_allowed", True):
catalog_name = pack_info.get("_catalog_name", "unknown")
raise PresetError(
f"Preset '{pack_id}' is from the '{catalog_name}' catalog which does not allow installation. "
f"Use --from with the preset's repository URL instead."
)
download_url = pack_info.get("download_url")
if not download_url:
raise PresetError(
f"Preset '{pack_id}' has no download URL"
)View on GitHub (pinned to bf88c9f9a8)
Solutions
- Install it locally instead: specify preset add <pack_id>
- If that fails with missing files, reinstall spec-kit (pip install --force-reinstall spec-kit or the documented REINSTALL_COMMAND) to restore bundled assets
- If writing generic tooling, skip entries where bundled is true and no download_url exists
Example fix
# before
archive = manager.download_preset_archive("bundled-pack")
# after
# use the local install path for bundled presets
# shell: specify preset add bundled-pack Defensive patterns
Strategy: validation
Validate before calling
info = manager.get_pack_info(pack_id) or {}
if info.get("bundled") and not info.get("download_url"):
use_local_install(pack_id) # route to 'specify preset add' instead of download Type guard
def is_local_only_pack(info: dict) -> bool:
return bool(info.get("bundled")) and not info.get("download_url") Try / catch
try:
archive = manager.download_preset_archive(pack_id)
except PresetError as e:
if "bundled with spec-kit" in str(e):
run_cli("specify", "preset", "add", pack_id)
else:
raise Prevention
- Check the 'bundled' flag in pack info before choosing the download path
- Keep spec-kit itself intact so bundled preset files exist (reinstall if pruned)
When it happens
Trigger: Calling download_preset_archive() on a pack whose catalog entry has bundled: true and no download_url — typically the built-in presets that come with spec-kit.
Common situations: Programmatically downloading every catalog pack and hitting the bundled entries; a broken/partial spec-kit installation where the bundled files are absent even though the catalog entry exists.
Related errors
- Preset '{pack_id}' is from the '{catalog_name}' catalog whic
- Failed to install bundle '{plan.bundle_id}': {exc}. No chang
- Failed to {action} {label}.
- Extension '{resolved_id}' is bundled with spec-kit but not f
- Manifest not found: {path}
AI-assisted analysis of github/spec-kit@bf88c9f9a8 (2026-08-14).
Data as JSON: /api/errors/0a44478a3badca53.
Report an issue: GitHub.