Skip to content

GitAegis Team and Enterprise · Requires an account

Rules that hold, and the evidence that they held.

An organisation publishes a policy document, and every device verifies it before applying it: a document that fails verification is rejected rather than applied with a warning. The audit trail attributes recorded actions to an organisation, an actor and a device. Both mechanisms have limits, and this page states them next to the mechanism rather than underneath it.

Policy verified on device · Last known-good stays in force on failure · Audit with per-entry attribution · No SOC 2, ISO or GDPR certification claimed

An owner publishes the policy

A versioned document with a scope and a set of rules, signed with the organisation's key.

Devices pull it and verify it

The client recomputes the signature and checks the document belongs to the organisation the device is bound to.

Verifies → applies as preconditions

A rule stops a plan before the capsule is taken and before any command runs, naming itself.

Fails → rejected

The failure is reported and the last known-good policy stays in force. No unverified document takes effect.

The same key signs and verifies, and members can obtain it: an integrity check, not a trust boundary, and the page says so plainly.

A policy a member can edit is a suggestion

The usual shape of “policy” in a desktop tool is a settings file, or a config value, or a managed preference a determined user can change and the tool has no way to check.

That is fine as a default. It is not a control, and describing it as one is how an organisation ends up believing something is enforced when it is not.

GitAegis publishes policy centrally and verifies it on the device before applying it. What that verification is currently worth is set out in the next section: precisely, because the difference between an integrity check and a trust boundary is the whole subject of this page.

A control you cannot verify is a default with better marketing.

How the policy document reaches a device

  1. An owner publishes it.

    A policy is a versioned document with a scope and a set of rules, published for the organisation from the account.
  2. It is signed with the organisation's key.

    The service computes a signature over the document with the organisation’s key and stamps the key id it used.
  3. Devices pull it, with a version check.

    Distribution is pull-based, so a device that has been offline picks up the current version on reconnect rather than running on a stale copy indefinitely.
  4. The device verifies it before it applies.

    The client recomputes the signature and checks the document belongs to the organisation the device is bound to. A document that fails is rejected, the failure is reported, and the last known-good policy stays in force. There is no path where an unverified document takes effect.
  5. What that signature is, exactly.

    It is an Ed25519 signature. The organisation signs with a private key that never leaves the service, and a member receives only the public key that verifies it. So a tampered, corrupted or misdirected document is rejected, and a member of your own organisation cannot produce one that verifies. What is still missing before this is a trust boundary is proof of enforcement: nothing yet records that a device applied the policy it was given.
  6. Rules apply as preconditions.

    A policy check sits in the operation plan alongside a dirty working tree or a held branch lease, and stops the plan before the capsule is taken and before any command runs, naming the rule that blocked it.

The organisation’s key

An Ed25519 keypair. The private half signs here and never leaves; members receive the public half.

  • 1 · Signs the document

    The service computes the signature when an owner publishes, and stamps the key id it used.

  • 2 · Verifies the document

    Every device recomputes the signature with the same key before the policy applies.

  • 3 · Returned to any member who asks

    The API hands the organisation’s key to any member of the organisation.

Same key, three holders → an integrity check, not a trust boundary

The check detects a tampered, corrupted or misdirected document. It does not stop a member of your own organisation from producing one that verifies.

Signing and verification are separate keys: the private half stays in the service, and a member holds only the public half.
The preconditions block of a planned hard reset in GitAegis: one satisfied precondition with a green check, and the refs before and after the operation.
The preconditions of a planned operation in the shipping app, where a policy rule takes its place. Checked before the capsule is taken, and able to stop the plan there.

What the signature is worth

An integrity check, not a trust boundary.

And GitAegis will not describe it as the second thing while it is the first.

The rule ledger

What a policy document can say

One rule class, described accurately rather than as a category heading over a list of ambitions, and beside it, every rule an organisation asks for that this document cannot express.

1carried by the document

Locked settings

The organisation pins the value of a client setting, and the device refuses a write that would change it. The member sees which settings are pinned and which document pinned them, so “why can I not change this” has an answer on screen rather than in a support ticket.

That is the rule class the document carries, and it applies as a precondition, so a rule that blocks stops the plan before the capsule is taken and before any command runs.

9not a rule it can express
  • No rule for protected ref patterns
  • No rule separating --force from --force-with-lease
  • No approval-count requirement
  • No rule that raises an operation's capsule kind
  • No control over cloud capsule backup
  • No rule that turns the AI commit report on or off
  • No integration allowlist
  • No telemetry rule
  • No device-condition rule

Every one is a reasonable thing for an organisation to want. None of them is a rule this policy document can express, and listing them as if they were is how a compliance conversation goes wrong six months later.

Overrides, and their evidence

A blanket block on every risky operation gets worked around outside the tool, which is worse than a rule that can be broken visibly. So where a rule permits an override, the path is explicit: the member sees which rule they are overriding and what it was protecting, a typed justification is required where the rule demands one, and the override is recorded.

Where that record lives matters. It is recorded by the policy engine on the device. It is not a filterable class in the organisation’s audit trail, and there is no notification to an owner when one happens, so “show me every override this quarter” is not a query an owner can run today.

Rules that do not permit an override block. The plan fails its precondition, names the rule, and stops. There is no elevated mode a member can enter.

Operation preconditions

What an override record holds

Actor
the member who overrode it
Operation
what they were doing
Rule
which rule was overridden
Justification
typed, where the rule demands one
Time
when it happened

Held by the policy engine on the device that recorded it.

Where a rule lands

In the plan, before anything runs

A policy check is a precondition in the operation plan: the planning and refusal machinery it joins is in the shipping desktop app today, and these captures are that machinery.

1

The plan a rule stops

destructive

Every mutating operation is planned first: an intent, a risk level, preconditions, the exact commands. A policy check sits in those preconditions alongside a dirty working tree or a held branch lease, and a rule that blocks fails the plan there, before the capsule is taken.

GitAegis
The GitAegis Operation Preview drawer for a hard reset, showing the operation's intent, a Destructive risk badge, the recovery capsule that will be taken first and what it covers, and the rollback that will be available afterwards.
The Operation Preview drawer: the intent, the risk, the capsule that will be taken before anything runs, and the way back. The exact command list sits further down the same drawer.
GitAegis refusing a reviewed hard reset: the panel reports that the operation could not be executed and that the repository and working tree are unchanged.
A refused operation in the shipping app: nothing ran, and the panel says so.
2

The stop it delivers

blocked

A plan that fails is refused and states that the repository is unchanged. A rule that blocks names itself, so “why not” has an answer on screen rather than in a support ticket.

Numbers this page will defend

entries per audit read, at most, and that capped read to a JSON file is the whole export path
500
certifications claimed: no SOC 2, ISO 27001 or GDPR certification until one exists and can be evidenced
0

The audit trail

What it records, how it is attributed, and where its edges are: all three, because the third one is the part an organisation needs before it depends on this.

What is recorded, and how it is attributed

Administrative actions (a member added or removed, a role changed, a policy published, a device bound or revoked) and operational events in scope, including Change Set activity, branch lease transitions and integrations being bound.

Attribution on every entry. The organisation, the repository where one applies, the actor, the device, the action, and a UTC timestamp. Where an operation is involved, the entry carries enough to point back at it.

Nothing edits or deletes an entry. There is no route that does. Be precise about what that is worth: it is the absence of a delete path, not a storage-level guarantee, and the word “append-only” is being withheld until the storage enforces it.

One audit entry

Organisation
the organisation the entry belongs to
Repository
where one applies
Actor
the member behind the action
Device
the machine it came from
Action
what happened: administrative, or an operational event in scope
Timestamp
UTC

Nothing edits or deletes an entry

The absence of a delete path, not a storage-level guarantee: the word “append-only” is being withheld until the storage enforces it.

Attribution on every entry, so a question about who did what has an answer.

Getting the data out, and what you cannot get

The desktop reads an organisation’s most recent audit entries and writes them to a JSON file on your machine. That is the export.

The bounds are worth knowing before anyone plans around them: the read returns at most 500 entries, there is no CSV, there is no date-range or scope selection, the export is not itself recorded as an audit event, and an organisation with more history than that cannot currently retrieve all of it.

There is no retention configuration and no legal hold. No owner-set retention window, no deletion job, no hold object, and nothing that exempts entries from one. An organisation with a retention obligation should treat that as unmet here rather than assume a default.

One export, newest first

  • A policy was published#1
  • A device was revoked#2
  • A member's role changed#3
  • …up to 500 entries#500

Older entries: recorded, not retrievable

A JSON file on your machine is the whole export. No CSV, no date range, no scope selection, and the export is not itself recorded as an audit event.

The read stops at 500. An organisation with more history than that cannot currently retrieve all of it.

What audit does not cover

Local recovery state stays local. Capsules, the Operation Journal and the Flight Recorder are per device and are not fed into the organisation’s audit trail. An entry can reference that an operation took place; it does not contain the capsule, the diff or the working-tree state.

Joining an organisation does not upload your local history. Cloud capsule backup is a separate, per-repository, opt-in feature, encrypted on the device with a key GitAegis does not hold, and there is no escrow arrangement that gives an organisation a copy of that key.

Cloud capsule backup

Reaches the organisation’s trail

  • Members added or removed, roles changed
  • Policies published
  • Devices bound or revoked
  • Change Set activity, branch lease transitions, integrations bound

Stays on the machine that made it

  • Recovery capsules, and everything inside them
  • The Operation Journal
  • The Flight Recorder timeline
  • Diffs and working-tree state
Joining an organisation does not upload your local history. The trail can say an operation happened; it does not hold what the operation touched.

Devices

Revoking a device ends its account access, and stops there

A device is a first-class object. Registered when GitAegis signs in on it, with a name, a platform, a client version, and first-seen and last-seen timestamps, so an owner can see what is attached to the organisation.

Revoking a device ends its account access. Its session is revoked, so it stops fetching policy and stops downloading backed-up capsules.

Revocation does not reach onto the disk, and does not reach your provider. The revoked device keeps its local repositories and local capsules, because those are yours and are on your machine. It also keeps any keys already in its credential store, and revoking does not revoke that device’s provider tokens with the provider. That has to be done at the provider, and an organisation offboarding someone should treat it as a separate step rather than assume this one covered it.

How provider connections work

Revocation ends

  • The device's sessionended
  • Policy fetchesended
  • Capsule downloadsended

Revocation does not reach

  • Local repositoriesuntouched
  • Local capsulesuntouched
  • Keys already in the credential storeuntouched
  • Provider tokens, at the provideruntouched

What this does not claim

The most useful section on the page for anyone doing a security review, and the one written first.

Limits of what is here

No certification claims. GitAegis does not claim SOC 2, ISO 27001 or GDPR certification, and will not until such a certification exists and can be evidenced. This page describes practices. When a certification exists it will be published with its evidence and its scope.

Policy is an integrity check, not a barrier against a member. Symmetric signing, with the verification key available to members, means the document cannot be tampered with in transit and can be authored by anyone in the organisation holding that key. Do not present it internally as something a member cannot forge.

Policy governs GitAegis, not your shell. It cannot stop a git push --force from a terminal, a CI job, or another Git client. For controls that hold regardless of client, use your host’s branch protection. GitAegis reads and displays that state and complements it. Any organisation told otherwise has been mis-sold.

Overrides are recorded, not prevented. A rule that permits an override permits it; the control is evidence, not prevention. Rules that must not be overridden are configured without an override path, and then they block.

Local recovery data is not audited to the organisation. Capsules, journal and timeline are local and per device, deliberately.

Capabilities an enterprise will ask for, and that are absent

No SSO and no SCIM. There is no SAML 2.0, no OIDC, no SCIM provisioning or deprovisioning, no identity-provider configuration, no group-to-role mapping and no domain claim verification. Accounts are created and managed in GitAegis.

No audit retention, legal hold, or scoped export. As above: a capped read to a JSON file is the whole export path.

Audit records what GitAegis observes. Actions in the client and administrative actions in the account. It is not a record of everything that happened to your repositories. Operations run outside GitAegis appear on the local Flight Recorder timeline, not in the organisation’s trail.

Vulnerability reports are welcome now, whatever the state of the rest. Write to security@gitaegis.com. The process is documented on the security page.

Questions about security and policy

For teams and organizations

Rolling GitAegis out to a team?

Volume licensing, SSO, policy enforcement, and audit.

What a rollout includes

  • Volume licensing

    every seat under one agreement

  • SSO

    sign-in through your identity provider

  • Policy enforcement

    org rules applied as preconditions, before any command runs

  • Audit

    actor, device, and timestamp on every entry

Start with a pilot on the repositories that worry you.