Skip to content

feat(code): drop TodoListMiddleware - #4685

Merged
Mason Daugherty (mdrxy) merged 7 commits into
mainfrom
open-swe/remove-todolistmiddleware-dcode
Jul 13, 2026
Merged

feat(code): drop TodoListMiddleware#4685
Mason Daugherty (mdrxy) merged 7 commits into
mainfrom
open-swe/remove-todolistmiddleware-dcode

Conversation

@mdrxy

@mdrxy Mason Daugherty (mdrxy) commented Jul 13, 2026

Copy link
Copy Markdown
Member

dcode no longer exposes the write_todos tool / todo-list middleware to the agent or its subagents when DEEPAGENTS_CODE_EXPERIMENTAL is set.


dcode builds its agent with create_deep_agent, which always injects the SDK's TodoListMiddleware (and its write_todos tool) and exposes no parameter to disable it. Because create_deep_agent's _apply_custom_middleware merge replaces a default middleware in place when a caller middleware shares its .name, we add a tool-less no-op middleware named TodoListMiddleware and thread it into the main-agent and subagent middleware lists — so the real middleware (and write_todos) is dropped without any SDK change.

This is gated behind the new DEEPAGENTS_CODE_EXPERIMENTAL env var and is a no-op when unset, so default behavior is unchanged. Kept intentionally narrow: the todo prompt guidance and TUI rendering are left in place (dead only when the flag is on).

Made by Open SWE

References

…E_EXPERIMENTAL`

`create_deep_agent` always injects `TodoListMiddleware` (and its `write_todos`
tool) with no parameter to disable it. When `DEEPAGENTS_CODE_EXPERIMENTAL` is
truthy, dcode now threads a tool-less no-op middleware named `TodoListMiddleware`
into the agent and subagent middleware lists; the SDK's name-based merge
replaces the real middleware, dropping `write_todos`. Off by default, so
behavior is unchanged unless the flag is set.

Co-authored-by: open-swe[bot] <open-swe@users.noreply.github.com>
@github-actions github-actions Bot added dcode Related to `deepagents-code` feature New feature/enhancement or request for one internal User is a member of the `langchain-ai` GitHub organization open-swe size: S 50-199 LOC labels Jul 13, 2026
@mdrxy
Mason Daugherty (mdrxy) marked this pull request as ready for review July 13, 2026 14:08

@open-swe open-swe Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Open SWE Review found 1 potential issue.

Open in WebView Open SWE trace

Comment thread libs/code/deepagents_code/_env_vars.py
@mdrxy Mason Daugherty (mdrxy) changed the title feat(code): gate dropping TodoListMiddleware behind DEEPAGENTS_CODE_EXPERIMENTAL feat(code): drop TodoListMiddleware Jul 13, 2026
@github-actions github-actions Bot added size: M 200-499 LOC and removed size: S 50-199 LOC labels Jul 13, 2026
@mdrxy
Mason Daugherty (mdrxy) merged commit d3a3077 into main Jul 13, 2026
51 checks passed
@mdrxy
Mason Daugherty (mdrxy) deleted the open-swe/remove-todolistmiddleware-dcode branch July 13, 2026 21:18
Mason Daugherty (mdrxy) added a commit that referenced this pull request Jul 14, 2026
> [!CAUTION]
> Merging this PR will automatically publish to **PyPI** and create a
**GitHub release**.

For the full release process, see
[`.github/RELEASING.md`](https://github.com/langchain-ai/deepagents/blob/main/.github/RELEASING.md).

---

_Release notes preview: keep this section in sync with the package
`CHANGELOG.md`. The published GitHub release body is extracted from the
merged `CHANGELOG.md` by `release.yml`, not from this PR description._

---


##
[0.1.38](deepagents-code==0.1.37...deepagents-code==0.1.38)
(2026-07-14)

### Features

* Improve `/goal` criteria UX
([#4694](#4694))
([06f46ff](06f46ff))
* Add interactive goal management
([#4693](#4693))
([64205e2](64205e2))
* Conditionally drop `TodoListMiddleware`
([#4685](#4685))
([d3a3077](d3a3077))
* Add `memory.auto_save` config flag
([#4700](#4700))
([55b60ca](55b60ca))
* Trace experimental mode in metadata
([#4705](#4705))
([22d5045](22d5045))

### Bug Fixes

* Align context diff rows with changed rows
([#4714](#4714))
([f9915db](f9915db))
* Hydrate virtualized transcript on scroll offset changes
([#4646](#4646))
([f77eeb0](f77eeb0))
* Keep TODO and edit tools expanded
([#4704](#4704))
([1d549d3](1d549d3))
* Make `/goal` completion and grading reliable
([#4691](#4691))
([9da63c6](9da63c6))
* Preflight Ollama host reachability before discovery probe
([#4702](#4702))
([96fe71a](96fe71a))
* Quiet expected non-repo `git ls-files` logging
([#4701](#4701))
([3d499db](3d499db))
* Rename `ls_agent_kind` to `ls_agent_purpose`
([#4708](#4708))
([2678b16](2678b16))
* Run MCP login during a run, queue the restart
([#4643](#4643))
([65e1ee8](65e1ee8))
* Show "Took &lt;duration&gt;" when `task` tool completes
([#4638](#4638))
([19538e0](19538e0))
* Support unambiguous `read_file` gutters
([#4711](#4711))
([2089b54](2089b54))

---

_End release notes preview._

---

> [!NOTE]
> A **New Contributors** section is appended to the GitHub release notes
automatically at publish time (see [Release
Pipeline](https://github.com/langchain-ai/deepagents/blob/main/.github/RELEASING.md#release-pipeline),
step 2).

---------

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Mason Daugherty <github@mdrxy.com>
Marcelo5444 pushed a commit to Marcelo5444/deepagents that referenced this pull request Jul 30, 2026
dcode no longer exposes the `write_todos` tool / todo-list middleware to
the agent or its subagents when `DEEPAGENTS_CODE_EXPERIMENTAL` is set.

---

`dcode` builds its agent with `create_deep_agent`, which always injects
the SDK's `TodoListMiddleware` (and its `write_todos` tool) and exposes
no parameter to disable it. Because `create_deep_agent`'s
`_apply_custom_middleware` merge replaces a default middleware in place
when a caller middleware shares its `.name`, we add a tool-less no-op
middleware named `TodoListMiddleware` and thread it into the main-agent
and subagent middleware lists — so the real middleware (and
`write_todos`) is dropped without any SDK change.

This is gated behind the new `DEEPAGENTS_CODE_EXPERIMENTAL` env var and
is a no-op when unset, so default behavior is unchanged. Kept
intentionally narrow: the todo prompt guidance and TUI rendering are
left in place (dead only when the flag is on).

Made by [Open
SWE](https://openswe.vercel.app/agents/c5e51661-6737-cd07-a93a-30847caeef06)

## References
- Plan:
https://openswe.vercel.app/agents/c5e51661-6737-cd07-a93a-30847caeef06/plan

---------

Co-authored-by: open-swe[bot] <open-swe@users.noreply.github.com>
Marcelo5444 pushed a commit to Marcelo5444/deepagents that referenced this pull request Jul 30, 2026
> [!CAUTION]
> Merging this PR will automatically publish to **PyPI** and create a
**GitHub release**.

For the full release process, see
[`.github/RELEASING.md`](https://github.com/langchain-ai/deepagents/blob/main/.github/RELEASING.md).

---

_Release notes preview: keep this section in sync with the package
`CHANGELOG.md`. The published GitHub release body is extracted from the
merged `CHANGELOG.md` by `release.yml`, not from this PR description._

---


##
[0.1.38](langchain-ai/deepagents@deepagents-code==0.1.37...deepagents-code==0.1.38)
(2026-07-14)

### Features

* Improve `/goal` criteria UX
([langchain-ai#4694](langchain-ai#4694))
([06f46ff](langchain-ai@06f46ff))
* Add interactive goal management
([langchain-ai#4693](langchain-ai#4693))
([64205e2](langchain-ai@64205e2))
* Conditionally drop `TodoListMiddleware`
([langchain-ai#4685](langchain-ai#4685))
([d3a3077](langchain-ai@d3a3077))
* Add `memory.auto_save` config flag
([langchain-ai#4700](langchain-ai#4700))
([55b60ca](langchain-ai@55b60ca))
* Trace experimental mode in metadata
([langchain-ai#4705](langchain-ai#4705))
([22d5045](langchain-ai@22d5045))

### Bug Fixes

* Align context diff rows with changed rows
([langchain-ai#4714](langchain-ai#4714))
([f9915db](langchain-ai@f9915db))
* Hydrate virtualized transcript on scroll offset changes
([langchain-ai#4646](langchain-ai#4646))
([f77eeb0](langchain-ai@f77eeb0))
* Keep TODO and edit tools expanded
([langchain-ai#4704](langchain-ai#4704))
([1d549d3](langchain-ai@1d549d3))
* Make `/goal` completion and grading reliable
([langchain-ai#4691](langchain-ai#4691))
([9da63c6](langchain-ai@9da63c6))
* Preflight Ollama host reachability before discovery probe
([langchain-ai#4702](langchain-ai#4702))
([96fe71a](langchain-ai@96fe71a))
* Quiet expected non-repo `git ls-files` logging
([langchain-ai#4701](langchain-ai#4701))
([3d499db](langchain-ai@3d499db))
* Rename `ls_agent_kind` to `ls_agent_purpose`
([langchain-ai#4708](langchain-ai#4708))
([2678b16](langchain-ai@2678b16))
* Run MCP login during a run, queue the restart
([langchain-ai#4643](langchain-ai#4643))
([65e1ee8](langchain-ai@65e1ee8))
* Show "Took &lt;duration&gt;" when `task` tool completes
([langchain-ai#4638](langchain-ai#4638))
([19538e0](langchain-ai@19538e0))
* Support unambiguous `read_file` gutters
([langchain-ai#4711](langchain-ai#4711))
([2089b54](langchain-ai@2089b54))

---

_End release notes preview._

---

> [!NOTE]
> A **New Contributors** section is appended to the GitHub release notes
automatically at publish time (see [Release
Pipeline](https://github.com/langchain-ai/deepagents/blob/main/.github/RELEASING.md#release-pipeline),
step 2).

---------

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Mason Daugherty <github@mdrxy.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

dcode Related to `deepagents-code` feature New feature/enhancement or request for one internal User is a member of the `langchain-ai` GitHub organization open-swe size: M 200-499 LOC

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant