Skip to content

LangStage

Every stage for your LangGraph agent.

Write your agent once — any LangGraph CompiledGraph, from a single ReAct agent to a multi-agent supervisor — and run it on every surface with the same spec string, the same langstage.toml config, and the same LANGSTAGE_* environment variables. The web, your terminal, JupyterLab, and VS Code all become stages your agent can perform on.



Define your agent once, then put it on every stage.

Animated demo: the web app streams a reply with a tool call, then runs a delegated task on the board

Animated demo: langstage-cli streams a tool call and reasoning, then asks for approval

Animated demo: the JupyterLab sidebar runs a tool call and pauses for approval next to a notebook

Animated demo: the LangStage panel in VS Code streams a tool call and reasoning, then resumes after Approve

One agent spec, four of the stages. Every demo runs the keyless demo agent (langstage_core.demo.tools:graph) against the latest releases, and CI re-records them when a release lands.

Multi-agent? It already works.

A supervisor, swarm, or crew compiles to the same CompiledStateGraph LangStage loads — so multi-agent routing and hand-offs run and stream exactly like a single agent, with no extra setup. See Running a multi-agent supervisor.

30-second quickstart

No agent or API key yet? See a stage working with the built-in keyless demo agent:

pip install langstage
langstage run --demo

Then point it at your agent — a Python file (or module) that exports a LangGraph CompiledGraph:

langstage run --agent my_agent.py:graph

That same my_agent.py:graph spec runs unchanged on every other stage below.

The family

Stage Package Try it
Web app langstage langstage run --agent my_agent.py:graph
Terminal langstage-cli langstage-cli -a my_agent.py:graph
JupyterLab langstage-jupyter langstage-jupyter -a my_agent.py:graph, then the chat sidebar
VS Code langstage-vscode the LangStage panel (VS Code, Cursor, VSCodium, Windsurf, code-server), or @langstage in Copilot chat (sidecar from PyPI + the .vsix from the GitHub release)
Reference agent langstage-hermes langstage-hermes demo, or -a langstage_hermes.agent:graph on any stage
Shared core langstage-core spec loading, layered config, the AG-UI bridge and the task engine behind every stage; langstage-agui serves any agent over AG-UI

Why LangStage

  • Write once, run anywhere. A single module:attr / path/to/file.py:attr spec string is understood identically by every stage.
  • Keyless demos everywhere. Every surface has a deterministic, keyless demo (--demo on most; langstage-hermes demo), and a tool demo (langstage_core.demo.tools:graph, or --demo=tools) shows tool calls, reasoning and an approval prompt without an API key.
  • One config story. defaults < ~/.langstage/config.toml < langstage.toml < LANGSTAGE_* env < flags. Inspect the resolved values anywhere with --show-config, and gate CI on them with langstage config --strict.
  • Preflights and scripts. Every surface can check an agent in one command (--verify, check --live, --selfcheck), run one turn and print the reply, and uses the same exit codes: 0 ok, 1 failed, 2 paused for a human, 64 usage error.
  • Human-in-the-loop on every stage. One set of decision verbs (approve, edit, reject, respond), with approval buttons in the web app, JupyterLab and VS Code, and a menu in the terminal.
  • Built on the standard. Pure LangGraph; every surface streams through the official AG-UI adapter, and the same frames are available to your own code.

Coming from deepagent-* or cowork-dash?

Every package was renamed into the LangStage family. Your old pip installs, imports, and commands still work — see Migrating.

Start with Installation →