diff --git a/Directory.Build.props b/Directory.Build.props
new file mode 100644
index 0000000..c8a3c67
--- /dev/null
+++ b/Directory.Build.props
@@ -0,0 +1,10 @@
+
+
+ $(CULTLIB_ROOT)
+ $(MSBuildThisFileDirectory)..\CultLib
+
+ 42dce3611a81adc5c5fac54cadbaa5637d6022d3
+ C:\Program Files\Git\cmd\git.exe
+ git
+
+
diff --git a/Directory.Build.targets b/Directory.Build.targets
new file mode 100644
index 0000000..46d436a
--- /dev/null
+++ b/Directory.Build.targets
@@ -0,0 +1,30 @@
+
+
+
+
+ <_CultLibReference Include="@(ProjectReference)"
+ Condition="$([System.String]::Copy('%(Filename)').StartsWith('GameCult.')) or '%(Filename)' == 'CultMath'" />
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/README.md b/README.md
index 63eb101..bdab7fe 100644
--- a/README.md
+++ b/README.md
@@ -329,3 +329,14 @@ layer for communication and heartbeats. Its birth memory, jurisdiction, voice,
and heartbeat contract live in [docs/mimir-face.md](docs/mimir-face.md); its
VoidBot-facing identity and typed Face state live under `.voidbot/voice/` and
`.voidbot/state/`.
+
+## Building against CultLib
+
+Builds are pinned to CultLib 2.0.0 (tag `cultlib-unity-v2.0.0`, revision `42dce3611a81adc5c5fac54cadbaa5637d6022d3`); the build fails if the CultLib checkout differs or is dirty. Create a pinned worktree and point the build at it:
+
+```powershell
+git -C worktree add --detach cultlib-unity-v2.0.0
+dotnet build -p:CultLibRoot= # or set CULTLIB_ROOT=
+```
+
+Without an override the sibling `..\CultLib` checkout is used and must itself be at that tag.
diff --git a/src/Mimir.BufferSmoke/Mimir.BufferSmoke.csproj b/src/Mimir.BufferSmoke/Mimir.BufferSmoke.csproj
index e4eb296..9a78f03 100644
--- a/src/Mimir.BufferSmoke/Mimir.BufferSmoke.csproj
+++ b/src/Mimir.BufferSmoke/Mimir.BufferSmoke.csproj
@@ -11,8 +11,8 @@
-
-
+
+
diff --git a/src/Mimir.CultMeshMedia/Mimir.CultMeshMedia.csproj b/src/Mimir.CultMeshMedia/Mimir.CultMeshMedia.csproj
index cb154c1..3a4d105 100644
--- a/src/Mimir.CultMeshMedia/Mimir.CultMeshMedia.csproj
+++ b/src/Mimir.CultMeshMedia/Mimir.CultMeshMedia.csproj
@@ -11,8 +11,8 @@
-
-
+
+
diff --git a/src/Mimir.EveBrowserReference/Mimir.EveBrowserReference.csproj b/src/Mimir.EveBrowserReference/Mimir.EveBrowserReference.csproj
index ea6d407..ad5a698 100644
--- a/src/Mimir.EveBrowserReference/Mimir.EveBrowserReference.csproj
+++ b/src/Mimir.EveBrowserReference/Mimir.EveBrowserReference.csproj
@@ -10,8 +10,8 @@
-
-
+
+
diff --git a/src/Mimir.EveDashboard/Mimir.EveDashboard.csproj b/src/Mimir.EveDashboard/Mimir.EveDashboard.csproj
index 5e01cd5..b18d295 100644
--- a/src/Mimir.EveDashboard/Mimir.EveDashboard.csproj
+++ b/src/Mimir.EveDashboard/Mimir.EveDashboard.csproj
@@ -10,9 +10,9 @@
-
-
-
+
+
+
diff --git a/src/Mimir.EveSensorReceiver/Mimir.EveSensorReceiver.csproj b/src/Mimir.EveSensorReceiver/Mimir.EveSensorReceiver.csproj
index 48be7bc..a0eab2d 100644
--- a/src/Mimir.EveSensorReceiver/Mimir.EveSensorReceiver.csproj
+++ b/src/Mimir.EveSensorReceiver/Mimir.EveSensorReceiver.csproj
@@ -10,7 +10,7 @@
-
+
diff --git a/src/Mimir.Runtime/Mimir.Runtime.csproj b/src/Mimir.Runtime/Mimir.Runtime.csproj
index 4d06a5e..e2e9d59 100644
--- a/src/Mimir.Runtime/Mimir.Runtime.csproj
+++ b/src/Mimir.Runtime/Mimir.Runtime.csproj
@@ -12,9 +12,9 @@
-
-
-
+
+
+