Inside the platform

LangChain Deep Agents in production: what the harness gives you, and what you still have to build

LangChain Deep Agents is an open-source agent harness: the code around a model's tool-calling loop that lets it carry a long, multi-step job to the end. Version 0.7 ships file tools over a pluggable backend, subagents through a task tool, on-demand skills, automatic summarisation, offloading of oversized tool results, an execute tool when the backend can run commands, and human-in-the-loop interrupts; the to-do planning tool is one line of middleware away. What it does not ship is the rest of a production system: storage that survives restarts, channels, credentials, approvals a person can act on, and someone to run it.

In this guide

What does "deep agent" mean?

A deep agent is one built to work through a long, multi-step task rather than answer in a turn or two: it plans, keeps notes outside its context window, hands sub-tasks to helpers and keeps going after the conversation outgrows the model's memory. LangChain's documentation describes Deep Agents as "designed for complex, multi-step tasks that require planning and decomposition", and the package README calls it "an opinionated agent that runs out of the box", with "defaults tuned for long-horizon, multi-step work" and an acknowledgement that it was primarily inspired by Claude Code. The depth comes from the harness, not from a special model: any chat model that supports tool calling can drive it.

What is an agent harness?

An agent harness is everything around the model loop. LangChain's own formula is "Agent = Model + Harness", where the harness is "the prompt, the tools, and any middleware that shapes behavior". By that definition LangChain's create_agent is a minimal harness and Deep Agents an opinionated one built on it, and both run on LangGraph, the runtime that saves, streams and resumes the loop. A harness is neither the runtime underneath nor the hosting around it, which is why "we use Deep Agents" answers only part of the production question. Our comparison of LangChain, LangGraph and Deep Agents sets out the three layers side by side.

What Deep Agents 0.7 ships

Checked against the installed deepagents 0.7.23 source, not only the documentation.

CapabilityWhat you getOn by default?
File toolsls, read_file, write_file, edit_file, delete, glob, grep over a pluggable backend.Yes, over an in-state backend (no real disk).
SubagentsA task tool that runs a subagent in its own context and returns one report; a general-purpose subagent is included.Yes.
SummarisationOlder history is summarised and the full text written to the backend, at 85% of the model's window (when known), keeping 10%.Yes.
Large-result offloadingTool results over 20,000 tokens are saved to the backend and replaced by a path and a preview.Yes.
ShellAn execute tool.Only when the backend can run commands.
Skills and memorySKILL.md folders loaded on demand; AGENTS.md memory loaded at start.When you pass skills or memory.
Human approvalA pause before chosen tool calls, resumed with approve, edit or reject.When you pass interrupt_on, with a checkpointer.
PlanningA write_todos tool for a tracked task list.No: opt-in since 0.7.

Read the right-hand column as a list of decisions. A deep agent that is going to production makes each one explicitly:

from deepagents import create_deep_agent
from langchain.agents.middleware import TodoListMiddleware
from langgraph.checkpoint.postgres import PostgresSaver

with PostgresSaver.from_conn_string(DB_URI) as checkpointer:
    checkpointer.setup()  # creates the tables; safe to repeat
    agent = create_deep_agent(
        model="anthropic:claude-sonnet-4-6",
        tools=[lookup_order, refund_order],
        backend=sandbox,                      # not the in-state default
        checkpointer=checkpointer,            # threads survive restarts
        interrupt_on={"refund_order": True},  # a person approves refunds
        middleware=[TodoListMiddleware()],    # planning is opt-in since 0.7
    )

Here sandbox is a backend from a sandbox provider; LangChain's sandbox documentation lists providers including Daytona, E2B, Modal, Runloop, Vercel and its own LangSmith sandboxes. Every argument after tools is a choice the defaults leave open.

What production still needs, and how Olano handles it

The harness covers how an agent works. A business also needs it to be durable, reachable, governed and maintained.

ConcernWhat Deep Agents providesWhat production still needs, and how Olano handles it
Conversation stateA checkpointer argument that takes any LangGraph saver. None is set by default.A saver that survives restarts, encryption, and deletes that reach every copy. Olano stores checkpoints in Postgres by default (SQLite for a single machine), encrypts conversation history in the database on managed instances, and removes a deleted thread from every store.
Files and commandsAn in-state backend by default: files live in the thread's checkpoints, with no disk and no shell. LangChain warns that its local disk and local shell backends reach the host and should not be used in deployed agents.A real workspace and isolation for commands. On a managed Olano deployment each agent's file and shell tools run in its own isolated container over a real workspace, with git, Python, Node, ffmpeg, pandoc and PDF tools preinstalled.
Context windowSummarisation sized from the model's profile. Without a known window it falls back to a 170,000-token trigger that keeps only the last 6 messages.A policy based on the real window. Olano takes the window from its model catalogue when the package lacks it, compacts at 85% and keeps 35% by default, saves the summarised text in the workspace, offers /compact on demand, and offloads MCP results over 5,000 tokens to a file.
Human approvalinterrupt_on: the run pauses before a tool call and waits for a decision sent back on the same thread.Someone to see the request, rules for what always asks, and a record. Olano has approval profiles, an Approvals inbox, optional YES/NO approval codes for owners on WhatsApp, and an approval history. Browser purchases, payments and deletions, and commands in another agent's workspace, are approved individually even in Auto mode and in scheduled and background runs.
Tools and credentialsYour tools and MCP tools through tools. Secrets are left to you.Per-agent secrets, sign-in and renewal. Olano resolves credentials from a vault per agent, signs services in by magic link, renews MCP sign-ins before they expire, and when a provider revokes one the agent offers the sign-in link in the same message.
ChannelsNone.Olano connects agents to 15+ messaging channels, including WhatsApp, Telegram, Slack, Email and SMS, plus the dashboard chat.
Unattended workA graph runs when something invokes it.Schedules (cron, with a model per job), a heartbeat that reads standing instructions every 60 minutes by default, and Cortex, Olano's background improvement cycles. When you switch Cortex on, it runs Fully Autonomous by default; rewrites of an agent's own instructions, outbound sends and irreversible actions always wait for a human.
Long turnsStreaming APIs. Where the run lives is up to your server.A turn that runs on the server, not in the browser. In Olano, closing the tab or locking a phone does not stop a reply; you rejoin it where you left off, and Stop ends it from any device.
UpgradesA fast-moving release line: 28 releases of 0.7 between 29 July and 16 October 2026.Olano pins the Deep Agents version exactly, raises the LangChain floors with it, and runs the full test suite, including live sandbox tests, before a release; managed instances are told when an update is ready and choose when to take it.

Lessons from running it: upstream behaviour worth knowing

None of these is a bug. Each is documented upstream behaviour that surprises people moving from a notebook to a deployment.

  • Planning is opt-in since 0.7. Earlier versions included the write_todos tool by default; a deep agent built from an older tutorial no longer plans unless you add TodoListMiddleware.
  • The default filesystem is the checkpoint. The in-state backend saves files with every step, so LangChain advises against large files there, and files a subagent writes stay visible to the parent afterwards.
  • An unknown model changes summarisation silently. A model newer than its provider package has no window in its profile, so the 170,000-token, six-message fallback applies and an agent forgets the start of a short session. Set the window yourself; our guide to switching LLM providers shows how.
  • Summaries arrive in the stream. Tokens from the summarisation call stream like reply tokens unless you drop chunks whose metadata carries lc_source: "summarization". The streaming debugging guide covers this and its cousins.
  • Offloads land at the backend root. Large tool results go to /large_tool_results/ and evicted history to /conversation_history/ on the default backend. LangChain suggests keeping that default in state; if it maps to real disk, decide where those folders go.
  • Approvals need the same thread. An interrupt resumes only through a checkpointer and the same thread_id, and several approvals in one step arrive as one batch that needs a decision for each, in order. Our checkpointer guide covers the storage side.
  • A sandbox protects the host, not the data. LangChain's documentation is explicit that sandboxes do not stop prompt injection from running commands inside them, or data leaving over the network, so keep secrets out of the sandbox.

What are the key principles of harness engineering?

Harness engineering is improving an agent by changing what surrounds the model (its prompt, tools and middleware) rather than the model itself. Five principles recur in LangChain's documentation and in our own setup:

  1. Keep the context small and relevant. Offload big results, summarise old turns, and send heavy sub-tasks to subagents that return one report.
  2. Enforce boundaries in tools and sandboxes, not the prompt. In the README's words: "Enforce boundaries at the tool/sandbox level, not by expecting the model to self-police."
  3. Make every step durable and inspectable. Checkpoints let a run resume and let you read what happened; traces or local callbacks show why.
  4. Put a person in front of consequential actions. Interrupts for anything that spends, sends or deletes.
  5. Tune the harness to the model. Deep Agents supports harness profiles per provider or model, which change the prompt, tool descriptions and visible tools without forking.

When LangChain's managed deployment fits better

LangChain offers its own route to production. Its documentation recommends Managed Deep Agents, "a CLI-first hosted runtime" in public beta on LangSmith Cloud: you author the agent as a project of files, and it runs the same harness on LangSmith's Agent Server with threads, streaming, sandboxes and schedules. Teams needing custom application code or authentication can use a LangSmith Deployment directly, which provisions the checkpointer and store and adds authentication, webhooks, cron and observability.

That is the better choice when your team writes the agent in Python, wants tracing and evaluation in LangSmith alongside it, or the agent is the backend of your own product. Olano fits when the agent works for a business on the channels its customers and staff already use, approvals are made by people who never open a terminal, and you want a dashboard, a credential vault and managed models rather than a codebase.

How Olano helps

Every Olano agent runs the Deep Agents harness on LangGraph and LangChain, with the right-hand column of the table above already built and maintained: production checkpoints, an isolated workspace per agent, a context policy from the model's real window, approvals with an inbox, a per-agent vault, channels, schedules and Cortex, and turns that outlive the browser tab. The Olano platform page covers the product, and security covers isolation, approvals and audit. The limit is the same one as in the managed-deployment comparison: Olano agents are configured in a dashboard or by chat, not written as Python, so code-level customisation of the harness belongs on the libraries directly.

FAQ

Is LangChain Deep Agents production-ready?

The harness is: it runs on LangGraph's durable runtime and LangChain describes it as designed for production deployments, although its PyPI listing still carries a Beta status. The defaults are not. A production agent needs a persistent checkpointer, a real or sandboxed backend instead of the in-state default, approval rules and somewhere to run, which you configure yourself or get from a platform.

Does Deep Agents still include a planning tool?

Yes, but since version 0.7 it is opt-in. Pass TodoListMiddleware from langchain.agents.middleware in the middleware argument to give the agent the write_todos tool.

Do I need LangSmith to run Deep Agents in production?

No. LangSmith adds tracing, evaluation and managed deployment, and LangChain recommends it, but the deepagents library runs without it. Olano runs Deep Agents without switching LangSmith on.

What is the difference between Deep Agents and LangGraph?

LangGraph is the runtime that saves, streams and resumes a run. Deep Agents is a harness built on LangChain's create_agent, which runs on LangGraph, so a deep agent is a LangGraph graph with planning, files, subagents and summarisation attached.

Can Olano run my own Deep Agents code?

Not as Python. Olano agents are configured, not coded: you add tools through connectors and MCP servers, and procedures as skills written in plain Markdown. If your harness changes are code, build on the libraries directly.

Related reading

The rest of the LangChain series, and where to go next.

Checked 16 October 2026 against deepagents 0.7.23 (the version Olano pins), LangChain 1.4, langchain-core 1.6 and LangGraph 1.2, by reading the installed source and running the sample with a test model, and against LangChain's documentation (Deep Agents overview, context engineering, backends, human-in-the-loop, going to production, Managed Deep Agents) and the PyPI release history. Olano is an independent company that builds on LangChain's open-source libraries; it is not affiliated with or endorsed by LangChain, Inc. Library behaviour changes between releases; LangChain's documentation is the primary source. If we have described something wrongly, write to support@olano.ai and we will correct this page.

Running Deep Agents for a business?

Tell us what your agents need to do and where they need to reach people. We will tell you whether Olano runs it for you or you are better off on the libraries and LangChain's own hosting.

Discuss a project