diff --git a/_primitives/_rust/Cargo.lock b/_primitives/_rust/Cargo.lock
index c3e0e28..4ab325f 100644
--- a/_primitives/_rust/Cargo.lock
+++ b/_primitives/_rust/Cargo.lock
@@ -584,6 +584,19 @@ dependencies = [
"version_check",
]
+[[package]]
+name = "genesis-scan"
+version = "0.1.0"
+dependencies = [
+ "anyhow",
+ "clap",
+ "regex",
+ "serde",
+ "serde_json",
+ "tempfile",
+ "walkdir",
+]
+
[[package]]
name = "getrandom"
version = "0.2.17"
@@ -1510,6 +1523,15 @@ version = "1.0.23"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9774ba4a74de5f7b1c1451ed6cd5285a32eddb5cccb8cc655a4e50009e06477f"
+[[package]]
+name = "same-file"
+version = "1.0.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502"
+dependencies = [
+ "winapi-util",
+]
+
[[package]]
name = "scopeguard"
version = "1.2.0"
@@ -2193,6 +2215,16 @@ dependencies = [
"tempfile",
]
+[[package]]
+name = "walkdir"
+version = "2.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b"
+dependencies = [
+ "same-file",
+ "winapi-util",
+]
+
[[package]]
name = "wasi"
version = "0.11.1+wasi-snapshot-preview1"
@@ -2318,6 +2350,15 @@ dependencies = [
"wasite",
]
+[[package]]
+name = "winapi-util"
+version = "0.1.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22"
+dependencies = [
+ "windows-sys 0.61.2",
+]
+
[[package]]
name = "windows-core"
version = "0.62.2"
diff --git a/_primitives/_rust/Cargo.toml b/_primitives/_rust/Cargo.toml
index 9c8e779..e036c9d 100644
--- a/_primitives/_rust/Cargo.toml
+++ b/_primitives/_rust/Cargo.toml
@@ -9,6 +9,7 @@ members = [
"mock-render",
"visual-diff",
"tokens-sync",
+ "genesis-scan",
]
[workspace.package]
diff --git a/_primitives/_rust/genesis-scan/Cargo.toml b/_primitives/_rust/genesis-scan/Cargo.toml
new file mode 100644
index 0000000..5bcca33
--- /dev/null
+++ b/_primitives/_rust/genesis-scan/Cargo.toml
@@ -0,0 +1,20 @@
+[package]
+name = "genesis-scan"
+version = "0.1.0"
+edition.workspace = true
+rust-version.workspace = true
+
+[[bin]]
+name = "genesis-scan"
+path = "src/main.rs"
+
+[dependencies]
+clap = { workspace = true }
+serde = { workspace = true }
+serde_json = { workspace = true }
+regex = "1"
+walkdir = "2"
+anyhow = "1"
+
+[dev-dependencies]
+tempfile = "3"
diff --git a/_primitives/_rust/genesis-scan/src/main.rs b/_primitives/_rust/genesis-scan/src/main.rs
new file mode 100644
index 0000000..378f7ed
--- /dev/null
+++ b/_primitives/_rust/genesis-scan/src/main.rs
@@ -0,0 +1,100 @@
+//! genesis-scan — patent-IP leak scanner.
+//!
+//! Complements the runtime Claude-Code hook (`~/.claude/hooks/genesis-leak-guard.sh`)
+//! by providing a binary suitable for `git` pre-commit hooks and CI pipelines.
+//!
+//! USAGE
+//! genesis-scan --path
walk a tree
+//! genesis-scan --path single file
+//! genesis-scan --staged scan `git diff --cached`
+//! genesis-scan --stdin --file