Deterministic Security Standard

AGSSH-STD-001

The Air-Gapped Static Surface Hardening standard — 57 property-based, fail-closed conformance rules that prove a static or client-side surface talks only to its own origin.

AGSSH conformance badge for this site
v1.8.0  ·  57 rules · 9 families · Bronze / Silver / Gold · PDF · runner & source

A surface — a client-side tool, a docs site, a marketing page — should talk only to its own origin. AGSSH-STD-001 pins that property down as 57 testable rules, and agssh is the deterministic, fail-closed runner that enforces them against the live deployment.

Profiles
Bronze ⊂ Silver ⊂ Gold, cumulative
Levels
L0 strict · L1 scoped · L2 marketing
Posture
Fail-closed — nothing is green unless proven
Evidence
Externally derived, signed conformance record

This page eats its own dog food.

agssh.dev is a static surface published behind Cloudflare, and it passes AGSSH-STD-001 at its highest bar. The badge above is generated by agssh scanning this very site — a fail-closed claim that reproduces from the signed conformance record (and its SBOM). The standard that says "prove it" proves it.

The 57 rules

Nine families, three cumulative profiles (Bronze ⊂ Silver ⊂ Gold), three strictness levels (L0 strict air-gap · L1 scoped egress · L2 marketing). Full normative text is in the PDF.

AG-NET — Egress & Air-Gap

RuleRequirementObl.SeverityProfileLevels
AG-NET-01Self-host every runtime dependencyMUSTCRITICALBronzeL0 L1 L2
AG-NET-02Override library default CDN loadersMUSTCRITICALBronzeL0 L1 L2
AG-NET-03Same-origin workers; constrain worker-srcMUSTHIGHSilverL0 L1 L2
AG-NET-04Constrain connect-srcMUSTCRITICALBronzeL0 L1 (conditional · L2)
AG-NET-05No third-party egress during loadMUSTHIGHSilverL0 (SHOULD · L1)
AG-NET-06No third-party connection primingMUSTMEDIUMSilverL0 L1 (SHOULD · L2)
AG-NET-07Service Worker hygieneMUSTHIGHSilverwhen a service worker is registered
AG-NET-08Violation/error reporting stays same-originMUSTMEDIUMSilverL0 L1
AG-NET-09External _blank links sever the opener; privacy surfaces sever the referrerMUSTMEDIUMBronzeL0 L1 L2

AG-CSP — Content Security Policy

RuleRequirementObl.SeverityProfileLevels
AG-CSP-01Ship a CSPMUSTHIGHBronzeL0 L1 L2
AG-CSP-02Deny by default; enumerate; forbid bypass primitivesMUSTHIGHBronzeL0 L1 L2
AG-CSP-03Clickjacking control must be header-deliveredMUSTHIGHBronzeL0 L1 L2
AG-CSP-04Stage report-only before enforcingSHOULDMEDIUMSilverall (mandatory before first enforcing deploy)
AG-CSP-05Force HTTPS subresourcesMUSTMEDIUMSilverL0 L1 L2
AG-CSP-06Trusted Types for DOM sinksMUSTHIGHSilverL0 L1 (SHOULD · L2)

AG-HDR — Transport & Response Headers

RuleRequirementObl.SeverityProfileLevels
AG-HDR-01HSTS with a real max-ageMUSTHIGHBronzeheader-capable backends
AG-HDR-01aHSTS scope is sticky — gate itMUSTHIGHSilverbefore enabling AG-HDR-01
AG-HDR-02Disable MIME sniffingMUSTHIGHBronzeheader-capable
AG-HDR-03X-Frame-OptionsMUSTHIGHBronzeheader-capable (pairs with AG-CSP-03)
AG-HDR-04Referrer-PolicyMUSTMEDIUMSilverheader-capable
AG-HDR-05Permissions-PolicyMUSTMEDIUMSilverheader-capable
AG-HDR-06Cross-origin isolation for threaded WASMMUSTMEDIUMGoldwhen SharedArrayBuffer / threaded WASM is used
AG-HDR-07Cache discipline for fingerprinted assetsSHOULDLOWSilverheader-capable
AG-HDR-08TLS floorMUSTHIGHSilverheader-capable

AG-DNS — DNS & Issuance Trust Anchors

RuleRequirementObl.SeverityProfileLevels
AG-DNS-01CAA pins certificate issuanceMUSTHIGHSilverL0 L1 L2
AG-DNS-02DNSSEC enabledSHOULDMEDIUMSilverL0 L1 L2
AG-DNS-03No danglable records (subdomain takeover)MUSTHIGHSilverL0 L1 L2

AG-SUP — Supply Chain & Build Integrity

RuleRequirementObl.SeverityProfileLevels
AG-SUP-01SRI on any unavoidable cross-origin subresourceMUSTHIGHSilverL0 L1 L2
AG-SUP-02Pin dependencies by integrity hashMUSTHIGHSilverL0 L1 L2
AG-SUP-03Reproducible build; pinned toolchainSHOULDMEDIUMSilverL0 L1 L2
AG-SUP-04No secrets in shipped outputMUSTHIGHBronzeL0 L1 L2
AG-SUP-05No unintended source mapsSHOULDLOWSilverL0 L1 L2
AG-SUP-06No known-vulnerable dependenciesMUSTHIGHBronzeL0 L1 L2
AG-SUP-07SBOM emitted and retainedSHOULDMEDIUMGoldL0 L1 L2
AG-SUP-08Signed releases / build provenanceSHOULDMEDIUMGoldL0 L1 L2

AG-CI — Build Pipeline / CI Hardening

RuleRequirementObl.SeverityProfileLevels
AG-CI-01Pin third-party Actions/steps to a full commit SHAMUSTHIGHSilverL0 L1 L2
AG-CI-02Least-privilege workflow tokensMUSTHIGHSilverL0 L1 L2
AG-CI-03No untrusted code in a privileged contextMUSTCRITICALSilverL0 L1 L2
AG-CI-04Secrets are not exposed to forks or echoedMUSTHIGHSilverL0 L1 L2
AG-CI-05Protected branch with the conformance gate requiredSHOULDMEDIUMSilverL0 L1 L2
AG-CI-06Automated contributors run under scoped identity and the same gateSHOULDMEDIUMGoldL0 L1 L2

AG-PRV — Privacy & Consent

RuleRequirementObl.SeverityProfileLevels
AG-PRV-01Zero telemetry on air-gapped surfacesMUSTCRITICALBronzeL0 L1 (privacy tools)
AG-PRV-02Prior blocking of non-essential third partiesMUSTCRITICALBronzeL0 L1 L2 (decisive at L2)
AG-PRV-03Self-host fontsMUSTHIGHBronzeL0 L1 L2
AG-PRV-04Minimize storage & fingerprintingMUSTMEDIUMSilverL0 L1 (SHOULD · L2)
AG-PRV-05Cookie attributes where cookies existMUSTHIGHSilverwhen any cookie is set
AG-PRV-06Third-party embeds isolated and consent-gatedMUSTMEDIUMSilverL2 (forbidden · L0 L1)

AG-OUT — Output / Document Hygiene

RuleRequirementObl.SeverityProfileLevels
AG-OUT-01Neutralize output metadataMUSTMEDIUMSilverfile-generating tools
AG-OUT-02Deterministic outputSHOULDLOWGoldfile-generating tools
AG-OUT-03In-browser only, no server round-tripMUSTCRITICALBronzefile-generating tools

AG-GOV — Governance & Conformance Integrity

RuleRequirementObl.SeverityProfileLevels
AG-GOV-01Waivers can never cover a MUSTMUSTCRITICALBronzeall profiles
AG-GOV-02Waivers auto-expire; the runner enforces itMUSTHIGHSilverwhen deviations exist
AG-GOV-03Deviation budget / debt ceilingMUSTHIGHSilverL0 L1 L2
AG-GOV-04Segregation of duties on waiversMUSTHIGHGoldwhen deviations exist (Gold)
AG-GOV-05Conformance record is externally derived and signedMUSTHIGHGoldL0 L1 L2 (Gold)
AG-GOV-06Active egress canary - prove the wall, do not observe its silenceMUSTHIGHSilverL0 L1
AG-GOV-07Build environment is ephemeral and hermeticMUSTHIGHGoldL0 L1 L2 (Gold)

Run it yourself

Point the runner at any live URL and read the verdict — no build step:

go install github.com/fabriziosalmi/agssh/cmd/agssh@latest
agssh -config .airgap.yml -profile Gold

See the README for the GitHub Action and MCP-server entry points, and the PDF for the full normative text.