From 5dc629b4dacbcf94f078568ec05595ddc5c288a3 Mon Sep 17 00:00:00 2001 From: Simon Cropp Date: Tue, 5 May 2026 11:29:43 +1000 Subject: [PATCH] Add detection for additional AI CLI agents Detect Gemini CLI, Codex, Amazon Q, OpenCode, Cline, Augment, TRAE AI, Goose, and Amp via their respective runtime environment variables. --- src/DiffEngine.Tests/AiCliDetectorTest.cs | 9 ++++ src/DiffEngine/AiCliDetector.cs | 57 ++++++++++++++++++++++- src/Directory.Build.props | 2 +- 3 files changed, 66 insertions(+), 2 deletions(-) diff --git a/src/DiffEngine.Tests/AiCliDetectorTest.cs b/src/DiffEngine.Tests/AiCliDetectorTest.cs index fac6f1ab..fbf33a7f 100644 --- a/src/DiffEngine.Tests/AiCliDetectorTest.cs +++ b/src/DiffEngine.Tests/AiCliDetectorTest.cs @@ -11,6 +11,15 @@ public void Props() var isCursor = AiCliDetector.IsCursor; var isAider = AiCliDetector.IsAider; var isClaudeCode = AiCliDetector.IsClaudeCode; + var isGeminiCli = AiCliDetector.IsGeminiCli; + var isCodex = AiCliDetector.IsCodex; + var isAmazonQ = AiCliDetector.IsAmazonQ; + var isOpenCode = AiCliDetector.IsOpenCode; + var isCline = AiCliDetector.IsCline; + var isAugment = AiCliDetector.IsAugment; + var isTraeAi = AiCliDetector.IsTraeAi; + var isGoose = AiCliDetector.IsGoose; + var isAmp = AiCliDetector.IsAmp; #endregion diff --git a/src/DiffEngine/AiCliDetector.cs b/src/DiffEngine/AiCliDetector.cs index 28a780c6..516f17d0 100644 --- a/src/DiffEngine/AiCliDetector.cs +++ b/src/DiffEngine/AiCliDetector.cs @@ -22,10 +22,47 @@ static AiCliDetector() // https://cursor.com/docs/agent/terminal IsCursor = variables.Contains("CURSOR_AGENT"); + // Gemini CLI + // https://google-gemini.github.io/gemini-cli/docs/tools/shell.html + IsGeminiCli = variables.Contains("GEMINI_CLI"); + + // OpenAI Codex CLI + IsCodex = variables.Contains("CODEX_SANDBOX"); + + // Amazon Q Developer CLI + // https://docs.aws.amazon.com/amazonq/latest/qdeveloper-ug/command-line.html + IsAmazonQ = variables.Contains("Q_TERM"); + + // OpenCode + IsOpenCode = variables.Contains("OPENCODE_CLIENT"); + + // Cline + IsCline = variables.Contains("CLINE_ACTIVE"); + + // Augment Code + IsAugment = variables.Contains("AUGMENT_AGENT"); + + // TRAE AI + IsTraeAi = variables.Contains("TRAE_AI_SHELL_ID"); + + // Goose / Amp share the generic AGENT variable, distinguished by value + var agent = Environment.GetEnvironmentVariable("AGENT"); + IsGoose = string.Equals(agent, "goose", StringComparison.OrdinalIgnoreCase); + IsAmp = string.Equals(agent, "amp", StringComparison.OrdinalIgnoreCase); + Detected = IsCopilot || IsAider || IsClaudeCode || - IsCursor; + IsCursor || + IsGeminiCli || + IsCodex || + IsAmazonQ || + IsOpenCode || + IsCline || + IsAugment || + IsTraeAi || + IsGoose || + IsAmp; } public static bool IsCursor { get; set; } @@ -36,5 +73,23 @@ static AiCliDetector() public static bool IsClaudeCode { get; } + public static bool IsGeminiCli { get; } + + public static bool IsCodex { get; } + + public static bool IsAmazonQ { get; } + + public static bool IsOpenCode { get; } + + public static bool IsCline { get; } + + public static bool IsAugment { get; } + + public static bool IsTraeAi { get; } + + public static bool IsGoose { get; } + + public static bool IsAmp { get; } + public static bool Detected { get; set; } } diff --git a/src/Directory.Build.props b/src/Directory.Build.props index d0eddd7e..c668c050 100644 --- a/src/Directory.Build.props +++ b/src/Directory.Build.props @@ -2,7 +2,7 @@ CS1591;CS0649;NU1608;NU1109 - 19.1.3 + 19.2.0 1.0.0 Testing, Snapshot, Diff, Compare Launches diff tools based on file extensions. Designed to be consumed by snapshot testing libraries.