zed-industries/zed · error · ValueError

No eval-cli binary provided. Either pass binary_path=/path/t

Error message

No eval-cli binary provided. Either pass binary_path=/path/to/target/release/eval-cli, set download_url=/EVAL_CLI_DOWNLOAD_URL, or set --ae EVAL_CLI_CONTAINER_PATH=/path/inside/container.

What it means

Raised at the end of the eval-cli provisioning chain in agent.py: none of the three ways to get the binary into the container was configured — no EVAL_CLI_CONTAINER_PATH (already mounted in the image), no binary_path (uploaded from the host), and no download_url (fetched with curl inside the container). The agent refuses to continue because the container would end up without eval-cli.

Source

Thrown at crates/eval_cli/zed_eval/agent.py:127

            await self.exec_as_root(
                environment,
                command="chmod +x /usr/local/bin/eval-cli && eval-cli --help",
            )
            return

        if self._download_url:
            await self.exec_as_root(
                environment,
                command=(
                    f"curl -fsSL {shlex.quote(self._download_url)} "
                    "-o /usr/local/bin/eval-cli && "
                    "chmod +x /usr/local/bin/eval-cli && "
                    "eval-cli --help"
                ),
            )
            return

        raise ValueError(
            "No eval-cli binary provided. "
            "Either pass binary_path=/path/to/target/release/eval-cli, "
            "set download_url=/EVAL_CLI_DOWNLOAD_URL, "
            "or set --ae EVAL_CLI_CONTAINER_PATH=/path/inside/container."
        )

    async def _install_node(self, environment: BaseEnvironment) -> None:
        """Install Node.js from official binary tarballs.

        Uses the musl build on Alpine and the glibc build elsewhere.
        Skips if node is already on PATH.
        """
        try:
            await self.exec_as_root(
                environment,
                command=(
                    "if command -v node >/dev/null 2>&1; then "
                    '  echo "Node.js already available: $(node --version)"; '

View on GitHub (pinned to bc538def45)

Solutions

  1. Set binary_path to a built binary: `cargo build --release -p eval_cli`, then pass target/release/eval-cli
  2. Or set download_url=/EVAL_CI_DOWNLOAD_URL to fetch a published binary inside the container
  3. Or set --ae EVAL_CLI_CONTAINER_PATH=/path/inside/container when the image already ships the binary
  4. Check for typos in the variable names and dump the effective agent config

Example fix

# before
run(...)   # no channel configured → ValueError

# after
run(..., binary_path="target/release/eval-cli")
Defensive patterns

Strategy: validation

Validate before calling

if not (binary_path or download_url or container_path):
    raise SystemExit(
        "configure one of: binary_path=..., download_url=..., EVAL_CLI_CONTAINER_PATH=..."
    )

Try / catch

try:
    await agent.ensure_binary(environment)
except ValueError as e:
    print(e)  # the message lists all three supported channels
    raise

Prevention

When it happens

Trigger: Starting the agent with all three options unset — e.g. relying on a default that doesn't exist, misnamed env vars so none is picked up, or config copied from a setup that used a different channel.

Common situations: First runs from a new shell with no EVAL_CLI_* vars exported; typos in variable names; switching between dev (local build) and CI (download URL) setups without updating config.

Related errors


AI-assisted analysis of zed-industries/zed@bc538def45 (2026-08-16). Data as JSON: /api/errors/00cfba7a7fcfb2e6. Report an issue: GitHub.