From 36a291b0e95573bf9c8a917f9330f4a0945e263e Mon Sep 17 00:00:00 2001 From: Lavi Sharma <40620724+ilavisharma@users.noreply.github.com> Date: Tue, 30 Jun 2026 15:51:40 +0530 Subject: [PATCH] agent: Add commit message project rules toggle (#56867) This follows up on discussion #56551. Right now, when Zed generates a commit message, it includes project rules files like `AGENTS.md`, `CLAUDE.md`, and `.rules` in the prompt alongside the git diff. That can add a lot of extra context for a task that is really just summarizing the changes in a commit. This PR adds an `include_project_rules` option to `agent.commit_message_model`. When it is set to `false`, Zed skips loading project rules when generating commit messages. If the option is omitted, the current behavior stays the same. Example: ```json { "agent": { "commit_message_model": { "provider": "anthropic", "model": "claude-3-5-haiku", "include_project_rules": false } } } ``` I also updated the settings plumbing so this option is only used for commit message generation and defaults to true when not specified. Self-Review Checklist: - [x] I've reviewed my own diff for quality, security, and reliability - [x] Unsafe blocks (if any) have justifying comments - [x] The content is consistent with the [UI/UX checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist) - [x] Tests cover the new/changed behavior - [x] Performance impact has been considered and is acceptable Release Notes: - agent: Added setting to exclude project rules files from commit message generation prompts (`agent.commit_message_include_project_rules`) --------- Co-authored-by: Bennet Bo Fenner --- assets/settings/default.json | 3 +++ crates/agent/src/tool_permissions.rs | 1 + crates/agent_settings/src/agent_settings.rs | 4 ++++ crates/agent_ui/src/agent_ui.rs | 1 + crates/git_ui/src/git_panel.rs | 23 +++++++++++++++------ crates/settings_content/src/agent.rs | 5 +++++ 6 files changed, 31 insertions(+), 6 deletions(-) diff --git a/assets/settings/default.json b/assets/settings/default.json index e6842ae4fa..c1ca00ee0a 100644 --- a/assets/settings/default.json +++ b/assets/settings/default.json @@ -1034,6 +1034,9 @@ "agent": { // Whether the inline assistant should use streaming tools, when available "inline_assistant_use_streaming_tools": true, + // Whether to include project rules files (AGENTS.md, CLAUDE.md, .rules, etc.) + // in the prompt when generating git commit messages. + "commit_message_include_project_rules": true, // Whether the agent is enabled. "enabled": true, // Whether to show the agent panel button in the status bar. diff --git a/crates/agent/src/tool_permissions.rs b/crates/agent/src/tool_permissions.rs index d57cdb9395..02198a3f8d 100644 --- a/crates/agent/src/tool_permissions.rs +++ b/crates/agent/src/tool_permissions.rs @@ -580,6 +580,7 @@ mod tests { inline_assistant_model: None, inline_assistant_use_streaming_tools: false, commit_message_model: None, + commit_message_include_project_rules: true, commit_message_instructions: None, thread_summary_model: None, inline_alternatives: vec![], diff --git a/crates/agent_settings/src/agent_settings.rs b/crates/agent_settings/src/agent_settings.rs index 9b7970ba2c..037307e54e 100644 --- a/crates/agent_settings/src/agent_settings.rs +++ b/crates/agent_settings/src/agent_settings.rs @@ -216,6 +216,7 @@ pub struct AgentSettings { pub inline_assistant_model: Option, pub inline_assistant_use_streaming_tools: bool, pub commit_message_model: Option, + pub commit_message_include_project_rules: bool, pub commit_message_instructions: Option, pub thread_summary_model: Option, pub inline_alternatives: Vec, @@ -747,6 +748,9 @@ impl Settings for AgentSettings { inline_assistant_use_streaming_tools: agent .inline_assistant_use_streaming_tools .unwrap_or(true), + commit_message_include_project_rules: agent + .commit_message_include_project_rules + .unwrap(), commit_message_model: agent.commit_message_model, commit_message_instructions: agent.commit_message_instructions, thread_summary_model: agent.thread_summary_model, diff --git a/crates/agent_ui/src/agent_ui.rs b/crates/agent_ui/src/agent_ui.rs index 4248de814e..ad5940d21c 100644 --- a/crates/agent_ui/src/agent_ui.rs +++ b/crates/agent_ui/src/agent_ui.rs @@ -993,6 +993,7 @@ mod tests { inline_assistant_model: None, inline_assistant_use_streaming_tools: false, commit_message_model: None, + commit_message_include_project_rules: true, commit_message_instructions: None, thread_summary_model: None, inline_alternatives: vec![], diff --git a/crates/git_ui/src/git_panel.rs b/crates/git_ui/src/git_panel.rs index 7efa8f9b42..0ace54e100 100644 --- a/crates/git_ui/src/git_panel.rs +++ b/crates/git_ui/src/git_panel.rs @@ -3041,6 +3041,10 @@ impl GitPanel { }); let temperature = AgentSettings::temperature_for_model(&model, cx); + + let include_project_rules = + AgentSettings::get_global(cx).commit_message_include_project_rules; + let instructions = AgentSettings::get_global(cx) .commit_message_instructions .clone(); @@ -3080,12 +3084,19 @@ impl GitPanel { const MAX_DIFF_BYTES: usize = 20_000; diff_text = Self::compress_commit_diff(&diff_text, MAX_DIFF_BYTES); - let rules_content = - Self::load_project_rules(&project, &repo_work_dir, &mut cx).await; - let user_agents_md = cx.update(|cx| { - UserAgentsMd::global(cx) - .and_then(|user_agents_md| user_agents_md.content().cloned()) - }); + let rules_content = if include_project_rules { + Self::load_project_rules(&project, &repo_work_dir, &mut cx).await + } else { + None + }; + let user_agents_md = if include_project_rules { + cx.update(|cx| { + UserAgentsMd::global(cx) + .and_then(|user_agents_md| user_agents_md.content().cloned()) + }) + } else { + None + }; let prompt = include_str!("../src/commit_message_prompt.txt"); diff --git a/crates/settings_content/src/agent.rs b/crates/settings_content/src/agent.rs index 2e2218c5e3..55bb90dd5c 100644 --- a/crates/settings_content/src/agent.rs +++ b/crates/settings_content/src/agent.rs @@ -248,6 +248,11 @@ pub struct AgentSettingsContent { pub inline_assistant_use_streaming_tools: Option, /// Model to use for generating git commit messages. Defaults to default_model when not specified. pub commit_message_model: Option, + /// Whether to include project rules files (AGENTS.md, CLAUDE.md, .rules, etc.) + /// in the prompt when generating git commit messages. + /// + /// Default: true + pub commit_message_include_project_rules: Option, /// Custom instructions to include in the prompt when generating git commit messages. /// Applied in addition to any project rules files (such as `.rules` or `AGENTS.md`). pub commit_message_instructions: Option,