See the docs for curated release notes.
⚠ BREAKING CHANGES
create_deep_agentno longer includesTodoListMiddlewareby default, thewrite_todostool,todosstate channel, and todo-planning prompt are now absent. Passmiddleware=[TodoListMiddleware()]to restore them on the main agent; add it to eachSubAgent's middleware to restore them there. (#4929) (9340518)- Default agent prompts are now lean: the authored base prompt is empty, and tool-usage prose that duplicates tool schemas is trimmed.
BASE_AGENT_PROMPTis deprecated (removal indeepagents==0.9.0) but remains importable and still returns the previous authored prompt verbatim; pass it ascreate_deep_agent(system_prompt=BASE_AGENT_PROMPT)to restore the old behavior. (#4859) (#4979) (a8d1b32) (d9f54fc) - The built-in tool-usage prompt constants
TASK_SYSTEM_PROMPT,ASYNC_TASK_SYSTEM_PROMPT,SUMMARIZATION_SYSTEM_PROMPT,FILESYSTEM_SYSTEM_PROMPT, andEXECUTION_SYSTEM_PROMPTare removed, and thesystem_promptdefault onSubAgentMiddleware,AsyncSubAgentMiddleware,SummarizationToolMiddleware, andcreate_summarization_tool_middlewareis nowNone, which injects no prose. Pass your own string to restore prompt text. (#4859) (a8d1b32) FilesystemBackendandLocalShellBackendnow default tovirtual_mode=True. Filesystem paths are anchored underroot_dir,..traversal is rejected, and paths resolving outsideroot_dirraiseValueError. Previously an unspecifiedvirtual_modeemitted a deprecation warning and fell back toFalse, where absolute host paths were used as-is and..could escaperoot_dir. Passvirtual_mode=Falseexplicitly to restore the old filesystem behavior. (#4541) (540a0fa)- Agents now see a destructive, recursive
deletefilesystem tool whenever the backend supports it, and filesystem permissions classifydeleteas a write operation — so an existing rule allowing writes to a path also authorizes recursively deleting that subtree unless a narrower deny or interrupt rule covers the target. Because recursive deletes affect descendants, deny and interrupt checks use bulk path overlap instead of exact-path matching. To keep the previous behavior, add a deny or interrupt rule, or omitdeletefromFilesystemMiddleware(tools=...). Missing paths return a not-found error,CompositeBackendreports an unsupported-operation error when a routed sub-backend cannot delete, and the tool is hidden from the model entirely when the backend itself does not implement it. (#3659) (#3691) (#3765) (#3851) (f2a21ec) write_filecan now create a file if it is missing and replaces it entirely if it already exists, instead of returning a file-exists error. Thewrite_filetool description no longer requires reading the file first. There is no "create-only" compatibility mode. Workflows, prompts, tests, or guardrails that relied on the file-exists error to forceedit_fileusage or to protect existing content must omitwrite_file, add explicit permission or interrupt rules, or useedit_filewhere preserving existing content matters. (#4109) (2506fcc)- Removed deprecated backend compatibility shims. Callers must pass concrete
BackendProtocolinstances (not factories), configureStoreBackendwith an explicitnamespace, and use the currentls/glob/grep/ReadResultAPIs. (#4541) (540a0fa) - The deprecated
files_updateattribute and constructor keyword are removed fromWriteResultandEditResult. Custom backends must stop passingfiles_update=, and callers must stop readingresult.files_update; state writes are emitted directly byStateBackend. (#4541) (540a0fa) - Removed the deprecated
BackendProtocolmethodsls_info,als_info,glob_info,aglob_info,grep_raw, andagrep_raw. Usels/glob/grepand their async counterparts. (#4541) (540a0fa) SummarizationMiddleware(history_path_prefix=...)was removed and now raisesTypeError. ConfigureCompositeBackend(artifacts_root=...)instead. (#4541) (540a0fa)- Agent-facing
lsandglobtool output now renders empty results asNo files foundinstead of[]; direct backend APIs continue to return structured emptyLsResultandGlobResultvalues. Callers that parse tool output should update those checks. (#3709) (efafd1e) read_fileno longer renders raw text with a fixed-widthcat -n-style line-number gutter and tab separator. Line and continuation markers are dynamically aligned and separated from source content by two spaces, and theLINE_NUMBER_WIDTHconstant is removed fromdeepagents.backends.utilsanddeepagents.middleware.filesystem. Callers that parse raw tool output should update those parsers. (#4561) (cf057b4)
Features
- Custom middleware passed to
create_deep_agent(..., middleware=[...])can replace a default middleware instance when.namematches, so defaults such asSummarizationMiddlewarecan be overridden without also excluding the built-in instance. (#4251) (90c8472) FilesystemMiddleware(tools=[...])accepts a keyword-only allowlist of built-in filesystem tools, typed by the newly exportedFsToolNameliteral ("ls","read_file","write_file","edit_file","delete","glob","grep","execute"); pass"all"or omit the argument to keep every tool. A list must include"read_file"or the constructor raisesValueError. Omitted built-in tools are non-executable, and custom user tools are unaffected. (#4325) (#4698) (704a70d) (9709525)- Shorten LLM-facing descriptions for the
tasktool and filesystem tools (read_file,grep,edit_file,glob,execute). (#5009) (761f5f0) GrepResultandGlobResultnow carry atruncatedflag so supporting backends can return valid partial results when a match cap or backend deadline is reached; agent-facing tool output adds a note telling the model to narrow the search.FilesystemBackendreturns partialgrepandglobresults on its backend timeout rather than erroring, while other backend or middleware timeouts may still return errors. Itsglobalso gains brace expansion such as*.{py,md}(already supported by the state and store backends). (#4063) (ef591e7)- The agent-facing
grepmatch cap is configurable:FilesystemMiddleware(grep_max_count=...)sets the default (1000;Nonedisables it) and the model can override it per call through the tool's newmax_countargument.grep/agreponBackendProtocoland all built-in backends accept a keyword-onlymax_count. Local ripgrep output is streamed and terminated once the cap is reached. DirectFilesystemBackend.grep()callers can request surrounding lines with keyword-onlycontext_lines. (#4570) (#4706) (8e86f5e) (65230df) - Paginated built-in
read_fileresponses report the returned source-line range and nextoffset; total and remaining line counts are included when the backend knows the file length. Resume offsets remain safe when sandbox or middleware limits shorten the visible page. (#4540) (8321194) - Optional video frame extraction for
read_file, enabled by the newdeepagents[video]extra. Video files are sampled into JPEG frames, withoffsetandlimitinterpreted as seconds. Without the extra, existing generic video/file content-block behavior remains. (#4094) (b927147) FilesystemMiddlewarecan capture oversizedexecutetool output directly inside the sandbox artifact path on compatible, opted-inBaseSandboximplementations to reduce round trips;LangSmithSandboxopts in by default. (#4230) (02f5bd7)- Automatically enable Fireworks prompt-cache session affinity when a compatible
langchain-fireworksinstallation is available. (#4598) (5d878bf) - Add a built-in NVIDIA Nemotron 3 Ultra harness profile and NVIDIA NIM app-origin attribution. (#4192) (#4455) (d5a60ec) (4cb4749)
RubricMiddlewarenow accepts any positivemax_iterationscap instead of enforcing a hard upper bound. (#4405) (d6692a7)
Bug Fixes
- Keep fields marked with
PrivateStateAttr, including fields declared throughcreate_deep_agent(state_schema=...), out of subagent inputs and returned parent-state updates. (#4587) (a4662c0) - Preserve
ContextTthrough thecreate_deep_agent(..., middleware=[...])type annotation so type checkers accept context-aware middleware when a matchingcontext_schemais passed. (#4055) (7be76c7) - Accept YAML list values as well as comma-separated strings for skill
allowed-toolsfrontmatter, and make skill truncation warnings actionable with field name, path, length, configured limit, and impact. (#4140) (#4141) (d62534c) (2f5f5b8) - Align filesystem instructions with the tools that remain after allowlist and backend-capability filtering, so agents no longer reference hidden
grep/globtools or prohibit equivalent shell search when dedicated search tools are unavailable. (#4920) (#4921) (d3650c7) (b65cc00) - Propagate default-backend failures from
CompositeBackend.ls("/")andCompositeBackend.als("/")instead of returning successful route-only listings. (#4925) (4c3b166) - Correct
CompositeBackend.glob/CompositeBackend.aglobrouting so explicit default-backend paths such as/toolsdo not also return files from routed backends such as/memories. (#4531) (cbdb0a7) - Propagate default- and routed-backend failures from root
CompositeBackend.glob(..., path=None)/aglob(..., path=None)andpath="/"searches instead of returning incomplete successful results. (#4063) (ef591e7) - Constrain sandbox
globand slash-patterngrepsearches to their declared search root by treating leading/as search-root-relative, rejecting..traversal segments, and filtering symlink-resolved matches outside the root. (#4588) (c6c7213) - Unify
grep(..., glob=...)include-glob semantics across filesystem and in-memory backends: basename patterns like*.pymatch at any depth, and slash-containing patterns likesrc/**/*.pymatch relative paths consistently. (#3936) (feab6e0) - Improve agent-facing
grepdescriptions and no-match hints to steer regex-looking patterns toward literal searches, route slash-containing sandbox include-globs correctly, and shorten default search timeouts so bad patterns and huge trees return guidance faster. (#4168) (b1dbf5e) - Align sandbox delete behavior with other backends by returning not-found errors for missing paths, and avoid over-blocking unrelated sibling deletes when deny rules use glob patterns. (#4321) (d77496b)
- Improve rubric grader failure diagnostics with configured model, structured-output strategy, and integer HTTP status when available. (#4938) (#4967) (f51d3a0) (bca70aa)
- Emit
max_iterations_reachedas the terminalRubricMiddlewarestatus when the iteration cap is exhausted, instead of a finalneeds_revisionevent that will not loop. (#4406) (a51c8d2) - Handle missing async subagent URLs consistently in
check_async_taskandcancel_async_task. (#3967) (b0d92c0)
Performance Improvements
Thanks to our community contributors: Kavish Kartha (@kavishkartha05) (Twitter, LinkedIn), nv-kasikritc
Internal maintainers: Nick Hollon (@nick-hollon-lc), Nishitha M (@imnishitha), Hunter Lovell (@hntrl), Srimanth Tangedipalli (@srimanthtangedipalli-eng), Ramon Nogueira (@ramon-langchain), John Kennedy (@jkennedyvz), ccurme (@ccurme), Shrikar Seshadri (@davibinboi), Mason Daugherty (@mdrxy)
Released by: Mason Daugherty (@mdrxy)
Git log since deepagents==0.6.12
This commit history includes changes to this package. Commits are listed newest first.
77f0d9arelease(deepagents): 0.7.0 (#4297)fef1ff3chore(deps): raiselangchain-anthropicminimum to 1.5.3 (#5120)0d08747perf(langsmith-sandbox): run LangSmith sandbox commands over the async client (#5061)c0afec5feat(code): add Claude Opus 5 support (#5049)761f5f0feat(sdk): trim built-in tool descriptions (#5009)d9f54fcrefactor(sdk,evals): deprecate legacy base agent prompt (#4979)9340518feat(sdk,code,quickjs)!: make theToDoListMiddlewarelist opt-in (#4929)9a24bafrefactor(sdk): correct prompt docs and harden rubric diagnostics (#4989)d046427revert(code,sdk): revertSystemPromptConfig(#4969)f51d3a0fix(sdk): diagnose rubric grader structured output errors (#4938)bca70aafix(sdk): include HTTP status in rubric grader errors (#4967)a8d1b32feat(sdk,code,quickjs): lean system prompt by default, restorable (#4859)540a0farefactor(sdk)!: remove deprecated backend compatibility shims (#4541)9f92d2fbuild(sdk): raise dependency minimums (#4936)4c3b166fix(sdk): propagate root listing errors fromCompositeBackend(#4925)d3650c7fix(sdk): condition large-result guidance on visible tools (#4920)b65cc00fix(sdk): conditionexecutesearch guidance on visible tools (#4921)a8e4768docs(sdk): explain backend file operation semantics (#4919)9e8d478refactor(sdk): extract prompt caching helpers (#4892)8326177chore(deps): bump pyasn1 from 0.6.3 to 0.6.4 in /libs/deepagents (#4897)8400b89chore(deps-dev): bump setuptools from 82.0.1 to 83.0.0 in /libs/evals (#4896)b708207chore(deps-dev): bump pillow from 12.2.0 to 12.3.0 in /libs/evals (#4876)29d6046chore(deps): requirelangchain-quickjs0.3.3 (#4802)9709525fix(sdk): remove excluded tools fromToolNode(#4698)e61156dtest(sdk): handle expected middleware warnings (#4717)5d878bffeat(sdk): useFireworksPromptCachingMiddlewarefor session affinity (#4598)8e86f5efeat(sdk): add total match cap and streaming to grep (#4570)cf057b4fix(sdk)!: disambiguateread_fileline gutters (#4561)8321194feat(sdk): report remaining lines for paginated reads (#4540)65230dffeat(sdk): support surrounding lines in filesystem grep results (#4706)a4662c0fix(sdk): isolate private custom state from subagents (#4587)44daa24chore(repo): raise LangChain integration minimums (#4601)c6c7213fix(langsmith-sandbox): sandbox glob path boundary checks (#4588)d5a60ecfeat(sdk): add NVIDIA Nemotron 3 Ultra harness profile (#4192)cbdb0a7fix(sdk): isolate composite glob paths (#4531)7be76c7fix(sdk): preserveContextToncreate_deep_agentmiddleware(#4055)d62534cfix(sdk): accept list format for skillallowed-tools(#4140)2f5f5b8fix(sdk): make skill truncation warnings actionable (#4141)56c5a5efeat(sdk): improve system prompt configurability (#4437)4cb4749feat(sdk): add NVIDIA NIM app-origin attribution (#4455)b1dbf5efix(sdk): improve grep literal guidance and sandbox glob routing (#4168)ef591e7feat(sdk): bound grep/glob with partial results and atruncatedflag (#4063)d77496bfix(sdk): sandbox not-found contract and glob deny over-blocking on delete (#4321)704a70dfeat(sdk): addenabled_toolsallowlist toFilesystemMiddleware(#4325)feab6e0fix(sdk): unifygrepinclude-glob semantics across backends (#3936)b0d92c0fix(sdk): moveget_sync()inside try incheck_async_taskandcancel_async_task(#3967)d4ba51cdocs(sdk): expandprofilespackage docstring with directory layout (#4041)b927147feat(sdk): optional video frame extraction onread_file(#4094)d6692a7feat(code,sdk): add rubric iteration controls (#4405)a51c8d2fix(sdk): emit terminal rubric iteration status (#4406)90c8472feat(sdk): allow users to override default middleware by name (#4251)02f5bd7feat(sdk): reduce round trips when offloading large tool results withsandbox.execute(#4230)8e8680bbuild(deps): refresh dependency minimums (#4331)23500f4chore(deps): bump langgraph-checkpoint from 4.1.0 to 4.1.1 in /libs/deepagents (#4274)965cbd5chore(repo): cut over v0.7 to main (#4280)