diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,18 @@
 # Changelog
 
+## 0.5.1.0 — 2026-08-29
+
+### Changed
+
+- Upgraded to the Baikai 0.6 cohort: `baikai ^>=0.6.0.0`,
+  `baikai-claude ^>=0.6.0.0`, `baikai-effectful ^>=0.4.0.0`,
+  `shikumi ^>=0.3.0.3`, and `shikumi-trace ^>=0.2.0.3`. Internal embedding
+  construction now starts from Baikai's exported `emptyEmbeddingModel`, because
+  Baikai 0.6 hides the evolvable `EmbeddingModel` constructor. The project also
+  selects `http-client-tls ^>=0.4.0`, whose removal of a direct `crypton`
+  dependency lets the cohort coexist with Kioku's `crypton ^>=1.1.4` requirement.
+  Kioku's exported API and runtime behaviour are unchanged.
+
 ## 0.5.0.0 — 2026-08-22
 
 ### 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.5.0.0
+version:         0.5.1.0
 synopsis:        Reusable agent memory runtime
 description:
   Core runtime for kioku. M1 establishes the application effect stack; later
@@ -100,19 +100,15 @@
   -- mori://MMZK1526/mmzk-typeid/upstream-issues/mmzk-typeid-kindid-ghc-9-12-4-profiling-coercionkind-panic
   ghc-prof-options: -fno-opt-coercion
 
-  -- 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.
+  -- shikumi and shikumi-trace are pinned at their newest patch rather than
+  -- their series floor, because only shikumi 0.3.0.3 and shikumi-trace 0.2.0.3
+  -- carry the baikai 0.6 bounds. The earlier patches are tied to baikai 0.5 and
+  -- would give the solver a way to silently fall off this cohort.
   build-depends:
     , aeson                   >=2.2       && <2.3
-    , baikai                  ^>=0.5.0.0
-    , baikai-claude           ^>=0.5.0.0
-    , baikai-effectful        ^>=0.3.0.3
+    , baikai                  ^>=0.6.0.0
+    , baikai-claude           ^>=0.6.0.0
+    , baikai-effectful        ^>=0.4.0.0
     , base                    >=4.21      && <5
     , bytestring              >=0.11      && <0.13
     , containers              >=0.6       && <0.8
@@ -131,14 +127,14 @@
     , keiki                   ^>=0.9.0.0
     , keiro                   ^>=0.14.0.0
     , keiro-core              ^>=0.14.0.0
-    , kioku-api               ^>=0.5.0.0
+    , kioku-api               ^>=0.5.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.2
-    , shikumi-trace           ^>=0.2.0.2
+    , shikumi                 ^>=0.3.0.3
+    , shikumi-trace           ^>=0.2.0.3
     , text                    >=2.1       && <2.2
     , time                    >=1.12      && <1.15
     , unix                    >=2.8.8     && <2.9
@@ -177,7 +173,7 @@
   ghc-options:    -threaded -rtsopts -with-rtsopts=-N
   build-depends:
     , aeson                          >=2.2
-    , baikai                         ^>=0.5.0.0
+    , baikai                         ^>=0.6.0.0
     , base                           >=4.21      && <5
     , bytestring                     >=0.11
     , containers                     >=0.6
@@ -190,14 +186,14 @@
     , hasql-transaction              >=1.0
     , keiro                          ^>=0.14.0.0
     , keiro-core                     ^>=0.14.0.0
-    , kioku-api                      ^>=0.5.0.0
-    , kioku-core                     ^>=0.5.0.0
-    , kioku-migrations:test-support  ^>=0.5.0.0
+    , kioku-api                      ^>=0.5.1.0
+    , kioku-core                     ^>=0.5.1.0
+    , kioku-migrations:test-support  ^>=0.5.1.0
     , kiroku-store                   ^>=0.8.0.0
     , lens                           >=5.2
     , shibuya-core                   ^>=0.9.0.0
-    , shikumi                        ^>=0.3.0.2
-    , shikumi-trace                  ^>=0.2.0.2
+    , shikumi                        ^>=0.3.0.3
+    , shikumi-trace                  ^>=0.2.0.3
     , tasty                          >=1.5
     , tasty-expected-failure         >=0.12
     , tasty-hunit                    >=0.10
diff --git a/src/Kioku/Memory/Embedding.hs b/src/Kioku/Memory/Embedding.hs
--- a/src/Kioku/Memory/Embedding.hs
+++ b/src/Kioku/Memory/Embedding.hs
@@ -9,7 +9,7 @@
 where
 
 import Baikai.Auth (ApiKeySource (..))
-import Baikai.Embedding (EmbeddingModel (..), embedOne)
+import Baikai.Embedding (EmbeddingModel (..), embedOne, emptyEmbeddingModel)
 import Control.Concurrent (threadDelay)
 import Control.Exception (SomeException, try)
 import Crypto.Hash (Digest, SHA256)
@@ -46,11 +46,11 @@
 
 toEmbeddingModel :: EmbeddingConfig -> EmbeddingModel
 toEmbeddingModel cfg =
-  EmbeddingModel
+  emptyEmbeddingModel
     { modelId = cfg.model,
       baseUrl = cfg.baseUrl,
       dimensions = Just (fromIntegral @Int @Natural cfg.dimensions),
-      apiKey = ApiKeyLiteral cfg.apiKey
+      apiKey = Just (ApiKeyLiteral cfg.apiKey)
     }
 
 embedWithRetry :: EmbeddingModel -> Int -> Text -> IO (Either EmbedError (Vector Double))
diff --git a/test/Kioku/DistillSpec.hs b/test/Kioku/DistillSpec.hs
--- a/test/Kioku/DistillSpec.hs
+++ b/test/Kioku/DistillSpec.hs
@@ -5,7 +5,7 @@
   )
 where
 
-import Baikai (Response, _Response, _TextContent)
+import Baikai (Response, emptyResponse, emptyTextContent)
 import Baikai.Content (AssistantContent (..))
 import Baikai.Embedding (EmbeddingModel)
 import Data.Aeson qualified as Aeson
@@ -1732,10 +1732,10 @@
 
 mkResponse :: Text -> Response
 mkResponse responseText =
-  _Response
+  emptyResponse
     & #message
     . #content
-    .~ Vector.singleton (AssistantText (_TextContent & #text .~ responseText))
+    .~ Vector.singleton (AssistantText (emptyTextContent & #text .~ responseText))
 
 extractResponse :: Text
 extractResponse =
