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
@@ -2535,6 +2535,8 @@
     'PhabricatorCustomFieldEditField' => 'infrastructure/customfield/editor/PhabricatorCustomFieldEditField.php',
     'PhabricatorCustomFieldEditType' => 'infrastructure/customfield/editor/PhabricatorCustomFieldEditType.php',
     'PhabricatorCustomFieldFulltextEngineExtension' => 'infrastructure/customfield/engineextension/PhabricatorCustomFieldFulltextEngineExtension.php',
+    'PhabricatorCustomFieldHeraldAction' => 'infrastructure/customfield/herald/PhabricatorCustomFieldHeraldAction.php',
+    'PhabricatorCustomFieldHeraldActionGroup' => 'infrastructure/customfield/herald/PhabricatorCustomFieldHeraldActionGroup.php',
     'PhabricatorCustomFieldHeraldField' => 'infrastructure/customfield/herald/PhabricatorCustomFieldHeraldField.php',
     'PhabricatorCustomFieldHeraldFieldGroup' => 'infrastructure/customfield/herald/PhabricatorCustomFieldHeraldFieldGroup.php',
     'PhabricatorCustomFieldImplementationIncompleteException' => 'infrastructure/customfield/exception/PhabricatorCustomFieldImplementationIncompleteException.php',
@@ -7868,6 +7870,8 @@
     'PhabricatorCustomFieldEditField' => 'PhabricatorEditField',
     'PhabricatorCustomFieldEditType' => 'PhabricatorEditType',
     'PhabricatorCustomFieldFulltextEngineExtension' => 'PhabricatorFulltextEngineExtension',
+    'PhabricatorCustomFieldHeraldAction' => 'HeraldAction',
+    'PhabricatorCustomFieldHeraldActionGroup' => 'HeraldActionGroup',
     'PhabricatorCustomFieldHeraldField' => 'HeraldField',
     'PhabricatorCustomFieldHeraldFieldGroup' => 'HeraldFieldGroup',
     'PhabricatorCustomFieldImplementationIncompleteException' => 'Exception',
diff --git a/src/infrastructure/customfield/field/PhabricatorCustomField.php b/src/infrastructure/customfield/field/PhabricatorCustomField.php
--- a/src/infrastructure/customfield/field/PhabricatorCustomField.php
+++ b/src/infrastructure/customfield/field/PhabricatorCustomField.php
@@ -34,6 +34,7 @@
   const ROLE_CONDUIT                  = 'conduit';
   const ROLE_HERALD                   = 'herald';
   const ROLE_EDITENGINE = 'EditEngine';
+  const ROLE_HERALDACTION = 'herald.action';
 
 
 /* -(  Building Applications with Custom Fields  )--------------------------- */
@@ -293,6 +294,8 @@
         return $this->shouldAppearInTransactionMail();
       case self::ROLE_HERALD:
         return $this->shouldAppearInHerald();
+      case self::ROLE_HERALDACTION:
+        return $this->shouldAppearInHeraldActions();
       case self::ROLE_EDITENGINE:
         return $this->shouldAppearInEditView() ||
                $this->shouldAppearInEditEngine();
@@ -1476,4 +1479,56 @@
   }
 
 
+  public function shouldAppearInHeraldActions() {
+    if ($this->proxy) {
+      return $this->proxy->shouldAppearInHeraldActions();
+    }
+    return false;
+  }
+
+
+  public function getHeraldActionName() {
+    if ($this->proxy) {
+      return $this->proxy->getHeraldActionName();
+    }
+
+    return null;
+  }
+
+
+  public function getHeraldActionStandardType() {
+    if ($this->proxy) {
+      return $this->proxy->getHeraldActionStandardType();
+    }
+
+    return null;
+  }
+
+
+  public function getHeraldActionDescription($value) {
+    if ($this->proxy) {
+      return $this->proxy->getHeraldActionDescription($value);
+    }
+
+    return null;
+  }
+
+
+  public function getHeraldActionEffectDescription($value) {
+    if ($this->proxy) {
+      return $this->proxy->getHeraldActionEffectDescription($value);
+    }
+
+    return null;
+  }
+
+
+  public function getHeraldActionDatasource() {
+    if ($this->proxy) {
+      return $this->proxy->getHeraldActionDatasource();
+    }
+
+    return null;
+  }
+
 }
diff --git a/src/infrastructure/customfield/herald/PhabricatorCustomFieldHeraldAction.php b/src/infrastructure/customfield/herald/PhabricatorCustomFieldHeraldAction.php
new file mode 100644
--- /dev/null
+++ b/src/infrastructure/customfield/herald/PhabricatorCustomFieldHeraldAction.php
@@ -0,0 +1,105 @@
+<?php
+
+final class PhabricatorCustomFieldHeraldAction extends HeraldAction {
+
+  const ACTIONCONST = 'herald.action.custom';
+
+  const DO_SET_FIELD = 'do.set-custom-field';
+
+  private $customField;
+
+  public function setCustomField(PhabricatorCustomField $custom_field) {
+    $this->customField = $custom_field;
+    return $this;
+  }
+
+  public function getCustomField() {
+    return $this->customField;
+  }
+
+  public function getActionGroupKey() {
+    return PhabricatorCustomFieldHeraldActionGroup::ACTIONGROUPKEY;
+  }
+
+  public function supportsObject($object) {
+    return ($object instanceof PhabricatorCustomFieldInterface);
+  }
+
+  public function supportsRuleType($rule_type) {
+    return true;
+  }
+
+  public function getActionsForObject($object) {
+    $viewer = PhabricatorUser::getOmnipotentUser();
+    $role = PhabricatorCustomField::ROLE_HERALDACTION;
+
+    $field_list = PhabricatorCustomField::getObjectFields($object, $role)
+      ->setViewer($viewer)
+      ->readFieldsFromStorage($object);
+
+    $map = array();
+    foreach ($field_list->getFields() as $field) {
+      $key = $field->getFieldKey();
+      $map[$key] = id(new self())
+        ->setCustomField($field);
+    }
+
+    return $map;
+  }
+
+  public function applyEffect($object, HeraldEffect $effect) {
+    $field = $this->getCustomField();
+    $value = $effect->getTarget();
+    $adapter = $this->getAdapter();
+
+    $old_value = $field->getOldValueForApplicationTransactions();
+    $new_value = id(clone $field)
+      ->setValueFromApplicationTransactions($value)
+      ->getValueForStorage();
+
+    $xaction = $adapter->newTransaction()
+      ->setTransactionType(PhabricatorTransactions::TYPE_CUSTOMFIELD)
+      ->setMetadataValue('customfield:key', $field->getFieldKey())
+      ->setOldValue($old_value)
+      ->setNewValue($new_value);
+
+    $adapter->queueTransaction($xaction);
+
+    $this->logEffect(self::DO_SET_FIELD, $value);
+  }
+
+  public function getHeraldActionName() {
+    return $this->getCustomField()->getHeraldActionName();
+  }
+
+  public function getHeraldActionStandardType() {
+    return $this->getCustomField()->getHeraldActionStandardType();
+  }
+
+  protected function getDatasource() {
+    return $this->getCustomField()->getHeraldActionDatasource();
+  }
+
+  public function renderActionDescription($value) {
+    return $this->getCustomField()->getHeraldActionDescription($value);
+  }
+
+  protected function getActionEffectMap() {
+    return array(
+      self::DO_SET_FIELD => array(
+        'icon' => 'fa-pencil',
+        'color' => 'green',
+        'name' => pht('Set Field Value'),
+      ),
+    );
+  }
+
+  protected function renderActionEffectDescription($type, $data) {
+    switch ($type) {
+      case self::DO_SET_FIELD:
+        return $this->getCustomField()->getHeraldActionEffectDescription($data);
+    }
+  }
+
+
+}
diff --git a/src/infrastructure/customfield/herald/PhabricatorCustomFieldHeraldActionGroup.php b/src/infrastructure/customfield/herald/PhabricatorCustomFieldHeraldActionGroup.php
new file mode 100644
--- /dev/null
+++ b/src/infrastructure/customfield/herald/PhabricatorCustomFieldHeraldActionGroup.php
@@ -0,0 +1,16 @@
+<?php
+
+final class PhabricatorCustomFieldHeraldActionGroup
+  extends HeraldActionGroup {
+
+  const ACTIONGROUPKEY = 'customfield';
+
+  public function getGroupLabel() {
+    return pht('Custom Fields');
+  }
+
+  protected function getGroupOrder() {
+    return 2000;
+  }
+
+}
diff --git a/src/infrastructure/customfield/standard/PhabricatorStandardCustomFieldTokenizer.php b/src/infrastructure/customfield/standard/PhabricatorStandardCustomFieldTokenizer.php
--- a/src/infrastructure/customfield/standard/PhabricatorStandardCustomFieldTokenizer.php
+++ b/src/infrastructure/customfield/standard/PhabricatorStandardCustomFieldTokenizer.php
@@ -65,4 +65,40 @@
     return new ConduitPHIDListParameterType();
   }
 
+  public function shouldAppearInHeraldActions() {
+    return true;
+  }
+
+  public function getHeraldActionName() {
+    return pht('Set "%s" to', $this->getFieldName());
+  }
+
+  public function getHeraldActionDescription($value) {
+    $list = $this->renderHeraldHandleList($value);
+    return pht('Set "%s" to: %s.', $this->getFieldName(), $list);
+  }
+
+  public function getHeraldActionEffectDescription($value) {
+    return $this->renderHeraldHandleList($value);
+  }
+
+  public function getHeraldActionStandardType() {
+    return HeraldAction::STANDARD_PHID_LIST;
+  }
+
+  public function getHeraldActionDatasource() {
+    return $this->getDatasource();
+  }
+
+  private function renderHeraldHandleList($value) {
+    if (!is_array($value)) {
+      return pht('(Invalid List)');
+    } else {
+      return $this->getViewer()
+        ->renderHandleList($value)
+        ->setAsInline(true)
+        ->render();
+    }
+  }
+
 }