288da0f
agent: Use Markdown to render tool input and output content (#28127)
Click to expand commit body
Release Notes:
- agent: Tool call's input and output content are now rendered with
Markdown, which allows them to be selected and copied.
---------
Co-authored-by: Agus Zubiaga <hi@aguz.me>
Danilo Leal
and
Agus Zubiaga
created
b8d05bb
agent: Hide the scrollbar if there's no mouse movement (#28129)
Click to expand commit body
Release Notes:
- agent: The scrollbar now automatically hides if there's no mouse
movement on the thread list.
---------
Co-authored-by: Agus Zubiaga <agus@zed.dev>
Co-authored-by: Agus Zubiaga <hi@aguz.me>
Danilo Leal
,
Agus Zubiaga
, and
Agus Zubiaga
created
02e4267
Add tool calling support for GitHub Copilot Chat (#28035)
Click to expand commit body
This PR adds tool calling support for GitHub Copilot Chat models.
Currently only supports the Claude family of models.
Release Notes:
- agent: Added tool calling support for Claude models in GitHub Copilot
Chat.
---------
Co-authored-by: Marshall Bowers <git@maxdeviant.com>
Bennet Bo Fenner
and
Marshall Bowers
created
c2afc22
Use scap library to implement screensharing on X11 (#27807)
Click to expand commit body
While `scap` does have support for Wayland and Windows, but haven't seen
screensharing work properly there yet. So for now just adding support
for X11 screensharing.
WIP branches for enabling wayland and windows support:
* https://github.com/zed-industries/zed/tree/wayland-screenshare
* https://github.com/zed-industries/zed/tree/windows-screenshare
Release Notes:
- Added support for screensharing on X11 (Linux)
---------
Co-authored-by: Conrad <conrad@zed.dev>
Co-authored-by: Mikayla <mikayla@zed.dev>
Co-authored-by: Junkui Zhang <364772080@qq.com>
Michael Sloan
,
Conrad
,
Mikayla
, and
Junkui Zhang
created
7bc62de
Use consistent ordering for popup menus (#27765)
Click to expand commit body
Before this change, the editor completion menu and gutter menus reversed their order so that the initial selection is near the user's focus. This change instead displays these menus in a consistent top-to-bottom order because the following benefits outweigh that benefit:
* Matches behavior of some other editors (Neovim and VSCode).
* Looks better for lexicographic lists.
* Keeps the meaning of keyboard interaction consistent, if the user is anticipating the order of the menu's contents.
Could consider making this configurable in the future if desired.
Closes #25066.
Release Notes:
- N/A
Aaron Feickert
created
f3adf41
agent: Fix deleting threads in history via keyboard (#28113)
Click to expand commit body
Using `shift-backspace` now because we need `backspace` for search
Release Notes:
- agent: Fix deleting threads in history via keyboard
Agus Zubiaga
created
6162d99
Properly query remote ssh server for language servers by name (#28124)
Click to expand commit body
Follow-up of https://github.com/zed-industries/zed/pull/27775
Release Notes:
- N/A
Kirill Bulatov
created
156dd32
Fix panic or bad hunks when expanding hunks w/ multiple ranges in 1 hunk (#28117)
Click to expand commit body
Release Notes:
- Fixed a crash that could happen when expanding diff hunks with
multiple cursors in one hunk.
Max Brunsfeld
created
2747915
jsx-tag-auto-close: Remove potential source of bugs and panics (#28119)
Click to expand commit body
Switch to using anchors for storing edited ranges rather than offsets as
they have to be used with multiple buffer snapshots
Release Notes:
- N/A
Release Notes:
- agent: Disable tools that are redundant in the presence of the bash
tool
Agus Zubiaga
created
9bd3dbc
collab: Include more information on some LLM usage log lines (#28116)
Click to expand commit body
This PR updates the `user rate limit` and `user usage` log lines to
include some more information that will be useful for graphing in Axiom.
Release Notes:
- N/A
This brings in a bunch of helix bindings (many of them from
infogulch/zed-helix-keymap) and implements helix-style delete.
Release Notes:
- vim: Expanded default helix-style keybindings in HelixNormal mode
jneem
created
558d61b
collab: Adjust rate-limiting measures for Claude 3.7 Sonnet (#28111)
Click to expand commit body
This PR updates the usage measures used for rate limiting when using
Claude 3.7 Sonnet.
Instead of using the combined `tokens_per_minute` measure we now rate
limit individually on `input_tokens_per_minute` (which exclude cache
reads) and `output_tokens_per_minute`.
Release Notes:
- N/A
The description of the Batch Tool was still referring using `-` as a
seperator for tool names
Release Notes:
- N/A
Bennet Bo Fenner
created
1a899fd
collab: Capture upstream input/output rate limits from Anthropic (#28106)
Click to expand commit body
This PR makes it so we capture the upstream rate limit information from
Anthropic for input and output tokens.
Release Notes:
- N/A
Marshall Bowers
created
183f57f
collab: Include max input/output tokens per minute on "Language Model Rate Limited" event (#28108)
Click to expand commit body
This PR adds the max input/output tokens per minute on the "Language
Model Rate Limited" event.
Missed this in https://github.com/zed-industries/zed/pull/28097.
Release Notes:
- N/A
Release Notes:
- agent: Add support for renaming threads
---------
Co-authored-by: Danilo Leal <daniloleal09@gmail.com>
Co-authored-by: Bennet Bo Fenner <bennetbo@gmx.de>
Co-authored-by: Richard Feldman <oss@rtfeldman.com>
Agus Zubiaga
,
Danilo Leal
,
Bennet Bo Fenner
, and
Richard Feldman
created
ef8fe52
Try adding beta token-efficient tool use for 3.7 Sonnet (#28100)
Click to expand commit body
Release Notes:
- Enabled [token-efficient tool use
(beta)](https://docs.anthropic.com/en/docs/build-with-claude/tool-use/token-efficient-tool-use)
for Claude 3.7 Sonnet models
Richard Feldman
created
9821963
Fix `script/zed-local` on non-Windows platforms (#28098)
Click to expand commit body
This PR fixes the `script/zed-local` script, which was no longer working
properly after https://github.com/zed-industries/zed/pull/23117.
Release Notes:
- N/A
Marshall Bowers
created
cfe5620
docs: Adjust assistant configuration docs table of contents (#28099)
Click to expand commit body
Follow up https://github.com/zed-industries/zed/pull/28088
The "Feature-specific models" was under the LM Studio section, which was
incorrect.
Release Notes:
- N/A
Danilo Leal
created
5fe86f7
collab: Track input and output tokens per minute separately (#28097)
Click to expand commit body
This PR adds tracking for input and output tokens per minute separately
from the current aggregate tokens per minute.
We are not yet rate-limiting based on these measures.
Release Notes:
- N/A
Marshall Bowers
created
c94b587
squawk: Specify PostgreSQL version in config (#28094)
Click to expand commit body
This PR adds the PostgreSQL version to the squawk config, see
https://squawkhq.com/docs/cli#specifying-postgres-version for reference.
The specified version matches the PostgreSQL version in the compose-file
https://github.com/zed-industries/zed/blob/43cb925a599ead7ddbeee26efd1f5af1d1dea97a/compose.yml#L3
and prevents false positives like
https://github.com/zed-industries/zed/pull/28090#issuecomment-2778871346
from happening (tested it locally with that commit).
Release Notes:
- N/A
Finn Evers
created
43cb925
ai: Separate model settings for each feature (#28088)
Click to expand commit body
Closes: https://github.com/zed-industries/zed/issues/20582
Allows users to select a specific model for each AI-powered feature:
- Agent panel
- Inline assistant
- Thread summarization
- Commit message generation
If unspecified for a given feature, it will use the `default_model`
setting.
Release Notes:
- Added support for configuring a specific model for each AI-powered
feature
---------
Co-authored-by: Danilo Leal <daniloleal09@gmail.com>
Co-authored-by: Bennet Bo Fenner <bennetbo@gmx.de>
Agus Zubiaga
,
Danilo Leal
, and
Bennet Bo Fenner
created
cf0d1e4
collab: Add granular tokens per minute columns to `models` table (#28090)
Click to expand commit body
This PR adds new granular tokens per minute columns to the `models`
table in preparation for more fine-grained rate limits.
The following columns have been added:
- `max_input_tokens_per_minute`
- `max_output_tokens_per_minute`
These mirror the "Maximum input tokens per minute (ITPM)" and "Maximum
output tokens per minute (OTPM)" [rate limits from
Anthropic](https://docs.anthropic.com/en/api/rate-limits#rate-limits).
Release Notes:
- N/A
Closes #19497
Fixed conflicts from https://github.com/zed-industries/zed/pull/19498
Added tags to tasks selector
Release Notes:
- Added ability to spawn tasks by tag with key bindings
- Added tags to tasks selector
https://github.com/user-attachments/assets/0eefea21-ec4e-407c-9d4f-2a0a4a0f74df
---------
Co-authored-by: Kirill Bulatov <mail4score@gmail.com>
Artem Evsikov
and
Kirill Bulatov
created
80441f6
gpui: Use NSOperatingSystemVersion provided by cocoa (#28055)
Click to expand commit body
Use the `NSOperatingSystemVersion` struct provided by the cocoa crate
instead of our own. Additionally we can directly use
`isOperatingSystemAtLeastVersion` instead of manually implementing
version comparison logic.
The `isOperatingSystemAtLeastVersion` instance method has been available
since MacOS 10.10, which released a decade ago.
Documentation for `isOperatingSystemAtLeastVersion `:
https://developer.apple.com/documentation/foundation/nsprocessinfo/1414876-isoperatingsystematleastversion
Release Notes:
- N/A
tidely
created
393d656
Make CloseAll keybindings more closely match VS Code (#28060)
Click to expand commit body
Changes default keymaps to more closely match the behavior of VSCode.
New Zed behavior:
`cmd-k w` / `ctrl-k w` -- Closes all buffers in the current pane
`cmd-k cmd-w` / `ctrl-k ctrl-w` -- Closes all buffers in all panes
VScode:
`cmd-k cmd-w` is workbench.action.closeAllEditors (close all buffers in
all splits)
`cmd-k w` is workbench.action.closeEditorsInGroup (close all buffers in
current split)
Both leave pinned tabs untouched.
Release Notes:
- Improved keybindings for close all tabs to better match VSCode
behavior
Peter Tripp
created
3d48efa
agent: Add search to Thread History (#28085)
Click to expand commit body

Release Notes:
- agent: Add search box to thread history
---------
Co-authored-by: Bennet Bo Fenner <bennetbo@gmx.de>
Co-authored-by: Danilo Leal <daniloleal09@gmail.com>
Agus Zubiaga
,
Bennet Bo Fenner
, and
Danilo Leal
created
277a3f8
Implement edit rejection in `ActionLog` (#28080)
Click to expand commit body
Release Notes:
- Fixed a bug that would prevent rejecting certain agent edits.
Antonio Scandurra
created
5e28689
Escape carets (^) in Go test regex (#27746)
Click to expand commit body
This is a follow up to https://github.com/zed-industries/zed/pull/14821,
which escaped `$` but not `^`.
This is fine for `bash`, but causes issues with `zsh`. This change
escapes the `^`. I tested this against `bash`, `zsh` and `fish`
I suspect such escaping would probably need to be done at some
shell-specific layer of the code, but for now it seems like the tasks
provided by the `ContextProvider` are supposed to be shell agnostic.
To reproduce the original issue:
1. Create a Go test file in a module that just contains a single test
`TestABC`.
2. Run `zsh -i -c "go test -run ^TestABC\$"` which is what Zed tries to
run when the task for a specific Go test is executed.
3. An error that there are no tests to run will be produced even though
there is a test.
4. Run `zsh -i -c "go test -run \^TestABC\$"` (note the backslash before
^).
5. The test will run successfully.
Example:
``` go
package bar
import "testing"
func TestABC(t *testing.T) {}
```
Release Notes:
- fix: Escape the ^ in the Go test -run regex to improve shell
compatibility (notably with zsh).
Jake
created
9e38c45
agent: Show which lines were read when using `read_file` tool (#28077)
Click to expand commit body
This makes sure that we specify which lines the agent actually read,
avoids confusing scenarios such as:
<img width="642" alt="Screenshot 2025-04-04 at 10 22 10"
src="https://github.com/user-attachments/assets/2680c313-4f77-4971-8743-8e3f5327c18d"
/>
Here the agent starts out by actually only reading a certain amount of
lines when the first tool call happens, then it does a second tool call
to read the whole file. To the user this looks like to identical tool
calls.
Now:
<img width="621" alt="image"
src="https://github.com/user-attachments/assets/76222258-9cc8-4b7c-98c0-6d5cffb282f2"
/>
<img width="362" alt="image"
src="https://github.com/user-attachments/assets/293f2fc0-365d-4b84-8400-4c11474caeb8"
/>
<img width="420" alt="image"
src="https://github.com/user-attachments/assets/ca92493e-67ce-4d45-8f83-0168df575326"
/>
Release Notes:
- N/A
Bennet Bo Fenner
created
1db3d92
agent: Differentiate @mentions from markdown links (#28073)
Click to expand commit body
This ensures that we display @mentions and normal markdown links
differently:
<img width="670" alt="Screenshot 2025-04-04 at 11 07 51"
src="https://github.com/user-attachments/assets/0a4d0881-abb9-42a8-b3fa-912cd6873ae0"
/>
Release Notes:
- N/A
Bennet Bo Fenner
created
a7674d3
Scroll to first hunk when clicking on a file to review in Agent Panel (#28075)
Click to expand commit body
Release Notes:
- Added the ability to scroll to a file when clicking on it in the Agent
Panel review section.
Antonio Scandurra
created
ee4b6a8
Listen for changes to the configuration of the attached device too (#28045)
Click to expand commit body
Release Notes:
- Fixed an issue causing "robot voice" when enabling the microphone on
some bluetooth headphones (hopefully).
Co-authored-by: Zed AI <ai+claude-3.7@zed.dev>
Conrad Irwin
and
Zed AI
created
c04c581
nix: Fix the `cargo-bundle` override (#28061)
Click to expand commit body
With the recent deprecation of `rustPlatform.fetchCargoTarball` +
migration to using `fetchCargoVendor` by default in `buildRustPackage`
(NixOS/nixpkgs#394012), the `cargo-bundle` override strategy used here,
as prescribed by the
[nixos asia wiki](https://nixos.asia/en/buildRustPackage) no longer
works:
https://github.com/zed-industries/zed/blob/c6e2d20a02b523172aea8a22fa2ec6c8975b52e4/nix/build.nix#L100-L116
[`fetchCargoTarball` produced a single derivation][tarball-drv] but
`fetchCargoVendor` [produces two][vendor-drvs]:
- `${name}-vendor-staging` (inner; FoD)
- `${name}-vendor` (outer)
[tarball-drv]:
https://github.com/NixOS/nixpkgs/blob/36fd87baa9083f34f7f5027900b62ee6d09b1f2f/pkgs/build-support/rust/fetch-cargo-tarball/default.nix#L79
[vendor-drvs]:
https://github.com/NixOS/nixpkgs/blob/10214747f5e6e7cb5b9bdf9e018a3c7b3032f5af/pkgs/build-support/rust/fetch-cargo-vendor.nix#L52-L103
`overrideAttrs` here is setting `outputHash` on the latter (which isn't
a fixed-output-derivation and does not have `outputHashMode` set which
implies `outputHashMode = "flat"`) instead of the inner; this results in
errors like this:
```console
❯ nix develop
error: output path '/nix/store/cb57w05zvsqxshqjl789kmsy9pbqjn06-cargo-bundle-0.6.1-zed-vendor.tar.gz' should be a non-executable regular file since recursive hashing is not enabled (outputHashMode=flat)
error: 1 dependencies of derivation '/nix/store/k3azmxljgjn26hqyhg9m1y3lhx32y939-cargo-bundle-0.6.1-zed.drv' failed to build
error: 1 dependencies of derivation '/nix/store/8ag4v0m90m4kcaq1ypp7f85pp8s6fxgc-nix-shell-env.drv' failed to build
```
> [!NOTE]
> you will need to remove
`/nix/store/cb57w05zvsqxshqjl789kmsy9pbqjn06-cargo-bundle-0.6.1-zed-vendor.tar.gz`
> from your nix store in order to be able to reproduce this
We want to be setting `outputHash` on the [first derivation][first-drv]
instead. This change has us just do the call to `fetchCargoTarball`
manually instead of using overrides.
[first-drv]:
https://github.com/NixOS/nixpkgs/blob/10214747f5e6e7cb5b9bdf9e018a3c7b3032f5af/pkgs/build-support/rust/fetch-cargo-vendor.nix#L85
---
I suspect CI/other machines didn't catch this due to a store path
matching the name + `outputHash` already being present but I'm not
entirely sure how this happened...
`sha256-Q49FnXNHWhvbH1LtMUpXFcvGKu9VHwqOXXd+MjswO64=` is actually a
`fetchCargoTarball` hash, not a `fetchCargoVendor` hash (and upstream
`cargo-about`'s `cargoDeps` [has been using `cargoVendor`][ups] since
before the nixpkgs bump in 50ad71a6306b45926091b8e37036ea8fe237f299)
[ups]:
https://github.com/NixOS/nixpkgs/blob/1d09c579c12869453d98dd35f6ff9d28dc32e869/pkgs/by-name/ca/cargo-about/package.nix#L22
---
> [!NOTE]
> eventually we'll be able to just have `.overrideAttrs (_: { cargoHash
= "..."; })` work as expected [^2]
---
Release Notes:
- N/A
[^2]:
[now that
`buildRustPackage`](https://github.com/NixOS/nixpkgs/pull/382550) uses
[`lib.extendMkDerivation`](https://github.com/nixos/nixpkgs/blob/bbdf8601bcf2a7e733d5ef2552109a5d8d5a44ce/doc/build-helpers/fixed-point-arguments.chapter.md)
(NixOS/nixpkgs/#234651) the groundwork is in place; a follow PR [needs
to use `cargoHash` and friends from
`finalAttrs`](https://github.com/NixOS/nixpkgs/blob/10214747f5e6e7cb5b9bdf9e018a3c7b3032f5af/pkgs/build-support/rust/build-rust-package/default.nix#L104)
Skipped nix builds were ugly, showing raw template when being skipped. Make prettier.
Release Notes:
- N/A
Peter Tripp
created
8b5ea05
Fix panic calling blocks_intersecting_buffer_range with an empty range (#28049)
Click to expand commit body
Previously, when comparing a block with an empty range to an empty query
range in non-inclusive mode, our binary search logic could end up
computing an inverted range, causing a panic.
This commit adds special casing when comparing empty blocks with empty
ranges.
cc @as-cii: I'm realizing that the approach to searching for the
intersecting replacement blocks makes some invalid assumptions about the
ordering of replace decorations. They aren't ordered at all by their end
range. @maxbrunsfeld and I are wondering if long term, we should remove
replace decorations and find another solution for folding buffers in
multi buffers.
Release Notes:
- Fixed an occasional panic that would occur when navigating to the next
change hunk with a pending inline transformation present.
Co-authored-by: Peter Tripp <petertripp@gmail.com>
Nathan Sobo
and
Peter Tripp
created
ec40e2d
gpui: Avoid dereferencing null pointer in `MacWindow::active_window` (#28059)
Click to expand commit body
This PR adds a check to avoid dereferencing a null pointer in
`MacWindow::active_window`.
Rust 1.86 now has a [debug assertion for dereferencing null
pointers](https://blog.rust-lang.org/2025/04/03/Rust-1.86.0.html#debug-assertions-that-pointers-are-non-null-when-required-for-soundness),
which means that losing focus of the window would cause a null pointer
to be dereferenced and panic.
Release Notes:
- N/A
This PR disables `parallel_tool_calls` for the models that support it,
as the Agent currently expects at most one tool use per turn.
It was a bit of trial and error to figure this out. OpenAI's API
annoyingly will return an error if passing `parallel_tool_calls` to a
model that doesn't support it.
Release Notes:
- N/A
This adds a nix CI job to build the flake in debug mode for
aarch64-darwin and x86-linux. For now this job will only run when the
`run-nix` label is added to a PR.
The CI job doesn't push to cachix for now, so every build is a clean
build.
I also added a condition to the garbage collection step so it only runs
when the nix store is >50GB.
Release Notes:
- N/A
Julia Ryan
created
3f71ae9
Use more appropriate action for Vim word completions (#28043)
Click to expand commit body
Follow-up of https://github.com/zed-industries/zed/pull/26410
The action does not sort the items the way Vim does, but still better
than the previous state.
Release Notes:
- N/A
Co-authored-by: Conrad Irwin <conrad.irwin@gmail.com>
- Rename `TextField` -> `SingleLineInput`
- Add a component preview for `SingleLineInput`
- Apply `SingleLineInput` to the AddContextServerModal
Release Notes:
- N/A
---------
Co-authored-by: Agus Zubiaga <hi@aguz.me>
Co-authored-by: Danilo Leal <daniloleal09@gmail.com>
Co-authored-by: Danilo Leal <67129314+danilo-leal@users.noreply.github.com>
Nate Butler
,
Agus Zubiaga
,
Danilo Leal
, and
Danilo Leal
created
315f1bf
agent: Snapshot context in user message instead of recreating it (#27967)
Click to expand commit body
This makes context essentially work the same way as `read-file`,
increasing the likelihood of cache hits.
Just like with `read-file`, we'll notify the model when the user makes
an edit to one of the tracked files. In the future, we want to send a
diff instead of just a list of files, but that's an orthogonal change.
Release Notes:
- agent: Improved caching of files in context
---------
Co-authored-by: Antonio Scandurra <me@as-cii.com>
Agus Zubiaga
and
Antonio Scandurra
created
0c82541
Allow to temporarily stop LSP servers (#28034)
Click to expand commit body
Same as `editor::RestartLanguageServer`, now there's an
`editor::StopLanguageServer` action that stops all language servers,
related to the currently opened editor.
Opening another singleton editor with the same language or changing
selections in a multi buffer will bring the servers back up.
Release Notes:
- Added a way to temporarily stop LSP servers
---------
Co-authored-by: Michael Sloan <mgsloan@gmail.com>
Kirill Bulatov
and
Michael Sloan
created
b9724d9
agent: Add token count in the thread view (#28037)
Click to expand commit body
This PR adds the token count to the active thread view. It doesn't
behaves quite like Assistant 1 where it updates as you type, though; it
updates after you submit the message.
<img
src="https://github.com/user-attachments/assets/82d2a180-554a-43ee-b776-3743359b609b"
width="700" />
---
Release Notes:
- agent: Add token count in the thread view
---------
Co-authored-by: Agus Zubiaga <hi@aguz.me>
This PR removes the unused `extract_tool_args_from_events` functions
that were defined in some of the LLM provider crates.
Release Notes:
- N/A
Marshall Bowers
created
e123c4b
Fix soft-wrapping with fold creases (#28029)
Click to expand commit body
Release Notes:
- Fixed a rendering bug that caused context in the agent to not wrap
properly.
---------
Co-authored-by: Conrad Irwin <conrad.irwin@gmail.com>
Co-authored-by: Zed AI <ai+claude-3.7@zed.dev>
Antonio Scandurra
,
Conrad Irwin
, and
Zed AI
created