diff --git a/docs/design/signature-provider-plugins.md b/docs/design/signature-provider-plugins.md
new file mode 100644
index 00000000..6e8f1c64
--- /dev/null
+++ b/docs/design/signature-provider-plugins.md
@@ -0,0 +1,444 @@
+# Sign CLI Signature Provider Plugins
+
+**Owners** [Damon Tivel](https://github.com/dtivel) | [Claire Novotny](https://github.com/clairernovotny)
+
+Recent CAB Forum updates to baseline requirements[1](#r1) strengthened storage requirements for private keys of publicly trusted code signing certificates. While older, less secure storage options (e.g.: [PKCS #12 & PFX](https://en.wikipedia.org/wiki/PKCS_12)) became obsolete, more secure options (e.g.: [HSM](https://en.wikipedia.org/wiki/Hardware_security_module)) became standard.
+
+As of writing this, Sign CLI only supports digest signing using Azure Key Vault. To support users with private keys stored elsewhere (e.g.: a different cloud provider, a signing service, or Windows' certificate store), Sign CLI needs a plugin model for signature providers. Sign CLI users should be able to install a plugin that provides signing capabilities for their private key.
+
+To be clear, there is nothing in this proposed plugin model that would preclude a plugin author from creating a plugin that enables signing using a PFX file, and such a plugin would be welcome to a subset of users. However, given the relative lack of support in existing signing tools for more secure private key storage options, the primary driver for this proposal is enabling support for more secure storage options.
+
+Note: the term _signature provider_ plugin should not be confused with an [existing internal implementation detail already in Sign CLI](https://github.com/dotnet/sign/blob/ef0e6b3ef8281dff1d62cea34445bd88fc3e6714/src/Sign.Core/SignatureProviders/ISignatureProvider.cs).
+
+## Scenarios and User Experience
+
+It is assumed that Sign CLI has already been installed (e.g.: [`dotnet tool install --global sign --version 0.9.1-beta.23356.1`](https://www.nuget.org/packages/sign/0.9.1-beta.23356.1)).
+
+_The plugin names below are fictitious and for illustration purposes only._
+
+### Sign artifacts using Azure Key Vault
+
+First, the Azure Key Vault plugin must be installed. The following command would download and install the latest version of the plugin.
+
+```
+sign plugin install Microsoft.Azure.KeyVault.Sign
+```
+
+Executing `sign code -?` will show the new available command:
+
+```
+...
+Commands:
+ azure-key-vault Use Azure Key Vault.
+```
+
+Similarly, executing `sign code azure-key-vault -?` will show help for the new command and its options.
+
+```
+Description:
+ Use Azure Key Vault.
+
+Usage:
+ sign code azure-key-vault [options]
+
+Arguments:
+ File(s) to sign.
+
+Options:
+ -kvc, --azure-key-vault-certificate Name of the certificate in Azure Key Vault.
+ (REQUIRED)
+ -kvi, --azure-key-vault-client-id Client ID to authenticate to Azure Key Vault.
+
+ -kvs, --azure-key-vault-client-secret Client secret to authenticate to Azure Key Vault.
+
+ -kvm, --azure-key-vault-managed-identity Managed identity to authenticate to Azure Key Vault.
+ -kvt, --azure-key-vault-tenant-id Tenant ID to authenticate to Azure Key Vault.
+
+ -kvu, --azure-key-vault-url URL to an Azure Key Vault.
+ -an, --application-name Application name (ClickOnce).
+ -d, --description (REQUIRED) Description of the signing certificate.
+ -u, --description-url (REQUIRED) Description URL of the signing certificate.
+ -b, --base-directory Base directory for files. Overrides the current working
+ directory. [default: F:\git\sign]
+ -o, --output