id = "chainloop-cli" name = "Chainloop CLI" homepage = "https://chainloop.dev" description = "An open source evidence store and policy engine for your software supply chain." executables = ["chainloop"] [dotfiles] # https://github.com/chainloop-dev/chainloop/blob/main/app/cli/cmd/root.go — # the Cobra help text names $HOME/.config/chainloop/config.toml as the default, # and getConfigDir uses the XDG config home (github.com/adrg/xdg). paths = ["[configHome]/chainloop/config.toml"] secret = [] # root.go's confOptions maps auth.token to the token persisted by `chainloop # auth login`; it is a credential inside the otherwise useful TOML config. [[dotfiles.secret_paths]] file = "[configHome]/chainloop/config.toml" match = { key_path = ["auth.token"] } [commands] format = 1 label = "Chainloop CLI" description = "Start and extend software supply chain attestations, and set up AI session tracing. Login, policies, contracts and registry commands are left out." quality = "ai-draft" parser = { end_of_options = "--", interleave = "permute", long_equals = true, short_attached = true, short_bundles = false } [[commands.source]] id = "readme" kind = "manual" url = "https://github.com/chainloop-dev/chainloop/blob/main/README.md" revision = "HEAD 2026-10-27" evidence = "chainloop attestation init --workflow build --project my-app" [[commands.subcommand]] path = ["attestation", "init"] label = "Start an attestation" description = "Begin a Chainloop attestation for a workflow run." [[commands.subcommand.source]] id = "readme" kind = "manual" url = "https://github.com/chainloop-dev/chainloop/blob/main/README.md" revision = "HEAD 2026-10-27" evidence = """ chainloop attestation init --workflow build --project my-app """ [[commands.subcommand.field]] id = "workflow" label = "Workflow" type = "string" option = ["--workflow"] sources = ["readme"] [[commands.subcommand.field]] id = "project" label = "Project" type = "string" option = ["--project"] sources = ["readme"] [[commands.subcommand.task]] id = "init" label = "Start an attestation" fields = ["workflow", "project"] required = ["workflow", "project"] [[commands.subcommand.group]] id = "basic" label = "Basic" fields = ["workflow", "project"] [[commands.subcommand]] path = ["attestation", "add"] label = "Add evidence" description = "Attach a material (file or value) to the current attestation." [[commands.subcommand.source]] id = "readme" kind = "manual" url = "https://github.com/chainloop-dev/chainloop/blob/main/README.md" revision = "HEAD 2026-10-27" evidence = """ chainloop attestation add --value sbom.cyclonedx.json """ [[commands.subcommand.field]] id = "value" label = "Value" type = "string" option = ["--value"] sources = ["readme"] [[commands.subcommand.task]] id = "add" label = "Add evidence" fields = ["value"] required = ["value"] [[commands.subcommand.group]] id = "basic" label = "Basic" fields = ["value"] [[commands.subcommand]] path = ["trace", "init"] label = "Initialize tracing" description = "Install git and agent hooks and write .chainloop.yml in the repository." [[commands.subcommand.source]] id = "readme" kind = "manual" url = "https://github.com/chainloop-dev/chainloop/blob/main/README.md" revision = "HEAD 2026-10-27" evidence = """ chainloop trace init --project Add `--claude`, `--cursor`, `--opencode`, or `--codex` for the agents in use. For Codex, run `chainloop trace init --codex`. """ [[commands.subcommand.field]] id = "project" label = "Project" type = "string" option = ["--project"] sources = ["readme"] [[commands.subcommand.field]] id = "claude" label = "Claude Code" type = "boolean" option = ["--claude"] sources = ["readme"] [[commands.subcommand.field]] id = "cursor" label = "Cursor" type = "boolean" option = ["--cursor"] sources = ["readme"] [[commands.subcommand.field]] id = "opencode" label = "OpenCode" type = "boolean" option = ["--opencode"] sources = ["readme"] [[commands.subcommand.field]] id = "codex" label = "Codex" type = "boolean" option = ["--codex"] sources = ["readme"] [[commands.subcommand.task]] id = "trace" label = "Initialize tracing" fields = ["project", "claude", "cursor", "opencode", "codex"] required = ["project"] [[commands.subcommand.group]] id = "basic" label = "Basic" fields = ["project", "claude", "cursor", "opencode", "codex"]