diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,29 @@
 # Changelog
 
+## 0.4.1.0 — 2026-08-18
+
+### Changed
+
+- Moved onto the Baikai 0.5 cohort: `baikai ^>=0.5.0.0`, `baikai-claude ^>=0.5.0.0`,
+  `baikai-effectful ^>=0.3.0.3`, `shikumi ^>=0.3.0.2`, and `shikumi-trace ^>=0.2.0.2`. This is a
+  bounds-only change — no `kioku-core` source changed and nothing it exports moved. Consumers
+  pinned to Baikai 0.4 must move with it.
+
+  `baikai-effectful` has no 0.5 release and never had a 0.4 one; 0.3.0.3 is the patch that widened
+  its own `baikai` bound, so its version lags the rest of the cohort by design. `shikumi` and
+  `shikumi-trace` are pinned at their newest patch rather than their series floor, because only
+  those patches carry the Baikai 0.5 bounds; the earlier ones are tied to Baikai 0.4 and would
+  give the solver a way to silently fall off the cohort.
+
+  None of Baikai 0.5's breaking changes reach `kioku-core`. It touches only `Baikai.Auth`,
+  `Baikai.Embedding`, `Baikai.Model`, `Baikai.Models.Generated`, `Baikai.Provider.Claude.Api`, and
+  `Baikai.Provider.Registry`, none of which changed. `Response` gained an `evidence` field, but
+  `kioku-core` only ever builds one in tests through the exported empty value rather than the
+  record constructor, so the new field defaults in. It implements no provider, so the
+  `doneTerminal`/`errorTerminal` signature change is unreachable; it decodes no `TraceEvent`, so
+  the hand-written `FromJSON` is not a concern; and it stores no Baikai call identifier, so
+  `newCallId`'s widening from 16 to 32 characters crosses no schema.
+
 ## 0.4.0.0 — 2026-08-17
 
 ### Breaking Changes
diff --git a/kioku-core.cabal b/kioku-core.cabal
--- a/kioku-core.cabal
+++ b/kioku-core.cabal
@@ -1,6 +1,6 @@
 cabal-version:   3.0
 name:            kioku-core
-version:         0.4.0.0
+version:         0.4.1.0
 synopsis:        Reusable agent memory runtime
 description:
   Core runtime for kioku. M1 establishes the application effect stack; later
@@ -100,17 +100,19 @@
   -- mori://MMZK1526/mmzk-typeid/upstream-issues/mmzk-typeid-kindid-ghc-9-12-4-profiling-coercionkind-panic
   ghc-prof-options: -fno-opt-coercion
 
-  -- Two bounds below look wrong but are not. baikai-effectful has no 0.4
-  -- release; 0.3.0.2 is its newest and is itself built against baikai ^>=0.4.0,
-  -- so its version lags the rest of the Baikai cohort by design. And shikumi is
-  -- pinned at ^>=0.3.0.1 rather than ^>=0.3.0.0 because only that patch carries
-  -- the baikai 0.4 bounds -- 0.3.0.0 is tied to baikai 0.3 and would give the
-  -- solver a way to silently fall off this cohort.
+  -- The baikai-effectful bound below looks wrong but is not. That package has
+  -- never had a 0.4 or 0.5 release; 0.3.0.3 is its newest and is the patch that
+  -- widened its own baikai bound to admit 0.5, so its version lags the rest of
+  -- the Baikai cohort by design. shikumi and shikumi-trace are likewise pinned
+  -- at their newest patch rather than their series floor, because only
+  -- shikumi 0.3.0.2 and shikumi-trace 0.2.0.2 carry the baikai 0.5 bounds --
+  -- the earlier patches are tied to baikai 0.4 and would give the solver a way
+  -- to silently fall off this cohort.
   build-depends:
     , aeson                   >=2.2       && <2.3
-    , baikai                  ^>=0.4.1.0
-    , baikai-claude           ^>=0.4.0.1
-    , baikai-effectful        ^>=0.3.0.2
+    , baikai                  ^>=0.5.0.0
+    , baikai-claude           ^>=0.5.0.0
+    , baikai-effectful        ^>=0.3.0.3
     , base                    >=4.21      && <5
     , bytestring              >=0.11      && <0.13
     , containers              >=0.6       && <0.8
@@ -129,14 +131,14 @@
     , keiki                   ^>=0.9.0.0
     , keiro                   ^>=0.13.0.0
     , keiro-core              ^>=0.13.0.0
-    , kioku-api               ^>=0.4.0.0
+    , kioku-api               ^>=0.4.1.0
     , kiroku-store            ^>=0.8.0.0
     , lens                    >=5.2       && <5.4
     , mmzk-typeid             >=0.7       && <0.8
     , shibuya-core            ^>=0.9.0.0
     , shibuya-kiroku-adapter  ^>=0.5.1.1
-    , shikumi                 ^>=0.3.0.1
-    , shikumi-trace           ^>=0.2.0.1
+    , shikumi                 ^>=0.3.0.2
+    , shikumi-trace           ^>=0.2.0.2
     , text                    >=2.1       && <2.2
     , time                    >=1.12      && <1.15
     , unordered-containers    >=0.2       && <0.3
@@ -175,7 +177,7 @@
   ghc-options:    -threaded -rtsopts -with-rtsopts=-N
   build-depends:
     , aeson                          >=2.2
-    , baikai                         ^>=0.4.1.0
+    , baikai                         ^>=0.5.0.0
     , base                           >=4.21      && <5
     , bytestring                     >=0.11
     , containers                     >=0.6
@@ -188,14 +190,14 @@
     , hasql-transaction              >=1.0
     , keiro                          ^>=0.13.0.0
     , keiro-core                     ^>=0.13.0.0
-    , kioku-api                      ^>=0.4.0.0
-    , kioku-core                     ^>=0.4.0.0
-    , kioku-migrations:test-support  ^>=0.4.0.0
+    , kioku-api                      ^>=0.4.1.0
+    , kioku-core                     ^>=0.4.1.0
+    , kioku-migrations:test-support  ^>=0.4.1.0
     , kiroku-store                   ^>=0.8.0.0
     , lens                           >=5.2
     , shibuya-core                   ^>=0.9.0.0
-    , shikumi                        ^>=0.3.0.1
-    , shikumi-trace                  ^>=0.2.0.1
+    , shikumi                        ^>=0.3.0.2
+    , shikumi-trace                  ^>=0.2.0.2
     , tasty                          >=1.5
     , tasty-expected-failure         >=0.12
     , tasty-hunit                    >=0.10
