diff --git a/ee/config/feature_flags/beta/disable_code_gecko_default.yml b/ee/config/feature_flags/beta/disable_code_gecko_default.yml
new file mode 100644
index 0000000000000000000000000000000000000000..5878ce5735f93715371e678215a5d4088b45d855
--- /dev/null
+++ b/ee/config/feature_flags/beta/disable_code_gecko_default.yml
@@ -0,0 +1,9 @@
+---
+name: disable_code_gecko_default
+feature_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/519375
+introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/181852
+rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/520370
+milestone: '17.9'
+group: group::code creation
+type: beta
+default_enabled: false
diff --git a/ee/lib/api/code_suggestions.rb b/ee/lib/api/code_suggestions.rb
index 684ae4db8f7676ece5f92e4e3e7cbcb5c52e2b41..71967624ec632649caf884ec930036287f4107b4 100644
--- a/ee/lib/api/code_suggestions.rb
+++ b/ee/lib/api/code_suggestions.rb
@@ -137,6 +137,8 @@ def forbid_direct_access?
 
           # we add expanded_ai_logging to header only if current user is internal user,
           Gitlab::AiGateway.push_feature_flag(:expanded_ai_logging, current_user)
+          # we add disable_code_gecko_default to gradually roll out code-gecko deprecation
+          Gitlab::AiGateway.push_feature_flag(:disable_code_gecko_default, current_user)
 
           workhorse_headers =
             Gitlab::Workhorse.send_url(
@@ -187,6 +189,9 @@ def forbid_direct_access?
 
           details_hash = completion_model_details.current_model
 
+          # we add disable_code_gecko_default to gradually roll out code-gecko deprecation
+          Gitlab::AiGateway.push_feature_flag(:disable_code_gecko_default, current_user)
+
           access = {
             base_url: ::Gitlab::AiGateway.url,
             # for development purposes we just return instance JWT, this should not be used in production
diff --git a/ee/spec/requests/api/code_suggestions_spec.rb b/ee/spec/requests/api/code_suggestions_spec.rb
index 1e6e96812b1aa195e5e4799a1d7a1d2556b2a06f..73c12855c42fa0520c6ec589cee73b278bcdd039 100644
--- a/ee/spec/requests/api/code_suggestions_spec.rb
+++ b/ee/spec/requests/api/code_suggestions_spec.rb
@@ -53,6 +53,7 @@
     stub_feature_flags(incident_fail_over_completion_provider: false)
     stub_feature_flags(fireworks_qwen_code_completion: false)
     stub_feature_flags(code_completion_model_opt_out_from_fireworks_qwen: false)
+    stub_feature_flags(disable_code_gecko_default: false)
   end
 
   shared_examples 'a response' do |case_name|
@@ -320,6 +321,19 @@ def request
           end
         end
 
+        context 'when disable code-gecko default FF is enabled' do
+          before do
+            stub_feature_flags(disable_code_gecko_default: true)
+          end
+
+          it 'workhorse includes the FF in the headers' do
+            post_api
+
+            _, params = workhorse_send_data
+            expect(params['Header']["x-gitlab-enabled-feature-flags"][0]).to match("disable_code_gecko_default")
+          end
+        end
+
         context 'when incident_fail_over_completion_provider is enabled' do
           before do
             stub_feature_flags(incident_fail_over_completion_provider: true)
@@ -995,6 +1009,18 @@ def get_user(session):
             end
           end
 
+          context 'when disable code-gecko default FF is enabled' do
+            before do
+              stub_feature_flags(disable_code_gecko_default: true)
+            end
+
+            it 'includes the FF in the direct access headers' do
+              post_api
+
+              expect(json_response['headers']['x-gitlab-enabled-feature-flags']).to match('disable_code_gecko_default')
+            end
+          end
+
           context 'when code completions is self-hosted' do
             it 'does not include the model metadata in the direct access details' do
               create(:ai_feature_setting, provider: :self_hosted, feature: :code_completions)
diff --git a/rubocop/cop/gitlab/mark_used_feature_flags.rb b/rubocop/cop/gitlab/mark_used_feature_flags.rb
index 190c5ab3de3ee448601ae8d39d02b7abd6dbe738..682d3266067e5d5da40f1643bbfc57e1a6427e24 100644
--- a/rubocop/cop/gitlab/mark_used_feature_flags.rb
+++ b/rubocop/cop/gitlab/mark_used_feature_flags.rb
@@ -12,8 +12,8 @@ module Gitlab
       class MarkUsedFeatureFlags < RuboCop::Cop::Base
         include RuboCop::CodeReuseHelpers
 
-        FEATURE_CALLERS = %w[Feature Config::FeatureFlags].freeze
-        FEATURE_METHODS = %i[enabled? disabled?].freeze
+        FEATURE_CALLERS = %w[Feature Config::FeatureFlags Gitlab::AiGateway].freeze
+        FEATURE_METHODS = %i[enabled? disabled? push_feature_flag].freeze
         EXPERIMENT_METHODS = %i[
           experiment
         ].freeze
diff --git a/spec/rubocop/cop/gitlab/mark_used_feature_flags_spec.rb b/spec/rubocop/cop/gitlab/mark_used_feature_flags_spec.rb
index 4b300b96af6fd1314e7f5145887ad809ee986907..504480299497607d31bf62dcfe8c0e0455d5acbb 100644
--- a/spec/rubocop/cop/gitlab/mark_used_feature_flags_spec.rb
+++ b/spec/rubocop/cop/gitlab/mark_used_feature_flags_spec.rb
@@ -46,6 +46,7 @@ class Foo < ApplicationRecord
     push_frontend_feature_flag
     Config::FeatureFlags.enabled?
     ::Gitlab::Ci::Config::FeatureFlags.enabled?
+    ::Gitlab::AiGateway.push_feature_flag
   ].each do |feature_flag_method|
     context "#{feature_flag_method} method" do
       context 'a string feature flag' do