# file

The `file` step type opens an interactive file picker, letting your custom commands and workflows prompt the user to choose a path instead of hard-coding it.

```yaml
steps:
  - name: manifest
    type: file
    prompt: Select manifest
    path: stacks/workflows
    extensions:
      - .yaml
      - .yml
```

## Fields

- **`prompt`**
  Required. Prompt text shown to the user.
- **`path`**
  Optional starting path.
- **`extensions`**
  Optional file extension filters.
- **`default`**
  Optional path returned in a non-TTY environment (e.g. CI) instead of prompting.

Interactive steps require a TTY; in a non-TTY environment such as CI, the step uses its [`default`](/workflows/steps#interactive-steps-in-ci-non-tty) path if set and otherwise errors. Reference the selected path later with `{{ .steps.manifest.value }}`.
