diff --git a/src/__phutil_library_map__.php b/src/__phutil_library_map__.php
--- a/src/__phutil_library_map__.php
+++ b/src/__phutil_library_map__.php
@@ -1277,6 +1277,7 @@
     'ManiphestInfoConduitAPIMethod' => 'applications/maniphest/conduit/ManiphestInfoConduitAPIMethod.php',
     'ManiphestNameIndex' => 'applications/maniphest/storage/ManiphestNameIndex.php',
     'ManiphestNameIndexEventListener' => 'applications/maniphest/event/ManiphestNameIndexEventListener.php',
+    'ManiphestPriorityConfigOptionType' => 'applications/maniphest/config/ManiphestPriorityConfigOptionType.php',
     'ManiphestPriorityEmailCommand' => 'applications/maniphest/command/ManiphestPriorityEmailCommand.php',
     'ManiphestQueryConduitAPIMethod' => 'applications/maniphest/conduit/ManiphestQueryConduitAPIMethod.php',
     'ManiphestQueryStatusesConduitAPIMethod' => 'applications/maniphest/conduit/ManiphestQueryStatusesConduitAPIMethod.php',
@@ -5258,6 +5259,7 @@
     'ManiphestInfoConduitAPIMethod' => 'ManiphestConduitAPIMethod',
     'ManiphestNameIndex' => 'ManiphestDAO',
     'ManiphestNameIndexEventListener' => 'PhabricatorEventListener',
+    'ManiphestPriorityConfigOptionType' => 'PhabricatorConfigJSONOptionType',
     'ManiphestPriorityEmailCommand' => 'ManiphestEmailCommand',
     'ManiphestQueryConduitAPIMethod' => 'ManiphestConduitAPIMethod',
     'ManiphestQueryStatusesConduitAPIMethod' => 'ManiphestConduitAPIMethod',
diff --git a/src/applications/maniphest/config/ManiphestPriorityConfigOptionType.php b/src/applications/maniphest/config/ManiphestPriorityConfigOptionType.php
new file mode 100644
--- /dev/null
+++ b/src/applications/maniphest/config/ManiphestPriorityConfigOptionType.php
@@ -0,0 +1,10 @@
+<?php
+
+final class ManiphestPriorityConfigOptionType
+  extends PhabricatorConfigJSONOptionType {
+
+  public function validateOption(PhabricatorConfigOption $option, $value) {
+    ManiphestTaskPriority::validateConfiguration($value);
+  }
+
+}
diff --git a/src/applications/maniphest/config/PhabricatorManiphestConfigOptions.php b/src/applications/maniphest/config/PhabricatorManiphestConfigOptions.php
--- a/src/applications/maniphest/config/PhabricatorManiphestConfigOptions.php
+++ b/src/applications/maniphest/config/PhabricatorManiphestConfigOptions.php
@@ -20,7 +20,7 @@
   }
 
   public function getOptions() {
-
+    $priority_type = 'custom:ManiphestPriorityConfigOptionType';
     $priority_defaults = array(
       100 => array(
         'name'  => pht('Unbreak Now!'),
@@ -267,7 +267,10 @@
       $this->newOption('maniphest.fields', $custom_field_type, $default_fields)
         ->setCustomData(id(new ManiphestTask())->getCustomFieldBaseClass())
         ->setDescription(pht('Select and reorder task fields.')),
-      $this->newOption('maniphest.priorities', 'wild', $priority_defaults)
+      $this->newOption(
+        'maniphest.priorities',
+        $priority_type,
+        $priority_defaults)
         ->setSummary(pht('Configure Maniphest priority names.'))
         ->setDescription(
           pht(
diff --git a/src/applications/maniphest/constants/ManiphestTaskPriority.php b/src/applications/maniphest/constants/ManiphestTaskPriority.php
--- a/src/applications/maniphest/constants/ManiphestTaskPriority.php
+++ b/src/applications/maniphest/constants/ManiphestTaskPriority.php
@@ -116,4 +116,33 @@
     return $config;
   }
 
+  public static function validateConfiguration(array $config) {
+    foreach ($config as $key => $value) {
+      if (!ctype_digit((string)$key)) {
+        throw new Exception(
+          pht(
+            'Key "%s" is not a valid priority constant. Priority constants '.
+            'must be nonnegative integers.',
+            $key));
+      }
+
+      if (!is_array($value)) {
+        throw new Exception(
+          pht(
+            'Value for key "%s" should be a dictionary.',
+            $key));
+      }
+
+      PhutilTypeSpec::checkMap(
+        $value,
+        array(
+          'name' => 'string',
+          'short' => 'optional string',
+          'color' => 'optional string',
+          'keywords' => 'optional list<string>',
+          'disabled' => 'optional bool',
+        ));
+    }
+  }
+
 }