anchor.diff:  [third party plugins]: https://github.com/search?q=topic%3Abuildkite-plugin&type=Repositories
   [plugin tester]: https://github.com/buildkite-plugins/plugin-tester
   [Plugin sources]: https://buildkite.com/docs/agent/v3/plugins#plugin-sources
  +[JSON Schema]: http://json-schema.org
  +[JSON Schema Lint]: https://jsonschemalint.com/
  +[Plugin Linter]: https://github.com/buildkite-plugins/buildkite-plugin-linter
  +[bksr]: https://github.com/toolmantim/bksr
  +[Understanding JSON Schema]: https://spacetelescope.github.io/understanding-json-schema/
  +[Shellcheck Plugin]: https://github.com/buildkite-plugins/shellcheck-buildkite-plugin
  
positive.code: 
  The agent parses the plugin block and passes the parameters through to the script as environment variables in the form `BUILDKITE_PLUGIN_{NAME}_{KEY}`. If a list is provided then `BUILDKITE_PLUGIN_{NAME}_{KEY}_{IDX}`.
  
  Plugins are also able to offer `command` and `environment` hooks, which aren't allowed in per-project hooks. You can use these to change how plugins execute commands.
  
  ## Security and Reliability
  
  Plugins introduce a third-party dependency in your pipeline. They provide a way to introduce executable code into your pipeline beyond scripts in your repository and access to the `pipeline.yml`.
  
  
negative.code: 
  The best place to get started is the [Buildkite Plugins] repository. You can also find third-party plugins with the [buildkite-plugin tag on GitHub][third party plugins].
  
  ### 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 plugin has a `plugin.yml` at it's root that describes what it does, the executables required on the agent machine, and a schema of the plugin’s configuration options:
  
  ```yml
  name: Docker
  description: Runs build steps within a docker container.
  author: https://github.com/buildkite
  requirements:
    - docker
  configuration:
    properties:
      image:
        type: string
      workdir:
        type: string
    required:
      - image
  ```
  
  The plugin’s hook scripts exist under `hooks/`.
  
  A good example is the [docker plugin], which runs a command within a docker container.
  
  The pipeline invocation of this plugin looks like:
  
  