Commit Graph
996 Commits
Author SHA1 Message Date
Bennet Bo Fenner 553b1617d4 Only use StreamingEditFileTool when streaming is available (#50616)
Release Notes:

- N/A
2026-03-03 17:16:42 +00:00
Tom Houlé 16455c01b7 agent: Cancel retries when the turn is cancelled (#50580)
When a completion request fails with a retryable error (e.g. a 500 from
the upstream provider), the retry loop waits on a timer before trying
again. This timer did not race with the cancellation signal, so if the
user switched models and submitted a new message during the retry delay,
the old turn would continue retrying with the stale model for up to 15
seconds — making requests to the wrong provider and corrupting the
thread's message list with spurious Resume entries.

Now the retry delay races with the cancellation receiver, so the old
turn exits immediately when cancelled.

Release Notes:

- Fixed cancelled turns in a conversation that failed (e.g. 500 from the
LLM provider) bein retried even after cancellation
2026-03-03 11:16:49 +01:00
Bennet Bo Fenner 3229ccedfe agent: Remove unused edit_agent_output from edit file tool (#50576)
Removes unused `edit_agent_output` from `EditFileTool`. This makes it
easier to maintain compatibility between the `EditFileTool` and
`StreamingEditFileTool`.

Release Notes:

- N/A
2026-03-03 09:24:07 +00:00
f19e4e0539 Persist unsent draft prompt across Zed restarts (#49541)
Store the user's unsent message editor text in DbThread so it survives
quitting and reloading Zed. The draft flows through Thread → AcpThread →
AcpThreadView on load, and back via a debounced observer on the message
editor for saves.

Currently works for native Zed agents only; external ACP agents will
pick this up once general ACP history persistence lands.

## Changes

- **`DbThread`** / **`Thread`**: New `draft_prompt: Option<String>`
field, included in `to_db()`/`from_db()`
- **`AcpThread`**: Bridge field with getter/setter, populated during
`register_session()`
- **`NativeAgent::save_thread()`**: Copies draft from `AcpThread` →
`Thread` before persisting
- **`AcpThreadView`**: Restores draft into `MessageEditor` on load;
syncs editor text → `AcpThread` via observer; debounced (500ms) Thread
notify triggers DB save

Co-authored-by: Anthony Eid <anthony@zed.dev>
Co-authored-by: Mikayla Maki <mikayla@zed.dev>
2026-03-03 00:57:15 +00:00
Bennet Bo Fenner 910f4d7109 agent: Fix review experience for StreamingEditFileTool (#50518)
Release Notes:

- N/A
2026-03-02 18:46:25 +00:00
Ben Brandt 8b5a55e977 agent: Use correct subagent thread entity to get the entries list (#50515)
Was grabbing off the Thread not the AcpThead 🤦

Release Notes:

- N/A
2026-03-02 18:27:32 +00:00
Ben BrandtandBennet Bo Fenner c056b22d6d agent: Add linked action log support for subagent threads (#50500)
Subagents now forward buffer reads/writes/edits to a parent action log,
allowing the parent's review experience to track all file changes made
by subagents alongside its own.

Release Notes:

- N/A

---------

Co-authored-by: Bennet Bo Fenner <bennetbo@gmx.de>
2026-03-02 18:00:12 +00:00
Ben Brandt 1c96982b4f agent: Add back in discouragement of useless subagents (#50512)
Release Notes:

- N/A
2026-03-02 17:29:22 +00:00
Ben BrandtandBennet Bo Fenner 1b91a2153a agent: Propagate model settings to running subagents (#50510)
When the model, summarization model, thinking settings, speed, or
profile are updated on a thread, apply the same settings to any
currently running subagents.

Release Notes:

- N/A

Co-authored-by: Bennet Bo Fenner <bennetbo@gmx.de>
2026-03-02 17:10:36 +00:00
Ben Kunkle 9c55303e03 agent: Log thread title generation errors (#50504) 2026-03-02 17:27:00 +01:00
Ben BrandtandBennet Bo Fenner db35c8371c agent: Remove subagents feature flag (#50493)
Release Notes:

- agent: Add new `spawn_agent` tool which allows the Zed Agent to
utilize subagents for doing tasks in parallel and better context
management.

Co-authored-by: Bennet Bo Fenner <bennetbo@gmx.de>
2026-03-02 15:30:03 +00:00
Ben BrandtandBennet Bo Fenner 1fac14fcc7 agent: Add subagent info to telemetry events (#50492)
- **Add parent_session_id to agent thread feedback submission**
- **Add more parent session ids to events**

Release Notes:

- N/A

---------

Co-authored-by: Bennet Bo Fenner <bennetbo@gmx.de>
2026-03-02 15:17:05 +00:00
Ben BrandtandBennet Bo Fenner 82617f57a0 agent: More subagent fixes (#50489)
- Skip agent location updates for subagent threads
- Hide edits summary for subagent thread
- Fix tool permission granularity selection from parent thread

Release Notes:

- N/A

---------

Co-authored-by: Bennet Bo Fenner <bennetbo@gmx.de>
2026-03-02 14:42:01 +00:00
Bennet Bo FennerandBen Brandt 65e60a53db agent: Show full subagent output if no concurrent tool calls (#50478)
Release Notes:

- N/A

---------

Co-authored-by: Ben Brandt <benjamin.j.brandt@gmail.com>
2026-03-02 13:21:26 +00:00
Bennet Bo FennerandBen Brandt e1ff92c8fd agent: Do not include thinking blocks in subagent output (#50473)
Release Notes:

- N/A

Co-authored-by: Ben Brandt <benjamin.j.brandt@gmail.com>
2026-03-02 10:05:00 +00:00
Danilo Leal 469282e299 agent_ui: Add round of improvements to subagent UI (#50357) 2026-02-27 20:35:59 -03:00
Ben Brandt 044acb7c9d agent: Render subagent labels as they stream in (#50306)
Release Notes:

- N/A
2026-02-27 14:31:54 +00:00
Bennet Bo Fenner 04269c5fd0 agent: Stream new_text in StreamingEditFileTool (#50240)
We now stream the new text into the buffer as soon as we receive partial
chunks of `new_text`. This is pretty much a full re-write of the way
streaming worked, which is now much closer to how the edit agent works:
- `ToolEditParser` buffers chunks as they stream in, and emits relevant
events (`OldTextChunk`,`NewTextChunk`, ...) that we use to power the
`EditSession` pipeline.
- `EditSession::process_events` takes care of consuming these events and
applying the edits incrementally as chunks stream in. `EditPipeline`
maintains the underlying state machine for each edit.
- We handle whitespace mismatches similar to the edit agent, the code is
shared by moving that logic to `reindent.rs`

Before you mark this PR as ready for review, make sure that you have:
- [x] Added a solid test coverage and/or screenshots from doing manual
testing
- [x] Done a self-review taking into account security and performance
aspects
- [x] Aligned any UI changes with the [UI
checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist)

Release Notes:

- N/A
2026-02-27 13:24:57 +01:00
Mikayla Maki 062898ed6c Add folder_paths for project grouping (#50249)
Before you mark this PR as ready for review, make sure that you have:
- [x] Added a solid test coverage and/or screenshots from doing manual
testing
- [x] Done a self-review taking into account security and performance
aspects
- [x] Aligned any UI changes with the [UI
checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist)

Release Notes:

- N/A
2026-02-26 22:32:48 +00:00
Ben Brandt 53a55dd04d agent: Rename run_turn to send in subagent handle (#50242)
Align better with naming in thread. I grabbed the wrong function name :D

Release Notes:

- N/A
2026-02-26 20:43:34 +00:00
Tom Houlé 881d167340 Add fast mode toggle in agent panel (#49714)
This is a staff only toggle for now, since the consequences of
activating it are not obvious and quite dire (tokens costs 6 times
more).

Also, persist thinking, thinking effort and fast mode in DbThread so the
thinking mode toggle and thinking effort are persisted.

Release Notes:

- Agent: The thinking mode toggle and thinking effort are now persisted
when selecting a thread from history.
2026-02-26 21:19:41 +01:00
Ben Brandt a4c0cb4c26 agent: Simplify subagent tool and handle (#50230)
Moves parent thread information into the environment, and also models it
as a turn on the handle rather than waiting for output.

Release Notes:

- N/A
2026-02-26 16:41:24 +00:00
50f2a2c983 agent_servers: Migrate all built-in agents to go via registry (#50094)
This has lots of benefits, but mainly allows users to uninstall agents.

Release Notes:

- N/A

---------

Co-authored-by: Anthony Eid <hello@anthonyeid.me>
Co-authored-by: cameron <cameron.studdstreet@gmail.com>
2026-02-26 12:24:39 +00:00
Bennet Bo Fenner 88df992564 agent: Stream content in StreamingEditFileTool (#50187)
Release Notes:

- N/A
2026-02-26 10:48:33 +00:00
Bennet Bo Fenner 3372e25a2c agent: Detect overlapping edits in StreamingEditFileTool (#50181)
Release Notes:

- N/A
2026-02-26 09:15:18 +00:00
Bennet Bo FennerandZed Zippy 9eb452a692 agent: Implement streaming for edit file tool (#50004)
Before you mark this PR as ready for review, make sure that you have:
- [x] Added a solid test coverage and/or screenshots from doing manual
testing
- [x] Done a self-review taking into account security and performance
aspects
- [x] Aligned any UI changes with the [UI
checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist)

Release Notes:

- N/A

---------

Co-authored-by: Zed Zippy <234243425+zed-zippy[bot]@users.noreply.github.com>
2026-02-25 22:58:25 +00:00
Ben Brandt 454fc58176 agent: Improve SpawnAgentTool instructions for clarity (#50114)
Trying to keep it from reiterating instructions


Release Notes:

- N/A
2026-02-25 19:20:22 +01:00
Richard Feldman f7763ac70c Remove dead AgentGitWorktreeInfo code (#50101)
This code was part of a series of stacked diff PRs that became obsolete
because we changed the UI design, so none of this code is necessary
anymore.

Release Notes:

- N/A
2026-02-25 12:36:40 -05:00
Bennet Bo Fenner 6632b5280d agent: Support streaming tool input (#50099)
This PR introduces a `ToolInput` struct which allows tools to receive
their inputs incrementally as they stream in. Right now no tool makes
use of the streaming APIs, will be used for the streaming edit file tool
in #50004

Release Notes:

- N/A
2026-02-25 17:46:27 +01:00
Ben Brandt 477907cfb7 agent_server: Remove root_dir from agent server connect APIs (#50093)
This isn't necessary and allows us to potentially share processes across
threads.

Release Notes:

- N/A
2026-02-25 15:40:10 +00:00
Lukas Wirth 012547b7e8 agent: Delay edit tool buffer clearing until the first chunk is sent (#49633)
Release Notes:

- The agent edit tool no longer clears files until the first edit comes
in, preventing a buffer being empty for prolonged time if the agent is
slow in reporting the first text chunk
2026-02-25 08:10:15 +01:00
Bennet Bo Fenner c553f133fb Add streaming-edit-file-tool feature flag (#49997)
Release Notes:

- N/A
2026-02-24 16:45:29 +00:00
Bennet Bo FennerandZed Zippy afafccbb57 agent: Fix slow file edits when using Opus 4.6 (#49904)
Fixes a regression introduced in #48545 (reasoning effort selector). We
saw edit file tool calls taking a long time (loading animation was
displayed, no diff) when using Opus 4.6. This was caused by Opus 4.6.
emitting thinking tokens even when the user explicitly disabled thinking
in the UI.
<img width="289" height="67" alt="image"
src="https://github.com/user-attachments/assets/090a99f8-9b07-4d25-9058-3706f9333396"
/>

In addition to the thinking tokens causing overhead, we were slowing
down file editing even more. because changing between
thinking/non-thinking between requests causes the cache to be
invalidated
([docs](https://platform.claude.com/docs/en/build-with-claude/prompt-caching#what-invalidates-the-cache)).

This PR ensures that we inherit the setting for enabling or disabling
thinking from the thread from which the edit tool was called.

Before you mark this PR as ready for review, make sure that you have:
- [x] Added a solid test coverage and/or screenshots from doing manual
testing
- [x] Done a self-review taking into account security and performance
aspects
- [x] Aligned any UI changes with the [UI
checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist)

Release Notes:

- Fixed an issue where editing files was taking a long time when using
Opus 4.6

---------

Co-authored-by: Zed Zippy <234243425+zed-zippy[bot]@users.noreply.github.com>
2026-02-23 18:39:48 +01:00
Ben Brandt c6c9c89fd4 agent: Remove warning for spawn_agent (#49903)
It seems this was working too well and the model wasn't choosing to use
subagents at all.

Release Notes:

- N/A
2026-02-23 17:32:45 +01:00
Ben Brandt 15d752a3dd agent: Subagent low context warnings (#49902)
Allow the parent agent to handle cases where the subagent is running on
of context window. Also communicates if it has completely out of
context.

Release Notes:

- N/A
2026-02-23 16:03:32 +00:00
Ben Brandt 29bb4743eb agent: Remove timeout for subagent (#49898)
For the last few days, the model has never picked a good timeout value.
It seems they are better at choosing timeouts for bash commands but not
agents. Given there are some rate limits involved, I think it is hard to
estimate and we already have an upper bound of execution which is the
context window to keep it from going indefinitely.

Release Notes:

- N/A
2026-02-23 15:08:33 +00:00
Bennet Bo FennerandBen Brandt c2c6a29abc Improve subagent permission UX (#49874)
Before you mark this PR as ready for review, make sure that you have:
- [x] Added a solid test coverage and/or screenshots from doing manual
testing
- [x] Done a self-review taking into account security and performance
aspects
- [x] Aligned any UI changes with the [UI
checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist)

Release Notes:

- N/A

---------

Co-authored-by: Ben Brandt <benjamin.j.brandt@gmail.com>
2026-02-23 15:05:15 +00:00
Ben Brandt afb861fbe6 agent: More subagent wordsmithing (#49804)
Now that this is also used for resuming, I think this is clearer what
the input is.

Release Notes:

- N/A
2026-02-21 14:14:16 +00:00
Ben Brandt 4ed055fbc4 agent: Change tool name to spawn_agent (#49741)
After looking around a bit, I felt like subagent wasn't the right way to
introduce this tool to the model. And with some back and forth
verification + market research, we both agreed spawn_agent was a better
name for what this tool is doing.

It still calls the right tool if you ask for a subagent, but especially
if we move these to be running in the background, spawn will be a better
name anyway.

Release Notes:

- N/A
2026-02-20 18:51:37 +00:00
Ben Brandt 0f064fe7e9 agent: Allow the agent to reprompt an existing subagent (#49737)
Also fixes a regression I introduced that didn't cancel threads after
the timeout was hit

Release Notes:

- N/A
2026-02-20 18:34:38 +00:00
Ben Brandt 4a8746f5ce agent: More generous timeouts for subagents (#49734)
Release Notes:

- N/A
2026-02-20 17:32:02 +00:00
Ben Brandt ce31bdaf3f agent: Tweak subagent input params and docs (#49732)
Release Notes:

- N/A
2026-02-20 17:48:17 +01:00
Ben Brandt 56c7ed0418 agent: Allow tools to have structured output (#49722)
Previously we only had the ability to return anyhow errors, which
limited the amount of structured data we could send the model.

Now tools can also return structured data in the error cases, which is
super helpful for subagents in particular

Release Notes:

- N/A
2026-02-20 15:28:22 +00:00
Ben Brandt 8efa7fdcde agent: Use default tool behavior for subagents (#49706)
Looking at this more, the map of tools is just for what is available and
all of the filtering happens at runtime. So we can just rely on the
current behavior for the list of tools (it was already a matching set)
and we can simplify all of the code paths again where we were adding
this filtered list.

Release Notes:

- N/A
2026-02-20 11:07:03 +00:00
Ben Brandt 4b71f7e3da agent: Change max subagent depth to 1 for now (#49704)
There are some UI concerns, especially for permission requests, that get
extremely complicated for recurisve subagents.

We'll move this to 1 for now to reduce complexity, and revisit once we
have a better way for representing all current permission requests.

Release Notes:

- N/A
2026-02-20 10:52:58 +00:00
Ben BrandtandJakub Konka 43d63516da agent: Improve the subagent task structure (#49629)
Removes tool filtering since this was throwing off certain models, and
also allows for more generic task prompts that don't always require
summaries. Since the models usually provide a wrap-up message, we don't
have to wait for another turn.

This also sets us up to allow the agent to re-interact with an existing
subagent thread.

Release Notes:

- N/A

---------

Co-authored-by: Jakub Konka <kubkon@jakubkonka.com>
2026-02-19 17:58:59 +00:00
Bennet Bo Fenner 63c206bc2e agent: Remove MAX_PARALLEL_SUBAGENTS (#49593)
Before you mark this PR as ready for review, make sure that you have:
- [x] Added a solid test coverage and/or screenshots from doing manual
testing
- [x] Done a self-review taking into account security and performance
aspects
- [x] Aligned any UI changes with the [UI
checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist)

Requests will be rate-limited by our internal logic, but it will "just"
work.

Release Notes:

- N/A
2026-02-19 12:27:49 +00:00
Richard Feldman e8a72de57f Add agent worktree directory setting + worktree info persistence (#49139)
Add `agent_worktree_directory` to `GitSettings` for configuring where
agent worktrees are stored (default: Zed data dir). Remove `Copy` derive
from `GitSettings`/`GitContentSettings` (incompatible with String field)
and fix downstream `.as_ref().unwrap()` call sites.

Define `AgentGitWorktreeInfo` (branch, worktree_path, base_ref) and add
it to `DbThread` + `DbThreadMetadata` for persistence and session list
display.

Closes AI-33

Release Notes:

- N/A
2026-02-18 22:20:31 +00:00
Danilo LealandBennet Bo Fenner fc80cd4c25 git_ui: Add "Review Branch" with agent feature (#49513)
This PR adds a button in the `git: branch diff` view that allows to
quickly and easily send the entire diff to your last used agent for a
review. What this does is automatically submits a (pre-written and
generic) prompt to the last agents you were using in the agent panel
with the whole content of your diff.

<img width="750" height="1964" alt="Screenshot 2026-02-18 at 3  35@2x"
src="https://github.com/user-attachments/assets/493d8cf4-4815-4b01-91a0-6a39ad6219fe"
/>

Release Notes:

- Added a "Review Branch" button in the `git: branch diff` view so that
the whole diff can be quickly sent for review to an agent.

---------

Co-authored-by: Bennet Bo Fenner <bennetbo@gmx.de>
2026-02-18 19:18:15 -03:00
Richard Feldman f1c5b05752 Skip /dev/null redirects from terminal auto-allow command extraction (#49503)
Redirects to `/dev/null` (e.g. `2>/dev/null`, `&>/dev/null`) are
known-safe I/O routing, not commands. Previously, `extract_commands`
emitted normalized redirect strings like `"2> /dev/null"` as separate
entries in the command list checked against auto-allow regexes. Since
`check_commands` requires **all** extracted entries to match an allow
pattern, the unmatched redirect caused false-negatives — e.g. `git log
--oneline -20 2>/dev/null || echo ...` would not be auto-allowed despite
matching `^git` and `^echo` patterns.

Rather than removing all redirects from extraction (which would hide
dangerous redirects like `> /etc/passwd` from deny/confirm pattern
checking), this fix surgically skips only `/dev/null` targets during
redirect normalization. Redirects to real files are still emitted and
still require a matching pattern for auto-allow, preserving the
defense-in-depth property.

Closes AI-41

Release Notes:

- Fixed terminal auto-allow patterns incorrectly prompting for
confirmation on commands containing `/dev/null` redirects (e.g.
`2>/dev/null`).
2026-02-18 13:01:01 -05:00