docs

In a nutshell

Zegit in a nutshell

What zegit does, how a single change becomes audit-grade proof, and what that proof honestly does — and doesn't — guarantee.

What it is

Zegit is a governance gateway that sits in front of your existing Git host and turns every release into an audit-grade evidence bundle aligned to the EU Cyber Resilience Act. Instead of re-running your CI, it verifies signed evidence that validation already ran — under a policy defined in Git, by an identity you can prove.

Governance lives in version control, identity is passkey-backed, and every release produces non-repudiable cryptographic proof of the validation and approval chain. The loop runs end to end today — passkey login, signed validation, gateway enforcement on push, quorum-approved tags, offline-verifiable bundles — and zegit governs its own source repository with it. What is still roadmap (GitHub.com enforcement, attested build runners, the expert-reviewed Annex I mapping) this page says plainly.

Where zegit sits A developer or agent pushes to a Git host. A gateway pre-receive hook enforces policy on push (shipped for Gitea and GitLab self-managed, and as zegit's own SSH gateway). A Control Plane, hosted at zegit.io or self-hosted, issues certificates, stores Tag Requests and confirms quorum. developer / agent mongoose push + AoV ref Git host gateway (pre-receive) enforces on push gitea · gitlab today quorum · revocation Control Plane issues certs · stores TRs zegit.io · self-hosted works today (v0.0.173) — GitHub.com enforcement via a GitHub App is roadmap
Where zegit sits.

Know · work · prove

The platform is three tools that share one evidence vocabulary.

Know · work · prove meerkat (knowledge base, MCP) emits evidence to mongoose (agent harness, runs work), which in turn signs evidence via zegit (signs, gates, bundles). meerkat knows knowledge base · MCP emits evidence mongoose works agent harness · runs work signs evidence zegit proves signs · gates · bundles one shared evidence vocabulary
The three tools share one evidence record.

meerkat is the knowledge base your agent can query over MCP, so work starts from what is actually true at your org. mongoose is the agent harness that runs the work — and emits an evidence record bound to the exact git state for every meaningful step. zegit signs, gates, and bundles what happened into proof. Each tool is useful alone; together, the compliance artifact falls out of good engineering instead of being bolted on.

The lifecycle of one change

A change flows through one chain. You — or an agent in mongoose — write code. zg validate runs your pipeline (lint, tests, security analysis, review agents) and assembles an evidence record bound to the exact commit and tree. The policy engine renders a decisionALLOW, REQUIRE_REVIEW, or BLOCK.

On ALLOW, the record is signed into an Attestation of Validation and written to refs/zegit/aov/<commit_sha>; a pre-push hook carries it alongside your commits, and the gateway admits only ALLOW. At release, a Tag Request gathers the required approvals — each a fresh passkey touch, on the CLI or in the Control Plane — and finalizes a signed tag; the gateway admits the tag only when the Control Plane confirms quorum for that exact commit. zg evidence bundle then turns the tag into a CRA Evidence Bundle anyone can verify offline.

The lifecycle of one change A change flows from writing code through validation and evidence assembly to a policy decision, which branches into allow (sign and release), require review (Tag Request), or block (rejected). write code zg validate evidence record policy decision sign AoV → push exit 0 release bundle Tag Request / approval * exit 10 rejected exit 20 ZG_ERR_… * approvals are fresh passkey touches (zg tr approve or the Control Plane); the gateway checks quorum with the Control Plane.
How one change becomes a signed release — or gets stopped.

One record, three envelopes

The evidence never changes shape. mongoose emits an unsigned record into .zegit/evidence/<run_id>.jsonl — a free local audit trail with zero zegit. A policy engine evaluates it and stamps a decision, making it validated, still unsigned. zegit wraps that exact same payload in a DSSE signature to make it signed and audit-grade.

One record, three envelopes Three panels of growing height representing unsigned, validated, and signed states. The same record glyph appears in all three, with only the surrounding envelope growing in trust level. unsigned mongoose · local .zegit/evidence/…jsonl + decision validated policy engine + decision · still unsigned + signature signed zegit · DSSE refs/zegit/aov/<sha> same payload — only the envelope grows
One record escalates from a local log to a signed attestation.

Each hop adds metadata; none reshapes the payload. The escalation is the upgrade path: free unsigned evidence today, signed proof when you adopt zegit.

What "proof" actually means

A signed AoV is a DSSE envelope wrapping an in-toto Statement — standard, interoperable formats, not a proprietary blob. It is verifiable offline: zg evidence verify-bundle checks signatures, the certificate chain to the root, and the git-state binding with no network call.

What v1 actually proves

Version one proves that a passkey-authenticated identity asserts this validation ran under this policy. That is non-repudiable and audit-grade — but it does not yet prove the validation actually executed as claimed. That stronger guarantee needs attested build runners, which is a later phase.

With attested runners

Today the developer signs the AoV, so it proves who asserted a validation, not that the pipeline actually ran — a developer could point .zegit/config.yaml at a check that trivially passes and still produce a valid AoV. The fix is to move the signature off the developer and onto a trusted builder.

ZeGit's build runner images — signed OCI images, pinned by digest — are the vehicle. When validation runs inside a Tier 2 Verified image, the AoV is signed by the attested runner identity instead of the developer (a runner-signed AoV). Now the decision comes from a known-good, digest-pinned runner the committer can't trivially forge, and a policy can require that protected refs carry one — closing the v1 gap. Tier 3 adds TPM-backed runner attestation and hermetic builds on top.

v1 · developer-signed attested · runner-signed

Roadmap, not shipped

Runner-signed AoVs are a post-MVP upgrade: Tier 2 Verified images are a Phase 2 item and Tier 3 is Phase 3. Today every AoV is developer-signed and self-attested. The Core concepts page has the full mechanism and a today-vs-attested comparison.

The CRA payoff

Because the proof is generated as a byproduct of validating each change, the compliance artifact assembles itself. A bundle ties together every AoV since the last tag, the signed Tag Request and its approvals, the effective policy snapshot, the SBOM you supply, and a human-readable summary mapped to CRA Annex I — the document a compliance officer takes to an auditor.

Bundle assembly, signing, and offline verification work today; a bundle with a commit that lacks a valid AoV is written but fails with exit 20, so a pipeline cannot mistake incomplete for complete. The Annex I mapping exists but has not yet been through CRA-expert review — treat it as a draft, not a certified mapping. Vulnerability scan reports are not yet ingested.

Ready for specifics? See Getting started, the zg CLI reference, and Core concepts.

Authoritative reference, generated from the component repos. Spot something stale? Tell us.