zed-industries/zed · error

No sibling-thread host is registered. This usually means the

Error message

No sibling-thread host is registered. This usually means the agent panel hasn't been initialized in this workspace.

What it means

create_sibling_thread requires a SiblingThreadHost registered on the NativeAgent (agent.sibling_thread_host()); the host is supplied by the agent panel. If the panel has not been initialized in this workspace, no host exists and the request cannot be served.

Source

Thrown at crates/agent/src/agent.rs:3266

        &self,
        session_id: acp::SessionId,
        cx: &mut App,
    ) -> Result<Rc<dyn SubagentHandle>> {
        self.resume_subagent_thread(session_id, cx)
    }

    fn create_sibling_thread(
        &self,
        request: SiblingThreadRequest,
        cx: &mut AsyncApp,
    ) -> Task<Result<SiblingThreadInfo>> {
        let host = match self
            .agent
            .read_with(cx, |agent, _| agent.sibling_thread_host())
        {
            Ok(Some(host)) => host,
            Ok(None) => {
                return Task::ready(Err(anyhow!(
                    "No sibling-thread host is registered. This usually means the \
                     agent panel hasn't been initialized in this workspace."
                )));
            }
            Err(err) => return Task::ready(Err(err)),
        };
        host.create_sibling_thread(request, cx)
    }

    fn list_available_agents(&self, cx: &mut App) -> Result<AvailableAgents> {
        let host = self
            .agent
            .read_with(cx, |agent, _| agent.sibling_thread_host())?
            .ok_or_else(|| {
                anyhow!(
                    "No sibling-thread host is registered. This usually means the \
                     agent panel hasn't been initialized in this workspace."
                )

View on GitHub (pinned to bc538def45)

Solutions

  1. Initialize the agent panel in the workspace before sibling-thread tools become available.
  2. In embedded/test contexts, register a SiblingThreadHost implementation on the NativeAgent.
  3. Fall back to a regular subagent when no host is registered.
Defensive patterns

Strategy: fallback

Validate before calling

// inside the app: check host registration before offering the capability
let host_registered = agent.read(cx).sibling_thread_host().is_some();

Type guard

fn sibling_threads_available(agent: &Entity<NativeAgent>, cx: &App) -> bool {
    agent.read(cx).sibling_thread_host().is_some()
}

Try / catch

match env.create_sibling_thread(request, cx).await {
    Ok(info) => info,
    Err(e) if e.to_string().contains("sibling-thread host") => {
        // no panel host: fall back to a subagent
        env.create_subagent_thread(title, cx)?
    }
    Err(e) => return Err(e),
}

Prevention

When it happens

Trigger: A tool attempting to create a sibling thread where the agent panel never initialized: headless or embedded use of the agent crate, a workspace without the panel loaded, or a call made before registration.

Common situations: Running the agent crate in tests or headless harnesses; invoking sibling-thread tools from embedded hosts; panel closed or not yet constructed.

Related errors


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