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
@@ -1887,6 +1887,7 @@
     'PhabricatorConduitConsoleController' => 'applications/conduit/controller/PhabricatorConduitConsoleController.php',
     'PhabricatorConduitController' => 'applications/conduit/controller/PhabricatorConduitController.php',
     'PhabricatorConduitDAO' => 'applications/conduit/storage/PhabricatorConduitDAO.php',
+    'PhabricatorConduitEditField' => 'applications/transactions/editfield/PhabricatorConduitEditField.php',
     'PhabricatorConduitListController' => 'applications/conduit/controller/PhabricatorConduitListController.php',
     'PhabricatorConduitLogController' => 'applications/conduit/controller/PhabricatorConduitLogController.php',
     'PhabricatorConduitLogQuery' => 'applications/conduit/query/PhabricatorConduitLogQuery.php',
@@ -6004,6 +6005,7 @@
     'PhabricatorConduitConsoleController' => 'PhabricatorConduitController',
     'PhabricatorConduitController' => 'PhabricatorController',
     'PhabricatorConduitDAO' => 'PhabricatorLiskDAO',
+    'PhabricatorConduitEditField' => 'PhabricatorEditField',
     'PhabricatorConduitListController' => 'PhabricatorConduitController',
     'PhabricatorConduitLogController' => 'PhabricatorConduitController',
     'PhabricatorConduitLogQuery' => 'PhabricatorCursorPagedPolicyAwareQuery',
diff --git a/src/applications/owners/editor/PhabricatorOwnersPackageEditEngine.php b/src/applications/owners/editor/PhabricatorOwnersPackageEditEngine.php
--- a/src/applications/owners/editor/PhabricatorOwnersPackageEditEngine.php
+++ b/src/applications/owners/editor/PhabricatorOwnersPackageEditEngine.php
@@ -18,7 +18,8 @@
   }
 
   protected function newObjectQuery() {
-    return id(new PhabricatorOwnersPackageQuery());
+    return id(new PhabricatorOwnersPackageQuery())
+      ->needPaths(true);
   }
 
   protected function getObjectCreateTitleText($object) {
@@ -81,6 +82,20 @@
         ->setTransactionType(
           PhabricatorOwnersPackageTransaction::TYPE_DESCRIPTION)
         ->setValue($object->getDescription()),
+      id(new PhabricatorSelectEditField())
+        ->setKey('status')
+        ->setLabel(pht('Status'))
+        ->setDescription(pht('Archive or enable the package.'))
+        ->setTransactionType(PhabricatorOwnersPackageTransaction::TYPE_STATUS)
+        ->setIsConduitOnly(true)
+        ->setValue($object->getStatus())
+        ->setOptions($object->getStatusNameMap()),
+      id(new PhabricatorConduitEditField())
+        ->setKey('paths.set')
+        ->setLabel(pht('Paths'))
+        ->setDescription(pht('Set paths for this package.'))
+        ->setIsConduitOnly(true)
+        ->setTransactionType(PhabricatorOwnersPackageTransaction::TYPE_PATHS),
     );
   }
 
diff --git a/src/applications/owners/editor/PhabricatorOwnersPackageTransactionEditor.php b/src/applications/owners/editor/PhabricatorOwnersPackageTransactionEditor.php
--- a/src/applications/owners/editor/PhabricatorOwnersPackageTransactionEditor.php
+++ b/src/applications/owners/editor/PhabricatorOwnersPackageTransactionEditor.php
@@ -54,9 +54,14 @@
     switch ($xaction->getTransactionType()) {
       case PhabricatorOwnersPackageTransaction::TYPE_NAME:
       case PhabricatorOwnersPackageTransaction::TYPE_DESCRIPTION:
-      case PhabricatorOwnersPackageTransaction::TYPE_PATHS:
       case PhabricatorOwnersPackageTransaction::TYPE_STATUS:
         return $xaction->getNewValue();
+      case PhabricatorOwnersPackageTransaction::TYPE_PATHS:
+        $new = $xaction->getNewValue();
+        foreach ($new as $key => $info) {
+          $new[$key]['excluded'] = (int)idx($info, 'excluded');
+        }
+        return $new;
       case PhabricatorOwnersPackageTransaction::TYPE_AUDITING:
         return (int)$xaction->getNewValue();
       case PhabricatorOwnersPackageTransaction::TYPE_OWNERS:
@@ -198,6 +203,82 @@
           $errors[] = $error;
         }
         break;
+      case PhabricatorOwnersPackageTransaction::TYPE_PATHS:
+        $old = mpull($object->getPaths(), 'getRef');
+        foreach ($xactions as $xaction) {
+          $new = $xaction->getNewValue();
+
+          // Check that we have a list of paths.
+          if (!is_array($new)) {
+            $errors[] = new PhabricatorApplicationTransactionValidationError(
+              $type,
+              pht('Invalid'),
+              pht('Path specification must be a list of paths.'),
+              $xaction);
+            continue;
+          }
+
+          // Check that each item in the list is formatted properly.
+          $type_exception = null;
+          foreach ($new as $key => $value) {
+            try {
+              PhutilTypeSpec::checkMap(
+                $value,
+                array(
+                  'repositoryPHID' => 'string',
+                  'path' => 'string',
+                  'excluded' => 'optional wild',
+                ));
+            } catch (PhutilTypeCheckException $ex) {
+              $errors[] = new PhabricatorApplicationTransactionValidationError(
+                $type,
+                pht('Invalid'),
+                pht(
+                  'Path specification list contains invalid value '.
+                  'in key "%s": %s.',
+                  $key,
+                  $ex->getMessage()),
+                $xaction);
+              $type_exception = $ex;
+            }
+          }
+
+          if ($type_exception) {
+            continue;
+          }
+
+          // Check that any new paths reference legitimate repositories which
+          // the viewer has permission to see.
+          list($rem, $add) = PhabricatorOwnersPath::getTransactionValueChanges(
+            $old,
+            $new);
+
+          if ($add) {
+            $repository_phids = ipull($add, 'repositoryPHID');
+
+            $repositories = id(new PhabricatorRepositoryQuery())
+              ->setViewer($this->getActor())
+              ->withPHIDs($repository_phids)
+              ->execute();
+            $repositories = mpull($repositories, null, 'getPHID');
+
+            foreach ($add as $ref) {
+              $repository_phid = $ref['repositoryPHID'];
+              if (isset($repositories[$repository_phid])) {
+                continue;
+              }
+
+              $errors[] = new PhabricatorApplicationTransactionValidationError(
+                $type,
+                pht('Invalid'),
+                pht(
+                  'Path specification list references repository PHID "%s", '.
+                  'but that is not a valid, visible repository.',
+                  $repository_phid));
+            }
+          }
+        }
+        break;
     }
 
     return $errors;
diff --git a/src/applications/owners/engineextension/PhabricatorOwnersPathsSearchEngineAttachment.php b/src/applications/owners/engineextension/PhabricatorOwnersPathsSearchEngineAttachment.php
--- a/src/applications/owners/engineextension/PhabricatorOwnersPathsSearchEngineAttachment.php
+++ b/src/applications/owners/engineextension/PhabricatorOwnersPathsSearchEngineAttachment.php
@@ -23,7 +23,7 @@
       $list[] = array(
         'repositoryPHID' => $path->getRepositoryPHID(),
         'path' => $path->getPath(),
-        'isExcluded' => (bool)$path->getExcluded(),
+        'excluded' => (bool)$path->getExcluded(),
       );
     }
 
diff --git a/src/applications/transactions/editfield/PhabricatorConduitEditField.php b/src/applications/transactions/editfield/PhabricatorConduitEditField.php
new file mode 100644
--- /dev/null
+++ b/src/applications/transactions/editfield/PhabricatorConduitEditField.php
@@ -0,0 +1,14 @@
+<?php
+
+final class PhabricatorConduitEditField
+  extends PhabricatorEditField {
+
+  protected function newControl() {
+    return null;
+  }
+
+  protected function newHTTPParameterType() {
+    return null;
+  }
+
+}