← Back to blog
INTEGRATION8 min read

Coordinate LangChain Agents with NoLag

HB
Henco Burger
August 2, 2026

LangChain is excellent at building a single agent: prompts, tools, memory, and chains. What it does not give you is the layer above a single agent, where several agents and humans coordinate: dispatching work, sharing state, and gating actions. That is what NoLag provides. This guide connects a LangChain worker to a NoLag room so you can fan work out and collect results in realtime.

The shape

  • A dispatcher publishes tasks to a tasks topic.
  • One or more workers, each wrapping a LangChain chain, subscribe to tasks, run the chain, and publish to results.
  • Anything can watch results: a UI, a supervisor agent, or a human.

Because it is pub/sub, you add workers by starting more subscribers. No queue to run, no orchestration server to operate.

1. Install

pip install nolag langchain langchain-openai

2. A LangChain worker on a NoLag room

import asyncio
from nolag import NoLag
from langchain_openai import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate

# Build the LangChain agent (a simple summariser here)
llm = ChatOpenAI(model="gpt-4o-mini")
prompt = ChatPromptTemplate.from_template("Summarise this in one sentence:\n\n{input}")
chain = prompt | llm

async def main():
    client = NoLag("your_access_token")
    await client.connect()

    room = client.set_app("agents").set_room("workflow")
    await room.subscribe("tasks")

    def on_task(data, meta):
        async def run():
            result = await chain.ainvoke({"input": data["input"]})
            await room.emit("results", {
                "task_id": data["task_id"],
                "output": result.content,
            })
        asyncio.create_task(run())

    room.on("tasks", on_task)

    # Keep the worker alive
    await asyncio.Event().wait()

asyncio.run(main())

Start this process on as many machines as you like. Each instance is another worker pulling from the same tasks topic.

3. Dispatch work

Any authorised client can publish a task:

await room.emit("tasks", {
    "task_id": "t-001",
    "input": "NoLag is realtime messaging infrastructure with a coordination layer for agents.",
})

Results arrive on the results topic for anyone subscribed, so a dashboard or a supervising agent can react as they land.

Keeping a human in the loop

For steps that need sign-off, NoLag's coordination patterns include approval gates: an agent publishes a proposed action, a human approves or rejects it from a UI, and the agent proceeds only on approval. The AI agents guide covers approval gates, shared blackboard state, and observability in depth. For higher-level Python ergonomics, the nolag-agents package wraps these patterns so you do not hand-roll the topics.

Why coordinate over pub/sub

Direct orchestration, where one process calls each agent in sequence, is easy to start and hard to scale: it couples your agents together and hides what is happening. A realtime coordination layer decouples dispatch from execution, lets you add workers freely, and gives you a single stream to observe every decision. LangChain builds the agent; NoLag coordinates the system.

Next steps