langchain-ai/langgraph · error · RuntimeError

thread.output: no run has been started and no explicit threa

Error message

thread.output: no run has been started and no explicit thread_id was provided. Call thread.run.start() first.

What it means

Error "thread.output: no run has been started and no explicit thread_id was provided. Call thread.run.start() first." thrown in langchain-ai/langgraph.

Source

Thrown at libs/sdk-py/langgraph_sdk/_async/stream.py:1929

        """Return `True` if we can try the REST state before waiting on the lifecycle.

        True only when the caller passed an explicit `thread_id` (not a minted
        UUID) and no run has been seen yet, indicating a potential reattach to
        an already-terminal thread.
        """
        return self._explicit_thread_id and not self._run_seen

    async def _wait_for_run_done(self) -> _RunTerminal:
        """Await `_run_done`, raising if the stream was never entered or no run exists.

        Raises:
            RuntimeError: stream not entered, or no run started and no explicit
                thread_id was provided.
        """
        if self._run_done is None:
            raise RuntimeError("AsyncThreadStream not entered — use async with")
        if not self._run_seen and not self._explicit_thread_id:
            raise RuntimeError(
                "thread.output: no run has been started and no explicit thread_id "
                "was provided. Call thread.run.start() first."
            )
        return await self._run_done

    async def _apply_lifecycle_event(self, event: Event) -> None:
        """Update `interrupted` / `interrupts` / `_run_done` from a lifecycle or input event."""
        method = event.get("method")
        if method == "input.requested":
            params = event.get("params") or {}
            data = params.get("data") if isinstance(params, dict) else None
            interrupt_id = data.get("interrupt_id") if isinstance(data, dict) else None
            if isinstance(interrupt_id, str):
                payload: InterruptPayload = {
                    "interrupt_id": interrupt_id,
                    "value": data.get("value") if isinstance(data, dict) else None,
                    "namespace": params.get("namespace") or []
                    if isinstance(params, dict)

View on GitHub (pinned to 38031739e5)

When it happens

Trigger: Thrown at libs/sdk-py/langgraph_sdk/_async/stream.py:1929 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of langchain-ai/langgraph@38031739e5 (2026-08-26). Data as JSON: /api/errors/51648dc92bd0cb43. Report an issue: GitHub.