```diff
--- test_files/311-original.txt	2025-03-07 19:06:45
+++ test_files/311-modified.txt	2025-03-07 19:06:45
@@ -3,11 +3,12 @@
 import shutil
 import subprocess
 import tempfile
+import typing as t
 from pathlib import Path
 
 from pydantic import BaseModel, Field
 
-from composio.tools.local.base import Action
+from composio.tools.base.local import LocalAction
 
 
 # pylint: disable=consider-using-with,unspecified-encoding
@@ -25,7 +26,7 @@
             "yarn start",
         ],
     )
-    working_dir: str = Field(
+    working_dir: t.Optional[str] = Field(
         None,
         description=(
             "Directory where this command should be executed, "
@@ -55,7 +56,7 @@
     )
 
 
-class SpawnProcess(Action):
+class SpawnProcess(LocalAction[SpawnRequest, SpawnResponse]):
     """
     Spawn a process.
 
@@ -65,22 +66,14 @@
     cmd: python path/to/script.py
     """
 
-    _display_name = "Spawn Process"
-    _tool_name = "shell"
-    _request_schema = SpawnRequest
-    _response_schema = SpawnResponse
     _tags = ["workspace", "shell"]
 
-    def execute(
-        self,
-        request_data: SpawnRequest,
-        authorisation_data: dict,
-    ) -> SpawnResponse:
+    def execute(self, request: SpawnRequest, metadata: t.Dict) -> SpawnResponse:
         """Execute a shell command."""
-        cmd, *args = request_data.cmd.split(" ")
-        cmd = shutil.which(cmd=cmd)  # type: ignore
+        _cmd, *args = request.cmd.split(" ")
+        cmd = shutil.which(cmd=_cmd)  # type: ignore
         if cmd is None:
-            raise ValueError(f"Command `{cmd}` not found!")
+            raise ValueError(f"Command `{_cmd}` not found!")
 
         tempdir = tempfile.TemporaryDirectory()
         stdout = Path(tempdir.name, "stdout.txt")
@@ -90,7 +83,7 @@
             start_new_session=True,
             stdout=stdout.open("w+"),
             stderr=stderr.open("w+"),
-            cwd=str(request_data.working_dir or Path.cwd()),
+            cwd=str(request.working_dir or Path.cwd()),
         )
         pid = Path(tempdir.name, "pid.txt")
         pid.write_text(str(process.pid))
```
