diff --git a/WEEK-8/dshlib.c b/WEEK-8/dshlib.c
new file mode 100644
index 0000000000000000000000000000000000000000..aa76f566a56d7a1a4851a72c989ce3f1166e8ef0
--- /dev/null
+++ b/WEEK-8/dshlib.c
@@ -0,0 +1,78 @@
+#include "dshlib.h"
+#include "rshlib.h"
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+
+/**
+ * Parses a command string into a structured `command_list_t`
+ */
+int build_cmd_list(char *cmd, command_list_t *clist) {
+    if (!cmd || !clist) return ERR_RDSH_CMD_PARSE;
+
+    memset(clist, 0, sizeof(command_list_t));
+    char *token = strtok(cmd, " ");
+    if (!token) return ERR_RDSH_CMD_PARSE;
+
+    clist->commands[0].argv[0] = strdup(token);
+    int arg_count = 1;
+
+    while ((token = strtok(NULL, " ")) != NULL) {
+        clist->commands[0].argv[arg_count++] = strdup(token);
+        if (arg_count >= MAX_ARGS) break;
+    }
+
+    clist->commands[0].argv[arg_count] = NULL;
+    clist->command_count = 1;
+    return OK;
+}
+
+/**
+ * Identifies built-in commands.
+ */
+Built_In_Cmds rsh_match_command(const char *input) {
+    if (strcmp(input, "exit") == 0) return BI_CMD_EXIT;
+    if (strcmp(input, "stop-server") == 0) return BI_CMD_STOP_SVR;
+    if (strcmp(input, "cd") == 0) return BI_CMD_CD;
+    return BI_NOT_BI;
+}
+
+/**
+ * Executes built-in commands (e.g., `cd`).
+ */
+int exec_builtin_command(Built_In_Cmds cmd_type, char *arg) {
+    if (cmd_type == BI_CMD_CD) {
+        if (chdir(arg) != 0) {
+            perror("[ERROR] cd failed");
+            return ERR_RDSH_CMD_EXEC;
+        }
+        return OK;
+    }
+    return ERR_RDSH_CMD_EXEC;
+}
+
+/**
+ * Local shell execution loop.
+ */
+int exec_local_cmd_loop() {
+    char command[RDSH_COMM_BUFF_SZ];
+
+    while (1) {
+        printf("dsh4> ");
+        if (fgets(command, sizeof(command), stdin) == NULL) {
+            printf("\n");
+            break;
+        }
+        command[strcspn(command, "\n")] = '\0';
+
+        if (strcmp(command, "exit") == 0) {
+            printf("[DEBUG] Local shell exiting...\n");
+            break;
+        }
+
+        system(command);
+    }
+
+    return OK;
+}