diff --git a/docs/manual/extending/extensions/hooks/action-hooks.rst b/docs/manual/extending/extensions/hooks/action-hooks.rst
index 4d72bd1f9733845b777b19c7c08352fdd3f99136..1f3bb8d31665b51c438197459a8052ff8514a3d1 100644
--- a/docs/manual/extending/extensions/hooks/action-hooks.rst
+++ b/docs/manual/extending/extensions/hooks/action-hooks.rst
@@ -172,6 +172,32 @@ For the JavaScript:
     }
 
 
+=======================
+Hiding Standard Actions
+=======================
+
+In some cases, you may want your extension to hide built-in actions. This
+can be used to remove unwanted functionality, or to hide the defaults so you
+can replace them with your own custom behavior.
+
+Simply initialize the hook with a list of the
+:py:attr:`~reviewboard.actions.baseBaseAction.action_id` of the actions that
+you want to hide.
+
+
+Example
+=======
+
+.. code-block:: python
+
+    from reviewboard.extensions.base import Extension
+    from reviewboard.extensions.hooks import HideActionHook
+
+    class SampleExtension(Extension):
+        def initialize(self) -> None:
+            HideActionHook(self, action_ids=['support-menu'])
+
+
 ===================
 Legacy Action Hooks
 ===================
diff --git a/docs/manual/extending/index.rst b/docs/manual/extending/index.rst
index 35cb876358a43fd0730fea087ca418ada67bb31d..9a4d8f9b3e9983c9b131cb1a0c397866460061e1 100644
--- a/docs/manual/extending/index.rst
+++ b/docs/manual/extending/index.rst
@@ -95,6 +95,9 @@ extension hooks available to you.
     :py:class:`~reviewboard.extensions.hooks.ActionHook`:
         Generic hook for adding new-style actions.
 
+    :py:class:`~reviewboard.extensions.hooks.HideActionHook`:
+        Hook for hiding built-in actions.
+
     :py:class:`~reviewboard.extensions.hooks.DiffViewerActionHook`:
         Deprecated hook for adding actions to the diff viewer's review request
         actions bar.
diff --git a/reviewboard/actions/base.py b/reviewboard/actions/base.py
index c3cf64ba3a1411908aa284a3b93d8569f09d4321..fbe1ef5a03c7feb5a160a2caf3edd4ed870f9f76 100644
--- a/reviewboard/actions/base.py
+++ b/reviewboard/actions/base.py
@@ -158,6 +158,12 @@ class BaseAction:
     #:     BaseMenuAction
     parent_action: Optional[BaseMenuAction]
 
+    #: Whether this action has been hidden by an extension.
+    #:
+    #: Type:
+    #:     boolean
+    _hidden_by_extension: Optional[bool] = None
+
     def __init__(self) -> None:
         """Initialize the action."""
         self.parent_action = None
@@ -205,6 +211,19 @@ class BaseAction:
              request.resolver_match.url_name in self.apply_to)):
             return False
 
+        if self._hidden_by_extension is None:
+            from reviewboard.extensions.hooks.actions import HideActionHook
+
+            for hook in HideActionHook.hooks:
+                if self.action_id in hook.hidden_action_ids:
+                    self._hidden_by_extension = True
+                    break
+            else:
+                self._hidden_by_extension = False
+
+        if self._hidden_by_extension:
+            return False
+
         return True
 
     def get_dom_element_id(self) -> str:
diff --git a/reviewboard/extensions/hooks/__init__.py b/reviewboard/extensions/hooks/__init__.py
index d16386a6879d51abb9021d2293aca7814ff52a02..ba5e09cc4dfda74b3ee15e1e651882e90af6c626 100644
--- a/reviewboard/extensions/hooks/__init__.py
+++ b/reviewboard/extensions/hooks/__init__.py
@@ -14,6 +14,7 @@ from reviewboard.extensions.hooks.actions import (
     DiffViewerActionHook,
     HeaderActionHook,
     HeaderDropdownActionHook,
+    HideActionHook,
     ReviewRequestActionHook,
     ReviewRequestDropdownActionHook)
 from reviewboard.extensions.hooks.admin_widget import AdminWidgetHook
@@ -71,6 +72,7 @@ __all__ = [
     'FileDiffACLHook',
     'HeaderActionHook',
     'HeaderDropdownActionHook',
+    'HideActionHook',
     'HostingServiceHook',
     'IntegrationHook',
     'NavigationBarHook',
diff --git a/reviewboard/extensions/hooks/actions.py b/reviewboard/extensions/hooks/actions.py
index becf145151bb8b033dfd4ed36ad18c5d750dadc4..4425cdc81ace8e9b1a0da4b367490e8c24150717 100644
--- a/reviewboard/extensions/hooks/actions.py
+++ b/reviewboard/extensions/hooks/actions.py
@@ -557,3 +557,35 @@ class HeaderDropdownActionHook(ActionHook,
             'derive actions from reviewboard.actions.BaseAction and use '
             'ActionHook.'
             % self.extension.id)
+
+
+class HideActionHook(ExtensionHook, metaclass=ExtensionHookPoint):
+    """A hook for hiding built-in actions.
+
+    Extensions may want to replace bulit-in functionality with their own custom
+    versions, or disable some things entirely (such as the quick ship-it
+    button).
+    """
+
+    #: The list of action IDs hidden by this hook.
+    hidden_action_ids: List[str]
+
+    def initialize(
+        self,
+        action_ids: List[str],
+        *args,
+        **kwargs,
+    ) -> None:
+        """Initialize the hook.
+
+        Args:
+            action_ids (list of str):
+                The list of action IDs to hide.
+
+            *args (tuple):
+                Extra positional arguments.
+
+            **kwargs (dict):
+                Extra keyword arguments.
+        """
+        self.hidden_action_ids = action_ids
diff --git a/reviewboard/extensions/tests/test_action_hooks.py b/reviewboard/extensions/tests/test_action_hooks.py
index f717ac6682fcbefd490167880894503254959069..d31ded0e28c71096a3597c5f32b027bc944af368 100644
--- a/reviewboard/extensions/tests/test_action_hooks.py
+++ b/reviewboard/extensions/tests/test_action_hooks.py
@@ -10,6 +10,7 @@ from reviewboard.extensions.hooks import (ActionHook,
                                           DiffViewerActionHook,
                                           HeaderActionHook,
                                           HeaderDropdownActionHook,
+                                          HideActionHook,
                                           ReviewRequestActionHook,
                                           ReviewRequestDropdownActionHook)
 from reviewboard.extensions.hooks.actions import BaseReviewRequestActionHook
@@ -490,3 +491,21 @@ class LegacyActionHookTests(BaseExtensionHookTestCase):
                 },
             },
         })
+
+
+class HideActionHookTests(BaseExtensionHookTestCase):
+    """Tests for HideActionHook."""
+
+    def test_hide_action_hook(self) -> None:
+        """Testing HideActionHook"""
+        HideActionHook(extension=self.extension,
+                       action_ids=['support-menu'])
+
+        action = actions_registry.get('action_id', 'support-menu')
+
+        request = self.create_http_request()
+        context = Context({
+            'request': request,
+        })
+
+        self.assertFalse(action.should_render(context=context))
