Expose LangChain and LangGraph agents through ACP Kit.
Project description
langchain-acp
langchain-acp exposes LangChain, LangGraph, and DeepAgents graphs through ACP Kit.
It keeps ACP Kit's adapter architecture intact while staying graph-centric on the LangChain side:
graph=...graph_factory=...graph_source=...
Install
uv add langchain-acp
pip install langchain-acp
With optional DeepAgents compatibility:
uv add "langchain-acp[deepagents]"
pip install "langchain-acp[deepagents]"
Contributor setup from the monorepo root:
uv sync --extra dev --extra langchain
Quickstart
from langchain.agents import create_agent
from langchain_acp import run_acp
graph = create_agent(model="openai:gpt-5", tools=[])
run_acp(graph=graph)
If you are using Codex-backed LangChain models through codex-auth-helper, you must pass the
LangChain system behavior through the helper's instructions= argument. The same repo policy now
applies on the Pydantic path too: Codex-backed model factories take explicit instructions instead of
inventing an implicit default.
from codex_auth_helper import create_codex_chat_openai
from langchain.agents import create_agent
model = create_codex_chat_openai(
"gpt-5.4",
instructions="You are a careful assistant that explains concrete workspace observations.",
)
graph = create_agent(model=model, tools=[], name="codex-graph")
That instructions string is required and is forwarded to the OpenAI Responses request behind
ChatOpenAI. See the maintained example at
https://github.com/vcoderun/acpkit/blob/main/examples/langchain/codex_graph.py.
Use the same pattern inside graph_factory= paths too. If the graph is rebuilt per session, keep
the Codex system behavior explicit in the factory instead of relying on an implicit default:
from codex_auth_helper import create_codex_chat_openai
from langchain.agents import create_agent
from langchain_acp import AcpSessionContext
def graph_from_session(session: AcpSessionContext):
mode_name = session.session_mode_id or "ask"
model_name = session.session_model_id or "gpt-5.4-mini"
model = create_codex_chat_openai(
model_name,
instructions=f"Operate in {mode_name} mode and explain concrete workspace observations.",
)
return create_agent(model=model, tools=[], name=f"codex-{mode_name}")
If ACP session state should affect graph construction, use graph_factory=:
from langchain.agents import create_agent
from langchain_acp import AcpSessionContext, create_acp_agent
def graph_from_session(session: AcpSessionContext):
mode_name = session.session_mode_id or "default"
return create_agent(model="openai:gpt-5", tools=[], name=f"graph-{mode_name}")
acp_agent = create_acp_agent(graph_factory=graph_from_session)
What The Adapter Covers
langchain-acp carries the same ACP Kit seams that matter elsewhere in the repo, but mapped onto graph ownership instead of agent ownership:
- session stores and transcript replay
- model, mode, and config-option providers
- native plan state through
TaskPlan - approval bridging from
HumanInTheLoopMiddleware - capability bridges and graph-build contributions
- tool projection maps and event projection maps
graph,graph_factory, andgraph_source- DeepAgents compatibility helpers where they add truthful ACP behavior
That means the adapter can expose:
- plain LangChain
create_agent(...)graphs - compiled LangGraph graphs
- DeepAgents graphs
without collapsing everything into a bespoke ACP runtime.
Session-owned Graph Rebuilds
If ACP session state should decide which graph gets built, graph_factory= is the intended seam:
from langchain.agents import create_agent
from langchain_acp import AcpSessionContext, AdapterConfig, MemorySessionStore, run_acp
def graph_from_session(session: AcpSessionContext):
mode_name = session.session_mode_id or "default"
model_name = session.session_model_id or "openai:gpt-5-mini"
return create_agent(
model=model_name,
tools=[],
name=f"graph-{mode_name}",
system_prompt=f"Operate in {mode_name} mode.",
)
run_acp(
graph_factory=graph_from_session,
config=AdapterConfig(session_store=MemorySessionStore()),
)
Use this when workspace path, mode, model, or session metadata should rebuild the graph dynamically.
The maintained examples under examples/langchain/ also expose ACP-visible model and mode choices
through available_models, available_modes, default_model_id, and default_mode_id, then
consume session.session_model_id and session.session_mode_id inside graph_factory=....
DeepAgents Compatibility
DeepAgents graphs are supported as compiled LangGraph targets.
Use the compatibility helpers only when they add real value:
DeepAgentsCompatibilityBridgeDeepAgentsProjectionMap
Maintained examples:
Docs:
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file langchain_acp-0.9.2.tar.gz.
File metadata
- Download URL: langchain_acp-0.9.2.tar.gz
- Upload date:
- Size: 31.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.11.8 {"installer":{"name":"uv","version":"0.11.8","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b4ea6f157d75d2c107b6b34208a0a47d4243df4168889602d28f260d6bb19d76
|
|
| MD5 |
e63ae1298d849b7381e71cbbeacf896b
|
|
| BLAKE2b-256 |
6c4d64885c6261317663ae2d644bc6662914abab039662baddf82fd4c668174b
|
File details
Details for the file langchain_acp-0.9.2-py3-none-any.whl.
File metadata
- Download URL: langchain_acp-0.9.2-py3-none-any.whl
- Upload date:
- Size: 41.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.11.8 {"installer":{"name":"uv","version":"0.11.8","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5e6943451f1061955be18669904690a88b80d5d112a1ff00a6fb1b9d5b1817f1
|
|
| MD5 |
de40a77d6c107c9c0c441887ca9f0248
|
|
| BLAKE2b-256 |
35ec63838acfac76026f1a63e897eb441551e68e8a970851a84fc46fff1bb253
|