Skip to content
Install the CLI

How-to guide Policy, CI, and compliance

Generate SLSA provenance

Use kix compliance attest to describe the cluster build as an in-toto Statement with a SLSA v1 provenance predicate. The command evaluates the cluster locally and writes the unsigned statement to stdout.

In CI, identify the builder with the workflow URL and record the run ID:

kix-examples/
❱ kix compliance attest 19-scorecards --builder-id "$BUILD_URL" --invocation-id "$BUILD_ID" > provenance.json

This captured excerpt uses fixed example identifiers so you can see the main fields:

kix-examples/ output excerpt offline capture
❱ kix compliance attest 19-scorecards --builder-id https://ci.example/runs/1842 --invocation-id 1842
Show outputHide output · 54 lines
{
  "_type": "https://in-toto.io/Statement/v1",
  "predicateType": "https://slsa.dev/provenance/v1",
  "subject": [
    {
      "digest": {
        "nixStoreHash": "v5f4pbxglm62hzcpz74p49vsbcp0dxdm"
      },
      "name": "cluster-19-scorecards-activation"
    }
  ],
  "predicate": {
    "buildDefinition": {
      "buildType": "https://kix.run/build/v1",
      "externalParameters": {
        "cluster": "19-scorecards",
        "flakeLock": "blake3:def4553f899021a532849fe340612d2d5ee216fd612fce10381623b611392929",
        "flakeRef": "kix-examples"
      },
      "resolvedDependencies": [
        {
          "digest": {
            "gitCommit": "7cf72d978629469c4bd4206b95c402514c1f6000",
            "narHash": "sha256-SPm9ck7jh3Un9nwPuMGbRU04UroFmOHjLP56T10MOeM="
          },
          "uri": "flake-input:crane"
        },
        {
          "digest": {
            "gitCommit": "5edf11c44bc78a0d334f6334cdaf7d60d732daab",
            "narHash": "sha256-vNpUSpF5Nuw8xvDLj2KCwwksIbjua2LZCqhV1LNRDns="
          },
          "uri": "flake-input:flake-compat"
        }
      ]
    },
    "runDetails": {
      "builder": {
        "id": "https://ci.example/runs/1842"
      },
      "metadata": {
        "finishedOn": "2026-11-09T11:09:12Z",
        "invocationId": "1842",
        "startedOn": "2026-11-09T11:09:12Z"
      }
    }
  }
}
Building cluster '19-scorecards'...
  Evaluating cluster '19-scorecards'...
  Reading package index...
  Loading store graph...
  Reading 6 packages...
  Computing cross-package dependencies...

The Activation identity hash is the statement’s subject. The build definition also records the cluster name, flake reference, lock-file digest, Git source, locked flake inputs, and rendered container images.

If the working tree is dirty, Kix records that state and prints a warning. The statement remains an honest description of the build, but its Git commit does not contain every input that was evaluated.