release(deepagents): 0.7.0 - #4297
Conversation
7e180c9 to
35da491
Compare
38cbbb0 to
2f1353d
Compare
|
Active bypass label(s): Consequence: release-please will open a separate release PR for every managed component this PR touches, because it scopes commits by changed file path (not by title scope alone). Touched release-please component(s): This PR title does not currently look bump-worthy. Fan-out still matters if the squash-merge subject is later rewritten to a bump-worthy type (or a Confirm intentional, or splitPrefer:
Remove the bypass label(s) to re-enable the blocking checks. 📖 Multi-component fan-out |
|
This PR has been open for at least 14 days. It will be closed automatically once it has been open for at least 30 days and this warning is at least 16 days old, unless the |
|
Warning Partner upper-bound mismatch — this release bumps
To fix: update each partner's If intentional: no action needed — existing published partner versions will continue to work with the older SDK range. New partner releases will need the bump. |
Editable installs resolve the pin through `_sdk_requirement_for_cli`, so patch that entry point instead of the non-editable `sdk_requirement_from_cli` helper.
|
ℹ️ PR scope/file mismatch acknowledged via the Title scope(s): Touched package dir(s) not covered by those scopes:
Release-please consequence: if this PR title is bump-worthy ( Remove the label to re-enable the block. |
|
The package release workflow has started: Follow the linked run for build, test, and publish status. |
Caution
Merging this PR will automatically publish to PyPI and create a GitHub release.
For the full release process, see
.github/RELEASING.md.Release notes preview: keep this section in sync with the package
CHANGELOG.md. Publish reads the merged CHANGELOG viarelease.yml, not this PR description — keep them aligned anyway so the PR stays an accurate historical record for reviewers and anyone returning later.0.7.0 (2026-07-29)
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)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)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)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)BackendProtocolinstances (not factories), configureStoreBackendwith an explicitnamespace, and use the currentls/glob/grep/ReadResultAPIs. (#4541) (540a0fa)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)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)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
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)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)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)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)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)langchain-fireworksinstallation is available. (#4598) (5d878bf)RubricMiddlewarenow accepts any positivemax_iterationscap instead of enforcing a hard upper bound. (#4405) (d6692a7)Bug Fixes
PrivateStateAttr, including fields declared throughcreate_deep_agent(state_schema=...), out of subagent inputs and returned parent-state updates. (#4587) (a4662c0)ContextTthrough thecreate_deep_agent(..., middleware=[...])type annotation so type checkers accept context-aware middleware when a matchingcontext_schemais passed. (#4055) (7be76c7)allowed-toolsfrontmatter, and make skill truncation warnings actionable with field name, path, length, configured limit, and impact. (#4140) (#4141) (d62534c) (2f5f5b8)grep/globtools or prohibit equivalent shell search when dedicated search tools are unavailable. (#4920) (#4921) (d3650c7) (b65cc00)CompositeBackend.ls("/")andCompositeBackend.als("/")instead of returning successful route-only listings. (#4925) (4c3b166)CompositeBackend.glob/CompositeBackend.aglobrouting so explicit default-backend paths such as/toolsdo not also return files from routed backends such as/memories. (#4531) (cbdb0a7)CompositeBackend.glob(..., path=None)/aglob(..., path=None)andpath="/"searches instead of returning incomplete successful results. (#4063) (ef591e7)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)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)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)max_iterations_reachedas the terminalRubricMiddlewarestatus when the iteration cap is exhausted, instead of a finalneeds_revisionevent that will not loop. (#4406) (a51c8d2)check_async_taskandcancel_async_task. (#3967) (b0d92c0)Performance Improvements
End release notes preview.
Note
A New Contributors section is appended to the GitHub release notes automatically at publish time (see Release Pipeline, step 2).