Feature request: `set script-quiet` setting to make `@` consistently mean "mute" for shebang/script recipes
- Dominant language
- Rust
- Stars
- 35.8k
- Forks
- 846
- Avg merge
- 27m
- Merged PRs (30d)
- 3
Description
## Problem
`@` means opposite things depending on recipe kind:
- Line-wise recipes: verbose by default, `@` mutes a line (or, with `set quiet`, mutes the whole file and `@` un-mutes).
- Shebang/script recipes: quiet by default, `@` does the opposite — it makes `just` print the script body before running it.
#603 tracked this exact inconsistency. Casey's take there was that flipping the hard-coded default for shebang recipes outright is too disruptive at this point (https://github.com/casey/just/issues/603#issuecomment-2999161010). I followed up asking whether a setting to opt into the inversion (rather than changing the default for everyone) would be reasonable (https://github.com/casey/just/issues/603#issuecomment-2999238000), but that didn't get picked up as its own issue.
## Solution
Add a new justfile setting, analogous to `set quiet` (#1698), scoped to shebang/script recipes:
```just
set script-quiet := true # default, current behavior: scripts are quiet, @ makes them print
```
```just
set script-quiet := false # scripts are verbose by default, @ mutes them — same meaning as line-wise @
```
With `script-quiet := false`, `just` prints the script body before executing it unless the recipe is prefixed with `@` (or annotated `[quiet]`, mirroring `[no-quiet]` for the `set quiet` case). Default stays `true`, so nothing changes for existing justfiles — this is purely opt-in, sidestepping the breaking-change concern from #603.
End state once both settings are used together: `@` always means "suppress output for this recipe," regardless of whether it's line-wise or script.
Contributor guide
Research direction
Start by reading the existing `set quiet` implementation from #1698 and the shebang/script recipe handling, then compare the behavior discussed in #603. Trace how `@`, `[quiet]`, and `[no-quiet]` are interpreted for both recipe kinds; done means the new setting defaults to current behavior, supports the opt-in inversion, and preserves existing justfiles.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- rust
- Domain
- cli
- Issue type
- Feature
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Quiet
- Clarity
- Mostly clear
- Newbie friendliness
- 58/100