casey / casey/just

Feature request: `set script-quiet` setting to make `@` consistently mean "mute" for shebang/script recipes

Open
#3,637 2 comments 0 reactions 0 assignees View on GitHub
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

Open the contributing 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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.