# 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.
- **`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](/workflows/steps/output). Steps with `tty` or `interactive` attach directly to the terminal and do not produce capturable stdout.
