Skip to main content

Attestor catalog

Every attestor compiled into the default cilock binary (verified against cilock 1.1.0's cilock attestors list output), with its predicate type URL, lifecycle phase, and a one-line summary. Per-attestor JSON schemas live upstream in the witness docs (linked in the table); CI/lock and witness use compatible schemas, with CI/lock attestation types namespaced under https://aflock.ai/attestations/<name>/v0.1 and witness types under https://witness.dev/attestations/<name>/v0.1. CI/lock accepts both via legacy aliases. Several attestors emit upstream-typed predicates (SLSA, OpenVEX, in-toto link, SLSA VSA) instead of an aflock-namespaced one; those exact types are shown in the table.

Source of truth: rookery/cilock/cmd/cilock/main.go for the registered set; per-attestor source in rookery/plugins/attestors/<name>/.

The current binary registers 45 attestors (3 always-run, 2 default-on, the rest opt-in). The table below documents the most commonly used ones; run cilock attestors list for the authoritative, complete set for your exact binary.

Inspecting your binary

# Full table of registered attestors with name, type URL, run type
cilock attestors list

# JSON Schema for a specific attestor's predicate
cilock attestors schema git

The (always run) and (default) markers in cilock attestors list show which attestors fire on every cilock run and which are enabled without being passed via --attestations.

Source & build context

NamePredicate typeLifecycleWhat it capturesUpstream schema
git (default)https://aflock.ai/attestations/git/v0.1prematerialCommit hash, branch, tags, author, committer, dirty status, refs, remotes, parentswitness/git.md
command-run (always run)https://aflock.ai/attestations/command-run/v0.1executeargv, exit code, stdout/stderr digests, optional ptrace openedfiles and syscall recordswitness/command-run.md
material (always run)https://aflock.ai/attestations/material/v0.3materialMerkle root over the digests of all files in the working directory before the command runs. The per-file leaves (path, fileDigest, leafHash) are inlined in the attestation by default (#253), so the signed envelope is self-contained. A producer-side sidecar (<outfile>.material.tree.json) is also written for cilock prove to emit standalone inclusion-proof attestations.material (v0.3)
product (always run)https://aflock.ai/attestations/product/v0.3productMerkle root over the digests of files changed/created during execute (filtered by --attestor-product-include-glob / --attestor-product-exclude-glob). Per-file leaves are inlined in the attestation by default (#253); a producer-side sidecar <outfile>.product.tree.json is also written for cilock prove.product (v0.3)
inclusion-proofhttps://aflock.ai/attestations/inclusion-proof/v0.1producer-driven (cilock prove)Signed RFC 6962 inclusion proof binding a single file's digest to a v0.3 product/material Merkle root. Generated on demand against a producer-side tree sidecar.inclusion-proof
material-v0.1 (legacy, verify-only)https://aflock.ai/attestations/material/v0.1materialVerify-only decoder for the historical per-file material predicate body. cilock verify reads pre-cutover envelopes through this registration; not produced.material legacy
product-v0.1 (legacy, verify-only)https://aflock.ai/attestations/product/v0.1productVerify-only decoder for the historical per-file product predicate body.product legacy
product-v0.2 (legacy, verify-only)https://aflock.ai/attestations/product/v0.2productVerify-only decoder for v0.2 envelopes — same predicate body as v0.1 (the in-toto Statement.Subject is what differed).product legacy
environment (default)https://aflock.ai/attestations/environment/v0.1prematerialOS, kernel, env vars (sensitive vars obfuscated or filtered)witness/environment.md
configurationhttps://aflock.ai/attestations/configuration/v0.1prematerialCaptures CI/lock's own runtime config for the step(cilock-native)
linkhttps://in-toto.io/attestation/link/v0.3postproductin-toto link statement format (legacy in-toto compat)witness/link.md
lockfileshttps://aflock.ai/attestations/lockfiles/v0.1prematerialHashes of detected lockfiles for package-manager integritywitness/lockfiles.md
go-buildhttps://aflock.ai/attestations/go-build/v0.1postproductBuild provenance Go embeds in compiled binaries (runtime/debug.BuildInfo: module path, dependency versions, VCS commit, build settings), read from the step's product binaries.(cilock-native)

CI platform identity

NamePredicate typeLifecycleWhat it capturesUpstream schema
github-actionhttps://aflock.ai/attestations/github-action/v0.1executeWorkflow, job, run-id, actor, event, ref, SHA from GITHUB_* env(cilock-native)
githubhttps://aflock.ai/attestations/github/v0.1prematerialGitHub OIDC token claims (audience, subject, repo, ref)witness/github.md
github-reviewhttps://aflock.ai/attestations/github-review/v0.1prematerialGitHub pull-request review state (reviewers, approval decisions) for the commit, fetched from the GitHub REST API.(cilock-native)
githubwebhookhttps://aflock.ai/attestations/githubwebhook/v0.1postproductInbound webhook payload digest for chain-of-custody(cilock-native)
gitlabhttps://aflock.ai/attestations/gitlab/v0.1prematerialGitLab CI JWT identity, pipeline, job, runner, refwitness/gitlab.md
jenkinshttps://aflock.ai/attestations/jenkins/v0.1prematerialJenkins build identity and job contextwitness/jenkins.md
jwthttps://aflock.ai/attestations/jwt/v0.1prematerialGeneric JWT identity capture (used for non-built-in OIDC sources)witness/jwt.md

Cloud identity & infrastructure

NamePredicate typeLifecycleWhat it capturesUpstream schema
awshttps://aflock.ai/attestations/aws/v0.1prematerialAWS EC2 instance identity document, cryptographically validated against the AWS public keywitness/aws.md
aws-codebuildhttps://aflock.ai/attestations/aws-codebuild/v0.1prematerialAWS CodeBuild project identity and build metadatawitness/aws-codebuild.md
gcp-iithttps://aflock.ai/attestations/gcp-iit/v0.1prematerialGCP Instance Identity Token, validated against GCP keyswitness/gcp-iit.md
dockerhttps://aflock.ai/attestations/docker/v0.1postproductDocker buildx metadata file digests, image tagswitness/docker.md
ocihttps://aflock.ai/attestations/oci/v0.1postproductOCI image content from saved image tarball, layers, config, manifestswitness/oci.md
k8smanifesthttps://aflock.ai/attestations/k8smanifest/v0.2postproductKubernetes manifest digests for deploy artifactswitness/k8smanifest.md

Security & compliance evidence

NamePredicate typeLifecycleWhat it capturesUpstream schema
sbomhttps://aflock.ai/attestations/sbom/v0.1postproductParses CycloneDX or SPDX JSON files in the products and embeds the SBOM document. (When a CycloneDX SBOM is emitted as a standalone attestation via --attestor-sbom-export, its inner predicateType becomes https://cyclonedx.org/bom.)witness/sbom.md
sarifhttps://aflock.ai/attestations/sarif/v0.1postproductParses SARIF result files (CodeQL, Semgrep, gosec, Trivy, etc.). Outer predicate wraps the SARIF report at .report, so Rego policies use input.report.runs not input.runs.witness/sarif.md
slsahttps://slsa.dev/provenance/v1.0postproductEmits SLSA Provenance v1 from the cilock run context. Uses the upstream SLSA predicate type directly.witness/slsa.md
slsa-provenance-v1https://slsa.dev/provenance/v1verifyTyped SLSA Provenance v1, registered via the attestation factory. Distinct from the postproduct slsa attestor (which embeds provenance during a build).(cilock-native)
govulncheckhttps://aflock.ai/attestations/govulncheck/v0.1postproductParses govulncheck JSON — reports both imported and reachable Go vulnerabilities (call-graph based), not just dependency presence.(cilock-native)
test-resultshttps://aflock.ai/attestations/test-results/v0.1postproductStructured test-run results parsed from JUnit XML or CTRF JSON report files in the products (per-test pass/fail/skip).(cilock-native)
secretscanhttps://aflock.ai/attestations/secretscan/v0.1postproductGitleaks pattern scan with recursive base64/hex/URL decode (default maxDecodeLayers=3); --attestor-secretscan-fail-on-detection blocks the build on hits. See concepts → secretscan.witness/secretscan.md
vexhttps://openvex.dev/nspostproductVulnerability Exploit Exchange, explicit vulnerability disposition statements. Uses the upstream OpenVEX predicate type.witness/vex.md
omnitrailhttps://aflock.ai/attestations/omnitrail/v0.1prematerialOmniTrail tooling trail (Linux/Darwin only; Windows builds excluded for this reason)witness/omnitrail.md
system-packageshttps://aflock.ai/attestations/system-packages/v0.1prematerialOS package inventory (deb/rpm/apk)witness/system-packages.md
policyverifyhttps://slsa.dev/verification_summary/v1verifyRecords a SLSA Verification Summary Attestation (VSA) for the verify result. Verify-type attestor: runs only inside cilock verify; cannot be combined with run-type attestors in cilock run.(cilock-native; see verify-in-a-release-gate)
mavenhttps://aflock.ai/attestations/maven/v0.1prematerialMaven build context (POM path defaults to pom.xml) and dependency declarationswitness/maven.md

Always-run and default sets

Verified from rookery/cilock/internal/cmd/run.go + the live cilock attestors list:

  • Always run (cannot be omitted, run on every cilock run): material, product, and command-run (when args are provided).
  • Default attestation set (when --attestations is not specified): environment,git (comma-separated, per cobra StringSlice semantics).

Pass additional attestors with --attestations "<a>,<b>,<c>" (comma-separated, not space). CI/lock also accepts the legacy witness URL aliases via attestation.RegisterLegacyAliases(), called from cilock/cmd/cilock/main.go at startup.

Naming gotchas

The on-disk Go package name and the attestor's Name() aren't always identical. Use the Name() value when passing --attestations:

Go package directoryAttestor Name() (use this in --attestations)
plugins/attestors/commandrun/command-run
plugins/attestors/githubaction/github-action
plugins/attestors/aws-iid/aws

Available in rookery but not in the default cilock binary

These attestors live in rookery/plugins/attestors/ but are not registered in the default cilock binary (some are imported but not registered, others aren't imported at all). To include them, add the blank-import to cilock/cmd/cilock/main.go and rebuild — see Build from source:

asff, aws-config, docker-bench, nessus, sinkhole-flows, structured-data, vsa

Confirm against your own binary with cilock attestors list — the registered set changes between releases, and several scanner attestors (oscap, inspec, kube-bench, prowler, steampipe, pip-install) that were previously opt-in are now registered by default.