diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,10 @@
 # Changelog for agentic-anthropic
 
+## 0.2.1.0 - 2026-11-06
+
+* Follow Agentic's `Structure`/`Outline` API and fallible model compilation.
+  Provider wire schemas and protocols are unchanged.
+
 ## 0.2.0.5 - 2026-10-06
 
 * No changes; released alongside agentic 0.2.0.5.
diff --git a/agentic-anthropic.cabal b/agentic-anthropic.cabal
--- a/agentic-anthropic.cabal
+++ b/agentic-anthropic.cabal
@@ -1,6 +1,6 @@
 cabal-version:      3.0
 name:               agentic-anthropic
-version:            0.2.0.5
+version:            0.2.1.0
 synopsis:           Claude as the System Two provider for agentic
 description:
   Runs agentic's draft steps on Claude through the Messages API, with strict structured outputs and tools, and can stand in as System One.
@@ -37,8 +37,8 @@
   hs-source-dirs:   src
   exposed-modules:  Agentic.Anthropic
   build-depends:
-    , agentic          ==0.2.*
-    , agentic-aeson    ==0.2.*
+    , agentic          >=0.2.1 && <0.3
+    , agentic-aeson    >=0.2.1 && <0.3
     , aeson            >=2.1 && <2.3
     , base             >=4.18 && <5
     , bytestring       >=0.11 && <0.13
@@ -52,9 +52,9 @@
   hs-source-dirs:   test
   main-is:          Spec.hs
   build-depends:
-    , agentic          ==0.2.*
-    , agentic-aeson    ==0.2.*
-    , agentic-anthropic ==0.2.*
+    , agentic          >=0.2.1 && <0.3
+    , agentic-aeson    >=0.2.1 && <0.3
+    , agentic-anthropic >=0.2.1 && <0.3
     , aeson            >=2.1 && <2.3
     , base             >=4.18 && <5
     , hspec            >=2.10 && <3
@@ -66,9 +66,9 @@
   hs-source-dirs:   test-live
   main-is:          Live.hs
   build-depends:
-    , agentic          ==0.2.*
-    , agentic-anthropic ==0.2.*
-    , agentic-io       ==0.2.*
+    , agentic          >=0.2.1 && <0.3
+    , agentic-anthropic >=0.2.1 && <0.3
+    , agentic-io       >=0.2.1 && <0.3
     , base             >=4.18 && <5
     , hspec            >=2.10 && <3
     , text             >=2.0 && <2.2
diff --git a/test-live/Live.hs b/test-live/Live.hs
--- a/test-live/Live.hs
+++ b/test-live/Live.hs
@@ -33,7 +33,7 @@
   deriving (Show, Eq)
 
 instance Contract Rating where
-  contract = mapCodec Rating (\(Rating n) -> n) (between 1 10 contract)
+  contract = mapStructure Rating (\(Rating n) -> n) (between 1 10 contract)
 
 main :: IO ()
 main = do
diff --git a/test/Spec.hs b/test/Spec.hs
--- a/test/Spec.hs
+++ b/test/Spec.hs
@@ -1,6 +1,7 @@
 module Main (main) where
 
 import Agentic
+import Agentic.Scripted (modelContract)
 import Agentic.Runtime (Conversation (..))
 import Agentic.Schema (Shape (..))
 import Agentic.Aeson (toAeson)
@@ -20,8 +21,8 @@
     , instruction = "Suggest 3 dinosaurs"
     , input = Null
     , inputSchema = schemaOf SNull
-    , tools = [ToolSpec "search" "Search the fossil database" ((contract @Text).schema)]
-    , outputSchema = (contract @[Text]).schema
+    , tools = [ToolSpec "search" "Search the fossil database" ((modelContract @Text).schema)]
+    , outputSchema = (modelContract @[Text]).schema
     , history = []
     }
 
@@ -48,7 +49,7 @@
         )
 
   it "keeps a record's field order in its schema" $ do
-    let body = renderJson (requestBody anthropic conversation {outputSchema = (contract @(Text, Text, Text)).schema})
+    let body = renderJson (requestBody anthropic conversation {outputSchema = (modelContract @(Text, Text, Text)).schema})
         at' k = T.length (fst (T.breakOn k body))
     (at' "\"_1\"" < at' "\"_2\"", at' "\"_2\"" < at' "\"_3\"") `shouldBe` (True, True)
 
