langchain-ai/deepagents · error · FleetImportError

{name}: zip entry uncompressed size exceeds limit

Error message

{name}: zip entry uncompressed size exceeds limit

What it means

A single zip entry declares an uncompressed (`file_size`) value over 256 MiB (`_MAX_ZIP_UNCOMPRESSED_BYTES`). Per-entry size caps are declared-size checks run during validation, before any bytes are extracted, to stop oversized or malicious archives early.

Source

Thrown at libs/talon/deepagents_talon/fleet_import.py:260

    posix = PurePosixPath(name)
    windows = PureWindowsPath(name)
    return (
        posix.is_absolute()
        or windows.is_absolute()
        or windows.drive != ""
        or any(part in {"", ".", ".."} for part in posix.parts)
    )


def _is_symlink(info: zipfile.ZipInfo) -> bool:
    file_type = (info.external_attr >> 16) & _ZIP_FILE_TYPE_MASK
    return file_type == _ZIP_SYMLINK_TYPE


def _validate_zip_entry_size(name: str, info: zipfile.ZipInfo) -> None:
    if info.file_size > _MAX_ZIP_UNCOMPRESSED_BYTES:
        msg = f"{name}: zip entry uncompressed size exceeds limit"
        raise FleetImportError(msg)
    if info.compress_size == 0:
        return
    if info.file_size > info.compress_size * _MAX_ZIP_COMPRESSION_RATIO:
        msg = f"{name}: zip entry compression ratio exceeds limit"
        raise FleetImportError(msg)


def _materialize_staging(
    archive: zipfile.ZipFile,
    entries: Mapping[str, zipfile.ZipInfo],
    staging: Path,
) -> None:
    _copy_zip_file(archive, entries["AGENTS.md"], staging / "AGENTS.md")

    for name, info in entries.items():
        if name.startswith("skills/"):
            _copy_zip_file(archive, info, staging / name)
        elif _is_subagent_prompt_path(name):

View on GitHub (pinned to a1af029e6e)

Solutions

  1. Remove or move the oversized file out of the Fleet export
  2. Verify entry sizes up front: `max(zi.file_size for zi in zipfile.ZipFile(p).infolist())` and locate the offender
  3. Compress or split the asset and reference it externally (URL, separate download) instead of embedding it in the zip

Example fix

# before: bundled model in skills/
skills/heavy/model.bin (400 MB)
// after: ship without the asset and document the download
skills/heavy/README.md  # 'download model.bin from ...'
Defensive patterns

Strategy: validation

Validate before calling

import zipfile

MAX_ENTRY = 256 * 1024 * 1024

def has_oversized_entry(path):
    with zipfile.ZipFile(path) as z:
        return any(zi.file_size > MAX_ENTRY for zi in z.infolist())

Try / catch

try:
    import_fleet_zip(zip_path, target_dir=target)
except FleetImportError as exc:
    if "uncompressed size exceeds limit" in str(exc):
        print("Remove or externalize the >256MiB asset from the export")
    raise

Prevention

When it happens

Trigger: `import_fleet_zip` validates an entry whose `info.file_size > 256 * 1024 * 1024`.

Common situations: Export accidentally includes large binaries, model weights, datasets, videos, or docker layer tarballs inside `skills/`.

Related errors


AI-assisted analysis of langchain-ai/deepagents@a1af029e6e (2026-08-29). Data as JSON: /api/errors/356a65faad0bc320. Report an issue: GitHub.