diff --git a/ash/constants/ash_features.cc b/ash/constants/ash_features.cc
index 9d2d80d19e21c..5987c5f7349f5 100644
--- a/ash/constants/ash_features.cc
+++ b/ash/constants/ash_features.cc
@@ -1820,6 +1820,11 @@ BASE_FEATURE(kLobsterDogfood,
              "LobsterDogfood",
              base::FEATURE_DISABLED_BY_DEFAULT);
 
+// Enables lobster entry point in quick insert zero state.
+BASE_FEATURE(kLobsterQuickInsertZeroState,
+             "LobsterQuickInsertZeroState",
+             base::FEATURE_DISABLED_BY_DEFAULT);
+
 // Enables lobster right click menu entry point.
 BASE_FEATURE(kLobsterRightClickMenu,
              "LobsterRightClickMenu",
diff --git a/ash/constants/ash_features.h b/ash/constants/ash_features.h
index bd75c3976e724..03594d6695ee4 100644
--- a/ash/constants/ash_features.h
+++ b/ash/constants/ash_features.h
@@ -612,6 +612,8 @@ BASE_DECLARE_FEATURE(kLobster);
 COMPONENT_EXPORT(ASH_CONSTANTS)
 BASE_DECLARE_FEATURE(kLobsterDogfood);
 COMPONENT_EXPORT(ASH_CONSTANTS)
+BASE_DECLARE_FEATURE(kLobsterQuickInsertZeroState);
+COMPONENT_EXPORT(ASH_CONSTANTS)
 BASE_DECLARE_FEATURE(kLobsterRightClickMenu);
 COMPONENT_EXPORT(ASH_CONSTANTS)
 BASE_DECLARE_FEATURE(kFeatureManagementLobster);
diff --git a/ash/quick_insert/metrics/quick_insert_session_metrics.cc b/ash/quick_insert/metrics/quick_insert_session_metrics.cc
index be58cc54955b2..d7fba6e371531 100644
--- a/ash/quick_insert/metrics/quick_insert_session_metrics.cc
+++ b/ash/quick_insert/metrics/quick_insert_session_metrics.cc
@@ -109,7 +109,8 @@ cros_events::PickerAction ConvertToCrosEventAction(
       return cros_events::PickerAction::OPEN_EDITOR_WRITE;
     case QuickInsertCategory::kEditorRewrite:
       return cros_events::PickerAction::OPEN_EDITOR_REWRITE;
-    case QuickInsertCategory::kLobster:
+    case QuickInsertCategory::kLobsterWithSelectedText:
+    case QuickInsertCategory::kLobsterWithNoSelectedText:
       return cros_events::PickerAction::OPEN_LOBSTER;
     case QuickInsertCategory::kLinks:
       return cros_events::PickerAction::OPEN_LINKS;
diff --git a/ash/quick_insert/model/quick_insert_model.cc b/ash/quick_insert/model/quick_insert_model.cc
index 972abcb37656a..c4c6650e0af92 100644
--- a/ash/quick_insert/model/quick_insert_model.cc
+++ b/ash/quick_insert/model/quick_insert_model.cc
@@ -90,7 +90,7 @@ std::vector<QuickInsertCategory> QuickInsertModel::GetAvailableCategories()
       }
 
       if (lobster_status_ == LobsterStatus::kEnabled) {
-        categories.push_back(QuickInsertCategory::kLobster);
+        categories.push_back(QuickInsertCategory::kLobsterWithSelectedText);
       }
       return categories;
     }
@@ -101,7 +101,7 @@ std::vector<QuickInsertCategory> QuickInsertModel::GetAvailableCategories()
       }
 
       if (lobster_status_ == LobsterStatus::kEnabled) {
-        categories.push_back(QuickInsertCategory::kLobster);
+        categories.push_back(QuickInsertCategory::kLobsterWithNoSelectedText);
       }
 
       categories.push_back(QuickInsertCategory::kLinks);
diff --git a/ash/quick_insert/model/quick_insert_model_unittest.cc b/ash/quick_insert/model/quick_insert_model_unittest.cc
index b1c5180cf74fc..3876290f08850 100644
--- a/ash/quick_insert/model/quick_insert_model_unittest.cc
+++ b/ash/quick_insert/model/quick_insert_model_unittest.cc
@@ -45,7 +45,8 @@ TEST(QuickInsertModelTest,
   EXPECT_THAT(
       model.GetAvailableCategories(),
       ElementsAre(
-          QuickInsertCategory::kEditorWrite, QuickInsertCategory::kLobster,
+          QuickInsertCategory::kEditorWrite,
+          QuickInsertCategory::kLobsterWithNoSelectedText,
           QuickInsertCategory::kLinks, QuickInsertCategory::kEmojis,
           QuickInsertCategory::kClipboard, QuickInsertCategory::kDriveFiles,
           QuickInsertCategory::kLocalFiles, QuickInsertCategory::kDatesTimes,
@@ -63,7 +64,7 @@ TEST(QuickInsertModelTest,
                          QuickInsertModel::LobsterStatus::kEnabled);
   EXPECT_THAT(model.GetAvailableCategories(),
               ElementsAre(QuickInsertCategory::kEditorRewrite,
-                          QuickInsertCategory::kLobster));
+                          QuickInsertCategory::kLobsterWithSelectedText));
 }
 
 TEST(QuickInsertModelTest, AvailableCategoriesContainsEditorWriteWhenEnabled) {
@@ -121,7 +122,7 @@ TEST(QuickInsertModelTest, AvailableCategoriesContainsLobsterWhenEnabled) {
                          QuickInsertModel::EditorStatus::kDisabled,
                          QuickInsertModel::LobsterStatus::kEnabled);
   EXPECT_THAT(model.GetAvailableCategories(),
-              Contains(QuickInsertCategory::kLobster));
+              Contains(QuickInsertCategory::kLobsterWithNoSelectedText));
 }
 
 TEST(QuickInsertModelTest, AvailableCategoriesOmitsLobsterWriteWhenDisabled) {
@@ -132,7 +133,9 @@ TEST(QuickInsertModelTest, AvailableCategoriesOmitsLobsterWriteWhenDisabled) {
                          QuickInsertModel::EditorStatus::kDisabled,
                          QuickInsertModel::LobsterStatus::kDisabled);
   EXPECT_THAT(model.GetAvailableCategories(),
-              Not(Contains(QuickInsertCategory::kLobster)));
+              Not(Contains(QuickInsertCategory::kLobsterWithNoSelectedText)));
+  EXPECT_THAT(model.GetAvailableCategories(),
+              Not(Contains(QuickInsertCategory::kLobsterWithSelectedText)));
 }
 
 TEST(QuickInsertModelTest,
diff --git a/ash/quick_insert/quick_insert_category.h b/ash/quick_insert/quick_insert_category.h
index 2e4f756109427..569722b3a14e0 100644
--- a/ash/quick_insert/quick_insert_category.h
+++ b/ash/quick_insert/quick_insert_category.h
@@ -14,7 +14,8 @@ enum class ASH_EXPORT QuickInsertCategory {
   // Editor categories:
   kEditorWrite,
   kEditorRewrite,
-  kLobster,
+  kLobsterWithSelectedText,
+  kLobsterWithNoSelectedText,
   // General categories:
   kLinks,
   kEmojisGifs,
diff --git a/ash/quick_insert/quick_insert_search_result.cc b/ash/quick_insert/quick_insert_search_result.cc
index 295027d94d03b..8c8e413bab3ea 100644
--- a/ash/quick_insert/quick_insert_search_result.cc
+++ b/ash/quick_insert/quick_insert_search_result.cc
@@ -231,8 +231,9 @@ QuickInsertEditorResult::~QuickInsertEditorResult() = default;
 bool QuickInsertEditorResult::operator==(const QuickInsertEditorResult&) const =
     default;
 
-QuickInsertLobsterResult::QuickInsertLobsterResult(std::u16string display_name)
-    : display_name(std::move(display_name)) {}
+QuickInsertLobsterResult::QuickInsertLobsterResult(Mode mode,
+                                                   std::u16string display_name)
+    : mode(mode), display_name(std::move(display_name)) {}
 
 QuickInsertLobsterResult::QuickInsertLobsterResult(
     const QuickInsertLobsterResult&) = default;
diff --git a/ash/quick_insert/quick_insert_search_result.h b/ash/quick_insert/quick_insert_search_result.h
index f127367a5db94..39198f968a05b 100644
--- a/ash/quick_insert/quick_insert_search_result.h
+++ b/ash/quick_insert/quick_insert_search_result.h
@@ -241,9 +241,12 @@ struct ASH_EXPORT QuickInsertEditorResult {
 };
 
 struct ASH_EXPORT QuickInsertLobsterResult {
+  enum class Mode { kNoSelection, kWithSelection };
+
+  Mode mode;
   std::u16string display_name;
 
-  QuickInsertLobsterResult(std::u16string display_name);
+  QuickInsertLobsterResult(Mode mode, std::u16string display_name);
   QuickInsertLobsterResult(const QuickInsertLobsterResult&);
   QuickInsertLobsterResult& operator=(const QuickInsertLobsterResult&);
   ~QuickInsertLobsterResult();
diff --git a/ash/quick_insert/quick_insert_suggestions_controller.cc b/ash/quick_insert/quick_insert_suggestions_controller.cc
index 168d587219285..71af715008a6b 100644
--- a/ash/quick_insert/quick_insert_suggestions_controller.cc
+++ b/ash/quick_insert/quick_insert_suggestions_controller.cc
@@ -65,9 +65,9 @@ void PickerSuggestionsController::GetSuggestions(QuickInsertClient& client,
   }
 
   if (base::Contains(model.GetAvailableCategories(),
-                     QuickInsertCategory::kLobster) &&
-      model.GetMode() == PickerModeType::kHasSelection) {
-    callback.Run({QuickInsertLobsterResult(/*display_name=*/u"")});
+                     QuickInsertCategory::kLobsterWithSelectedText)) {
+    callback.Run({QuickInsertLobsterResult(
+        QuickInsertLobsterResult::Mode::kWithSelection, /*display_name=*/u"")});
   }
 
   if (model.GetMode() == PickerModeType::kHasSelection) {
@@ -129,7 +129,8 @@ void PickerSuggestionsController::GetSuggestionsForCategory(
   switch (category) {
     case QuickInsertCategory::kEditorWrite:
     case QuickInsertCategory::kEditorRewrite:
-    case QuickInsertCategory::kLobster:
+    case QuickInsertCategory::kLobsterWithNoSelectedText:
+    case QuickInsertCategory::kLobsterWithSelectedText:
       NOTREACHED_NORETURN();
     case QuickInsertCategory::kLinks:
       // TODO: b/366237507 - Request only kMaxRecentLinks results once
diff --git a/ash/quick_insert/quick_insert_suggestions_controller_unittest.cc b/ash/quick_insert/quick_insert_suggestions_controller_unittest.cc
index 42c43da089f4f..bc6bb028ad222 100644
--- a/ash/quick_insert/quick_insert_suggestions_controller_unittest.cc
+++ b/ash/quick_insert/quick_insert_suggestions_controller_unittest.cc
@@ -101,9 +101,11 @@ TEST_F(QuickInsertSuggestionsControllerTest,
 
   base::MockCallback<PickerSuggestionsController::SuggestionsCallback> callback;
   EXPECT_CALL(callback, Run(_)).Times(AnyNumber());
-  EXPECT_CALL(callback, Run(IsSupersetOf({
-                            QuickInsertLobsterResult(u""),
-                        })))
+  EXPECT_CALL(callback,
+              Run(IsSupersetOf({
+                  QuickInsertLobsterResult(
+                      QuickInsertLobsterResult::Mode::kWithSelection, u""),
+              })))
       .Times(1);
 
   controller.GetSuggestions(client, model, callback.Get());
diff --git a/ash/quick_insert/search/quick_insert_lobster_search.cc b/ash/quick_insert/search/quick_insert_lobster_search.cc
index 0d35ff1869c1d..d98660031832b 100644
--- a/ash/quick_insert/search/quick_insert_lobster_search.cc
+++ b/ash/quick_insert/search/quick_insert_lobster_search.cc
@@ -14,10 +14,12 @@
 namespace ash {
 
 std::optional<QuickInsertSearchResult> PickerLobsterSearch(
+    QuickInsertLobsterResult::Mode mode,
     std::u16string_view query) {
   CHECK(!query.empty());
   // TODO: b/369508495 - implement matching logic.
-  return std::make_optional(QuickInsertLobsterResult(/*display_name=*/u""));
+  return std::make_optional(
+      QuickInsertLobsterResult(mode, /*display_name=*/u""));
 }
 
 }  // namespace ash
diff --git a/ash/quick_insert/search/quick_insert_lobster_search.h b/ash/quick_insert/search/quick_insert_lobster_search.h
index 41724fe97106a..31d97c872740e 100644
--- a/ash/quick_insert/search/quick_insert_lobster_search.h
+++ b/ash/quick_insert/search/quick_insert_lobster_search.h
@@ -15,6 +15,7 @@ namespace ash {
 
 // `query` must not be empty.
 ASH_EXPORT std::optional<QuickInsertSearchResult> PickerLobsterSearch(
+    QuickInsertLobsterResult::Mode mode,
     std::u16string_view query);
 
 }  // namespace ash
diff --git a/ash/quick_insert/search/quick_insert_search_aggregator.cc b/ash/quick_insert/search/quick_insert_search_aggregator.cc
index 27e9ac9157915..87463d6f5bddc 100644
--- a/ash/quick_insert/search/quick_insert_search_aggregator.cc
+++ b/ash/quick_insert/search/quick_insert_search_aggregator.cc
@@ -51,7 +51,8 @@ QuickInsertSectionType SectionTypeFromSearchSource(
       return QuickInsertSectionType::kDriveFiles;
     case QuickInsertSearchSource::kEditorWrite:
     case QuickInsertSearchSource::kEditorRewrite:
-    case QuickInsertSearchSource::kLobster:
+    case QuickInsertSearchSource::kLobsterWithNoSelectedText:
+    case QuickInsertSearchSource::kLobsterWithSelectedText:
       return QuickInsertSectionType::kContentEditor;
   }
 }
diff --git a/ash/quick_insert/search/quick_insert_search_aggregator_unittest.cc b/ash/quick_insert/search/quick_insert_search_aggregator_unittest.cc
index c5bd5e5bd8dc9..54a1e7330fad1 100644
--- a/ash/quick_insert/search/quick_insert_search_aggregator_unittest.cc
+++ b/ash/quick_insert/search/quick_insert_search_aggregator_unittest.cc
@@ -109,7 +109,11 @@ const TestCase kContentEditorSectionTestCases[] = {
         .section_type = QuickInsertSectionType::kContentEditor,
     },
     TestCase{
-        .source = QuickInsertSearchSource::kLobster,
+        .source = QuickInsertSearchSource::kLobsterWithNoSelectedText,
+        .section_type = QuickInsertSectionType::kContentEditor,
+    },
+    TestCase{
+        .source = QuickInsertSearchSource::kLobsterWithSelectedText,
         .section_type = QuickInsertSectionType::kContentEditor,
     },
 };
@@ -542,7 +546,10 @@ TEST_F(QuickInsertSearchAggregatorMultipleSourcesTest,
                           u"rewrite")),
                       VariantWith<QuickInsertTextResult>(Field(
                           "primary_text", &QuickInsertTextResult::primary_text,
-                          u"lobster"))))))))
+                          u"lobster_with_no_selected_text")),
+                      VariantWith<QuickInsertTextResult>(Field(
+                          "primary_text", &QuickInsertTextResult::primary_text,
+                          u"lobster_with_selected_text"))))))))
       .Times(1);
 
   QuickInsertSearchAggregator aggregator(
@@ -584,9 +591,14 @@ TEST_F(QuickInsertSearchAggregatorMultipleSourcesTest,
   aggregator.HandleSearchSourceResults(QuickInsertSearchSource::kEditorRewrite,
                                        {QuickInsertTextResult(u"rewrite")},
                                        /*has_more_results=*/false);
-  aggregator.HandleSearchSourceResults(QuickInsertSearchSource::kLobster,
-                                       {QuickInsertTextResult(u"lobster")},
-                                       /*has_more_results=*/false);
+  aggregator.HandleSearchSourceResults(
+      QuickInsertSearchSource::kLobsterWithNoSelectedText,
+      {QuickInsertTextResult(u"lobster_with_no_selected_text")},
+      /*has_more_results=*/false);
+  aggregator.HandleSearchSourceResults(
+      QuickInsertSearchSource::kLobsterWithSelectedText,
+      {QuickInsertTextResult(u"lobster_with_selected_text")},
+      /*has_more_results=*/false);
   task_environment().FastForwardBy(kBurnInPeriod);
 }
 
@@ -794,9 +806,14 @@ TEST_F(QuickInsertSearchAggregatorMultipleSourcesTest,
   aggregator.HandleSearchSourceResults(QuickInsertSearchSource::kEditorRewrite,
                                        {QuickInsertTextResult(u"rewrite")},
                                        /*has_more_results=*/false);
-  aggregator.HandleSearchSourceResults(QuickInsertSearchSource::kLobster,
-                                       {QuickInsertTextResult(u"lobster")},
-                                       /*has_more_results=*/false);
+  aggregator.HandleSearchSourceResults(
+      QuickInsertSearchSource::kLobsterWithNoSelectedText,
+      {QuickInsertTextResult(u"lobster")},
+      /*has_more_results=*/false);
+  aggregator.HandleSearchSourceResults(
+      QuickInsertSearchSource::kLobsterWithSelectedText,
+      {QuickInsertTextResult(u"lobster")},
+      /*has_more_results=*/false);
 }
 
 TEST_F(QuickInsertSearchAggregatorMultipleSourcesTest,
diff --git a/ash/quick_insert/search/quick_insert_search_request.cc b/ash/quick_insert/search/quick_insert_search_request.cc
index 2bc5168a6240b..9b1ee2efd41be 100644
--- a/ash/quick_insert/search/quick_insert_search_request.cc
+++ b/ash/quick_insert/search/quick_insert_search_request.cc
@@ -73,7 +73,8 @@ const char* SearchSourceToHistogram(QuickInsertSearchSource source) {
     case QuickInsertSearchSource::kEditorWrite:
     case QuickInsertSearchSource::kEditorRewrite:
       return "Ash.Picker.Search.EditorProvider.QueryTime";
-    case QuickInsertSearchSource::kLobster:
+    case QuickInsertSearchSource::kLobsterWithNoSelectedText:
+    case QuickInsertSearchSource::kLobsterWithSelectedText:
       return "Ash.Picker.Search.LobsterProvider.QueryTime";
   }
   NOTREACHED() << "Unexpected search source " << base::to_underlying(source);
@@ -204,11 +205,24 @@ QuickInsertSearchRequest::QuickInsertSearchRequest(
           PickerEditorSearch(QuickInsertEditorResult::Mode::kRewrite, query));
     }
 
-    if (base::Contains(available_categories, QuickInsertCategory::kLobster)) {
-      // Editor results are currently synchronous.
-      MarkSearchStarted(QuickInsertSearchSource::kLobster);
-      HandleLobsterSearchResults(QuickInsertSearchSource::kLobster,
-                                 PickerLobsterSearch(query));
+    if (base::Contains(available_categories,
+                       QuickInsertCategory::kLobsterWithNoSelectedText)) {
+      // Lobster results are currently synchronous.
+      MarkSearchStarted(QuickInsertSearchSource::kLobsterWithNoSelectedText);
+      HandleLobsterSearchResults(
+          QuickInsertSearchSource::kLobsterWithNoSelectedText,
+          PickerLobsterSearch(QuickInsertLobsterResult::Mode::kNoSelection,
+                              query));
+    }
+
+    if (base::Contains(available_categories,
+                       QuickInsertCategory::kLobsterWithSelectedText)) {
+      // Lobster results are currently synchronous.
+      MarkSearchStarted(QuickInsertSearchSource::kLobsterWithSelectedText);
+      HandleLobsterSearchResults(
+          QuickInsertSearchSource::kLobsterWithSelectedText,
+          PickerLobsterSearch(QuickInsertLobsterResult::Mode::kWithSelection,
+                              query));
     }
   }
 
diff --git a/ash/quick_insert/search/quick_insert_search_request_unittest.cc b/ash/quick_insert/search/quick_insert_search_request_unittest.cc
index 988a028fb5f63..ed8114b86cade 100644
--- a/ash/quick_insert/search/quick_insert_search_request_unittest.cc
+++ b/ash/quick_insert/search/quick_insert_search_request_unittest.cc
@@ -1117,10 +1117,11 @@ TEST_P(QuickInsertSearchRequestLobsterTest, RecordsLobsterMetrics) {
 INSTANTIATE_TEST_SUITE_P(
     ,
     QuickInsertSearchRequestLobsterTest,
-    testing::Values(std::make_pair(QuickInsertCategory::kLobster,
-                                   QuickInsertSearchSource::kLobster),
-                    std::make_pair(QuickInsertCategory::kLobster,
-                                   QuickInsertSearchSource::kLobster)));
+    testing::Values(
+        std::make_pair(QuickInsertCategory::kLobsterWithNoSelectedText,
+                       QuickInsertSearchSource::kLobsterWithNoSelectedText),
+        std::make_pair(QuickInsertCategory::kLobsterWithSelectedText,
+                       QuickInsertSearchSource::kLobsterWithSelectedText)));
 
 TEST_F(QuickInsertSearchRequestTest, DoneClosureCalledImmediatelyWhenNoSearch) {
   // This actually calls category search.
diff --git a/ash/quick_insert/search/quick_insert_search_source.h b/ash/quick_insert/search/quick_insert_search_source.h
index 8993bf6d4d1fe..457a30ab0def6 100644
--- a/ash/quick_insert/search/quick_insert_search_source.h
+++ b/ash/quick_insert/search/quick_insert_search_source.h
@@ -17,8 +17,9 @@ enum class QuickInsertSearchSource {
   kClipboard,
   kEditorWrite,
   kEditorRewrite,
-  kLobster,
-  kMaxValue = kLobster,
+  kLobsterWithNoSelectedText,
+  kLobsterWithSelectedText,
+  kMaxValue = kLobsterWithSelectedText,
 };
 }
 
diff --git a/ash/quick_insert/views/quick_insert_category_type.cc b/ash/quick_insert/views/quick_insert_category_type.cc
index 1d01ff5d0d417..a31dab4791b9a 100644
--- a/ash/quick_insert/views/quick_insert_category_type.cc
+++ b/ash/quick_insert/views/quick_insert_category_type.cc
@@ -15,8 +15,10 @@ GetQuickInsertCategoryType(QuickInsertCategory category) {
       return QuickInsertCategoryType::kEditorWrite;
     case QuickInsertCategory::kEditorRewrite:
       return QuickInsertCategoryType::kEditorRewrite;
-    case QuickInsertCategory::kLobster:
+    case QuickInsertCategory::kLobsterWithNoSelectedText:
       return QuickInsertCategoryType::kEditorWrite;
+    case QuickInsertCategory::kLobsterWithSelectedText:
+      return QuickInsertCategoryType::kEditorRewrite;
     case QuickInsertCategory::kLinks:
     case QuickInsertCategory::kEmojisGifs:
     case QuickInsertCategory::kEmojis:
diff --git a/ash/quick_insert/views/quick_insert_icons.cc b/ash/quick_insert/views/quick_insert_icons.cc
index f23404ff2d955..408ffe225326c 100644
--- a/ash/quick_insert/views/quick_insert_icons.cc
+++ b/ash/quick_insert/views/quick_insert_icons.cc
@@ -26,7 +26,8 @@ const gfx::VectorIcon& GetVectorIconForQuickInsertCategory(
     case QuickInsertCategory::kEditorRewrite:
       // TODO: b/322926823 - Use correct icons.
       return kPencilIcon;
-    case QuickInsertCategory::kLobster:
+    case QuickInsertCategory::kLobsterWithNoSelectedText:
+    case QuickInsertCategory::kLobsterWithSelectedText:
 #if BUILDFLAG(GOOGLE_CHROME_BRANDING)
       return kLobsterIcon;
 #else
diff --git a/ash/quick_insert/views/quick_insert_section_view.cc b/ash/quick_insert/views/quick_insert_section_view.cc
index 929707ad9e2a7..a41bc57b12d4b 100644
--- a/ash/quick_insert/views/quick_insert_section_view.cc
+++ b/ash/quick_insert/views/quick_insert_section_view.cc
@@ -79,6 +79,16 @@ QuickInsertCategory GetCategoryForEditorData(
   }
 }
 
+QuickInsertCategory GetCategoryForLobsterData(
+    const QuickInsertLobsterResult& data) {
+  switch (data.mode) {
+    case QuickInsertLobsterResult::Mode::kNoSelection:
+      return QuickInsertCategory::kLobsterWithNoSelectedText;
+    case QuickInsertLobsterResult::Mode::kWithSelection:
+      return QuickInsertCategory::kLobsterWithSelectedText;
+  }
+}
+
 std::u16string GetLabelForNewWindowType(QuickInsertNewWindowResult::Type type) {
   switch (type) {
     case QuickInsertNewWindowResult::Type::kDoc:
@@ -360,7 +370,8 @@ QuickInsertSectionView::CreateItemFromResult(
             auto item_view = std::make_unique<QuickInsertListItemView>(
                 std::move(select_result_callback));
 
-            const QuickInsertCategory category = QuickInsertCategory::kLobster;
+            const QuickInsertCategory category =
+                GetCategoryForLobsterData(data);
             item_view->SetPrimaryText(GetLabelForQuickInsertCategory(category));
             item_view->SetLeadingIcon(GetIconForQuickInsertCategory(category));
             return item_view;
diff --git a/ash/quick_insert/views/quick_insert_strings.cc b/ash/quick_insert/views/quick_insert_strings.cc
index accfbeb8f3a65..cb595e3197604 100644
--- a/ash/quick_insert/views/quick_insert_strings.cc
+++ b/ash/quick_insert/views/quick_insert_strings.cc
@@ -35,7 +35,8 @@ std::u16string GetLabelForQuickInsertCategory(QuickInsertCategory category) {
 #else
       return u"";
 #endif  // BUILDFLAG(GOOGLE_CHROME_BRANDING)
-    case QuickInsertCategory::kLobster:
+    case QuickInsertCategory::kLobsterWithNoSelectedText:
+    case QuickInsertCategory::kLobsterWithSelectedText:
 #if BUILDFLAG(GOOGLE_CHROME_BRANDING)
       return l10n_util::GetStringUTF16(IDS_PICKER_LOBSTER_SELECTION_LABEL);
 #else
@@ -83,7 +84,8 @@ std::u16string GetSearchFieldPlaceholderTextForQuickInsertCategory(
           IDS_PICKER_UNITS_MATHS_CATEGORY_SEARCH_FIELD_PLACEHOLDER_TEXT);
     case QuickInsertCategory::kEditorWrite:
     case QuickInsertCategory::kEditorRewrite:
-    case QuickInsertCategory::kLobster:
+    case QuickInsertCategory::kLobsterWithNoSelectedText:
+    case QuickInsertCategory::kLobsterWithSelectedText:
     case QuickInsertCategory::kEmojisGifs:
     case QuickInsertCategory::kEmojis:
       NOTREACHED_NORETURN();
diff --git a/ash/quick_insert/views/quick_insert_view.cc b/ash/quick_insert/views/quick_insert_view.cc
index b9b1b2cc16a1e..3461144d39ffa 100644
--- a/ash/quick_insert/views/quick_insert_view.cc
+++ b/ash/quick_insert/views/quick_insert_view.cc
@@ -243,7 +243,8 @@ std::u16string GetNoResultsFoundDescription(QuickInsertCategory category) {
       return l10n_util::GetStringUTF16(IDS_PICKER_NO_RESULTS_TEXT);
     case QuickInsertCategory::kEditorWrite:
     case QuickInsertCategory::kEditorRewrite:
-    case QuickInsertCategory::kLobster:
+    case QuickInsertCategory::kLobsterWithNoSelectedText:
+    case QuickInsertCategory::kLobsterWithSelectedText:
     case QuickInsertCategory::kEmojisGifs:
     case QuickInsertCategory::kEmojis:
       NOTREACHED_NORETURN();
@@ -756,7 +757,8 @@ void QuickInsertView::SelectCategoryWithQuery(QuickInsertCategory category,
     return;
   }
 
-  if (category == QuickInsertCategory::kLobster) {
+  if (category == QuickInsertCategory::kLobsterWithNoSelectedText ||
+      category == QuickInsertCategory::kLobsterWithSelectedText) {
     if (auto* widget = GetWidget()) {
       widget->CloseWithReason(views::Widget::ClosedReason::kLostFocus);
     }
diff --git a/ash/quick_insert/views/quick_insert_zero_state_view.cc b/ash/quick_insert/views/quick_insert_zero_state_view.cc
index 0e84704108d3c..ec3afaf4c205f 100644
--- a/ash/quick_insert/views/quick_insert_zero_state_view.cc
+++ b/ash/quick_insert/views/quick_insert_zero_state_view.cc
@@ -107,12 +107,17 @@ PickerZeroStateView::PickerZeroStateView(
       picker_view_width, asset_fetcher, submenu_controller_));
 
   for (QuickInsertCategory category : available_categories) {
-    // kEditorRewrite is not visible in the zero-state, since it's replaced with
-    // the rewrite suggestions.
-    // TODO: b/369701127 - Shows kLobster entry once its implementation is
-    // ready.
+    // kEditorRewrite and LobsterWithSelectedText are not visible in the
+    // zero-state, since it's replaced with the rewrite suggestions and the
+    // lobster result, respectively.
     if (category == QuickInsertCategory::kEditorRewrite ||
-        category == QuickInsertCategory::kLobster) {
+        category == QuickInsertCategory::kLobsterWithSelectedText) {
+      continue;
+    }
+
+    if (!base::FeatureList::IsEnabled(
+            ash::features::kLobsterQuickInsertZeroState) &&
+        category == QuickInsertCategory::kLobsterWithNoSelectedText) {
       continue;
     }
 
diff --git a/ash/quick_insert/views/quick_insert_zero_state_view_unittest.cc b/ash/quick_insert/views/quick_insert_zero_state_view_unittest.cc
index d919ccd3a8e12..931d3ff3fecbc 100644
--- a/ash/quick_insert/views/quick_insert_zero_state_view_unittest.cc
+++ b/ash/quick_insert/views/quick_insert_zero_state_view_unittest.cc
@@ -86,7 +86,8 @@ constexpr base::span<const QuickInsertCategory> kAllCategories = {
     (QuickInsertCategory[]){
         QuickInsertCategory::kEditorWrite,
         QuickInsertCategory::kEditorRewrite,
-        QuickInsertCategory::kLobster,
+        QuickInsertCategory::kLobsterWithNoSelectedText,
+        QuickInsertCategory::kLobsterWithSelectedText,
         QuickInsertCategory::kLinks,
         QuickInsertCategory::kEmojisGifs,
         QuickInsertCategory::kClipboard,
@@ -490,17 +491,18 @@ TEST_F(QuickInsertZeroStateViewTest, ShowsEditorSuggestionsBehindSubmenu) {
 }
 
 TEST_F(QuickInsertZeroStateViewTest,
-       DoesntShowLobsterCategoryForEmptySuggestions) {
+       DoesntShowLobsterWithTextSelectionCategoryForEmptySuggestions) {
   MockZeroStateViewDelegate mock_delegate;
   EXPECT_CALL(mock_delegate, GetZeroStateSuggestedResults)
       .WillOnce(
           [](MockZeroStateViewDelegate::SuggestedResultsCallback callback) {
             std::move(callback).Run({});
           });
-  PickerZeroStateView view(&mock_delegate,
-                           base::span_from_ref(QuickInsertCategory::kLobster),
-                           kPickerWidth, &asset_fetcher_, &submenu_controller_,
-                           &preview_controller_);
+  PickerZeroStateView view(
+      &mock_delegate,
+      base::span_from_ref(QuickInsertCategory::kLobsterWithSelectedText),
+      kPickerWidth, &asset_fetcher_, &submenu_controller_,
+      &preview_controller_);
 
   EXPECT_THAT(view.category_section_views_for_testing(), IsEmpty());
 }
@@ -511,12 +513,14 @@ TEST_F(QuickInsertZeroStateViewTest, ShowLobsterCategoryAsListItem) {
       .WillOnce(
           [](MockZeroStateViewDelegate::SuggestedResultsCallback callback) {
             std::move(callback).Run({QuickInsertLobsterResult(
+                QuickInsertLobsterResult::Mode::kWithSelection,
                 /*display_name=*/u"lobster")});
           });
-  PickerZeroStateView view(&mock_delegate,
-                           base::span_from_ref(QuickInsertCategory::kLobster),
-                           kPickerWidth, &asset_fetcher_, &submenu_controller_,
-                           &preview_controller_);
+  PickerZeroStateView view(
+      &mock_delegate,
+      base::span_from_ref(QuickInsertCategory::kLobsterWithSelectedText),
+      kPickerWidth, &asset_fetcher_, &submenu_controller_,
+      &preview_controller_);
 
   EXPECT_THAT(
       view.category_section_views_for_testing(),
diff --git a/chrome/browser/ui/ash/quick_insert/quick_insert_client_impl.cc b/chrome/browser/ui/ash/quick_insert/quick_insert_client_impl.cc
index abf9aca640749..36e2e3e33100b 100644
--- a/chrome/browser/ui/ash/quick_insert/quick_insert_client_impl.cc
+++ b/chrome/browser/ui/ash/quick_insert/quick_insert_client_impl.cc
@@ -308,7 +308,8 @@ void QuickInsertClientImpl::StartCrosSearch(
   switch (*category) {
     case ash::QuickInsertCategory::kEditorWrite:
     case ash::QuickInsertCategory::kEditorRewrite:
-    case ash::QuickInsertCategory::kLobster:
+    case ash::QuickInsertCategory::kLobsterWithNoSelectedText:
+    case ash::QuickInsertCategory::kLobsterWithSelectedText:
     case ash::QuickInsertCategory::kEmojisGifs:
     case ash::QuickInsertCategory::kEmojis:
     case ash::QuickInsertCategory::kClipboard:
@@ -585,7 +586,8 @@ QuickInsertClientImpl::CreateSearchProviderForCategory(
   switch (category) {
     case ash::QuickInsertCategory::kEditorWrite:
     case ash::QuickInsertCategory::kEditorRewrite:
-    case ash::QuickInsertCategory::kLobster:
+    case ash::QuickInsertCategory::kLobsterWithNoSelectedText:
+    case ash::QuickInsertCategory::kLobsterWithSelectedText:
     case ash::QuickInsertCategory::kEmojisGifs:
     case ash::QuickInsertCategory::kEmojis:
     case ash::QuickInsertCategory::kClipboard: