anchor.diff:          run: app
   ```
   
  -In the 2.x agent, this approach was only possible by either using the
  -docker environment variables, or writing a custom script.
  -
   ## Plugin sources
   
   If you refer to a plugin just by name (say `detect-clowns`), it defaults to
  
positive.code:       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:
  
  ```yml
  steps:
    - command: yarn install && yarn run test
      plugins:
        docker#v1.0.0:
          image: node
          workdir: /app
  ```
  
  The (simplified) logic of the [command hook][hooks] script in `hooks/command`:
  
  ```bash
  #!/bin/bash
  
negative.code: 
  ### Anatomy of a plugin
  
  Plugins are essentially a collection of hooks with extra configuration. The agent passes the plugin configuration from the pipeline.yml to the plugin hooks as environment variables.
  
  A good example is the [docker plugin], which runs a command within a docker container. The pipeline invocation of this plugin looks like:
  
  ```yml
  steps:
    - command: yarn install && yarn run test
      plugins:
        docker#v1.0.0:
          image: node
          workdir: /app
  ```
  
  In its root directory the plugin has a `plugin.yml` that describes what it does, the executables required on the agent machine, and a [schema](#plugin-tools) of the plugin’s configuration options:
  
  ```yml
  name: Docker
  