diff --git a/e2e/test/scenarios/admin/settings/settings.cy.spec.js b/e2e/test/scenarios/admin/settings/settings.cy.spec.js
index ad260a608f515c38d7dd70a54898e40f5fc71356..4fdcc2ef66225ecd3d1a3f073c37a28650e580b8 100644
--- a/e2e/test/scenarios/admin/settings/settings.cy.spec.js
+++ b/e2e/test/scenarios/admin/settings/settings.cy.spec.js
@@ -238,7 +238,7 @@ describe("scenarios > admin > settings", () => {
     "should display the order of the settings items consistently between OSS/EE versions (metabase#15441)",
     { tags: "@OSS" },
     () => {
-      const lastItem = isEE ? "Appearance" : "Metabot";
+      const lastItem = isEE ? "Appearance" : "Caching";
 
       cy.visit("/admin/settings/setup");
       cy.get(".AdminList .AdminList-item")
diff --git a/e2e/test/scenarios/onboarding/metabot.cy.spec.js b/e2e/test/scenarios/onboarding/metabot.cy.spec.js
index 662c1d5de2dc2912b914bb0e0779b4e652dc7d4b..c6b616ea98ed2a727d27b24c75af86d0877d5464 100644
--- a/e2e/test/scenarios/onboarding/metabot.cy.spec.js
+++ b/e2e/test/scenarios/onboarding/metabot.cy.spec.js
@@ -8,6 +8,7 @@ import {
   openQuestionActions,
   resetSnowplow,
   restore,
+  sidebar,
   visitModel,
 } from "e2e/support/helpers";
 import { SAMPLE_DB_ID } from "e2e/support/cypress_data";
@@ -64,6 +65,17 @@ describe("scenarios > metabot", () => {
     });
   });
 
+  it("should not show metabot if it is disabled", () => {
+    cy.visit("/admin");
+    sidebar().findByText("Metabot").should("not.exist");
+
+    cy.visit("/metabot/database/1");
+    cy.url().should("eq", `${location.origin}/`);
+
+    cy.visit("/metabot/model/1");
+    cy.url().should("eq", `${location.origin}/`);
+  });
+
   it("should allow to submit prompts based on the database", () => {
     cy.createQuestion(MODEL_DETAILS);
     enableMetabot();
diff --git a/frontend/src/metabase/admin/settings/containers/SettingsEditorApp.jsx b/frontend/src/metabase/admin/settings/containers/SettingsEditorApp.jsx
index 3523200a1e7facc8e2e6d35e8b8d8de092941294..8776d345c13cd98b4d3affa0800758e0d6c657c1 100644
--- a/frontend/src/metabase/admin/settings/containers/SettingsEditorApp.jsx
+++ b/frontend/src/metabase/admin/settings/containers/SettingsEditorApp.jsx
@@ -248,11 +248,11 @@ class SettingsEditorApp extends Component {
     );
 
     return (
-      <div className="MetadataEditor-table-list AdminList flex-no-shrink">
+      <aside className="MetadataEditor-table-list AdminList flex-no-shrink">
         <ul className="AdminList-items pt1">
           <ErrorBoundary>{renderedSections}</ErrorBoundary>
         </ul>
-      </div>
+      </aside>
     );
   }
 
diff --git a/frontend/src/metabase/admin/settings/selectors.js b/frontend/src/metabase/admin/settings/selectors.js
index 30bf8c759550d74be11db7f290418555642c5bbc..f801f64c97a56ecd3a9c2aa34455ff2e87bf23c5 100644
--- a/frontend/src/metabase/admin/settings/selectors.js
+++ b/frontend/src/metabase/admin/settings/selectors.js
@@ -661,13 +661,8 @@ const SECTIONS = updateSectionsWithPlugins({
   metabot: {
     name: t`Metabot`,
     order: 130,
+    getHidden: settings => !settings["is-metabot-enabled"],
     settings: [
-      {
-        key: "is-metabot-enabled",
-        display_name: t`Enable Metabot`,
-        description: t`Metabot is in alpha, and in general you should always examine SQL queries generated by large language models (LLMs) before using their results in critical applications. By using Metabot, you agree to share your prompts and their resultant queries with Metabase to help us improve Metabot’s performance.`,
-        type: "boolean",
-      },
       {
         key: "openai-api-key",
         display_name: t`OpenAI API Key`,
@@ -741,7 +736,9 @@ export const getSections = createSelector(
     const settingsByKey = _.groupBy(settings, "key");
     const sectionsWithAPISettings = {};
     for (const [slug, section] of Object.entries(SECTIONS)) {
-      if (section.adminOnly && !isAdmin) {
+      const isHidden = section.getHidden?.(derivedSettingValues);
+
+      if (isHidden || (section.adminOnly && !isAdmin)) {
         continue;
       }
 
diff --git a/frontend/src/metabase/route-guards.jsx b/frontend/src/metabase/route-guards.jsx
index 8f610b9f305013c816891ea3c082ebf2f913a816..13911ffd8833fe8b79ea51e382cdfbb856b9b369 100644
--- a/frontend/src/metabase/route-guards.jsx
+++ b/frontend/src/metabase/route-guards.jsx
@@ -2,6 +2,7 @@ import { routerActions } from "react-router-redux";
 import { UserAuthWrapper } from "redux-auth-wrapper";
 import MetabaseSettings from "metabase/lib/settings";
 import { getAdminPaths } from "metabase/admin/app/selectors";
+import { getIsMetabotEnabled } from "metabase/home/selectors";
 
 const MetabaseIsSetup = UserAuthWrapper({
   predicate: authData => authData.hasUserSetup,
@@ -48,9 +49,9 @@ const UserCanAccessSettings = UserAuthWrapper({
 });
 
 export const UserCanAccessMetabot = UserAuthWrapper({
-  predicate: isMetabotEnabled => true, // FIXME [AL]: fix this guard
+  predicate: isMetabotEnabled => isMetabotEnabled,
   failureRedirectPath: "/",
-  authSelector: () => MetabaseSettings.isMetabotEnabled(),
+  authSelector: state => getIsMetabotEnabled(state),
   allowRedirectBack: false,
   wrapperDisplayName: "UserCanAccessMetabot",
   redirectAction: routerActions.replace,
diff --git a/src/metabase/metabot/settings.clj b/src/metabase/metabot/settings.clj
index 212ec4886ba3c7c4caf09c7ab9852e82d074e4fa..fb30720bb6f1b5e707f62cb938d0b4c64e75ccc7 100644
--- a/src/metabase/metabot/settings.clj
+++ b/src/metabase/metabot/settings.clj
@@ -38,7 +38,7 @@
 (defsetting is-metabot-enabled
   (deferred-tru "Is Metabot enabled?")
   :type :boolean
-  :visibility :authenticated
+  :visibility :public
   :default false)
 
 (defsetting num-metabot-choices