id = "ggshield"
name = "ggshield"
homepage = "https://docs.gitguardian.com/ggshield-docs/"
description = "A CLI application to help secure your software development lifecycle."
executables = ["ggshield"]
[dotfiles]
paths = ["~/.gitguardian.yaml"]
exclude = []
secret = []
side_effect = false
[commands]
format = 1
label = "Scan for secrets"
description = "Scan files or a repository for leaked secrets. Authentication, hooks, Docker and PyPI scans are left out."
quality = "ai-draft"
parser = { end_of_options = "--", interleave = "permute", long_equals = true, short_attached = false, short_bundles = false }
[[commands.subcommand]]
path = ["secret", "scan", "path"]
label = "Scan files and directories"
[[commands.subcommand.source]]
id = "readme"
kind = "help"
url = "https://github.com/GitGuardian/ggshield#usage"
revision = "2026-10-27"
evidence = """
- in files: `ggshield secret scan path -r .`
Lines that are too long are truncated to match the size of the terminal, unless the verbose mode is used (`-v` or `--verbose`).
"""
[[commands.subcommand.field]]
id = "recursive"
label = "Recurse into directories"
type = "boolean"
option = ["-r"]
sources = ["readme"]
[[commands.subcommand.field]]
id = "verbose"
label = "Verbose output"
type = "boolean"
option = ["--verbose", "-v"]
sources = ["readme"]
[[commands.subcommand.field]]
id = "paths"
label = "Files or directories"
type = "path"
position = 0
multiple = true
path = { kind = "any", role = "input" }
sources = ["readme"]
[[commands.subcommand.task]]
id = "scan-dir"
label = "Scan a directory recursively"
set = { recursive = [true] }
fields = ["paths", "recursive", "verbose"]
required = ["paths"]
[[commands.subcommand.group]]
id = "basic"
label = "Basic"
fields = ["paths", "recursive", "verbose"]