diff --git a/python/online/fxreader/pr34/commands_typed/cli.py b/python/online/fxreader/pr34/commands_typed/cli.py
index fbc69ad..32c15cd 100644
--- a/python/online/fxreader/pr34/commands_typed/cli.py
+++ b/python/online/fxreader/pr34/commands_typed/cli.py
@@ -65,6 +65,38 @@ class CLI(abc.ABC):
             argv,
         )
 
+    def ruff(
+        self,
+        project_name: str,
+        argv: list[str],
+    ) -> None:
+        project = self.projects[project_name]
+
+        if len(argv) == 0:
+            argv = ['check', '.',]
+
+        subprocess.check_call([
+            'ruff',
+            '--config', str(project.source_dir / 'pyproject.toml'),
+            *argv,
+        ])
+
+    def pyright(
+        self,
+        project_name: str,
+        argv: list[str],
+    ) -> None:
+        project = self.projects[project_name]
+
+        if len(argv) == 0:
+            argv = ['--threads', '3', '.']
+
+        subprocess.check_call([
+            'pyright',
+            '-p', str(project.source_dir / 'pyproject.toml'),
+            *argv,
+        ])
+
     def pip_sync(
         self,
         project: str,
diff --git a/releases/whl/online_fxreader_pr34-0.1.5.10-py3-none-any.whl b/releases/whl/online_fxreader_pr34-0.1.5.10-py3-none-any.whl
new file mode 100644
index 0000000..973950c
--- /dev/null
+++ b/releases/whl/online_fxreader_pr34-0.1.5.10-py3-none-any.whl
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:bef5e02b35cebe9941c0e4bcaf8fddb9409ac742d93b28a095dcd3288d551042
+size 69460