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

# rad changed

Compare the working branch with a known ref:

```bash
git fetch origin main
rad changed --since-ref origin/main
```

Without `--since-ref`, use `--include-staged` or `--include-unstaged` to include those changes. Repeat `--exclude <pattern>` to remove generated files or other source files you do not want to mutate. Radforge also reads `.muttignore` files used by existing installations.

`--dry-run` prints the plan rather than submitting it. `--budget` limits the session’s total candidates, not the number per file.

```bash
rad changed --since-ref HEAD~3 \
  --exclude 'generated/**' \
  --budget 200 \
  --dry-run --json > changed-plan.json
```

## Choose a language workflow

`rad changed` currently plans TypeScript and JavaScript changes. It ignores Python paths and does not accept a `--language` option.

### TypeScript and JavaScript

Run `rad changed` against the comparison ref:

```bash
rad changed --since-ref origin/main
```

### Python

Python change analysis runs through the GitHub App:

1. [Install the GitHub App](/github-app/installation/) for the repository.
2. Push the Python changes to a branch.
3. Open a Python-only pull request. The GitHub App starts the hosted mutation run and publishes its result as a GitHub check.

If a change includes both TypeScript/JavaScript and Python, split the changes into separate pull requests. One pull-request run cannot span both language profiles.
