diff --git a/app/modules/tag/manifest.json b/app/modules/tag/manifest.json
index 7372b40..3cbfdda 100644
--- a/app/modules/tag/manifest.json
+++ b/app/modules/tag/manifest.json
@@ -4,6 +4,7 @@
   "author": "ITGuild",
   "slug": "tag",
   "description": "Tags module",
+  "module_path": "{APP}/modules/{slug}",
   "module_class": "app\\modules\\tag\\TagModule",
   "module_class_file": "{APP}/modules/tag/TagModule.php"
 }
\ No newline at end of file
diff --git a/app/tables/columns/menu/MenuDeleteActionColumn.php b/app/tables/columns/menu/MenuDeleteActionColumn.php
deleted file mode 100644
index 8b70f7d..0000000
--- a/app/tables/columns/menu/MenuDeleteActionColumn.php
+++ /dev/null
@@ -1,17 +0,0 @@
-baseUrl . $this->prefix . $this->id;
-//        return " Удалить ";
-//    }
-//}
\ No newline at end of file
diff --git a/app/tables/columns/menu/MenuEditActionColumn.php b/app/tables/columns/menu/MenuEditActionColumn.php
deleted file mode 100644
index 33cded5..0000000
--- a/app/tables/columns/menu/MenuEditActionColumn.php
+++ /dev/null
@@ -1,17 +0,0 @@
-baseUrl . $this->prefix . $this->id;
-//        return " Редактировать ";
-//    }
-//}
\ No newline at end of file
diff --git a/app/tables/columns/menu/MenuViewActionColumn.php b/app/tables/columns/menu/MenuViewActionColumn.php
deleted file mode 100644
index b6b8831..0000000
--- a/app/tables/columns/menu/MenuViewActionColumn.php
+++ /dev/null
@@ -1,17 +0,0 @@
-baseUrl . $this->prefix . $this->id;
-//        return " Просмотр ";
-//    }
-//}
\ No newline at end of file
diff --git a/app/tables/columns/post/PostDeleteActionColumn.php b/app/tables/columns/post/PostDeleteActionColumn.php
deleted file mode 100644
index 3512308..0000000
--- a/app/tables/columns/post/PostDeleteActionColumn.php
+++ /dev/null
@@ -1,16 +0,0 @@
-baseUrl . $this->prefix . $this->id;
-//        return " Удалить ";
-//    }
-//}
\ No newline at end of file
diff --git a/app/tables/columns/post/PostEditActionColumn.php b/app/tables/columns/post/PostEditActionColumn.php
deleted file mode 100644
index 2d057ac..0000000
--- a/app/tables/columns/post/PostEditActionColumn.php
+++ /dev/null
@@ -1,16 +0,0 @@
-baseUrl . $this->prefix . $this->id;
-//        return " Редактировать ";
-//    }
-//}
\ No newline at end of file
diff --git a/app/tables/columns/post/PostViewActionColumn.php b/app/tables/columns/post/PostViewActionColumn.php
deleted file mode 100644
index 565856c..0000000
--- a/app/tables/columns/post/PostViewActionColumn.php
+++ /dev/null
@@ -1,16 +0,0 @@
-baseUrl . $this->prefix . $this->id;
-//        return " Просмотр ";
-//    }
-//}
\ No newline at end of file
diff --git a/app/tables/columns/user/UserDeleteActionColumn.php b/app/tables/columns/user/UserDeleteActionColumn.php
deleted file mode 100644
index 5d3f411..0000000
--- a/app/tables/columns/user/UserDeleteActionColumn.php
+++ /dev/null
@@ -1,16 +0,0 @@
-baseUrl . $this->prefix . $this->id;
-//        return " Удалить ";
-//    }
-//}
\ No newline at end of file
diff --git a/app/tables/columns/user/UserEditActionColumn.php b/app/tables/columns/user/UserEditActionColumn.php
deleted file mode 100644
index 16dc87d..0000000
--- a/app/tables/columns/user/UserEditActionColumn.php
+++ /dev/null
@@ -1,16 +0,0 @@
-baseUrl . $this->prefix . $this->id;
-//        return " Редактировать ";
-//    }
-//}
\ No newline at end of file
diff --git a/app/tables/columns/user/UserViewActionColumn.php b/app/tables/columns/user/UserViewActionColumn.php
deleted file mode 100644
index 60f7bae..0000000
--- a/app/tables/columns/user/UserViewActionColumn.php
+++ /dev/null
@@ -1,16 +0,0 @@
-baseUrl . $this->prefix . $this->id;
-//        return " Просмотр ";
-//    }
-//}
\ No newline at end of file
diff --git a/kernel/console/controllers/ModuleController.php b/kernel/console/controllers/ModuleController.php
new file mode 100644
index 0000000..4201f5f
--- /dev/null
+++ b/kernel/console/controllers/ModuleController.php
@@ -0,0 +1,78 @@
+argv['path'])) {
+            throw new \Exception('Missing module path "--path" specified');
+        }
+
+        $zip = new ZipArchive;
+        $tmpModuleDir = md5(time());
+        $res = $zip->open(ROOT_DIR . $this->argv['path']);
+        if ($res === TRUE) {
+            $tmpModuleDirFull = RESOURCES_DIR . '/tmp/ad/' . $tmpModuleDir . "/";
+            $zip->extractTo($tmpModuleDirFull);
+            $zip->close();
+            $this->out->r('Архив распакован', 'green');
+        } else {
+            $this->out->r('Message: Ошибка чтения архива', 'red');
+        }
+
+        if (file_exists($tmpModuleDirFull . "manifest.json")){
+            $manifestJson = getConst(file_get_contents($tmpModuleDirFull . "manifest.json"));
+            $manifest = Manifest::getWithVars($manifestJson);
+            $this->out->r('manifest.json инициализирован', 'green');
+
+            $fileHelper = new Files();
+            $fileHelper->copy_folder($tmpModuleDirFull, $manifest['module_path']);
+
+            $this->out->r("Удаляем временные файлы", 'green');
+            $fileHelper->recursiveRemoveDir($tmpModuleDirFull);
+
+            $this->out->r("Модуль " . $manifest['name'] . " установлен", 'green');
+        }
+    }
+
+    /**
+     * @throws \Exception
+     */
+    public function actionUninstallModule(): void
+    {
+        if (!isset($this->argv['path'])) {
+            throw new \Exception('Missing module path "--path" specified');
+        }
+
+        if (file_exists(ROOT_DIR . $this->argv['path'])) {
+            $moduleService = new ModuleService();
+            $moduleInfo = $moduleService->getModuleInfo(ROOT_DIR . $this->argv['path']);
+
+            if ($moduleService->isActive($moduleInfo['slug'])) {
+                $moduleService->setActiveModule($moduleInfo['slug']);
+            }
+
+            $fileHelper = new Files();
+            $fileHelper->recursiveRemoveDir(ROOT_DIR . $this->argv['path']);
+
+            $this->out->r("Модуль удален", 'green');
+        } else {
+            var_dump($this->argv['path']);
+            $this->out->r("Модуль не найден", 'red');
+        }
+    }
+
+}
\ No newline at end of file
diff --git a/kernel/console/routs/cli.php b/kernel/console/routs/cli.php
index 4c6caa2..5976755 100644
--- a/kernel/console/routs/cli.php
+++ b/kernel/console/routs/cli.php
@@ -21,3 +21,8 @@ App::$collector->group(["prefix" => "admin"], callback: function (RouteCollector
     App::$collector->console('init', [\kernel\console\controllers\AdminConsoleController::class, 'actionInit']);
 });
 
+App::$collector->group(["prefix" => "module"], callback: function (RouteCollector $router){
+    App::$collector->console('install', [\kernel\console\controllers\ModuleController::class, 'actionInstallModule']);
+    App::$collector->console('uninstall', [\kernel\console\controllers\ModuleController::class, 'actionUninstallModule']);
+});
+
diff --git a/kernel/modules/menu/controllers/MenuController.php b/kernel/modules/menu/controllers/MenuController.php
index 2c8daf0..3d36d5d 100644
--- a/kernel/modules/menu/controllers/MenuController.php
+++ b/kernel/modules/menu/controllers/MenuController.php
@@ -97,7 +97,6 @@ class MenuController extends AdminController
 
         $menuForm = new CreateMenuForm();
         $menuForm->load($_REQUEST);
-//        Debug::dd($_REQUEST);
 
         if (isset($_FILES['icon_file']) && $_FILES['icon_file']['error'] === UPLOAD_ERR_OK) {
             $file = new FileUpload($_FILES['icon_file'], ['jpg', 'jpeg', 'png'], $_REQUEST['hashing'] ?? true);
diff --git a/resources/tmp/modules/tag.zip b/resources/tmp/modules/tag.zip
new file mode 100644
index 0000000..940a046
Binary files /dev/null and b/resources/tmp/modules/tag.zip differ
diff --git a/resources/tmp/modules/tag/TagModule.php b/resources/tmp/modules/tag/TagModule.php
new file mode 100644
index 0000000..ee01d77
--- /dev/null
+++ b/resources/tmp/modules/tag/TagModule.php
@@ -0,0 +1,33 @@
+menuService = new MenuService();
+    }
+
+    /**
+     * @throws \Exception
+     */
+    public function init(): void
+    {
+        $this->menuService->createItem([
+            "label" => "Тэги",
+            "url" => "/admin/tag",
+            "slug" => "tag",
+        ]);
+    }
+
+    public function deactivate(): void
+    {
+        $this->menuService->removeItemBySlug("tag");
+    }
+}
\ No newline at end of file
diff --git a/resources/tmp/modules/tag/manifest.json b/resources/tmp/modules/tag/manifest.json
new file mode 100644
index 0000000..3cbfdda
--- /dev/null
+++ b/resources/tmp/modules/tag/manifest.json
@@ -0,0 +1,10 @@
+{
+  "name": "Tags",
+  "version": "0.1",
+  "author": "ITGuild",
+  "slug": "tag",
+  "description": "Tags module",
+  "module_path": "{APP}/modules/{slug}",
+  "module_class": "app\\modules\\tag\\TagModule",
+  "module_class_file": "{APP}/modules/tag/TagModule.php"
+}
\ No newline at end of file