diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -2,6 +2,11 @@
 
 `hstratus` uses [PVP Versioning][1].
 
+## 0.1.1.0 -- 2026-07-30
+
+* Add `Hstratus.Cli.Common` (parser for shared CLI options).
+* Remove dependency on `hstratus-auth-cli` sublibrary.
+
 ## 0.1.0.0 -- 2026-07-28
 
 * Initial version.
diff --git a/hstratus.cabal b/hstratus.cabal
--- a/hstratus.cabal
+++ b/hstratus.cabal
@@ -1,6 +1,6 @@
 cabal-version:      3.0
 name:               hstratus
-version:            0.1.0.0
+version:            0.1.1.0
 synopsis:           Unified CLI for iCloud services
 description:
   An @hstratus@ executable that provides subcommands for iCloud authentication,
@@ -33,6 +33,7 @@
   exposed-modules:
     Hstratus.Cli
     Hstratus.Cli.Auth
+    Hstratus.Cli.Common
     Hstratus.Cli.Drive
     Hstratus.Cli.Notes
   hs-source-dirs:   src
@@ -42,8 +43,7 @@
     , containers           >=0.6 && <0.8
     , directory            >=1.3 && <1.4
     , filepath             >=1.4 && <1.6
-    , hstratus-auth        >=0.1 && <0.2
-    , hstratus-auth:hstratus-auth-cli >=0.1 && <0.2
+    , hstratus-auth        >=0.2 && <0.3
     , hstratus-drive       >=0.1 && <0.2
     , hstratus-notes       >=0.1 && <0.2
     , http-client-tls      >=0.3 && <0.4
@@ -69,6 +69,7 @@
   hs-source-dirs:   test
   other-modules:
     Hstratus.Cli.AuthSpec
+    Hstratus.Cli.CommonSpec
     Hstratus.Cli.DriveSpec
     Hstratus.Cli.NotesSpec
   default-language: Haskell2010
@@ -80,7 +81,7 @@
     , filepath             >=1.4 && <1.6
     , hspec                >=2.1 && <3.0
     , hstratus
-    , hstratus-auth:hstratus-auth-cli
+    , hstratus-auth        >=0.2 && <0.3
     , hstratus-drive
     , hstratus-notes
     , optparse-applicative >=0.18 && <0.19
diff --git a/src/Hstratus/Cli/Auth.hs b/src/Hstratus/Cli/Auth.hs
--- a/src/Hstratus/Cli/Auth.hs
+++ b/src/Hstratus/Cli/Auth.hs
@@ -17,6 +17,7 @@
 
 import Control.Exception (bracket_, catch, displayException)
 import Data.String (fromString)
+import Hstratus.Cli.Common (commonOptsParser)
 import Network.HStratus.Http
   ( AuthError
   , login
@@ -25,7 +26,6 @@
   )
 import Network.HStratus.Http.Cli
   ( CommonOpts (..)
-  , commonOptsParser
   , mkLoggerFor
   , resolveLogTarget
   )
diff --git a/src/Hstratus/Cli/Common.hs b/src/Hstratus/Cli/Common.hs
new file mode 100644
--- /dev/null
+++ b/src/Hstratus/Cli/Common.hs
@@ -0,0 +1,27 @@
+{- |
+Module      : Hstratus.Cli.Common
+Copyright   : (c) 2026 Tim Emiola
+Maintainer  : Tim Emiola <adetokunbo@emio.la>
+SPDX-License-Identifier: BSD-3-Clause
+
+Optparse-applicative parser for the options shared by all iCloud CLI subcommands.
+-}
+module Hstratus.Cli.Common
+  ( commonOptsParser
+  )
+where
+
+import Network.HStratus.Http.Cli (CommonOpts (..))
+import Options.Applicative
+
+
+-- | Parser for 'CommonOpts'.
+commonOptsParser :: Parser CommonOpts
+commonOptsParser =
+  CommonOpts
+    <$> switch (long "china" <> help "Use mainland China endpoints")
+    <*> switch (long "log" <> help "Append HTTP exchanges to the default log file")
+    <*> optional
+      (strOption (long "log-file" <> metavar "FILE" <> help "Append HTTP exchanges to FILE"))
+    <*> switch (long "log-bodies" <> help "Include request bodies in the HTTP exchange log")
+    <*> switch (long "redact" <> help "Redact sensitive headers (tokens, cookies) in the log")
diff --git a/src/Hstratus/Cli/Drive.hs b/src/Hstratus/Cli/Drive.hs
--- a/src/Hstratus/Cli/Drive.hs
+++ b/src/Hstratus/Cli/Drive.hs
@@ -43,6 +43,7 @@
 import qualified Data.Text as Text
 import Data.Time (UTCTime)
 import Data.Time.Format (defaultTimeLocale, formatTime)
+import Hstratus.Cli.Common (commonOptsParser)
 import Network.HStratus.Drive
   ( DriveApi
   , DriveError
@@ -57,7 +58,7 @@
   , mkDriveApi
   , selectFileNode
   )
-import Network.HStratus.Http.Cli (CommonOpts (..), commonOptsParser, onServiceError, runWithApi)
+import Network.HStratus.Http.Cli (CommonOpts (..), onServiceError, runWithApi)
 import Options.Applicative
 import System.Directory (createDirectoryIfMissing, getHomeDirectory)
 import System.Exit (die)
diff --git a/src/Hstratus/Cli/Notes.hs b/src/Hstratus/Cli/Notes.hs
--- a/src/Hstratus/Cli/Notes.hs
+++ b/src/Hstratus/Cli/Notes.hs
@@ -35,7 +35,8 @@
 import Data.Text (Text)
 import qualified Data.Text as Text
 import qualified Data.Text.IO as TIO
-import Network.HStratus.Http.Cli (CommonOpts (..), commonOptsParser, onServiceError, runWithApi)
+import Hstratus.Cli.Common (commonOptsParser)
+import Network.HStratus.Http.Cli (CommonOpts (..), onServiceError, runWithApi)
 import Network.HStratus.Notes
 import Network.HStratus.Notes.Markdown (noteToMarkdown)
 import Options.Applicative
diff --git a/test/Hstratus/Cli/CommonSpec.hs b/test/Hstratus/Cli/CommonSpec.hs
new file mode 100644
--- /dev/null
+++ b/test/Hstratus/Cli/CommonSpec.hs
@@ -0,0 +1,55 @@
+{-# LANGUAGE OverloadedStrings #-}
+
+{- |
+Module      : Hstratus.Cli.CommonSpec
+Copyright   : (c) 2026 Tim Emiola
+Maintainer  : Tim Emiola <adetokunbo@emio.la>
+SPDX-License-Identifier: BSD-3-Clause
+
+Tests for the shared CLI options parser in 'Hstratus.Cli.Common'.
+-}
+module Hstratus.Cli.CommonSpec (spec) where
+
+import Hstratus.Cli.Common (commonOptsParser)
+import Network.HStratus.Http.Cli (CommonOpts (..))
+import Options.Applicative (ParserResult (..), defaultPrefs, execParserPure, fullDesc, info, renderFailure)
+import Test.Hspec
+import Test.Hspec.Benri (endsRight)
+
+
+defaultOpts :: CommonOpts
+defaultOpts = CommonOpts False False Nothing False False
+
+
+spec :: Spec
+spec = describe "Hstratus.Cli.Common.commonOptsParser" $ do
+  it "defaults all flags to False with no log file" $
+    pure (parseOpts []) `endsRight` defaultOpts
+
+  it "sets optChina when --china is given" $
+    fmap optChina (parseOpts ["--china"]) `shouldBe` Right True
+
+  it "sets optLog when --log is given" $
+    fmap optLog (parseOpts ["--log"]) `shouldBe` Right True
+
+  it "sets optLogFile when --log-file is given" $
+    fmap optLogFile (parseOpts ["--log-file", "/tmp/test.log"])
+      `shouldBe` Right (Just "/tmp/test.log")
+
+  it "sets optLogBodies when --log-bodies is given" $
+    fmap optLogBodies (parseOpts ["--log-bodies"]) `shouldBe` Right True
+
+  it "sets optRedact when --redact is given" $
+    fmap optRedact (parseOpts ["--redact"]) `shouldBe` Right True
+
+  it "accepts multiple flags together" $
+    pure (parseOpts ["--log", "--redact", "--china"])
+      `endsRight` defaultOpts{optChina = True, optLog = True, optRedact = True}
+
+
+parseOpts :: [String] -> Either String CommonOpts
+parseOpts args =
+  case execParserPure defaultPrefs (info commonOptsParser fullDesc) args of
+    Success opts -> Right opts
+    Failure failure -> Left (fst (renderFailure failure "test"))
+    CompletionInvoked _ -> Left "completion invoked"
diff --git a/test/Spec.hs b/test/Spec.hs
--- a/test/Spec.hs
+++ b/test/Spec.hs
@@ -1,6 +1,7 @@
 module Main where
 
 import qualified Hstratus.Cli.AuthSpec as Auth
+import qualified Hstratus.Cli.CommonSpec as Common
 import qualified Hstratus.Cli.DriveSpec as Drive
 import qualified Hstratus.Cli.NotesSpec as Notes
 import System.IO
@@ -18,5 +19,6 @@
   hSetBuffering stderr NoBuffering
   hspec $ do
     Auth.spec
+    Common.spec
     Drive.spec
     Notes.spec
