Skip to content

perf(cli): parallelize detect script for faster first-turn - #1541

Merged
Mason Daugherty (mdrxy) merged 3 commits into
mainfrom
jk/perf-parallel-detect-and-patch-early-return
Mar 1, 2026
Merged

perf(cli): parallelize detect script for faster first-turn#1541
Mason Daugherty (mdrxy) merged 3 commits into
mainfrom
jk/perf-parallel-detect-and-patch-early-return

Conversation

@jkennedyvz

@jkennedyvz John Kennedy (jkennedyvz) commented Feb 28, 2026

Copy link
Copy Markdown
Contributor
  • Parallelize LocalContextMiddleware detect script: The 7 independent bash sections (package managers, runtimes, git, test command, files, tree, makefile) now run as background jobs instead of sequentially. Header + project still run first since they set variables others depend on. First-turn overhead reduced ~22% (0.298s → 0.232s median).

Benchmark (50 turns, 4KB messages, median of 3 runs)

Metric Before After Change
First turn 0.298s 0.232s -22%
Avg per turn 0.039s 0.038s ~same
Total (50 turns) 2.379s 2.309s -3%

Middleware breakdown (10 turns, --breakdown)

Middleware Hook Avg/call
FilesystemMiddleware awrap_model_call 97ms
SubAgentMiddleware awrap_model_call 97ms
SummarizationMiddleware awrap_model_call 97ms
LocalContextMiddleware before_agent 16ms (was ~47ms)
SkillsMiddleware abefore_agent 3ms
PatchToolCallsMiddleware before_agent <0.1ms

@github-actions github-actions Bot added cli Related to `deepagents-cli` deepagents Related to the `deepagents` SDK / agent harness internal User is a member of the `langchain-ai` GitHub organization performance Code change that improves performance labels Feb 28, 2026
@jkennedyvz
John Kennedy (jkennedyvz) force-pushed the jk/perf-parallel-detect-and-patch-early-return branch from 952181f to 6a0aaa7 Compare February 28, 2026 06:52
@jkennedyvz John Kennedy (jkennedyvz) changed the title perf(cli,sdk): parallelize detect script and add early return to PatchToolCalls perf(cli,sdk): parallelize detect script for faster first-turn Feb 28, 2026
@github-actions github-actions Bot added performance Code change that improves performance and removed performance Code change that improves performance labels Feb 28, 2026
@jkennedyvz John Kennedy (jkennedyvz) changed the title perf(cli,sdk): parallelize detect script for faster first-turn perf(cli): parallelize detect script for faster first-turn Feb 28, 2026
@github-actions github-actions Bot added performance Code change that improves performance and removed performance Code change that improves performance labels Feb 28, 2026
@jkennedyvz
John Kennedy (jkennedyvz) marked this pull request as ready for review February 28, 2026 20:44
@jkennedyvz
John Kennedy (jkennedyvz) force-pushed the jk/perf-parallel-detect-and-patch-early-return branch from 952a5bd to 80bddd7 Compare February 28, 2026 21:37
@github-actions github-actions Bot added performance Code change that improves performance and removed performance Code change that improves performance labels Feb 28, 2026
Parallelize independent bash sections in LocalContextMiddleware's
detect script using background jobs. Header + project run first
(set CWD/IN_GIT/ROOT), then 7 sections run concurrently writing
to temp files. First-turn overhead reduced ~22% (0.298s -> 0.232s).
@mdrxy
Mason Daugherty (mdrxy) force-pushed the jk/perf-parallel-detect-and-patch-early-return branch from 80bddd7 to 55271fe Compare March 1, 2026 23:32
@mdrxy
Mason Daugherty (mdrxy) merged commit dad8b6e into main Mar 1, 2026
24 checks passed
@mdrxy
Mason Daugherty (mdrxy) deleted the jk/perf-parallel-detect-and-patch-early-return branch March 1, 2026 23:45
Mason Daugherty (mdrxy) added a commit that referenced this pull request Mar 3, 2026
🤖 I have created a release *beep* *boop*
---


##
[0.0.26](deepagents-cli==0.0.25...deepagents-cli==0.0.26)
(2026-03-03)


### Features

* Compaction hook
([#1420](#1420))
([e87cdad](e87cdad))
* `/compact` command
([#1579](#1579))
([46e9e95](46e9e95))
* Add `--profile-override` CLI flag
([#1605](#1605))
([1984099](1984099))
* Add model profile overrides to config
([#1603](#1603))
([d3d6899](d3d6899))
* Show summarization status and notification
([#919](#919))
([2e3cb74](2e3cb74))

### Bug Fixes

* Fix image path pasting qualms
([#1560](#1560))
([8caaf3e](8caaf3e))
* Load `.agents` skill alias directories at interactive startup
([#1556](#1556))
([af0a759](af0a759))
* Coerce execute timeout to int before formatting tool display
([#1588](#1588))
([04b8c72](04b8c72)),
closes [#1586](#1586)
* Add missing flags to help screen
([#1619](#1619))
([6067749](6067749))
* Align compaction messaging across `/compact` and
`compact_conversation`
([#1583](#1583))
([d455a6b](d455a6b))
* Apply profile overrides in `/compact`
([#1612](#1612))
([a9dc2c5](a9dc2c5))
* Disambiguate `/tokens` vs `/compact` token reporting
([#1618](#1618))
([51c3347](51c3347))
* Make LangSmith URL lookups non-blocking
([#1595](#1595))
([572eaee](572eaee))
* Only exit input mode on backspace, not text clear
([#1479](#1479))
([da0965e](da0965e))
* Retry langsmith project url lookup until project exists
([#1562](#1562))
([e137a63](e137a63))
* Show model info in `/tokens` before first usage
([#1607](#1607))
([7b01ae7](7b01ae7))
* Support `timeout=0` for sandbox `execute()`
([#1558](#1558))
([ed14443](ed14443))
* Unreachable `except` block
([#1535](#1535))
([0e17e35](0e17e35))

### Performance Improvements

* Optimize thread resume path with prefetch and batched hydration
([#1561](#1561))
([068d112](068d112))
* Parallelize detection scripts for faster first-turn
([#1541](#1541))
([dad8b6e](dad8b6e))
* Speed up `/threads` first-open
([#1481](#1481))
([b248b15](b248b15))

---
This PR was generated with [Release
Please](https://github.com/googleapis/release-please). See
[documentation](https://github.com/googleapis/release-please#release-please).

---------

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Mason Daugherty <github@mdrxy.com>
james8814 pushed a commit to james8814/deepagents that referenced this pull request Mar 6, 2026
🤖 I have created a release *beep* *boop*
---


##
[0.0.26](langchain-ai/deepagents@deepagents-cli==0.0.25...deepagents-cli==0.0.26)
(2026-03-03)


### Features

* Compaction hook
([langchain-ai#1420](langchain-ai#1420))
([e87cdad](langchain-ai@e87cdad))
* `/compact` command
([langchain-ai#1579](langchain-ai#1579))
([46e9e95](langchain-ai@46e9e95))
* Add `--profile-override` CLI flag
([langchain-ai#1605](langchain-ai#1605))
([1984099](langchain-ai@1984099))
* Add model profile overrides to config
([langchain-ai#1603](langchain-ai#1603))
([d3d6899](langchain-ai@d3d6899))
* Show summarization status and notification
([langchain-ai#919](langchain-ai#919))
([2e3cb74](langchain-ai@2e3cb74))

### Bug Fixes

* Fix image path pasting qualms
([langchain-ai#1560](langchain-ai#1560))
([8caaf3e](langchain-ai@8caaf3e))
* Load `.agents` skill alias directories at interactive startup
([langchain-ai#1556](langchain-ai#1556))
([af0a759](langchain-ai@af0a759))
* Coerce execute timeout to int before formatting tool display
([langchain-ai#1588](langchain-ai#1588))
([04b8c72](langchain-ai@04b8c72)),
closes [langchain-ai#1586](langchain-ai#1586)
* Add missing flags to help screen
([langchain-ai#1619](langchain-ai#1619))
([6067749](langchain-ai@6067749))
* Align compaction messaging across `/compact` and
`compact_conversation`
([langchain-ai#1583](langchain-ai#1583))
([d455a6b](langchain-ai@d455a6b))
* Apply profile overrides in `/compact`
([langchain-ai#1612](langchain-ai#1612))
([a9dc2c5](langchain-ai@a9dc2c5))
* Disambiguate `/tokens` vs `/compact` token reporting
([langchain-ai#1618](langchain-ai#1618))
([51c3347](langchain-ai@51c3347))
* Make LangSmith URL lookups non-blocking
([langchain-ai#1595](langchain-ai#1595))
([572eaee](langchain-ai@572eaee))
* Only exit input mode on backspace, not text clear
([langchain-ai#1479](langchain-ai#1479))
([da0965e](langchain-ai@da0965e))
* Retry langsmith project url lookup until project exists
([langchain-ai#1562](langchain-ai#1562))
([e137a63](langchain-ai@e137a63))
* Show model info in `/tokens` before first usage
([langchain-ai#1607](langchain-ai#1607))
([7b01ae7](langchain-ai@7b01ae7))
* Support `timeout=0` for sandbox `execute()`
([langchain-ai#1558](langchain-ai#1558))
([ed14443](langchain-ai@ed14443))
* Unreachable `except` block
([langchain-ai#1535](langchain-ai#1535))
([0e17e35](langchain-ai@0e17e35))

### Performance Improvements

* Optimize thread resume path with prefetch and batched hydration
([langchain-ai#1561](langchain-ai#1561))
([068d112](langchain-ai@068d112))
* Parallelize detection scripts for faster first-turn
([langchain-ai#1541](langchain-ai#1541))
([dad8b6e](langchain-ai@dad8b6e))
* Speed up `/threads` first-open
([langchain-ai#1481](langchain-ai#1481))
([b248b15](langchain-ai@b248b15))

---
This PR was generated with [Release
Please](https://github.com/googleapis/release-please). See
[documentation](https://github.com/googleapis/release-please#release-please).

---------

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
…-ai#1541)

- **Parallelize LocalContextMiddleware detect script**: The 7
independent bash sections (package managers, runtimes, git, test
command, files, tree, makefile) now run as background jobs instead of
sequentially. Header + project still run first since they set variables
others depend on. First-turn overhead reduced ~22% (0.298s → 0.232s
median).

### Benchmark (50 turns, 4KB messages, median of 3 runs)

| Metric | Before | After | Change |
|--------|--------|-------|--------|
| First turn | 0.298s | 0.232s | **-22%** |
| Avg per turn | 0.039s | 0.038s | ~same |
| Total (50 turns) | 2.379s | 2.309s | -3% |

### Middleware breakdown (10 turns, --breakdown)

| Middleware | Hook | Avg/call |
|-----------|------|----------|
| FilesystemMiddleware | awrap_model_call | 97ms |
| SubAgentMiddleware | awrap_model_call | 97ms |
| SummarizationMiddleware | awrap_model_call | 97ms |
| **LocalContextMiddleware** | **before_agent** | **16ms** (was ~47ms) |
| SkillsMiddleware | abefore_agent | 3ms |
| PatchToolCallsMiddleware | before_agent | <0.1ms |

---------

Co-authored-by: Mason Daugherty <github@mdrxy.com>
Co-authored-by: Mason Daugherty <mason@langchain.dev>
Marcelo5444 pushed a commit to Marcelo5444/deepagents that referenced this pull request Jul 30, 2026
🤖 I have created a release *beep* *boop*
---


##
[0.0.26](langchain-ai/deepagents@deepagents-cli==0.0.25...deepagents-cli==0.0.26)
(2026-03-03)


### Features

* Compaction hook
([langchain-ai#1420](langchain-ai#1420))
([e87cdad](langchain-ai@e87cdad))
* `/compact` command
([langchain-ai#1579](langchain-ai#1579))
([46e9e95](langchain-ai@46e9e95))
* Add `--profile-override` CLI flag
([langchain-ai#1605](langchain-ai#1605))
([1984099](langchain-ai@1984099))
* Add model profile overrides to config
([langchain-ai#1603](langchain-ai#1603))
([d3d6899](langchain-ai@d3d6899))
* Show summarization status and notification
([langchain-ai#919](langchain-ai#919))
([2e3cb74](langchain-ai@2e3cb74))

### Bug Fixes

* Fix image path pasting qualms
([langchain-ai#1560](langchain-ai#1560))
([8caaf3e](langchain-ai@8caaf3e))
* Load `.agents` skill alias directories at interactive startup
([langchain-ai#1556](langchain-ai#1556))
([af0a759](langchain-ai@af0a759))
* Coerce execute timeout to int before formatting tool display
([langchain-ai#1588](langchain-ai#1588))
([04b8c72](langchain-ai@04b8c72)),
closes [langchain-ai#1586](langchain-ai#1586)
* Add missing flags to help screen
([langchain-ai#1619](langchain-ai#1619))
([6067749](langchain-ai@6067749))
* Align compaction messaging across `/compact` and
`compact_conversation`
([langchain-ai#1583](langchain-ai#1583))
([d455a6b](langchain-ai@d455a6b))
* Apply profile overrides in `/compact`
([langchain-ai#1612](langchain-ai#1612))
([a9dc2c5](langchain-ai@a9dc2c5))
* Disambiguate `/tokens` vs `/compact` token reporting
([langchain-ai#1618](langchain-ai#1618))
([51c3347](langchain-ai@51c3347))
* Make LangSmith URL lookups non-blocking
([langchain-ai#1595](langchain-ai#1595))
([572eaee](langchain-ai@572eaee))
* Only exit input mode on backspace, not text clear
([langchain-ai#1479](langchain-ai#1479))
([da0965e](langchain-ai@da0965e))
* Retry langsmith project url lookup until project exists
([langchain-ai#1562](langchain-ai#1562))
([e137a63](langchain-ai@e137a63))
* Show model info in `/tokens` before first usage
([langchain-ai#1607](langchain-ai#1607))
([7b01ae7](langchain-ai@7b01ae7))
* Support `timeout=0` for sandbox `execute()`
([langchain-ai#1558](langchain-ai#1558))
([ed14443](langchain-ai@ed14443))
* Unreachable `except` block
([langchain-ai#1535](langchain-ai#1535))
([0e17e35](langchain-ai@0e17e35))

### Performance Improvements

* Optimize thread resume path with prefetch and batched hydration
([langchain-ai#1561](langchain-ai#1561))
([068d112](langchain-ai@068d112))
* Parallelize detection scripts for faster first-turn
([langchain-ai#1541](langchain-ai#1541))
([dad8b6e](langchain-ai@dad8b6e))
* Speed up `/threads` first-open
([langchain-ai#1481](langchain-ai#1481))
([b248b15](langchain-ai@b248b15))

---
This PR was generated with [Release
Please](https://github.com/googleapis/release-please). See
[documentation](https://github.com/googleapis/release-please#release-please).

---------

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

cli Related to `deepagents-cli` deepagents Related to the `deepagents` SDK / agent harness internal User is a member of the `langchain-ai` GitHub organization performance Code change that improves performance

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants