Learn how to attest artifacts to Kosli and establish binary provenance.
In software processes, you typically generate one or more artifacts that are deployed or distributed, such as docker images, archives, binaries, etc. You can ensure traceability for the creation of these artifacts by attesting them to Kosli, thereby establishing a binary provenance for each one.
Binary provenance for artifacts refers to the ability to trace and verify the origins, history, and journey of the artifacts throughout their lifecycle. This involves recording immutable attestations about the artifact creation, risk controls performed on it, deployments, and execution/usage.Artifacts are uniquely identified by their SHA256 fingerprints. When attesting an artifact to Kosli, you have the option to either provide the fingerprint manually or allow Kosli CLI to calculate it automatically for you.By leveraging the artifact’s fingerprint, Kosli can establish connections between the creation of the artifact and its runtime-related events, such as when the artifact starts or ceases execution within a specific environment.By establishing and maintaining binary provenance for artifacts, Kosli enables you to:
Track Changes: Trace how your Flow artifacts change over time.
Identify Sources: Understand where your artifacts originated from, which can help in identifying vulnerabilities or issues.
Monitor Compliance: Ensure that the artifacts adhere to your compliance requirements.
Enable Audits: Access audit packages on demand allowing audits and investigations into the software supply chain.
Enhance Trust: Build trust among users, customers, and stakeholders by providing transparent and verified information about the software’s history.
The --artifact-type flag is used to determine the type of artifact being attested. The following types are supported:
file: for any single file artifacts (e.g. a binary, Jar file, etc.)
dir: for directory artifacts.
docker: for docker images that are pulled on the machine. This option depends on having a running Docker daemon on the machine.
oci: for container images in docker or OCI format. The fingerprint is fetched directly from the registry.
docker requires the image to exist in a registry. Kosli reads the image’s repo digest via the local Docker daemon, and a freshly built image (just docker build) does not have one until it has been pushed to or pulled from a registry. If you attest an image that has only been built locally, you will see:
Error: repo digest unavailable for the image, has it been pushed to or pulled from a registry?
You have two options:
Push the image to a registry first, then attest it.
Use --artifact-type=oci and let Kosli fetch the digest directly from the registry.
All Kosli CLI commands which write data accept the --dry-runboolean flag.
When this flag is used, a CLI command:
Does not communicate with Kosli at all
Prints the payload it would have sent
Exits with a zero status code
We recommend using the KOSLI_DRY_RUN environment variable to automatically set the --dry-run flag.
This will allow you to instantly turn off all Kosli CLI commands if Kosli is down, as detailed in
this tutorial.The --dry-run flag is also useful when trying commands locally. For example:
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Kosli Documentation","colors":{"primary":"#1C4BC6","light":"#ABBDFF","dark":"#1C4BC6"},"logo":{"light":"https://mintcdn.com/kosli/Cee1LAu-Jhawp1Om/logo/kosli-logo-light-main.svg?fit=max\u0026auto=format\u0026n=Cee1LAu-Jhawp1Om\u0026q=85\u0026s=fb05fdbb0c9c9ae7da266a500eac2be6","dark":"https://mintcdn.com/kosli/Cee1LAu-Jhawp1Om/logo/kosli-logo-dark-main.svg?fit=max\u0026auto=format\u0026n=Cee1LAu-Jhawp1Om\u0026q=85\u0026s=c230555c5e1d57d0f9f9630117a1467d"},"favicon":"https://mintcdn.com/kosli/CktiOOFhqneQZXyH/favicon-32x32.png?fit=max\u0026auto=format\u0026n=CktiOOFhqneQZXyH\u0026q=85\u0026s=1b16e66cd5c7266604a6a683f334f672","api":{"playground":{"display":"interactive"}},"background":{"decoration":"windows","color":{"light":"#F6F8FC","dark":"#111A26"}},"navbar":{"links":[{"href":"mailto:support@kosli.com","label":"Support"}],"primary":{"type":"button","label":"Kosli App","href":"https://app.kosli.com"}},"footer":{"socials":{"website":"https://kosli.com","github":"https://github.com/kosli-dev","linkedin":"https://linkedin.com/company/kosli-dev"},"links":[{"header":"Resources","items":[{"label":"Privacy Policy","href":"https://www.kosli.com/privacy-policy"},{"label":"Status","href":"https://status.app.kosli.com/"}]},{"header":"Learn","items":[{"label":"Labs","href":"/labs"},{"label":"Blog","href":"https://kosli.com/blog"}]},{"header":"Company","items":[{"label":"About Kosli","href":"https://www.kosli.com/about"},{"label":"Privacy","href":"https://www.kosli.com/privacy-policy"},{"label":"Community","href":"https://www.kosli.com/community"}]}]},"fonts":{"family":"IBM Plex Sans"},"styling":{"eyebrows":"breadcrumbs","codeblocks":{"theme":"dracula","languages":{"custom":["/languages/rego.json"]}},"latex":false},"integrations":{"posthog":{"apiKey":"phc_vKbCGJq5rzV4apArUzYDRwh6azCmgCPcLz8jTa9CgmGR","apiHost":"https://eu.posthog.com","sessionRecording":false},"cookies":{"key":"kosli_consent","value":"accepted"}},"banner":{"content":"🌱 The docs have a new layout, grouped by what you're here to do.","dismissible":true},"contextual":{"options":["copy","view","chatgpt","claude","perplexity","mcp","cursor","vscode"],"display":"header"},"metadata":{"timestamp":true},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"kosli","hasAudioNarration":false,"actualSubdomain":"kosli","customDomains":["docs.kosli.com"],"gitSource":{"type":"github","owner":"kosli-dev","repo":"docs","deployBranch":"main","contentDirectory":"","isPrivate":false,"mountPath":"","label":""},"feedback":{"thumbs":true,"edits":false,"issues":false,"agentFeedback":true},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"CONTEXTUAL_FEEDBACK":{"status":"DISABLED","enabled":"DISABLED"},"CODE_SNIPPET_FEEDBACK":{"status":"DISABLED","enabled":"DISABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6af2d76cfbd1ac70aabe00cd","clientVersion":"0.0.4094","searchFilterCounts":[{"language":"default","tag":"Reference","count":290},{"language":"default","tag":"API Reference","count":152},{"language":"default","tag":"CLI Reference","count":103},{"language":"default","tag":"Platform administration","count":28},{"language":"default","tag":"Discover Kosli","count":28},{"language":"default","tag":"Terraform Reference","count":22},{"language":"default","tag":"Environments","count":21},{"language":"default","tag":"Attestation","count":18},{"language":"default","tag":"kosli get","count":15},{"language":"default","tag":"kosli attest","count":13}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":true,"enableContextualStarterQuestions":true,"enableAskAiSearchBar":true,"deflection":{"enabled":false,"showHelpButton":false}},"basePath":"","hasChatPermissions":true,"hasWebMcpPermissions":true,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-rbac-roles","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-metadata","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":true},"customCss":[{"filePath":"style.css","content":"[data-component-part=\"step-number\"]>div{background-color:#CFD8FF!important;color:#111A26!important}"}],"page":{"pagePath":"getting_started/artifacts","slug":"/getting_started/artifacts","pageMetadata":{"title":"Artifacts","description":"Learn how to attest artifacts to Kosli and establish binary provenance.","icon":"box","href":"/getting_started/artifacts"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Learn how to attest artifacts to Kosli and establish binary provenance.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,li:`li`,ol:`ol`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,ul:`ul`,..._provideComponents(),...props.components},{CodeBlock,Heading,Warning}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsx(_components.p,{children:`In software processes, you typically generate one or more artifacts that are deployed or distributed, such as docker images, archives, binaries, etc. You can ensure traceability for the creation of these artifacts by attesting them to Kosli, thereby establishing a binary provenance for each one.`}),`\n`,_jsx(Heading,{level:`2`,id:`binary-provenance`,children:`Binary provenance`}),`\n`,_jsx(_components.p,{children:`Binary provenance for artifacts refers to the ability to trace and verify the origins, history, and journey of the artifacts throughout their lifecycle. This involves recording immutable attestations about the artifact creation, risk controls performed on it, deployments, and execution/usage.`}),`\n`,_jsx(_components.p,{children:`Artifacts are uniquely identified by their SHA256 fingerprints. When attesting an artifact to Kosli, you have the option to either provide the fingerprint manually or allow Kosli CLI to calculate it automatically for you.`}),`\n`,_jsx(_components.p,{children:`By leveraging the artifact’s fingerprint, Kosli can establish connections between the creation of the artifact and its runtime-related events, such as when the artifact starts or ceases execution within a specific environment.`}),`\n`,_jsx(_components.p,{children:`By establishing and maintaining binary provenance for artifacts, Kosli enables you to:`}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Track Changes`}),`: Trace how your Flow artifacts change over time.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Identify Sources`}),`: Understand where your artifacts originated from, which can help in identifying vulnerabilities or issues.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Monitor Compliance`}),`: Ensure that the artifacts adhere to your compliance requirements.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Enable Audits`}),`: Access audit packages on demand allowing audits and investigations into the software supply chain.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Enhance Trust`}),`: Build trust among users, customers, and stakeholders by providing transparent and verified information about the software’s history.`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`attesting-artifacts`,children:`Attesting artifacts`}),`\n`,_jsx(_components.p,{children:`To attest an artifact, you can run a command similar to the one below:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`8`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes dracula dracula`,style:{backgroundColor:`#282A36`,\"--shiki-dark-bg\":`#282A36`,color:`#F8F8F2`,\"--shiki-dark\":`#F8F8F2`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`8`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#50FA7B`,\"--shiki-dark\":`#50FA7B`},children:`kosli`}),_jsx(_components.span,{style:{color:`#F1FA8C`,\"--shiki-dark\":`#F1FA8C`},children:` attest`}),_jsx(_components.span,{style:{color:`#F1FA8C`,\"--shiki-dark\":`#F1FA8C`},children:` artifact`}),_jsx(_components.span,{style:{color:`#F1FA8C`,\"--shiki-dark\":`#F1FA8C`},children:` project-a-app.bin`}),_jsx(_components.span,{style:{color:`#FF79C6`,\"--shiki-dark\":`#FF79C6`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#BD93F9`,\"--shiki-dark\":`#BD93F9`},children:`\t--artifact-type`}),_jsx(_components.span,{style:{color:`#F1FA8C`,\"--shiki-dark\":`#F1FA8C`},children:` file`}),_jsx(_components.span,{style:{color:`#FF79C6`,\"--shiki-dark\":`#FF79C6`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#BD93F9`,\"--shiki-dark\":`#BD93F9`},children:`\t--build-url`}),_jsx(_components.span,{style:{color:`#F1FA8C`,\"--shiki-dark\":`#F1FA8C`},children:` https://exampleci.com`}),_jsx(_components.span,{style:{color:`#FF79C6`,\"--shiki-dark\":`#FF79C6`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#BD93F9`,\"--shiki-dark\":`#BD93F9`},children:`\t--commit-url`}),_jsx(_components.span,{style:{color:`#F1FA8C`,\"--shiki-dark\":`#F1FA8C`},children:` https://github.com/ProjectA/ProjectAApp/commit/e67f2f2b121f9325ebf166b7b3c707f73cb48b14`}),_jsx(_components.span,{style:{color:`#FF79C6`,\"--shiki-dark\":`#FF79C6`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#BD93F9`,\"--shiki-dark\":`#BD93F9`},children:`\t--commit`}),_jsx(_components.span,{style:{color:`#F1FA8C`,\"--shiki-dark\":`#F1FA8C`},children:` e67f2f2b121f9325ebf166b7b3c707f73cb48b14`}),_jsx(_components.span,{style:{color:`#FF79C6`,\"--shiki-dark\":`#FF79C6`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#BD93F9`,\"--shiki-dark\":`#BD93F9`},children:`\t--flow`}),_jsx(_components.span,{style:{color:`#F1FA8C`,\"--shiki-dark\":`#F1FA8C`},children:` project-a`}),_jsx(_components.span,{style:{color:`#FF79C6`,\"--shiki-dark\":`#FF79C6`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#BD93F9`,\"--shiki-dark\":`#BD93F9`},children:`\t--trail`}),_jsx(_components.span,{style:{color:`#F1FA8C`,\"--shiki-dark\":`#F1FA8C`},children:` trail-1`}),_jsx(_components.span,{style:{color:`#FF79C6`,\"--shiki-dark\":`#FF79C6`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#BD93F9`,\"--shiki-dark\":`#BD93F9`},children:`\t--name`}),_jsx(_components.span,{style:{color:`#F1FA8C`,\"--shiki-dark\":`#F1FA8C`},children:` backend`})]}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`The `,_jsx(_components.code,{children:`--artifact-type`}),` flag is used to determine the type of artifact being attested. The following types are supported:`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`file`}),`: for any single file artifacts (e.g. a binary, Jar file, etc.)`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`dir`}),`: for directory artifacts.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`docker`}),`: for docker images that are pulled on the machine. This option depends on having a running Docker daemon on the machine.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`oci`}),`: for container images in docker or OCI format. The fingerprint is fetched directly from the registry.`]}),`\n`]}),`\n`,_jsxs(Warning,{children:[_jsxs(_components.p,{children:[_jsxs(_components.strong,{children:[_jsx(_components.code,{children:`docker`}),` requires the image to exist in a registry.`]}),` Kosli reads the image’s repo digest via the local Docker daemon, and a freshly built image (just `,_jsx(_components.code,{children:`docker build`}),`) does not have one until it has been pushed to or pulled from a registry. If you attest an image that has only been built locally, you will see:`]}),_jsx(CodeBlock,{numberOfLines:`2`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes dracula dracula`,style:{backgroundColor:`#282A36`,\"--shiki-dark-bg\":`#282A36`,color:`#F8F8F2`,\"--shiki-dark\":`#F8F8F2`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`2`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Error: repo digest unavailable for the image, has it been pushed to or pulled from a registry?`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),_jsx(_components.p,{children:`You have two options:`}),_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Push the image to a registry first, then attest it.`}),`\n`,_jsxs(_components.li,{children:[`Use `,_jsx(_components.code,{children:`--artifact-type=oci`}),` and let Kosli fetch the digest directly from the registry.`]}),`\n`]}),_jsxs(_components.p,{children:[`See `,_jsx(_components.a,{href:`/troubleshooting/repo_digest_unavailable`,children:`repo digest unavailable`}),` for more detail.`]})]}),`\n`,_jsxs(_components.p,{children:[`See `,_jsx(_components.a,{href:`/client_reference/kosli_attest_artifact/`,children:`kosli attest artifact`}),` for more details.`]}),`\n`,_jsxs(Heading,{level:`2`,id:`the-dry-run-flag`,children:[`The `,_jsx(_components.code,{children:`--dry-run`}),` flag`]}),`\n`,_jsxs(_components.p,{children:[`All Kosli CLI commands which write data accept the `,_jsx(_components.code,{children:`--dry-run`}),` `,_jsx(_components.a,{href:`/faq/#boolean-flags`,children:`boolean flag`}),`.\nWhen this flag is used, a CLI command:`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Does not communicate with Kosli at all`}),`\n`,_jsx(_components.li,{children:`Prints the payload it would have sent`}),`\n`,_jsx(_components.li,{children:`Exits with a zero status code`}),`\n`]}),`\n`,_jsxs(_components.p,{children:[`We recommend using the `,_jsx(_components.code,{children:`KOSLI_DRY_RUN`}),` environment variable to automatically set the `,_jsx(_components.code,{children:`--dry-run`}),` flag.\nThis will allow you to instantly turn off all Kosli CLI commands if Kosli is down, as detailed in\n`,_jsx(_components.a,{href:`/troubleshooting/what_do_i_do_if_kosli_is_down`,children:`this tutorial`}),`.`]}),`\n`,_jsxs(_components.p,{children:[`The `,_jsx(_components.code,{children:`--dry-run`}),` flag is also useful when trying commands locally. For example:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`29`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes dracula dracula`,style:{backgroundColor:`#282A36`,\"--shiki-dark-bg\":`#282A36`,color:`#F8F8F2`,\"--shiki-dark\":`#F8F8F2`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`29`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#50FA7B`,\"--shiki-dark\":`#50FA7B`},children:`kosli`}),_jsx(_components.span,{style:{color:`#F1FA8C`,\"--shiki-dark\":`#F1FA8C`},children:` attest`}),_jsx(_components.span,{style:{color:`#F1FA8C`,\"--shiki-dark\":`#F1FA8C`},children:` artifact`}),_jsx(_components.span,{style:{color:`#F1FA8C`,\"--shiki-dark\":`#F1FA8C`},children:` cyberdojo/differ:dde3b2a`}),_jsx(_components.span,{style:{color:`#FF79C6`,\"--shiki-dark\":`#FF79C6`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#BD93F9`,\"--shiki-dark\":`#BD93F9`},children:` --artifact-type=docker`}),_jsx(_components.span,{style:{color:`#FF79C6`,\"--shiki-dark\":`#FF79C6`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#BD93F9`,\"--shiki-dark\":`#BD93F9`},children:` --org=cyber-dojo`}),_jsx(_components.span,{style:{color:`#FF79C6`,\"--shiki-dark\":`#FF79C6`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#BD93F9`,\"--shiki-dark\":`#BD93F9`},children:` --flow=differ-ci`}),_jsx(_components.span,{style:{color:`#FF79C6`,\"--shiki-dark\":`#FF79C6`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#BD93F9`,\"--shiki-dark\":`#BD93F9`},children:` --trail=$(`}),_jsx(_components.span,{style:{color:`#50FA7B`,\"--shiki-dark\":`#50FA7B`},children:`git`}),_jsx(_components.span,{style:{color:`#F1FA8C`,\"--shiki-dark\":`#F1FA8C`},children:` rev-parse`}),_jsx(_components.span,{style:{color:`#F1FA8C`,\"--shiki-dark\":`#F1FA8C`},children:` HEAD`}),_jsx(_components.span,{style:{color:`#BD93F9`,\"--shiki-dark\":`#BD93F9`},children:`)`}),_jsx(_components.span,{style:{color:`#FF79C6`,\"--shiki-dark\":`#FF79C6`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#BD93F9`,\"--shiki-dark\":`#BD93F9`},children:` --dry-run`}),_jsx(_components.span,{style:{color:`#FF79C6`,\"--shiki-dark\":`#FF79C6`},children:` \\\\`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#F1FA8C`,\"--shiki-dark\":`#F1FA8C`},children:` ...`})}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#F8F8F2`,\"--shiki-dark\":`#F8F8F2`},children:` {`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#50FA7B`,\"--shiki-dark\":`#50FA7B`},children:` \"fingerprint\"`}),_jsx(_components.span,{style:{color:`#8BE9FD`,\"--shiki-dark\":`#8BE9FD`},children:`:`}),_jsx(_components.span,{style:{color:`#E9F284`,\"--shiki-dark\":`#E9F284`},children:` \"`}),_jsx(_components.span,{style:{color:`#F1FA8C`,\"--shiki-dark\":`#F1FA8C`},children:`0f53b5b9e7c266defe6984deafe039b116295b2df4a409ba6288c403f2451a9f`}),_jsx(_components.span,{style:{color:`#E9F284`,\"--shiki-dark\":`#E9F284`},children:`\"`}),_jsx(_components.span,{style:{color:`#F1FA8C`,\"--shiki-dark\":`#F1FA8C`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#50FA7B`,\"--shiki-dark\":`#50FA7B`},children:` \"filename\"`}),_jsx(_components.span,{style:{color:`#8BE9FD`,\"--shiki-dark\":`#8BE9FD`},children:`:`}),_jsx(_components.span,{style:{color:`#E9F284`,\"--shiki-dark\":`#E9F284`},children:` \"`}),_jsx(_components.span,{style:{color:`#F1FA8C`,\"--shiki-dark\":`#F1FA8C`},children:`cyberdojo/differ:dde3b2a`}),_jsx(_components.span,{style:{color:`#E9F284`,\"--shiki-dark\":`#E9F284`},children:`\"`}),_jsx(_components.span,{style:{color:`#F1FA8C`,\"--shiki-dark\":`#F1FA8C`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#50FA7B`,\"--shiki-dark\":`#50FA7B`},children:` \"git_commit\"`}),_jsx(_components.span,{style:{color:`#8BE9FD`,\"--shiki-dark\":`#8BE9FD`},children:`:`}),_jsx(_components.span,{style:{color:`#E9F284`,\"--shiki-dark\":`#E9F284`},children:` \"`}),_jsx(_components.span,{style:{color:`#F1FA8C`,\"--shiki-dark\":`#F1FA8C`},children:`fbb9e8000e2344323040e348a54b33ecbf67f273`}),_jsx(_components.span,{style:{color:`#E9F284`,\"--shiki-dark\":`#E9F284`},children:`\"`}),_jsx(_components.span,{style:{color:`#F1FA8C`,\"--shiki-dark\":`#F1FA8C`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#50FA7B`,\"--shiki-dark\":`#50FA7B`},children:` \"git_commit_info\"`}),_jsx(_components.span,{style:{color:`#8BE9FD`,\"--shiki-dark\":`#8BE9FD`},children:`:`}),_jsx(_components.span,{style:{color:`#F1FA8C`,\"--shiki-dark\":`#F1FA8C`},children:` {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#50FA7B`,\"--shiki-dark\":`#50FA7B`},children:` \"sha1\"`}),_jsx(_components.span,{style:{color:`#8BE9FD`,\"--shiki-dark\":`#8BE9FD`},children:`:`}),_jsx(_components.span,{style:{color:`#E9F284`,\"--shiki-dark\":`#E9F284`},children:` \"`}),_jsx(_components.span,{style:{color:`#F1FA8C`,\"--shiki-dark\":`#F1FA8C`},children:`fbb9e8000e2344323040e348a54b33ecbf67f273`}),_jsx(_components.span,{style:{color:`#E9F284`,\"--shiki-dark\":`#E9F284`},children:`\"`}),_jsx(_components.span,{style:{color:`#F1FA8C`,\"--shiki-dark\":`#F1FA8C`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#50FA7B`,\"--shiki-dark\":`#50FA7B`},children:` \"message\"`}),_jsx(_components.span,{style:{color:`#8BE9FD`,\"--shiki-dark\":`#8BE9FD`},children:`:`}),_jsx(_components.span,{style:{color:`#E9F284`,\"--shiki-dark\":`#E9F284`},children:` \"`}),_jsx(_components.span,{style:{color:`#F1FA8C`,\"--shiki-dark\":`#F1FA8C`},children:`improve coverage report info (#2796)`}),_jsx(_components.span,{style:{color:`#E9F284`,\"--shiki-dark\":`#E9F284`},children:`\"`}),_jsx(_components.span,{style:{color:`#F1FA8C`,\"--shiki-dark\":`#F1FA8C`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#50FA7B`,\"--shiki-dark\":`#50FA7B`},children:` \"author\"`}),_jsx(_components.span,{style:{color:`#8BE9FD`,\"--shiki-dark\":`#8BE9FD`},children:`:`}),_jsx(_components.span,{style:{color:`#E9F284`,\"--shiki-dark\":`#E9F284`},children:` \"`}),_jsx(_components.span,{style:{color:`#F1FA8C`,\"--shiki-dark\":`#F1FA8C`},children:`Jon Jagger \\\\u003cjon@jaggersoft.com\\\\u003e`}),_jsx(_components.span,{style:{color:`#E9F284`,\"--shiki-dark\":`#E9F284`},children:`\"`}),_jsx(_components.span,{style:{color:`#F1FA8C`,\"--shiki-dark\":`#F1FA8C`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#50FA7B`,\"--shiki-dark\":`#50FA7B`},children:` \"timestamp\"`}),_jsx(_components.span,{style:{color:`#8BE9FD`,\"--shiki-dark\":`#8BE9FD`},children:`:`}),_jsx(_components.span,{style:{color:`#F1FA8C`,\"--shiki-dark\":`#F1FA8C`},children:` 1733724563,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#50FA7B`,\"--shiki-dark\":`#50FA7B`},children:` \"branch\"`}),_jsx(_components.span,{style:{color:`#8BE9FD`,\"--shiki-dark\":`#8BE9FD`},children:`:`}),_jsx(_components.span,{style:{color:`#E9F284`,\"--shiki-dark\":`#E9F284`},children:` \"`}),_jsx(_components.span,{style:{color:`#F1FA8C`,\"--shiki-dark\":`#F1FA8C`},children:`master`}),_jsx(_components.span,{style:{color:`#E9F284`,\"--shiki-dark\":`#E9F284`},children:`\"`}),_jsx(_components.span,{style:{color:`#F1FA8C`,\"--shiki-dark\":`#F1FA8C`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#50FA7B`,\"--shiki-dark\":`#50FA7B`},children:` \"url\"`}),_jsx(_components.span,{style:{color:`#8BE9FD`,\"--shiki-dark\":`#8BE9FD`},children:`:`}),_jsx(_components.span,{style:{color:`#E9F284`,\"--shiki-dark\":`#E9F284`},children:` \"`}),_jsx(_components.span,{style:{color:`#F1FA8C`,\"--shiki-dark\":`#F1FA8C`},children:`https://github.com/kosli-dev/server/commit/fbb9e8000e2344323040e348a54b33ecbf67f273`}),_jsx(_components.span,{style:{color:`#E9F284`,\"--shiki-dark\":`#E9F284`},children:`\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#F8F8F2`,\"--shiki-dark\":`#F8F8F2`},children:` },`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#50FA7B`,\"--shiki-dark\":`#50FA7B`},children:` \"build_url\"`}),_jsx(_components.span,{style:{color:`#8BE9FD`,\"--shiki-dark\":`#8BE9FD`},children:`:`}),_jsx(_components.span,{style:{color:`#E9F284`,\"--shiki-dark\":`#E9F284`},children:` \"`}),_jsx(_components.span,{style:{color:`#F1FA8C`,\"--shiki-dark\":`#F1FA8C`},children:`https://github.com/cyber-dojo/differ/actions/runs/11777650898`}),_jsx(_components.span,{style:{color:`#E9F284`,\"--shiki-dark\":`#E9F284`},children:`\"`}),_jsx(_components.span,{style:{color:`#F1FA8C`,\"--shiki-dark\":`#F1FA8C`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#50FA7B`,\"--shiki-dark\":`#50FA7B`},children:` \"commit_url\"`}),_jsx(_components.span,{style:{color:`#8BE9FD`,\"--shiki-dark\":`#8BE9FD`},children:`:`}),_jsx(_components.span,{style:{color:`#E9F284`,\"--shiki-dark\":`#E9F284`},children:` \"`}),_jsx(_components.span,{style:{color:`#F1FA8C`,\"--shiki-dark\":`#F1FA8C`},children:`https://github.com/cyber-dojo/differ/commit/dde3b2a7dab8e4567038e4c66ac68f0f01d0f704`}),_jsx(_components.span,{style:{color:`#E9F284`,\"--shiki-dark\":`#E9F284`},children:`\"`}),_jsx(_components.span,{style:{color:`#F1FA8C`,\"--shiki-dark\":`#F1FA8C`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#50FA7B`,\"--shiki-dark\":`#50FA7B`},children:` \"repo_url\"`}),_jsx(_components.span,{style:{color:`#8BE9FD`,\"--shiki-dark\":`#8BE9FD`},children:`:`}),_jsx(_components.span,{style:{color:`#E9F284`,\"--shiki-dark\":`#E9F284`},children:` \"`}),_jsx(_components.span,{style:{color:`#F1FA8C`,\"--shiki-dark\":`#F1FA8C`},children:`https://github.com/kosli-dev/server`}),_jsx(_components.span,{style:{color:`#E9F284`,\"--shiki-dark\":`#E9F284`},children:`\"`}),_jsx(_components.span,{style:{color:`#F1FA8C`,\"--shiki-dark\":`#F1FA8C`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#50FA7B`,\"--shiki-dark\":`#50FA7B`},children:` \"template_reference_name\"`}),_jsx(_components.span,{style:{color:`#8BE9FD`,\"--shiki-dark\":`#8BE9FD`},children:`:`}),_jsx(_components.span,{style:{color:`#E9F284`,\"--shiki-dark\":`#E9F284`},children:` \"`}),_jsx(_components.span,{style:{color:`#F1FA8C`,\"--shiki-dark\":`#F1FA8C`},children:`differ`}),_jsx(_components.span,{style:{color:`#E9F284`,\"--shiki-dark\":`#E9F284`},children:`\"`}),_jsx(_components.span,{style:{color:`#F1FA8C`,\"--shiki-dark\":`#F1FA8C`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#50FA7B`,\"--shiki-dark\":`#50FA7B`},children:` \"trail_name\"`}),_jsx(_components.span,{style:{color:`#8BE9FD`,\"--shiki-dark\":`#8BE9FD`},children:`:`}),_jsx(_components.span,{style:{color:`#E9F284`,\"--shiki-dark\":`#E9F284`},children:` \"`}),_jsx(_components.span,{style:{color:`#F1FA8C`,\"--shiki-dark\":`#F1FA8C`},children:`dde3b2a7dab8e4567038e4c66ac68f0f01d0f704`}),_jsx(_components.span,{style:{color:`#E9F284`,\"--shiki-dark\":`#E9F284`},children:`\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#F8F8F2`,\"--shiki-dark\":`#F8F8F2`},children:`}`})}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#50FA7B`,\"--shiki-dark\":`#50FA7B`},children:`$`}),_jsx(_components.span,{style:{color:`#F1FA8C`,\"--shiki-dark\":`#F1FA8C`},children:` echo`}),_jsx(_components.span,{style:{color:`#BD93F9`,\"--shiki-light-font-style\":`italic`,\"--shiki-dark\":`#BD93F9`,\"--shiki-dark-font-style\":`italic`},children:` $?`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#50FA7B`,\"--shiki-dark\":`#50FA7B`},children:`0`})}),`\n`]})})})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"codeStyling":{"theme":"dracula","languages":{"custom":["/languages/rego.json"]}},"config":{},"pageMetadata":{"title":"Artifacts","description":"Learn how to attest artifacts to Kosli and establish binary provenance.","icon":"box","href":"/getting_started/artifacts"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Binary provenance","slug":"binary-provenance","depth":2,"children":[]},{"title":"Attesting artifacts","slug":"attesting-artifacts","depth":2,"children":[]},{"title":"The --dry-run flag","slug":"the-dry-run-flag","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":["/_mintlify/custom/kosli/a8952d14c382591c/termly.js"],"subdomain":"kosli","siteName":"Kosli Documentation","title":"Artifacts - Kosli Documentation","contextualStarterQuestions":[{"_id":"69f0d779fe9977b94da96a3a","deploymentId":"694a567a82866c4f503bbfbf","questionText":"How are artifacts uniquely identified?","status":"active","generatedBy":"contextual","path":"getting_started/artifacts","createdAt":"2026-04-28T15:51:21.342Z","updatedAt":"2026-04-28T15:51:21.342Z","__v":0},{"_id":"69f0d779fe9977b94da96a38","deploymentId":"694a567a82866c4f503bbfbf","questionText":"What is binary provenance?","status":"active","generatedBy":"contextual","path":"getting_started/artifacts","createdAt":"2026-04-28T15:51:21.342Z","updatedAt":"2026-04-28T15:51:21.342Z","__v":0},{"_id":"69f0d779fe9977b94da96a39","deploymentId":"694a567a82866c4f503bbfbf","questionText":"How do I attest artifacts to Kosli?","status":"active","generatedBy":"contextual","path":"getting_started/artifacts","createdAt":"2026-04-28T15:51:21.342Z","updatedAt":"2026-04-28T15:51:21.342Z","__v":0}],"navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-04-28T15:51:12.258Z","gitLastModified":"2026-04-28T15:50:41.000Z","originalFileLocation":"getting_started/artifacts.md"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Learn how to attest artifacts to Kosli and establish binary provenance.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Kosli Documentation\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/kosli/7UeZPXzpjJmWmx3T/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/kosli/7UeZPXzpjJmWmx3T/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/kosli/7UeZPXzpjJmWmx3T/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/kosli/7UeZPXzpjJmWmx3T/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/kosli/7UeZPXzpjJmWmx3T/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/kosli/7UeZPXzpjJmWmx3T/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/kosli/7UeZPXzpjJmWmx3T/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/kosli/7UeZPXzpjJmWmx3T/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/kosli/7UeZPXzpjJmWmx3T/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Artifacts - Kosli Documentation\">\u003cmeta data-mint-head property=\"og:description\" content=\"Learn how to attest artifacts to Kosli and establish binary provenance.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Kosli Documentation\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.kosli.com/getting_started/artifacts\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://kosli.mintlify.site/_mintlify/api/og/v2?division=Core+concepts\u0026amp;title=Artifacts\u0026amp;description=Learn+how+to+attest+artifacts+to+Kosli+and+establish+binary+provenance.\u0026amp;theme=de15800c9a14263532b067b8\u0026amp;signature=649f76f1701a25a0bec0de901e83d69c5ad72280133041780d3eb34329d66b91\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Artifacts - Kosli Documentation\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Learn how to attest artifacts to Kosli and establish binary provenance.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://kosli.mintlify.site/_mintlify/api/og/v2?division=Core+concepts\u0026amp;title=Artifacts\u0026amp;description=Learn+how+to+attest+artifacts+to+Kosli+and+establish+binary+provenance.\u0026amp;theme=de15800c9a14263532b067b8\u0026amp;signature=649f76f1701a25a0bec0de901e83d69c5ad72280133041780d3eb34329d66b91\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/kosli/7UeZPXzpjJmWmx3T/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Kosli Documentation\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#1C4BC6\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.kosli.com/getting_started/artifacts\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/getting_started/artifacts.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.kosli.com/#organization\",\"name\":\"Kosli Documentation\",\"url\":\"https://docs.kosli.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/kosli/Cee1LAu-Jhawp1Om/logo/kosli-logo-light-main.svg?fit=max\u0026auto=format\u0026n=Cee1LAu-Jhawp1Om\u0026q=85\u0026s=fb05fdbb0c9c9ae7da266a500eac2be6\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.kosli.com#website\",\"name\":\"Kosli Documentation\",\"url\":\"https://docs.kosli.com\",\"publisher\":{\"@id\":\"https://docs.kosli.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.kosli.com/getting_started/artifacts#webpage\",\"url\":\"https://docs.kosli.com/getting_started/artifacts\",\"name\":\"Artifacts\",\"description\":\"Learn how to attest artifacts to Kosli and establish binary provenance.\",\"dateModified\":\"2026-04-28T15:50:41.000Z\",\"isPartOf\":{\"@id\":\"https://docs.kosli.com#website\"},\"breadcrumb\":{\"@id\":\"https://docs.kosli.com/getting_started/artifacts#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.kosli.com/getting_started/artifacts#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Core concepts\",\"item\":\"https://docs.kosli.com/getting_started/flows\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Artifacts\",\"item\":\"https://docs.kosli.com/getting_started/artifacts\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.kosli.com/getting_started/artifacts#article\",\"headline\":\"Artifacts\",\"name\":\"Artifacts\",\"description\":\"Learn how to attest artifacts to Kosli and establish binary provenance.\",\"url\":\"https://docs.kosli.com/getting_started/artifacts\",\"mainEntityOfPage\":{\"@id\":\"https://docs.kosli.com/getting_started/artifacts#webpage\"},\"dateModified\":\"2026-04-28T15:50:41.000Z\",\"publisher\":{\"@id\":\"https://docs.kosli.com/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.kosli.com#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Kosli Documentation\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Kosli Documentation","nav":{"global":null,"tabs":[{"tab":"Discover Kosli","groups":[{"group":"Understand Kosli","pages":[{"title":"What is Kosli?","icon":"lightbulb","href":"/understand_kosli/what_is_kosli"},{"title":"How Kosli works","icon":"gears","href":"/understand_kosli/how_kosli_works"},{"title":"Glossary","icon":"book","href":"/understand_kosli/glossary"}]},{"group":"Get started","pages":[{"title":"Install Kosli CLI","icon":"download","href":"/getting_started/install"},{"title":"Authenticating to Kosli","icon":"key","href":"/getting_started/authenticating_to_kosli"},{"title":"Using Kosli CLI with an HTTP proxy","icon":"network-wired","href":"/tutorials/cli_and_http_proxy"},{"title":"Try Kosli locally","icon":"laptop-code","href":"/tutorials/try_kosli_locally"}]},{"group":"Core concepts","pages":[{"title":"Flows","icon":"wave-sine","href":"/getting_started/flows"},{"title":"Trails","description":"Learn about Kosli Trails, how to create and manage them.","icon":"route","href":"/getting_started/trails"},{"title":"Artifacts","icon":"box","href":"/getting_started/artifacts"},{"title":"Attestations","description":"Learn how to make attestations to Kosli to prove compliance in your software supply chain.","icon":"receipt","href":"/getting_started/attestations"},{"title":"Environments","icon":"layer-group","href":"/getting_started/environments"},{"title":"Environment Policies","icon":"scroll","href":"/getting_started/policies"}]},{"group":"Learning labs","pages":[{"title":"Kosli Learning Labs","icon":"flask","href":"/labs/index"},{"title":"Lab 1: Get Ready","icon":"rocket","href":"/labs/lab-01-get-ready"},{"title":"Lab 2: Flows and Trails","icon":"code-branch","href":"/labs/lab-02-flows-and-trails"},{"title":"Lab 3: Build Controls","icon":"shield-check","href":"/labs/lab-03-build-controls"},{"title":"Lab 4: Release Controls","icon":"lock","href":"/labs/lab-04-release-controls"},{"title":"Lab 5: Runtime Controls","icon":"server","href":"/labs/lab-05-runtime-controls"}]},{"group":"Help and troubleshooting","pages":[{"title":"FAQ","href":"/faq/faq"},{"title":"What do I do if Kosli is down?","href":"/troubleshooting/what_do_i_do_if_kosli_is_down"},{"title":"AI access to these docs","href":"/understand_kosli/ai_docs_access"},{"group":"Common CLI errors","pages":[{"title":"Docker API version error in GitHub Actions","href":"/troubleshooting/docker_api_version_error"},{"title":"Repo digest unavailable","href":"/troubleshooting/repo_digest_unavailable"},{"title":"GitHub can't see KOSLI_API_TOKEN secret","href":"/troubleshooting/github_kosli_api_token"},{"title":"CLI in subshell captures stderr","href":"/troubleshooting/subshell_stderr"},{"title":"zsh: no such user or named directory","href":"/troubleshooting/zsh_no_such_user"},{"title":"Path/Image name is a single whitespace character","href":"/troubleshooting/whitespace_path"}]}]}]},{"tab":"Platform administration","pages":[{"title":"Platform administration","href":"/user/default_organization"}]},{"tab":"Risks and controls","pages":[{"title":"Risks and controls","href":"/understand_kosli/risks"}]},{"tab":"Environments and runtime","pages":[{"title":"Environments and runtime","href":"/administration/managing_environments/overview"}]},{"tab":"Record evidence","pages":[{"title":"Record evidence","href":"/tutorials/organizing_with_spaces"}]},{"tab":"Reference","menu":[{"item":"CLI Reference","icon":"terminal","pages":[{"title":"CLI Reference","href":"/client_reference/overview"}]},{"item":"API Reference","icon":"code","pages":[{"title":"API Reference","href":"/api-reference/overview"}]},{"item":"GitHub Action Reference","icon":"github","pages":[{"title":"GitHub Action Reference","href":"/github-action-reference/setup_cli_action"}]},{"item":"Terraform Reference","icon":"cubes","pages":[{"title":"Terraform Reference","href":"/terraform-reference"}]},{"item":"Helm Reference","icon":"layer-group","pages":[{"title":"Helm Reference","href":"/helm/k8s_reporter/overview"}]},{"item":"Template Reference","icon":"file-code","pages":[{"title":"Template Reference","href":"/template-reference/flow_template"}]},{"item":"Policy Reference","icon":"scroll","pages":[{"title":"Policy Reference","href":"/policy-reference/environment_policy"}]}],"pages":[{"title":"Reference","href":"/client_reference/overview"}]},{"tab":"Changelog","icon":"clock","pages":[{"title":"Changelog","href":"/changelog"}]}]},"basePath":"","title":"Artifacts - Kosli Documentation","buildId":"dpl_42LwxxU1kGN114H4XzwGYXa9ZDah","deploymentId":"dpl_42LwxxU1kGN114H4XzwGYXa9ZDah","dynamics":[],"chunks":[]}