diff --git a/site/index.html b/site/index.html
index c323f51..ed656d2 100644
--- a/site/index.html
+++ b/site/index.html
@@ -32,6 +32,7 @@
@@ -41,7 +42,8 @@
open source · stdlib-only · MIT
Your agents worked all night. Know if anything went wrong.
AgentScope turns scheduled agent activity into one quiet morning screen. No orchestration. No trace maze. Just the failures, drift and missing work that deserve your attention.
-
+
Python 3.11+ · zero runtime dependencies · self-hosted · MIT
diff --git a/site/proofs-manifest.json b/site/proofs-manifest.json
new file mode 100644
index 0000000..6ca7bb3
--- /dev/null
+++ b/site/proofs-manifest.json
@@ -0,0 +1,26 @@
+{
+ "base_url": "",
+ "generated": "2026-10-21",
+ "status": "published-historical-snapshots",
+ "note": "Historical Habitat proof exports. Browser checks validate structure and content hash only; unsigned bundles do not establish publisher identity or external truth.",
+ "projects": {
+ "Greenlight-K53": [
+ {
+ "run_id": "greenlight_k53-9dc5a00-0",
+ "proof_url": "/proofs/Greenlight-K53/greenlight_k53-9dc5a00-0/proof.json",
+ "claim": "Deployed commit 9dc5a00: fix: refresh K53 database cache when online",
+ "content_sha256": "faaa6dfb4453224294a8b8a3e192acc2b1d96f41d08f260919c19fcf732b45b2",
+ "source": "historical Habitat export"
+ }
+ ],
+ "Diketo": [
+ {
+ "run_id": "diketo-30feea5-0",
+ "proof_url": "/proofs/Diketo/diketo-30feea5-0/proof.json",
+ "claim": "Deployed commit 30feea5: Add files via upload",
+ "content_sha256": "10c0bd36495d6cc4fb93da55c5d33e315170cc23a7f6bb476c3875bd6094f6ed",
+ "source": "historical Habitat export"
+ }
+ ]
+ }
+}
diff --git a/site/proofs.html b/site/proofs.html
new file mode 100644
index 0000000..57bbc3f
--- /dev/null
+++ b/site/proofs.html
@@ -0,0 +1,8 @@
+Evidence proofs — AgentScope agentscope / Demo ↗ Habitat · portable evidence
Proof snapshots. Historical Habitat proof exports copied into AgentScope. Each bundle is checked in your browser for its embedded SHA-256 content digest and claim/action consistency.
Important: a matching content hash detects changes to the exported bundle, but does not authenticate who published it. These are historical records, not live status. An unsigned proof does not independently establish that the claimed work happened in the outside world.
+
\ No newline at end of file
diff --git a/site/proofs/Diketo/diketo-30feea5-0/proof.json b/site/proofs/Diketo/diketo-30feea5-0/proof.json
new file mode 100644
index 0000000..643f5ed
--- /dev/null
+++ b/site/proofs/Diketo/diketo-30feea5-0/proof.json
@@ -0,0 +1,46 @@
+{
+ "proof_version": "1",
+ "generated_at": "2026-09-24T22:25:10.769186+00:00",
+ "claim": {
+ "id": "claim-diketo-30feea5-0",
+ "habitat_id": "hermes-local",
+ "job_id": "hermes-job",
+ "claim": "Deployed commit 30feea5: Add files via upload",
+ "action": "run_job",
+ "expected_status": "ok",
+ "created_at": "2026-09-24T22:25:10.759897+00:00",
+ "verified_at": "2026-09-24T22:25:10.767097+00:00",
+ "status": "verified",
+ "evidence": {
+ "source": "habitat_trusted_ledger",
+ "action_id": "act-diketo-30feea5-0",
+ "action": "run_job",
+ "status": "ok",
+ "timestamp": "2026-09-24T22:25:10.759897+00:00",
+ "run_id": "diketo-30feea5-0",
+ "details": {
+ "source": "hermes_hmac_adapter"
+ }
+ },
+ "run_id": "diketo-30feea5-0"
+ },
+ "ledger": {
+ "integrity": "intact",
+ "actions": [
+ {
+ "id": "act-diketo-30feea5-0",
+ "habitat_id": "hermes-local",
+ "job_id": "hermes-job",
+ "timestamp": "2026-09-24T22:25:10.759897+00:00",
+ "actor": "agent",
+ "action": "run_job",
+ "status": "ok",
+ "details": {
+ "source": "hermes_hmac_adapter"
+ },
+ "run_id": "diketo-30feea5-0"
+ }
+ ]
+ },
+ "content_sha256": "10c0bd36495d6cc4fb93da55c5d33e315170cc23a7f6bb476c3875bd6094f6ed"
+}
diff --git a/site/proofs/Greenlight-K53/greenlight_k53-9dc5a00-0/proof.json b/site/proofs/Greenlight-K53/greenlight_k53-9dc5a00-0/proof.json
new file mode 100644
index 0000000..049ee0f
--- /dev/null
+++ b/site/proofs/Greenlight-K53/greenlight_k53-9dc5a00-0/proof.json
@@ -0,0 +1,46 @@
+{
+ "proof_version": "1",
+ "generated_at": "2026-09-24T22:25:06.994797+00:00",
+ "claim": {
+ "id": "claim-greenlight_k53-9dc5a00-0",
+ "habitat_id": "hermes-local",
+ "job_id": "hermes-job",
+ "claim": "Deployed commit 9dc5a00: fix: refresh K53 database cache when online",
+ "action": "run_job",
+ "expected_status": "ok",
+ "created_at": "2026-09-24T22:25:06.985061+00:00",
+ "verified_at": "2026-09-24T22:25:06.992541+00:00",
+ "status": "verified",
+ "evidence": {
+ "source": "habitat_trusted_ledger",
+ "action_id": "act-greenlight_k53-9dc5a00-0",
+ "action": "run_job",
+ "status": "ok",
+ "timestamp": "2026-09-24T22:25:06.985061+00:00",
+ "run_id": "greenlight_k53-9dc5a00-0",
+ "details": {
+ "source": "hermes_hmac_adapter"
+ }
+ },
+ "run_id": "greenlight_k53-9dc5a00-0"
+ },
+ "ledger": {
+ "integrity": "intact",
+ "actions": [
+ {
+ "id": "act-greenlight_k53-9dc5a00-0",
+ "habitat_id": "hermes-local",
+ "job_id": "hermes-job",
+ "timestamp": "2026-09-24T22:25:06.985061+00:00",
+ "actor": "agent",
+ "action": "run_job",
+ "status": "ok",
+ "details": {
+ "source": "hermes_hmac_adapter"
+ },
+ "run_id": "greenlight_k53-9dc5a00-0"
+ }
+ ]
+ },
+ "content_sha256": "faaa6dfb4453224294a8b8a3e192acc2b1d96f41d08f260919c19fcf732b45b2"
+}
diff --git a/tests/test_public_proofs.py b/tests/test_public_proofs.py
new file mode 100644
index 0000000..5bfb7ab
--- /dev/null
+++ b/tests/test_public_proofs.py
@@ -0,0 +1,24 @@
+import json
+from pathlib import Path
+
+from habitat.proof_verify import verify_file
+
+
+ROOT = Path(__file__).resolve().parents[1]
+
+
+def test_published_habitat_proof_snapshots_verify_and_match_source_exports():
+ manifest = json.loads((ROOT / "site" / "proofs-manifest.json").read_text(encoding="utf-8"))
+ for project, entries in manifest["projects"].items():
+ for entry in entries:
+ relative = entry["proof_url"].lstrip("/")
+ published = ROOT / "site" / relative
+ source = ROOT / "web" / "public" / relative
+ assert published.is_file(), f"missing published proof: {published}"
+ assert source.is_file(), f"missing source proof: {source}"
+ assert published.read_bytes() == source.read_bytes()
+ result = verify_file(published)
+ assert result["valid"], result["errors"]
+ assert result["assurance"]["publisher_trust"] == "not-assessed"
+ assert result["assurance"]["external_truth"] == "not-established"
+ assert result["assurance"]["signature"] == "absent"