<!-- Canonical page: https://docs.radforge.dev/workflows/ -->

# Choose a workflow

Choose a workflow based on the language and how you select source files. Every mutation run executes on Radforge infrastructure. CLI planning and dry-run inspection stay local.

| Goal                                       | Use                                      | Language support                  |
| ------------------------------------------ | ---------------------------------------- | --------------------------------- |
| Analyze one source file                    | [`rad file`](/cli/file/)                 | Go, TypeScript/JavaScript, Python |
| Save a one-file plan without submitting it | [`rad plan`](/cli/plan/)                 | Go, TypeScript/JavaScript, Python |
| Analyze source selected from a Git diff    | [`rad changed`](/cli/changed/)           | Go, TypeScript/JavaScript, Python |
| Analyze an explicit source-file list       | [`rad scope`](/cli/scope/)               | Go, TypeScript/JavaScript, Python |
| Analyze a pull request                     | [GitHub App](/github-app/installation/)  | Go, TypeScript/JavaScript, Python |
| Submit or manage a saved plan              | [`rad remote`](/hosted/remote-commands/) | The language recorded in the plan |

See [Language support](/reference/language-support/) for supported project shapes and runner differences. For Go versions, mutation operators, and exclusions, see [Go support](/reference/go-support/).

## `rad file` versus `rad plan`

Use `rad file <path>` to plan one file and submit the plan immediately. Use `rad plan --target <path>` when you need to inspect, store, or pass the plan to another tool before submission.

`rad file <path> --dry-run --json` and `rad plan --target <path> --json` both write a one-file plan without starting a run. Do not edit the generated JSON by hand.

## Submit a saved plan

Both commands submit an existing plan through the hosted execution path:

```bash
rad file --artifact plan.json
rad remote run --artifact plan.json
```

Use `rad remote run` in scripts or workflows that explicitly separate planning from submission. Use `rad file --artifact` as the shorter equivalent when working with a one-file plan.

## Narrow and broad test selection

Radforge normally selects tests related to the source being mutated. If it cannot select a narrow set, planning stops unless you pass `--allow-broad-tests`. That option can run more tests and increase run time, so inspect the plan before accepting the broader scope.

## Run and attempt

A **run** keeps one submitted plan and source snapshot. An **attempt** is one execution of that immutable input. Retrying a run creates a new attempt with the original plan and snapshot. Submit a new run when the code or plan changes.
