anchor.diff:  
   # Buildkite Agent Plugins
   
  -__Plugins are only available in the beta 3.0 version of the agent__
  +Plugins provide a way to extend the functionality that Buildkite natively offers. They act as a external repository of [Hooks][hooks] that are referenced from your `pipeline.yml` file, downloaded and run as part of your builds.
   
  -Plugins provide a way to extend the functionality that Buildkite natively offers.
  -Another way to look at plugins is as a external repository of [Hooks][hooks] that
  -are referenced from your pipeline.yml file, downloaded and run as part of your builds.
  -They can be hosted on GitHub, BitBucket or a private git repository and are automatically
  -fetched as required.
  +Plugins can be hosted on GitHub, BitBucket or a private git repository, and are automatically fetched as required.
   
   Buildkite offers a [collection of useful plugins][Buildkite Plugins]
  -to get you started, including a [docker-compose plugin] and a plugin for [secure
  -secrets storage][s3-secrets plugin] on Amazon S3.
  +to get you started, including a [docker-compose plugin] and a plugin for [secure secrets storage][s3-secrets plugin] on Amazon S3.
   
   <%= toc %>
   
   ## Using a plugin
   
  -Plugins are only available for [pipelines] expressed in YAML, so all of these
  -examples use that syntax.
  +Plugins are only available for [pipelines] using `pipeline.yml` files.
   
  -Plugins are defined per-step and are automatically fetched from where they are
  -hosted, based on the name of the project. See [Plugin sources] for how you can
  -host your own.
  +Plugins can be used in two ways:
  +
  +* as a standalone step, performing an operation
  +* as a library, making commands available to that step's script 
   
   An example of what a plugin might look like in your code:
   
   ```yml
   steps:
     - plugins:
  -      detect-clowns:
  -        emojis: 🤡
  +      detect-clowns#v2.0.0: ~
   ```
   
  -This example will install the (hypothetical) `buildkite-plugins/detect-clowns-buildkite-plugin`
  -when your pipeline is evaluated and run for this build step.
  +This example will install the `buildkite-plugins/detect-clowns-buildkite-plugin` when your pipeline runs this build step.
  +
  +Plugins are automatically fetched from where they are hosted, based on the name of the project. See [Plugin sources] for how you can host your own.
   
   A real-life example is the [docker-compose plugin]. It provides an integration
   with docker-compose that assists with running your builds within a docker environment:
  
positive.code: 
   * Apply special care in plugins to avoid executing arbitrary code passed in by config. As these are just environment variables, anything that can set environment variables can mess with plugin configuration.
  
  For particularly high-security setups, you can disable plugins selectively by removing them from the `BUILDKITE_PLUGINS` variable in your `environment` hook.
  
  ## We love feedback!
  
  Agent plugins are still new, and we are evolving them as we learn more. We'd love feedback on how you use them and how we might make them better.
  
  
negative.code: 
  ## Developing a plugin
  
  The best place to get started is the [Buildkite Plugins] repository. You can also find third-party plugins with the `buildkite-agent` tag [on GitHub][third party plugins].
  
  We mostly write our plugins as shell scripts, so we've created a [plugin tester]
  docker image that simplifies writing BATS tests and getting your plugin tested (so meta).
  
  ### Anatomy of a plugin
  
  Plugins are essentially a collection of hooks with extra configuration. The agent parses the plugin configuration and passes it on to the plugin in a slightly normalized form, both as JSON or environment variables.
  
  This means that you can write a plugin as a shell script, or as a binary.
  
  A minimal plugin has a `plugin.json` at it's root:
  
  ```json
  {
  