```diff
--- test_files/305-original.txt	2025-03-07 19:06:45
+++ test_files/305-modified.txt	2025-03-07 19:06:45
@@ -1,22 +1,16 @@
+from typing import Dict
+
 from pydantic import Field
 
+from composio.tools.base.local import LocalAction
+from composio.tools.env.constants import EXIT_CODE, STDERR
 from composio.tools.local.shelltool.shell_exec.actions.exec import (
-    BaseExecCommand,
     ShellExecResponse,
     ShellRequest,
-    exec_cmd,
 )
-from composio.tools.local.shelltool.utils import (
-    get_logger,
-    git_clone_cmd,
-    git_reset_cmd,
-)
+from composio.tools.local.shelltool.utils import git_clone_cmd, git_reset_cmd
 
 
-LONG_TIMEOUT = 200
-logger = get_logger("workspace")
-
-
 class GithubCloneRequest(ShellRequest):
     repo_name: str = Field(
         ...,
@@ -38,40 +32,22 @@
     pass
 
 
-class GithubCloneCmd(BaseExecCommand):
-    """
-    Clones a github repository at a given commit-id.
-    """
+class GithubCloneCmd(LocalAction[GithubCloneRequest, GithubCloneResponse]):
+    """Clones a github repository at a given commit-id."""
 
-    _display_name = "Clone Github Repository Action"
-    _tool_name = "gitcmdtool"
-    _request_schema = GithubCloneRequest
-    _response_schema = GithubCloneResponse
+    _tags = ["cli"]
 
     def execute(
-        self, request_data: ShellRequest, authorisation_data: dict
-    ) -> ShellExecResponse:
-        request_data = GithubCloneRequest(**request_data.model_dump())
-        if request_data.just_reset:
-            return self.reset_to_base_commit(request_data, authorisation_data)
-        output = exec_cmd(
-            cmd=git_clone_cmd(request_data),
-            authorisation_data=authorisation_data,
-            shell_id=request_data.shell_id,
+        self, request: GithubCloneRequest, metadata: Dict
+    ) -> GithubCloneResponse:
+        cmd = (
+            git_reset_cmd(request.commit_id)
+            if request.just_reset
+            else git_clone_cmd(request)
         )
-        return ShellExecResponse(stdout=output["stdout"], stderr=output["stderr"])
-
-    def reset_to_base_commit(
-        self, request_data: GithubCloneRequest, authorisation_data: dict
-    ) -> ShellExecResponse:
-        """
-        Resets the repository to the specified base commit and cleans any untracked files or changes.
-        Assumes the repository already exists as cloned by the execute function.
-        """
-        logger.info("Resetting repository to base commit inside reset_to_base_commit")
-        output = exec_cmd(
-            cmd=git_reset_cmd(request_data.commit_id),
-            authorisation_data=authorisation_data,
-            shell_id=request_data.shell_id,
+        output = self.shells.get(id=request.shell_id).exec(cmd=cmd)
+        return GithubCloneResponse(
+            stdout=output[STDERR],
+            stderr=output[STDERR],
+            exit_code=int(output[EXIT_CODE]),
         )
-        return ShellExecResponse(stdout=output["stdout"], stderr=output["stderr"])
```
