Skip to content

ACP Kit

ACP adapters for production Python agents

Expose agents through ACP without lying about the runtime.

ACP Kit keeps models, modes, plans, approvals, MCP metadata, host tools, and session state aligned with what your agent can actually support.

ACP Kit is the adapter toolkit and monorepo for exposing existing agent runtimes through ACP without inventing runtime behavior the source framework does not actually own.

Today the repo ships two maintained adapter families:

The repo also ships helper packages around those adapters:

  • codex-auth-helper for Codex-backed Responses model construction in Pydantic AI or LangChain
  • acpremote for exposing any existing ACP agent or stdio ACP command over WebSocket

The helper packages are not adapters. They are adjacent transport or model-construction layers that support the adapters when you already have a runtime boundary in place.

ACP Kit adapters are designed for truthful ACP exposure: if the runtime cannot really support a model picker, mode switch, plan state, approval flow, or MCP surface, the adapter does not pretend that it can.

Three ideas drive the SDK:

  • truthful ACP exposure instead of optimistic UI surface
  • host-owned state through explicit providers and bridges
  • runnable examples that map directly to maintained code in examples/pydantic/ and examples/langchain/

Package Map

Package Purpose Start here
pydantic-acp maintained ACP adapter for pydantic_ai.Agent If your runtime starts from a pydantic_ai.Agent
langchain-acp graph-centric ACP adapter for LangChain, LangGraph, and DeepAgents If your runtime already produces a compiled graph
acpkit CLI target resolution, launch helpers, adapter dispatch If you want acpkit run ... or acpkit launch ...
helpers supporting packages such as codex-auth-helper and acpremote If you need transport or model-construction helpers around an adapter

What ACP Kit Covers

ACP Kit is not a new agent framework. It sits at the boundary between an existing runtime and ACP clients.

That boundary includes:

  • session creation, loading, forking, replay, and close
  • session-local model and mode state
  • ACP config options and slash commands
  • prompt resources such as file refs, directory refs, embedded text selections, branch diffs, images, and audio
  • native plan state and provider-backed plan state
  • approval workflows and remembered policy metadata
  • MCP server metadata and tool classification
  • host-backed filesystem and terminal helpers
  • projection of reads, writes, and shell commands into ACP-friendly updates

Quickstart

Install the root package with the adapter that matches your runtime:

uv pip install "acpkit[pydantic]"
uv pip install "acpkit[langchain]"

Smallest Pydantic path:

from pydantic_ai import Agent
from pydantic_acp import run_acp

agent = Agent(
    "openai:gpt-5",
    name="weather-agent",
    instructions="Answer briefly and ask for clarification when location is missing.",
)


@agent.tool_plain
def lookup_weather(city: str) -> str:
    """Return a canned weather response for demos."""

    return f"Weather in {city}: sunny"


run_acp(agent=agent)

Smallest LangChain path:

from langchain.agents import create_agent
from langchain_acp import run_acp

graph = create_agent(model="openai:gpt-5", tools=[])

run_acp(graph=graph)

From there you can layer in:

A Good Reading Order

New to ACP Kit

Start with Installation, then the quickstart hub, then choose the adapter-specific quickstart that matches your runtime.

Building a real product integration

Read the adapter overview that matches your runtime, then move to providers, bridges, and the maintained examples.

Why This Adapter Feels Different

Most ACP adapters can stream text. The hard part is preserving the rest of the runtime honestly.

ACP Kit is designed around that harder requirement:

  • if a session supports switching models, the adapter exposes model selection
  • if a session does not, the adapter does not fake a model picker
  • if a plan exists, the ACP plan state is updated and can be resumed
  • if a tool call needs approval, ACP permission semantics are preserved
  • if the host owns mode state, plan persistence, or config options, that ownership stays explicit

That design keeps the adapter predictable for clients and maintainable for hosts.