Skip to main content
LangChain and LangGraph let you build function-calling and graph-based agent loops. xpander supplies the agent definition (instructions, skills, model, knowledge-base links), and your handler wires those fields into a native LangGraph flow. In the SDK, skills are exposed as tools, the name agent loops use for them. This SDK integration is optional: agents created in Xpander Chat or through the API run on Claude Code, Codex or OpenCode by default. The steps below run a native LangGraph ReAct loop whose skills, model and instructions come from the xpander agent definition.

What doesn’t come built in

Unlike the Agno path, LangChain doesn’t have a one-call shortcut for pulling everything in at once, so we grab the agent definition from xpander and pass the pieces into create_react_agent ourselves. It’s only a few extra lines, but a few capabilities aren’t auto-wired and you wire them in your graph:

Prerequisites

  • Complete the Quickstart. You should already have the CLI installed, xpander login completed, and a scaffolded agent project.
  • Python 3.12+ for local development.
  • An LLM provider key in your shell that matches your LangChain provider package. For example: OPENAI_API_KEY for langchain-openai, ANTHROPIC_API_KEY for langchain-anthropic.

1. Install

All packages below are required for the default OpenAI example.

2. Set up scaffolding

These files get created:

xpander_config.json reference

xpander_config.json

3. Create task handler

The full pattern, wrapped in @on_task so xpander routes tasks to it:
xpander_handler.py
Here’s what’s happening:
  1. Agents(...).aget(agent_id=task.agent_id) returns a fully loaded agent object.
  2. xpander_agent.model_name is used as the LLM model id in your LangChain client.
  3. xpander_agent.tools.functions returns one callable per skill, with a payload schema signature and generated docstrings LangChain/LangGraph can use.
  4. xpander_agent.instructions contains general, role, and goal fields so you can build the system prompt format your graph expects.
  5. task.result = ... hands the output back to xpander for storage and UI/API visibility.

4. Edit the agent system prompt

agent_instructions.json contains the agent’s system prompt and maps directly to agent.instructions in code:
agent_instructions.json
Save the file and the next xpander agent dev syncs it to the control plane.

5. Stream chunks from LangGraph (optional)

For streaming output, use an async generator handler that yields TaskUpdateEvent values:
xpander_handler.py (streaming variant)
This pattern is for the decorator’s streaming mode, which is served through POST /invoke as SSE output.

6. Filter skill outputs with schema enforcement (optional)

When a skill returns large payloads, open the skill in Xpander Chat and set a filter on its Output schema tab. Only the fields you keep reach your LangChain loop, which cuts token usage. The steps are on Output response filtering.

7. Test local development

Run the handler with the dev server. Tasks created from any channel (REST, Slack, Xpander Chat) route to your laptop:
Routing cloud traffic to a local instance is a preview feature.When a local instance is running via xpander agent dev, it takes over and all tasks route to your locally running agent instead. Only one can be active at a time.
For one-shot testing without a server:
--output_format and --output_schema are useful for testing structured output without changing the agent’s settings in the control plane.

Next steps

Pre-built skills

What goes into agent.tools.functions, and how catalog skills authenticate.

Custom skills

Wrap a private API as a skill with @register_tool.

Full LangChain example

A standalone runnable script you can copy.

SDK integrations overview

What is auto-wired vs. manual for each supported agent loop.