diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml
index 14fe77a6b..8b62ed375 100644
--- a/.github/workflows/main.yml
+++ b/.github/workflows/main.yml
@@ -64,7 +64,7 @@ jobs:
         run: |
           pip install --upgrade pip
           pip install poetry
-          poetry install --no-root
+          poetry install --no-root --with dev
 
       - name: Lint
         if: success() || steps.install.outcome == 'success'
diff --git a/.gitpod.yml b/.gitpod.yml
index 5b889cefc..8321e1902 100644
--- a/.gitpod.yml
+++ b/.gitpod.yml
@@ -9,7 +9,7 @@ ports:
 
 # List the start up tasks. You can start them in parallel in multiple terminals. See https://www.gitpod.io/docs/44_config_start_tasks/
 tasks:
-- init: poetry install --no-root
+- init: poetry install --no-root --with dev
 - init: mkdir -p /workspace/data
   command: mongod --dbpath /workspace/data --bind_ip 127.0.0.1
 
diff --git a/README.md b/README.md
index b5f2aaacb..bfae56581 100644
--- a/README.md
+++ b/README.md
@@ -22,9 +22,11 @@ Requirements:
 
 ```shell script
 pip install poetry
-poetry install
+poetry install --no-root
 ```
 
+For development, use `poetry install --no-root --with dev`.
+
 If `libcst` installation fails (because a binary wheel is not available for Linux/Windows + Pypy) you may need to install
 the [rust compiler](https://www.rust-lang.org/tools/install) to solve it.
 
diff --git a/poetry.lock b/poetry.lock
index 594e169e1..331a1f756 100644
--- a/poetry.lock
+++ b/poetry.lock
@@ -2200,4 +2200,4 @@ files = [
 [metadata]
 lock-version = "2.0"
 python-versions = "^3.9.0"
-content-hash = "92ec86e9f73aef59e6fc673a179317b910b4ac5c099dfc3dbc8dc8112e4fccca"
+content-hash = "ce95bcac36a1c55df7269a651d0fee1c5722df27df09a85a338cf6ca0c37d0a8"
diff --git a/pyproject.toml b/pyproject.toml
index 62415a431..6a5296081 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -36,7 +36,9 @@ natsort = "^8.4.0"
 ruff = "^0.5.5"
 
 
-[tool.poetry.dev-dependencies]
+[tool.poetry.group.dev]
+optional = true
+[tool.poetry.group.dev.dependencies]
 pytest = "*"
 pytest-cov = "*"
 freezegun = "*"