diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index 8e263f54a9dbe8bf00b68b5b8766e2991b87fa99..8896d0293ee4846fc643b1d2717328ccce768b3a 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -6,11 +6,11 @@
 # See https://pre-commit.com/hooks.html for more hooks
 repos:
   - repo: https://github.com/psf/black
-    rev: 23.1.0
+    rev: 23.11.0
     hooks:
       - id: black
   - repo: https://github.com/pycqa/docformatter
-    rev: v1.5.1
+    rev: v1.7.5
     hooks:
       - id: docformatter
   - repo: https://github.com/pycqa/isort
@@ -18,11 +18,11 @@ repos:
     hooks:
       - id: isort
   - repo: https://github.com/pycqa/flake8
-    rev: 6.0.0
+    rev: 6.1.0
     hooks:
       - id: flake8
   - repo: https://github.com/pre-commit/mirrors-mypy
-    rev: v1.0.0
+    rev: v1.7.1
     hooks:
     - id: mypy
       args: [
@@ -33,12 +33,12 @@ repos:
       ]
       exclude: '^.*/data/second_config\.py$'
   - repo: https://github.com/asottile/pyupgrade
-    rev: v3.3.1
+    rev: v3.15.0
     hooks:
     - id: pyupgrade
       args: [--py38-plus]
   - repo: https://github.com/pre-commit/pre-commit-hooks
-    rev: v4.4.0
+    rev: v4.5.0
     hooks:
       - id: check-ast
       - id: check-added-large-files
@@ -51,6 +51,6 @@ repos:
       - id: end-of-file-fixer
       - id: debug-statements
   - repo: https://github.com/fsfe/reuse-tool
-    rev: v1.1.2
+    rev: v2.1.0
     hooks:
       - id: reuse
diff --git a/doc/example_alias.py b/doc/example_alias.py
index 9072989f67f2aa2b8fbd71ec0847802b878433a7..b4d45c06133c086fec622e1b2757540c90c5e2be 100644
--- a/doc/example_alias.py
+++ b/doc/example_alias.py
@@ -1,7 +1,6 @@
 # SPDX-FileCopyrightText: Copyright © 2022 Idiap Research Institute <contact@idiap.ch>
 #
 # SPDX-License-Identifier: BSD-3-Clause
-
 """An example script to demonstrate config-file option readout."""
 
 # To improve loading performance, we recommend you only import the very
diff --git a/doc/example_cli.py b/doc/example_cli.py
index 884b0770ea646c90cf5debca3aee696f7f1c23bb..1db77c7e15915bc36e075c0dd2244e3ceae516cc 100644
--- a/doc/example_cli.py
+++ b/doc/example_cli.py
@@ -1,7 +1,6 @@
 # SPDX-FileCopyrightText: Copyright © 2022 Idiap Research Institute <contact@idiap.ch>
 #
 # SPDX-License-Identifier: BSD-3-Clause
-
 """An example script to demonstrate config-file option readout."""
 
 # To improve loading performance, we recommend you only import the very
diff --git a/src/clapper/click.py b/src/clapper/click.py
index 05d48845f671b59620f3d54ea3622c0331592e4b..38479ffd4f205660939c35b45a08935f9f9eddc2 100644
--- a/src/clapper/click.py
+++ b/src/clapper/click.py
@@ -1,7 +1,6 @@
 # SPDX-FileCopyrightText: Copyright © 2022 Idiap Research Institute <contact@idiap.ch>
 #
 # SPDX-License-Identifier: BSD-3-Clause
-
 """Helpers to build command-line interfaces (CLI) via :py:mod:`click`."""
 
 from __future__ import annotations
diff --git a/src/clapper/config.py b/src/clapper/config.py
index 8dcabc16c703e53771c3a85ba4081f809d7f9b3c..3dd2fe71a658a7f608226d6c16aff3f598cfdcd0 100644
--- a/src/clapper/config.py
+++ b/src/clapper/config.py
@@ -1,7 +1,6 @@
 # SPDX-FileCopyrightText: Copyright © 2022 Idiap Research Institute <contact@idiap.ch>
 #
 # SPDX-License-Identifier: BSD-3-Clause
-
 """Functionality to implement python-based config file parsing and loading."""
 
 from __future__ import annotations
diff --git a/src/clapper/logging.py b/src/clapper/logging.py
index f00d44d6861704e4b51cd1310316cf55523cabdd..eb9ad0289c51480ea8d1f1e7780f9958f492e6dd 100644
--- a/src/clapper/logging.py
+++ b/src/clapper/logging.py
@@ -1,8 +1,7 @@
 # SPDX-FileCopyrightText: Copyright © 2022 Idiap Research Institute <contact@idiap.ch>
 #
 # SPDX-License-Identifier: BSD-3-Clause
-
-""":py:class:`logging.Logger` setup and stream separation"""
+""":py:class:`logging.Logger` setup and stream separation."""
 
 import logging
 import sys
@@ -12,8 +11,7 @@ import typing
 # debug and info messages are written to sys.stdout
 class _InfoFilter(logging.Filter):
     """Filter-class to delete any log-record with level above
-    :any:`logging.INFO` **before** reaching the handler.
-    """
+    :any:`logging.INFO` **before** reaching the handler."""
 
     def __init__(self):
         super().__init__()
diff --git a/src/clapper/rc.py b/src/clapper/rc.py
index 3a93898cb755e1d613dd75f61d21390e438d4a3f..f709038167dbb3b457df38def00eb0126c73b728 100644
--- a/src/clapper/rc.py
+++ b/src/clapper/rc.py
@@ -1,7 +1,6 @@
 # SPDX-FileCopyrightText: Copyright © 2022 Idiap Research Institute <contact@idiap.ch>
 #
 # SPDX-License-Identifier: BSD-3-Clause
-
 """Implements a global configuration system setup and readout."""
 
 from __future__ import annotations
diff --git a/tests/test_click.py b/tests/test_click.py
index 6ce1844d9f813ebded3ca2d6388e4f2f2c67a557..3b6f4fc82c08e6e3e62ec7f9d308ae0cab28eb88 100644
--- a/tests/test_click.py
+++ b/tests/test_click.py
@@ -63,7 +63,7 @@ def test_commands_with_config_2():
     @click.command(cls=ConfigCommand, entry_point_group="clapper.test.config")
     @click.option("-a", type=click.INT, cls=ResourceOption)
     def cli(a, **_):
-        assert type(a) == int, (type(a), a)
+        assert isinstance(a, int), (type(a), a)
         click.echo(f"{a}")
 
     runner = CliRunner()