diff --git a/Cargo.lock b/Cargo.lock
index 3a151f1..be49088 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -2524,6 +2524,7 @@ dependencies = [
"gix-credentials",
"gix-date",
"gix-diff",
+ "gix-dir",
"gix-discover",
"gix-error",
"gix-features",
@@ -2551,6 +2552,7 @@ dependencies = [
"gix-revwalk",
"gix-sec",
"gix-shallow",
+ "gix-status",
"gix-submodule",
"gix-tempfile",
"gix-trace",
@@ -2710,13 +2712,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1b1689ff5ddeee4acfb2a43e875a1072a76d208624b15a9065c938b39cb0da2a"
dependencies = [
"bstr",
+ "gix-attributes",
"gix-command",
"gix-filter",
"gix-fs",
"gix-hash",
"gix-imara-diff",
+ "gix-index",
"gix-object",
"gix-path",
+ "gix-pathspec",
"gix-tempfile",
"gix-trace",
"gix-traverse",
@@ -2724,6 +2729,26 @@ dependencies = [
"thiserror 2.0.20",
]
+[[package]]
+name = "gix-dir"
+version = "0.29.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8342d5eb0ea054ed6ef807e628e38f06dd51eceeec9529767d8b23e33eff9c09"
+dependencies = [
+ "bstr",
+ "gix-discover",
+ "gix-fs",
+ "gix-ignore",
+ "gix-index",
+ "gix-object",
+ "gix-path",
+ "gix-pathspec",
+ "gix-trace",
+ "gix-utils",
+ "gix-worktree",
+ "thiserror 2.0.20",
+]
+
[[package]]
name = "gix-discover"
version = "0.55.0"
@@ -3182,6 +3207,31 @@ dependencies = [
"thiserror 2.0.20",
]
+[[package]]
+name = "gix-status"
+version = "0.34.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1401d871c01d82add5a9f654439b00722d0c632b332cd2cb63193f94327c8458"
+dependencies = [
+ "bstr",
+ "filetime",
+ "gix-diff",
+ "gix-dir",
+ "gix-features",
+ "gix-filter",
+ "gix-fs",
+ "gix-hash",
+ "gix-index",
+ "gix-object",
+ "gix-path",
+ "gix-pathspec",
+ "gix-worktree",
+ "hashbrown 0.16.1",
+ "portable-atomic",
+ "thiserror 2.0.20",
+ "windows-sys 0.61.2",
+]
+
[[package]]
name = "gix-submodule"
version = "0.34.0"
@@ -7909,6 +7959,8 @@ version = "0.1.0-alpha"
dependencies = [
"anyhow",
"gix",
+ "gix-worktree",
+ "gix-worktree-state",
"nostr",
"signed_core",
"tempfile",
diff --git a/Cargo.toml b/Cargo.toml
index a8e696f..2327cfc 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -31,7 +31,7 @@ nostr-gossip-memory = { git = "https://github.com/rust-nostr/nostr" }
nostr-connect = { git = "https://github.com/rust-nostr/nostr" }
nostr-sdk = { git = "https://github.com/rust-nostr/nostr" }
-gix = { version = "0.87.1", default-features = false, features = ["sha1", "blocking-network-client", "blocking-http-transport-reqwest-rust-tls", "worktree-mutation"] }
+gix = { version = "0.87.1", default-features = false, features = ["sha1", "blocking-network-client", "blocking-http-transport-reqwest-rust-tls", "worktree-mutation", "status"] }
smol = "2"
futures = "0.3"
diff --git a/crates/signed_git/Cargo.toml b/crates/signed_git/Cargo.toml
index 3a17301..ef29ece 100644
--- a/crates/signed_git/Cargo.toml
+++ b/crates/signed_git/Cargo.toml
@@ -9,6 +9,8 @@ signed_core = { path = "../signed_core" }
nostr.workspace = true
gix = { workspace = true, features = ["revision", "blob-diff"] }
+gix-worktree = "0.56"
+gix-worktree-state = "0.34"
anyhow.workspace = true
[dev-dependencies]
diff --git a/crates/signed_git/src/lib.rs b/crates/signed_git/src/lib.rs
index 4e72a29..86974df 100644
--- a/crates/signed_git/src/lib.rs
+++ b/crates/signed_git/src/lib.rs
@@ -281,14 +281,14 @@ pub fn split_patch_series(patch: &str) -> Vec<&str> {
///
/// `None` when the repository has no commits yet, an unborn HEAD.
pub fn head_commit_id(repo_path: &Path) -> Result