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
- Set binary_path to a built binary: `cargo build --release -p eval_cli`, then pass target/release/eval-cli
- Or set download_url=/EVAL_CI_DOWNLOAD_URL to fetch a published binary inside the container
- Or set --ae EVAL_CLI_CONTAINER_PATH=/path/inside/container when the image already ships the binary
- 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
- Standardize one provisioning channel in the runner template (binary_path for dev, download_url for CI)
- Run env | grep EVAL_CLI before long jobs to confirm the vars are exported
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
- Could not detect a working directory in the container. Set E
- eval-cli binary not found at {binary}. Build it with: cargo
- could not locate run '{run_id}' in the local run index ({run
- unknown benchmark '{benchmark_id}' (valid: {valid})
- unknown benchmark '{selector}' (valid: {valid})
AI-assisted analysis of zed-industries/zed@bc538def45 (2026-08-16).
Data as JSON: /api/errors/00cfba7a7fcfb2e6.
Report an issue: GitHub.