This tutorial shows you how to use Kosli’s query commands to search for artifacts, inspect their history, and browse runtime environment snapshots.
get, list, log, and diff commands let you query everything Kosli knows about your artifacts and environments directly from your terminal.
By the end of this tutorial, you will have searched for an artifact by commit SHA, inspected its full history, browsed environment snapshots, and compared two snapshots to see what changed.We will query cyber-dojo, an open-source project whose Kosli data is public.
export KOSLI_ORG=cyber-dojo# cyber-dojo is public, so the token is not checked; the CLI only needs a non-empty valueexport KOSLI_API_TOKEN=ignored
cyber-dojo is a public organization, so you can follow this tutorial before you have a token of your own. When you query your own organization, replace ignored with a real API token.
If you have a git commit SHA, kosli search will find any artifact built from it:
kosli search 99d7b74
Search result resolved to commit 99d7b74f39e311d492902ad48dbe97da63f2c687Name: 244531986313.dkr.ecr.eu-central-1.amazonaws.com/creator:99d7b74Fingerprint: a39fa3230549d3c6cb1732cc929c4e21041a09a21b2bb692cd37c9afe5fcd424Has provenance: trueFlow: creator-ciGit commit: 99d7b74f39e311d492902ad48dbe97da63f2c687Commit URL: https://github.com/cyber-dojo/creator/commit/99d7b74f39e311d492902ad48dbe97da63f2c687Build URL: https://github.com/cyber-dojo/creator/actions/runs/34443243072Artifact URL: https://app.kosli.com/cyber-dojo/flows/creator-ci/artifacts/a39fa3230549d3c6cb1732cc929c4e21041a09a21b2bb692cd37c9afe5fcd424Compliance state: COMPLIANTRunning in: [ aws-beta, aws-prod ]Exited from: [ ]History: Commit 99d7b74 Thu, 10 Sep 2026 07:58:56 CEST Artifact created Thu, 10 Sep 2026 08:01:20 CEST Started running in aws-beta#8339 environment Thu, 10 Sep 2026 08:06:24 CEST Started running in aws-prod#5349 environment Thu, 10 Sep 2026 08:55:58 CEST[... further artifacts for this commit ...]
One commit can produce several artifacts, and kosli search prints each one as its own block. Here the same commit also produced Terraform state artifacts in other flows; those blocks are trimmed from the output above.
The search result tells us this artifact belongs to the creator-ci flow. If you don’t know which flows exist in your org, you can list them all:
kosli list flows
NAME DESCRIPTION VISIBILITY TAGScreator-ci UX for Group/Kata creation private [ci=github], [repo_url=https://github.com/cyber-dojo/creator], [kind=build], [env=aws-beta]custom-start-points-ci Custom exercises choices private [ci=github], [repo_url=https://github.com/cyber-dojo/custom-start-points], [kind=build], [env=aws-beta]dashboard-ci UX for a group practice dashboard private [ci=github], [repo_url=https://github.com/cyber-dojo/dashboard], [kind=build], [env=aws-beta]differ-ci Diff files from two traffic-lights private [ci=github], [repo_url=https://github.com/cyber-dojo/differ], [kind=build], [env=aws-beta][...]web-ci UX for practicing TDD private [ci=github], [repo_url=https://github.com/cyber-dojo/web], [kind=build], [env=aws-beta]
The VISIBILITY column is a legacy per-flow field and does not affect who can read a flow. Access is determined by the organization’s visibility. cyber-dojo is a public organization, so every flow listed here is readable without a real token.Once you know the flow name, you can list the artifacts reported to it:
kosli list artifacts --flow creator-ci
COMMIT ARTIFACT STATE CREATED_AT99d7b74 Name: 244531986313.dkr.ecr.eu-central-1.amazonaws.com/creator:99d7b74 COMPLIANT Thu, 10 Sep 2026 08:01:20 CEST Fingerprint: a39fa3230549d3c6cb1732cc929c4e21041a09a21b2bb692cd37c9afe5fcd424abdc613 Name: 244531986313.dkr.ecr.eu-central-1.amazonaws.com/creator:abdc613 COMPLIANT Mon, 07 Sep 2026 12:56:13 CEST Fingerprint: ba988cfdac64da22bc8268442c467504fe8df565e65c2f3c4344ce00c83e561ab1e77bf Name: 244531986313.dkr.ecr.eu-central-1.amazonaws.com/creator:b1e77bf COMPLIANT Thu, 03 Sep 2026 16:53:05 CEST Fingerprint: 3e2248d4cd5715c23ef4b322291cc34b48c741f5ea299f8681349529b0829d56[...]
By default, the last 15 artifacts are shown. Use to change how many are shown, to paginate, and to change the format.
Now that you can see individual snapshots, you can also diff two of them to find out exactly what changed between any two points in time. Comparing snapshot #8339 with the one before it shows the creator deployment:
kosli diff snapshots aws-beta#8339 aws-beta#8338
Only present in aws-beta#8339 Name: 244531986313.dkr.ecr.eu-central-1.amazonaws.com/creator:99d7b74@sha256:a39fa3230549d3c6cb1732cc929c4e21041a09a21b2bb692cd37c9afe5fcd424 Fingerprint: a39fa3230549d3c6cb1732cc929c4e21041a09a21b2bb692cd37c9afe5fcd424 Flow: creator-ci Commit URL: https://github.com/cyber-dojo/creator/commit/99d7b74f39e311d492902ad48dbe97da63f2c687 Started: Thu, 10 Sep 2026 08:06:01 CEST • 4 days ago Instances: 1
Relative references work here too. kosli diff snapshots aws-beta aws-beta~1 compares the two most recent snapshots. If the same artifacts are running in both, the command prints nothing; add --show-unchanged to list the artifacts that are present in both.You can also diff two different environments to see what’s running in one but not the other:
The human-readable output you see above (tables, COMPLIANT/NON-COMPLIANT labels, history lines, etc.) is intended for people, not scripts. The exact wording, casing, and field labels may change between CLI versions to improve clarity or to stay aligned with the UI, and parsing this text in scripts or CI gates will silently break when it does.If you need to act on Kosli data programmatically — for example, to fail a pipeline when an artifact is non-compliant — use one of the stable interfaces instead:
Exit codes. Commands like kosli assert exit non-zero when the assertion fails, so you can branch on $? directly without parsing any output.
Structured output. Pass --output json to any get, list, search, or diff command and read the documented JSON fields (e.g. compliant) rather than grepping the text rendering.
As a rule of thumb: if you’re tempted to grep COMPLIANT or grep NON-COMPLIANT in a script, switch to the exit-code check or JSON field - it will keep working across CLI upgrades.
You have searched for an artifact by commit SHA, inspected a flow’s artifact list, fetched an artifact’s full history, browsed environment snapshots, and diffed two snapshots to see exactly what changed.From here you can:
{"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":"6aeefa64ff56dc66d2b6bccc","clientVersion":"0.0.4087","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":"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},{"name":"comment-mode","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":"tutorials/querying_kosli","slug":"/tutorials/querying_kosli","pageMetadata":{"title":"Querying Kosli","description":"This tutorial shows you how to use Kosli's query commands to search for artifacts, inspect their history, and browse runtime environment snapshots.","href":"/tutorials/querying_kosli"},"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: \"This tutorial shows you how to use Kosli’s query commands to search for artifacts, inspect their history, and browse runtime environment snapshots.\"\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`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,ul:`ul`,..._provideComponents(),...props.components},{CodeBlock,Heading,Tooltip}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Tooltip)_missingMdxReference(`Tooltip`,true);return _jsxs(_Fragment,{children:[_jsxs(_components.p,{children:[_jsx(_components.code,{children:`get`}),`, `,_jsx(_components.code,{children:`list`}),`, `,_jsx(_components.code,{children:`log`}),`, and `,_jsx(_components.code,{children:`diff`}),` commands let you query everything Kosli knows about your artifacts and environments directly from your terminal.\nBy the end of this tutorial, you will have searched for an artifact by commit SHA, inspected its full history, browsed environment snapshots, and compared two snapshots to see what changed.`]}),`\n`,_jsxs(_components.p,{children:[`We will query `,_jsx(_components.strong,{children:`cyber-dojo`}),`, an open-source project whose Kosli data is public.`]}),`\n`,_jsx(Heading,{level:`2`,id:`prerequisites`,children:`Prerequisites`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.a,{href:`/getting_started/install`,children:`Install Kosli CLI`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`Optional: `,_jsx(_components.a,{href:`/getting_started/authenticating_to_kosli`,children:`get a Kosli API token`}),`. You need one to query your own organization, but not for this tutorial.`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`setup`,children:`Setup`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`3`,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:`3`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#FF79C6`,\"--shiki-dark\":`#FF79C6`},children:`export`}),_jsx(_components.span,{style:{color:`#BD93F9`,\"--shiki-dark\":`#BD93F9`},children:` KOSLI_ORG`}),_jsx(_components.span,{style:{color:`#FF79C6`,\"--shiki-dark\":`#FF79C6`},children:`=`}),_jsx(_components.span,{style:{color:`#BD93F9`,\"--shiki-dark\":`#BD93F9`},children:`cyber-dojo`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6272A4`,\"--shiki-dark\":`#6272A4`},children:`# cyber-dojo is public, so the token is not checked; the CLI only needs a non-empty value`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#FF79C6`,\"--shiki-dark\":`#FF79C6`},children:`export`}),_jsx(_components.span,{style:{color:`#BD93F9`,\"--shiki-dark\":`#BD93F9`},children:` KOSLI_API_TOKEN`}),_jsx(_components.span,{style:{color:`#FF79C6`,\"--shiki-dark\":`#FF79C6`},children:`=`}),_jsx(_components.span,{style:{color:`#BD93F9`,\"--shiki-dark\":`#BD93F9`},children:`ignored`})]}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`cyber-dojo is a public organization, so you can follow this tutorial before you have a token of your own. When you query your own organization, replace `,_jsx(_components.code,{children:`ignored`}),` with a real API token.`]}),`\n`,_jsx(Heading,{level:`2`,id:`search-by-commit-sha`,children:`Search by commit SHA`}),`\n`,_jsxs(_components.p,{children:[`If you have a git commit SHA, `,_jsx(_components.code,{children:`kosli search`}),` will find any artifact built from it:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`1`,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:`1`,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:` search`}),_jsx(_components.span,{style:{color:`#F1FA8C`,\"--shiki-dark\":`#F1FA8C`},children:` 99d7b74`})]}),`\n`]})})}),`\n`,_jsx(CodeBlock,{numberOfLines:`20`,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:`20`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Search result resolved to commit 99d7b74f39e311d492902ad48dbe97da63f2c687`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Name: 244531986313.dkr.ecr.eu-central-1.amazonaws.com/creator:99d7b74`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Fingerprint: a39fa3230549d3c6cb1732cc929c4e21041a09a21b2bb692cd37c9afe5fcd424`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Has provenance: true`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Flow: creator-ci`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Git commit: 99d7b74f39e311d492902ad48dbe97da63f2c687`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Commit URL: https://github.com/cyber-dojo/creator/commit/99d7b74f39e311d492902ad48dbe97da63f2c687`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Build URL: https://github.com/cyber-dojo/creator/actions/runs/34443243072`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Artifact URL: https://app.kosli.com/cyber-dojo/flows/creator-ci/artifacts/a39fa3230549d3c6cb1732cc929c4e21041a09a21b2bb692cd37c9afe5fcd424`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Compliance state: COMPLIANT`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Running in: [ aws-beta, aws-prod ]`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Exited from: [ ]`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`History:`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` Commit 99d7b74 Thu, 10 Sep 2026 07:58:56 CEST`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` Artifact created Thu, 10 Sep 2026 08:01:20 CEST`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` Started running in aws-beta#8339 environment Thu, 10 Sep 2026 08:06:24 CEST`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` Started running in aws-prod#5349 environment Thu, 10 Sep 2026 08:55:58 CEST`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`[... further artifacts for this commit ...]`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsxs(_components.p,{children:[`One commit can produce several artifacts, and `,_jsx(_components.code,{children:`kosli search`}),` prints each one as its own block. Here the same commit also produced Terraform state artifacts in other flows; those blocks are trimmed from the output above.`]}),`\n`,_jsx(Heading,{level:`2`,id:`list-flows-and-artifacts`,children:`List flows and artifacts`}),`\n`,_jsxs(_components.p,{children:[`The search result tells us this artifact belongs to the `,_jsx(_components.code,{children:`creator-ci`}),` flow. If you don’t know which flows exist in your org, you can list them all:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`1`,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:`1`,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:` list`}),_jsx(_components.span,{style:{color:`#F1FA8C`,\"--shiki-dark\":`#F1FA8C`},children:` flows`})]}),`\n`]})})}),`\n`,_jsx(CodeBlock,{numberOfLines:`8`,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:`8`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`NAME DESCRIPTION VISIBILITY TAGS`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`creator-ci UX for Group/Kata creation private [ci=github], [repo_url=https://github.com/cyber-dojo/creator], [kind=build], [env=aws-beta]`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`custom-start-points-ci Custom exercises choices private [ci=github], [repo_url=https://github.com/cyber-dojo/custom-start-points], [kind=build], [env=aws-beta]`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`dashboard-ci UX for a group practice dashboard private [ci=github], [repo_url=https://github.com/cyber-dojo/dashboard], [kind=build], [env=aws-beta]`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`differ-ci Diff files from two traffic-lights private [ci=github], [repo_url=https://github.com/cyber-dojo/differ], [kind=build], [env=aws-beta]`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`[...]`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`web-ci UX for practicing TDD private [ci=github], [repo_url=https://github.com/cyber-dojo/web], [kind=build], [env=aws-beta]`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsxs(_components.p,{children:[`The `,_jsx(_components.code,{children:`VISIBILITY`}),` column is a legacy per-flow field and does not affect who can read a flow. Access is determined by the organization’s visibility. cyber-dojo is a public organization, so every flow listed here is readable without a real token.`]}),`\n`,_jsx(_components.p,{children:`Once you know the flow name, you can list the artifacts reported to it:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`1`,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:`1`,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:` list`}),_jsx(_components.span,{style:{color:`#F1FA8C`,\"--shiki-dark\":`#F1FA8C`},children:` artifacts`}),_jsx(_components.span,{style:{color:`#BD93F9`,\"--shiki-dark\":`#BD93F9`},children:` --flow`}),_jsx(_components.span,{style:{color:`#F1FA8C`,\"--shiki-dark\":`#F1FA8C`},children:` creator-ci`})]}),`\n`]})})}),`\n`,_jsx(CodeBlock,{numberOfLines:`11`,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:`11`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`COMMIT ARTIFACT STATE CREATED_AT`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`99d7b74 Name: 244531986313.dkr.ecr.eu-central-1.amazonaws.com/creator:99d7b74 COMPLIANT Thu, 10 Sep 2026 08:01:20 CEST`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` Fingerprint: a39fa3230549d3c6cb1732cc929c4e21041a09a21b2bb692cd37c9afe5fcd424`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`abdc613 Name: 244531986313.dkr.ecr.eu-central-1.amazonaws.com/creator:abdc613 COMPLIANT Mon, 07 Sep 2026 12:56:13 CEST`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` Fingerprint: ba988cfdac64da22bc8268442c467504fe8df565e65c2f3c4344ce00c83e561a`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`b1e77bf Name: 244531986313.dkr.ecr.eu-central-1.amazonaws.com/creator:b1e77bf COMPLIANT Thu, 03 Sep 2026 16:53:05 CEST`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` Fingerprint: 3e2248d4cd5715c23ef4b322291cc34b48c741f5ea299f8681349529b0829d56`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`[...]`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsxs(_components.p,{children:[`By default, the last 15 artifacts are shown. Use `,_jsx(Tooltip,{tip:`Limit results per page, e.g. -n 5 to show only 5 artifacts.`,children:`-n`}),` to change how many are shown, `,_jsx(Tooltip,{tip:`Select a page of results, e.g. --page 2 to see the next page.`,children:`—page`}),` to paginate, and `,_jsx(Tooltip,{tip:`Change the output format, e.g. --output json to get JSON instead of a table.`,children:`—output`}),` to change the format.`]}),`\n`,_jsx(Heading,{level:`2`,id:`get-an-artifact`,children:`Get an artifact`}),`\n`,_jsxs(_components.p,{children:[`The artifact list gives you commit SHAs and fingerprints. Use either to fetch the full history of a specific artifact — the syntax is `,_jsx(Tooltip,{tip:`Use flow:sha to identify by commit SHA (e.g. creator-ci:99d7b74), or flow@fingerprint to identify by fingerprint (e.g. creator-ci@a39fa32...).`,children:`flow:sha or flow@fingerprint`}),`:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`1`,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:`1`,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:` get`}),_jsx(_components.span,{style:{color:`#F1FA8C`,\"--shiki-dark\":`#F1FA8C`},children:` artifact`}),_jsx(_components.span,{style:{color:`#F1FA8C`,\"--shiki-dark\":`#F1FA8C`},children:` creator-ci:99d7b74`})]}),`\n`]})})}),`\n`,_jsx(CodeBlock,{numberOfLines:`24`,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:`24`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Name: 244531986313.dkr.ecr.eu-central-1.amazonaws.com/creator:99d7b74`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Flow: creator-ci`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Trail: 99d7b74f39e311d492902ad48dbe97da63f2c687`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Name in template: creator`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Fingerprint: a39fa3230549d3c6cb1732cc929c4e21041a09a21b2bb692cd37c9afe5fcd424`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Created on: Thu, 10 Sep 2026 08:01:20 CEST • 4 days ago`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Git commit: 99d7b74f39e311d492902ad48dbe97da63f2c687`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Commit URL: https://github.com/cyber-dojo/creator/commit/99d7b74f39e311d492902ad48dbe97da63f2c687`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Build URL: https://github.com/cyber-dojo/creator/actions/runs/34443243072`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Artifact URL: https://app.kosli.com/cyber-dojo/flows/creator-ci/artifacts/a39fa3230549d3c6cb1732cc929c4e21041a09a21b2bb692cd37c9afe5fcd424`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`State: COMPLIANT`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Running in environments: aws-beta#8339, aws-prod#5349`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`History:`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` creator reported Thu, 10 Sep 2026 08:01:20 CEST`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` Attestation creator.provenance-facts (custom:provenance-facts) Thu, 10 Sep 2026 08:01:22 CEST`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` Attestation creator.provenance-decision (decision) Thu, 10 Sep 2026 08:01:28 CEST`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` Attestation creator.sbom-facts (custom:sbom-facts) Thu, 10 Sep 2026 08:01:31 CEST`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` Attestation creator.sbom-decision (decision) Thu, 10 Sep 2026 08:01:44 CEST`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` Attestation creator.snyk-container-scan (decision) Thu, 10 Sep 2026 08:03:10 CEST`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` Attestation creator.unit-test (junit) Thu, 10 Sep 2026 08:03:52 CEST`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` Attestation creator.unit-test-coverage (generic) Thu, 10 Sep 2026 08:03:54 CEST`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` Deployment of creator in aws-beta#8339 Thu, 10 Sep 2026 08:06:24 CEST`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` Deployment of creator in aws-prod#5349 Thu, 10 Sep 2026 08:55:58 CEST`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsx(Heading,{level:`2`,id:`browse-environment-snapshots`,children:`Browse environment snapshots`}),`\n`,_jsxs(_components.p,{children:[`The artifact history shows it was deployed to `,_jsx(_components.code,{children:`aws-beta`}),` and `,_jsx(_components.code,{children:`aws-prod`}),`. To explore those environments, start by listing what Kosli knows about them:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`1`,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:`1`,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:` list`}),_jsx(_components.span,{style:{color:`#F1FA8C`,\"--shiki-dark\":`#F1FA8C`},children:` environments`})]}),`\n`]})})}),`\n`,_jsx(CodeBlock,{numberOfLines:`8`,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:`8`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`NAME TYPE LAST REPORT LAST MODIFIED TAGS POLICIES`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`aws-beta ECS 2026-09-14T11:27:23+02:00 2026-09-14T11:27:23+02:00 [url=https://beta.cyber-dojo.org/] [provenance pull-request snyk-scan-aws-beta trail-compliance-aws-beta]`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`aws-beta-terraform-drift-detection server 2026-09-14T11:25:08+02:00 2026-09-14T11:25:08+02:00 [provenance]`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`aws-prod ECS 2026-09-14T11:26:58+02:00 2026-09-14T11:26:58+02:00 [url=https://cyber-dojo.org/] [production-promotion provenance pull-request snyk-scan-aws-prod trail-compliance-aws-prod]`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`aws-prod-terraform-drift-detection server 2026-09-14T11:23:32+02:00 2026-09-14T11:23:32+02:00 [provenance]`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`production logical 2026-09-14T09:04:58+02:00 []`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`staging logical 2026-09-14T09:05:24+02:00 []`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsx(_components.p,{children:`To browse the history of changes in an environment:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`1`,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:`1`,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:` list`}),_jsx(_components.span,{style:{color:`#F1FA8C`,\"--shiki-dark\":`#F1FA8C`},children:` snapshots`}),_jsx(_components.span,{style:{color:`#F1FA8C`,\"--shiki-dark\":`#F1FA8C`},children:` aws-beta`})]}),`\n`]})})}),`\n`,_jsx(CodeBlock,{numberOfLines:`7`,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:`7`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`SNAPSHOT FROM TO DURATION COMPLIANT`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`8372 Mon, 14 Sep 2026 09:05:24 CEST now 2 hours true`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`8371 Mon, 14 Sep 2026 09:04:24 CEST Mon, 14 Sep 2026 09:05:24 CEST about a minute true`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`8370 Mon, 14 Sep 2026 09:01:23 CEST Mon, 14 Sep 2026 09:04:24 CEST 3 minutes true`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`8369 Mon, 14 Sep 2026 09:00:24 CEST Mon, 14 Sep 2026 09:01:23 CEST 59 seconds true`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`...`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsxs(_components.p,{children:[`To see what was running in a specific snapshot, for example `,_jsx(_components.code,{children:`#8339`}),`, where the `,_jsx(_components.code,{children:`creator`}),` artifact above started running:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`1`,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:`1`,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:` get`}),_jsx(_components.span,{style:{color:`#F1FA8C`,\"--shiki-dark\":`#F1FA8C`},children:` snapshot`}),_jsx(_components.span,{style:{color:`#F1FA8C`,\"--shiki-dark\":`#F1FA8C`},children:` aws-beta#8339`})]}),`\n`]})})}),`\n`,_jsx(CodeBlock,{numberOfLines:`8`,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:`8`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`COMMIT ARTIFACT FLOW COMPLIANCE RUNNING_SINCE REPLICAS`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`99d7b74 Name: 244531986313.dkr.ecr.eu-central-1.amazonaws.com/creator:99d7b74@sha256:a39fa3230549d3c6cb1732cc929c4e21041a09a21b2bb692cd37c9afe5fcd424 creator-ci COMPLIANT 4 days ago 1`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` Fingerprint: a39fa3230549d3c6cb1732cc929c4e21041a09a21b2bb692cd37c9afe5fcd424`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`06dc33a Name: 244531986313.dkr.ecr.eu-central-1.amazonaws.com/differ:06dc33a@sha256:dbd68f81c38a9bdbccac20e2ca5c23c6377a7093b0c7e5730156431eb06d64cf differ-ci COMPLIANT 5 days ago 1`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` Fingerprint: dbd68f81c38a9bdbccac20e2ca5c23c6377a7093b0c7e5730156431eb06d64cf`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`[...]`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsxs(_components.p,{children:[`You can also reference snapshots relatively — `,_jsx(_components.code,{children:`aws-beta~1`}),` means one behind the current snapshot, `,_jsx(_components.code,{children:`aws-beta~19`}),` means 19 behind.`]}),`\n`,_jsx(Heading,{level:`2`,id:`compare-snapshots`,children:`Compare snapshots`}),`\n`,_jsxs(_components.p,{children:[`Now that you can see individual snapshots, you can also diff two of them to find out exactly what changed between any two points in time. Comparing snapshot `,_jsx(_components.code,{children:`#8339`}),` with the one before it shows the `,_jsx(_components.code,{children:`creator`}),` deployment:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`1`,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:`1`,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:` diff`}),_jsx(_components.span,{style:{color:`#F1FA8C`,\"--shiki-dark\":`#F1FA8C`},children:` snapshots`}),_jsx(_components.span,{style:{color:`#F1FA8C`,\"--shiki-dark\":`#F1FA8C`},children:` aws-beta#8339`}),_jsx(_components.span,{style:{color:`#F1FA8C`,\"--shiki-dark\":`#F1FA8C`},children:` aws-beta#8338`})]}),`\n`]})})}),`\n`,_jsx(CodeBlock,{numberOfLines:`9`,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:`9`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`Only present in aws-beta#8339`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` Name: 244531986313.dkr.ecr.eu-central-1.amazonaws.com/creator:99d7b74@sha256:a39fa3230549d3c6cb1732cc929c4e21041a09a21b2bb692cd37c9afe5fcd424`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` Fingerprint: a39fa3230549d3c6cb1732cc929c4e21041a09a21b2bb692cd37c9afe5fcd424`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` Flow: creator-ci`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` Commit URL: https://github.com/cyber-dojo/creator/commit/99d7b74f39e311d492902ad48dbe97da63f2c687`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` Started: Thu, 10 Sep 2026 08:06:01 CEST • 4 days ago`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:` Instances: 1`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsxs(_components.p,{children:[`Relative references work here too. `,_jsx(_components.code,{children:`kosli diff snapshots aws-beta aws-beta~1`}),` compares the two most recent snapshots. If the same artifacts are running in both, the command prints nothing; add `,_jsx(_components.code,{children:`--show-unchanged`}),` to list the artifacts that are present in both.`]}),`\n`,_jsx(_components.p,{children:`You can also diff two different environments to see what’s running in one but not the other:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`1`,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:`1`,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:` diff`}),_jsx(_components.span,{style:{color:`#F1FA8C`,\"--shiki-dark\":`#F1FA8C`},children:` snapshots`}),_jsx(_components.span,{style:{color:`#F1FA8C`,\"--shiki-dark\":`#F1FA8C`},children:` aws-beta~3`}),_jsx(_components.span,{style:{color:`#F1FA8C`,\"--shiki-dark\":`#F1FA8C`},children:` aws-prod`})]}),`\n`]})})}),`\n`,_jsx(Heading,{level:`2`,id:`don’t-parse-the-raw-cli-output`,children:`Don’t parse the raw CLI output`}),`\n`,_jsxs(_components.p,{children:[`The human-readable output you see above (tables, `,_jsx(_components.code,{children:`COMPLIANT`}),`/`,_jsx(_components.code,{children:`NON-COMPLIANT`}),` labels, history lines, etc.) is intended for people, not scripts. The exact wording, casing, and field labels may change between CLI versions to improve clarity or to stay aligned with the UI, and parsing this text in scripts or CI gates will silently break when it does.`]}),`\n`,_jsx(_components.p,{children:`If you need to act on Kosli data programmatically — for example, to fail a pipeline when an artifact is non-compliant — use one of the stable interfaces instead:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Exit codes.`}),` Commands like `,_jsx(_components.code,{children:`kosli assert`}),` exit non-zero when the assertion fails, so you can branch on `,_jsx(_components.code,{children:`$?`}),` directly without parsing any output.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Structured output.`}),` Pass `,_jsx(_components.code,{children:`--output json`}),` to any `,_jsx(_components.code,{children:`get`}),`, `,_jsx(_components.code,{children:`list`}),`, `,_jsx(_components.code,{children:`search`}),`, or `,_jsx(_components.code,{children:`diff`}),` command and read the documented JSON fields (e.g. `,_jsx(_components.code,{children:`compliant`}),`) rather than grepping the text rendering.`]}),`\n`]}),`\n`,_jsxs(_components.p,{children:[`As a rule of thumb: if you’re tempted to `,_jsx(_components.code,{children:`grep COMPLIANT`}),` or `,_jsx(_components.code,{children:`grep NON-COMPLIANT`}),` in a script, switch to the exit-code check or JSON field - it will keep working across CLI upgrades.`]}),`\n`,_jsx(Heading,{level:`2`,id:`what-you’ve-accomplished`,children:`What you’ve accomplished`}),`\n`,_jsx(_components.p,{children:`You have searched for an artifact by commit SHA, inspected a flow’s artifact list, fetched an artifact’s full history, browsed environment snapshots, and diffed two snapshots to see exactly what changed.`}),`\n`,_jsx(_components.p,{children:`From here you can:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`Learn more about `,_jsx(_components.a,{href:`/client_reference/kosli_search`,children:_jsx(_components.code,{children:`kosli search`})}),`, `,_jsx(_components.a,{href:`/client_reference/kosli_get_artifact`,children:_jsx(_components.code,{children:`kosli get artifact`})}),`, and `,_jsx(_components.a,{href:`/client_reference/kosli_diff_snapshots`,children:_jsx(_components.code,{children:`kosli diff snapshots`})}),` in the CLI reference`]}),`\n`,_jsxs(_components.li,{children:[`See a real end-to-end example in the `,_jsx(_components.a,{href:`/tutorials/following_a_git_commit_to_runtime_environments`,children:`From commit to production`}),` tutorial`]}),`\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":"Querying Kosli","description":"This tutorial shows you how to use Kosli's query commands to search for artifacts, inspect their history, and browse runtime environment snapshots.","href":"/tutorials/querying_kosli"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Prerequisites","slug":"prerequisites","depth":2,"children":[]},{"title":"Setup","slug":"setup","depth":2,"children":[]},{"title":"Search by commit SHA","slug":"search-by-commit-sha","depth":2,"children":[]},{"title":"List flows and artifacts","slug":"list-flows-and-artifacts","depth":2,"children":[]},{"title":"Get an artifact","slug":"get-an-artifact","depth":2,"children":[]},{"title":"Browse environment snapshots","slug":"browse-environment-snapshots","depth":2,"children":[]},{"title":"Compare snapshots","slug":"compare-snapshots","depth":2,"children":[]},{"title":"Don’t parse the raw CLI output","slug":"don’t-parse-the-raw-cli-output","depth":2,"children":[]},{"title":"What you’ve accomplished","slug":"what-you’ve-accomplished","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":["/_mintlify/custom/kosli/a8952d14c382591c/termly.js"],"subdomain":"kosli","siteName":"Kosli Documentation","title":"Querying Kosli - Kosli Documentation","contextualStarterQuestions":[{"_id":"6aa7f299cfb16727db6ea7e1","deploymentId":"694a567a82866c4f503bbfbf","questionText":"How do I search by commit SHA?","status":"active","generatedBy":"contextual","path":"tutorials/querying_kosli","createdAt":"2026-09-14T13:11:53.099Z","updatedAt":"2026-09-14T13:11:53.099Z","__v":0},{"_id":"6aa7f299cfb16727db6ea7e2","deploymentId":"694a567a82866c4f503bbfbf","questionText":"What query commands does Kosli have?","status":"active","generatedBy":"contextual","path":"tutorials/querying_kosli","createdAt":"2026-09-14T13:11:53.099Z","updatedAt":"2026-09-14T13:11:53.099Z","__v":0},{"_id":"6aa7f299cfb16727db6ea7e3","deploymentId":"694a567a82866c4f503bbfbf","questionText":"How do I compare environment snapshots?","status":"active","generatedBy":"contextual","path":"tutorials/querying_kosli","createdAt":"2026-09-14T13:11:53.099Z","updatedAt":"2026-09-14T13:11:53.099Z","__v":0}],"navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-09-14T13:11:38.621Z","gitLastModified":"2026-09-14T13:11:15.000Z","originalFileLocation":"tutorials/querying_kosli.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=\"This tutorial shows you how to use Kosli\u0026#x27;s query commands to search for artifacts, inspect their history, and browse runtime environment snapshots.\">\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=\"Querying Kosli - Kosli Documentation\">\u003cmeta data-mint-head property=\"og:description\" content=\"This tutorial shows you how to use Kosli\u0026#x27;s query commands to search for artifacts, inspect their history, and browse runtime environment snapshots.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Kosli Documentation\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.kosli.com/tutorials/querying_kosli\">\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=Investigate+and+audit\u0026amp;title=Querying+Kosli\u0026amp;description=This+tutorial+shows+you+how+to+use+Kosli%27s+query+commands+to+search+for+artifacts%2C+inspect+their+history%2C+and+browse+runtime+environment+snapshots.\u0026amp;theme=381f3588bbad67d04f5be36e\u0026amp;signature=b1e48f38ebc22cd416021596a6a68a16f7f12924205f446737cf806333f8862b\">\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=\"Querying Kosli - Kosli Documentation\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"This tutorial shows you how to use Kosli\u0026#x27;s query commands to search for artifacts, inspect their history, and browse runtime environment snapshots.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://kosli.mintlify.site/_mintlify/api/og/v2?division=Investigate+and+audit\u0026amp;title=Querying+Kosli\u0026amp;description=This+tutorial+shows+you+how+to+use+Kosli%27s+query+commands+to+search+for+artifacts%2C+inspect+their+history%2C+and+browse+runtime+environment+snapshots.\u0026amp;theme=381f3588bbad67d04f5be36e\u0026amp;signature=b1e48f38ebc22cd416021596a6a68a16f7f12924205f446737cf806333f8862b\">\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/tutorials/querying_kosli\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/tutorials/querying_kosli.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/tutorials/querying_kosli#webpage\",\"url\":\"https://docs.kosli.com/tutorials/querying_kosli\",\"name\":\"Querying Kosli\",\"description\":\"This tutorial shows you how to use Kosli's query commands to search for artifacts, inspect their history, and browse runtime environment snapshots.\",\"dateModified\":\"2026-09-14T13:11:15.000Z\",\"isPartOf\":{\"@id\":\"https://docs.kosli.com#website\"},\"breadcrumb\":{\"@id\":\"https://docs.kosli.com/tutorials/querying_kosli#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.kosli.com/tutorials/querying_kosli#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Kosli Documentation\",\"item\":\"https://docs.kosli.com\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Querying Kosli\",\"item\":\"https://docs.kosli.com/tutorials/querying_kosli\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.kosli.com/tutorials/querying_kosli#article\",\"headline\":\"Querying Kosli\",\"name\":\"Querying Kosli\",\"description\":\"This tutorial shows you how to use Kosli's query commands to search for artifacts, inspect their history, and browse runtime environment snapshots.\",\"url\":\"https://docs.kosli.com/tutorials/querying_kosli\",\"mainEntityOfPage\":{\"@id\":\"https://docs.kosli.com/tutorials/querying_kosli#webpage\"},\"dateModified\":\"2026-09-14T13:11:15.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","pages":[{"title":"Discover Kosli","href":"/understand_kosli/what_is_kosli"}]},{"tab":"Platform administration","pages":[{"title":"Platform administration","href":"/user/default_organization"}]},{"tab":"Risks and controls","groups":[{"group":"Concepts","pages":[{"title":"Risks","href":"/understand_kosli/risks"},{"title":"Controls","href":"/understand_kosli/controls"}]},{"group":"Implementing controls","pages":[{"title":"Working with controls","href":"/tutorials/working_with_controls"},{"title":"Enforce policies","href":"/getting_started/enforce_policies"},{"title":"Evaluate trails with OPA policies","href":"/tutorials/evaluate_trails_with_opa"}]},{"group":"Runtime controls","pages":[{"title":"Detecting unexpected statefile changes","href":"/tutorials/detecting_unexpected_statefile_changes"},{"title":"Detecting non-Terraform changes","description":"Detect infrastructure changes made outside Terraform — console, API, or CLI edits — with a scheduled plan whose result is attested into a Kosli Environment.","href":"/tutorials/detecting_non_terraform_changes"}]},{"group":"Investigate and audit","pages":[{"title":"Querying Kosli","href":"/tutorials/querying_kosli"},{"title":"MCP server","description":"Connect AI assistants such as Claude Code and Claude Desktop to the Kosli API using the Model Context Protocol.","tag":"BETA","href":"/integrations/mcp_server"},{"title":"From commit to production","href":"/tutorials/following_a_git_commit_to_runtime_environments"},{"title":"Tracing a production incident to its git commit","href":"/tutorials/tracing_a_production_incident_back_to_git_commits"}]}]},{"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":"Querying Kosli - Kosli Documentation","buildId":"dpl_FWZhTb2vab28gFGFH4ojka6qEznQ","deploymentId":"dpl_FWZhTb2vab28gFGFH4ojka6qEznQ","dynamics":[],"chunks":[]}