# shell

The `shell` step type runs a shell command or script, letting your custom commands and workflows reach beyond Atmos to repository scripts, make targets, test commands, and any other tooling in your stack.

```yaml
steps:
  - name: test
    type: shell
    working_directory: !repo-root
    command: make test
```

## Fields

- **`command`**
  Required. Shell command text.
- **`working_directory`**
  Optional directory where the command runs.
- **`env`**
  Optional environment variables for this step.
- **`timeout`**
  Optional duration such as 
  `30s`
   or 
  `5m`
  . When it elapses, Atmos cancels the command and fails the step with 
  `step timed out`
  . The timeout bounds the whole step, including every 
  [`retry`](/steps/retry)
   attempt and the wait between attempts, so retries never extend it.
- **`tty`**
  Allocate a pseudo-terminal for terminal-native commands.
- **`interactive`**
  Attach host stdin so the command can read from the terminal.

Non-interactive shell steps can use [output modes](/steps/output). Steps with `tty` or `interactive` attach directly to the terminal and do not produce capturable stdout.
