bytedance/deer-flow · error · AgentNameCheckError

request_failed

request_failed

Error message

Failed to check agent name: ${res.statusText}

What it means

Raised when base_url uses plain http://, allow_insecure_http is false, and the URL hostname is not 127.0.0.1, localhost, or openviking. The USER API key travels on every request, so non-local plaintext HTTP is blocked by default; loopback and the service name 'openviking' are whitelisted as inherently private.

Source

Thrown at frontend/src/core/agents/api.ts:118

    throw new AgentNameCheckError(
      "Could not reach the DeerFlow backend.",
      "backend_unreachable",
    );
  }

  if (!res.ok) {
    const err = (await res.json().catch(() => ({}))) as { detail?: string };
    if (isAgentsApiDisabledDetail(err.detail)) {
      throw new AgentsApiDisabledError(err.detail!);
    }
    if (BACKEND_UNAVAILABLE_STATUSES.has(res.status)) {
      throw new AgentNameCheckError(
        "Could not reach the DeerFlow backend.",
        "backend_unreachable",
      );
    }
    const backendDetail = typeof err.detail === "string" ? err.detail : null;
    throw new AgentNameCheckError(
      backendDetail ?? `Failed to check agent name: ${res.statusText}`,
      "request_failed",
      backendDetail,
    );
  }
  return res.json() as Promise<{ available: boolean; name: string }>;
}

View on GitHub (pinned to 1dd6ba1acb)

Solutions

  1. Use an https:// base_url (TLS at the service or a proxy).
  2. If the network is trusted and internal, set allow_insecure_http: true explicitly.
  3. Or point at a whitelisted hostname: http://openviking:1933, http://127.0.0.1:1933, or http://localhost:1933.

Example fix

# before
backend_config:
  base_url: http://10.0.0.5:1933

# after
backend_config:
  base_url: http://10.0.0.5:1933
  allow_insecure_http: true  # trusted internal network only
Defensive patterns

Strategy: validation

Validate before calling

from urllib.parse import urlparse

LOCAL_HOSTS = {'127.0.0.1', 'localhost', 'openviking'}


def check_http_exposure(base_url: str, allow_insecure: bool) -> None:
    p = urlparse(base_url)
    if p.scheme == 'http' and not allow_insecure:
        assert p.hostname in LOCAL_HOSTS, (
            'plain-http base_url to a non-local host requires '
            'allow_insecure_http: true on a trusted network; prefer https://'
        )

Prevention

When it happens

Trigger: Setting base_url to http://<non-local-host> (an IP like 10.0.0.5, a LAN hostname, or a k8s service name other than 'openviking') without allow_insecure_http: true. The hostname check uses parsed.hostname, so ports do not matter.

Common situations: Self-hosted OpenViking on another machine without TLS; k8s service URL on plain http with a custom service name; using a private-IP address for a LAN deployment.

Related errors


AI-assisted analysis of bytedance/deer-flow@1dd6ba1acb (2026-08-14). Data as JSON: /api/errors/55aa454f0995d12c. Report an issue: GitHub.