diff --git a/core/installer/cmd/app_manager.go b/core/installer/cmd/app_manager.go
index 9fd2045..73e2311 100644
--- a/core/installer/cmd/app_manager.go
+++ b/core/installer/cmd/app_manager.go
@@ -6,16 +6,21 @@
 	"fmt"
 	"io/ioutil"
 	"log"
+	"net"
 	"net/http"
 	"net/http/httputil"
 	"net/url"
 	"os"
 
-	"github.com/giolekva/pcloud/core/installer"
-
+	"github.com/go-git/go-billy/v5/memfs"
+	"github.com/go-git/go-git/v5"
+	gitssh "github.com/go-git/go-git/v5/plumbing/transport/ssh"
+	"github.com/go-git/go-git/v5/storage/memory"
 	"github.com/labstack/echo/v4"
 	"github.com/spf13/cobra"
 	"golang.org/x/crypto/ssh"
+
+	"github.com/giolekva/pcloud/core/installer"
 )
 
 var appManagerFlags struct {
@@ -207,3 +212,25 @@
 	}
 	return c.String(http.StatusOK, "Installed")
 }
+
+func cloneRepo(address string, signer ssh.Signer) (*git.Repository, error) {
+	return git.Clone(memory.NewStorage(), memfs.New(), &git.CloneOptions{
+		URL:             address,
+		Auth:            auth(signer),
+		RemoteName:      "origin",
+		InsecureSkipTLS: true,
+	})
+}
+
+func auth(signer ssh.Signer) *gitssh.PublicKeys {
+	return &gitssh.PublicKeys{
+		Signer: signer,
+		HostKeyCallbackHelper: gitssh.HostKeyCallbackHelper{
+			HostKeyCallback: func(hostname string, remote net.Addr, key ssh.PublicKey) error {
+				// TODO(giolekva): verify server public key
+				// fmt.Printf("## %s || %s -- \n", serverPubKey, ssh.MarshalAuthorizedKey(key))
+				return nil
+			},
+		},
+	}
+}
diff --git a/core/installer/cmd/apps.go b/core/installer/cmd/apps.go
deleted file mode 100644
index 9cfe955..0000000
--- a/core/installer/cmd/apps.go
+++ /dev/null
@@ -1,98 +0,0 @@
-package main
-
-import (
-	"net"
-	"os"
-
-	"github.com/giolekva/pcloud/core/installer"
-	"github.com/go-git/go-billy/v5/memfs"
-	"github.com/go-git/go-git/v5"
-	gitssh "github.com/go-git/go-git/v5/plumbing/transport/ssh"
-	"github.com/go-git/go-git/v5/storage/memory"
-	"github.com/spf13/cobra"
-	"golang.org/x/crypto/ssh"
-)
-
-const appDirName = "apps"
-
-var installFlags struct {
-	sshKey   string
-	appName  string
-	repoAddr string
-}
-
-func installCmd() *cobra.Command {
-	cmd := &cobra.Command{
-		Use:  "install",
-		RunE: installCmdRun,
-	}
-	cmd.Flags().StringVar(
-		&installFlags.sshKey,
-		"ssh-key",
-		"",
-		"",
-	)
-	cmd.Flags().StringVar(
-		&installFlags.appName,
-		"app",
-		"",
-		"",
-	)
-	cmd.Flags().StringVar(
-		&installFlags.repoAddr,
-		"repo-addr",
-		"",
-		"",
-	)
-	return cmd
-}
-
-func installCmdRun(cmd *cobra.Command, args []string) error {
-	sshKey, err := os.ReadFile(installFlags.sshKey)
-	if err != nil {
-		return err
-	}
-	signer, err := ssh.ParsePrivateKey(sshKey)
-	if err != nil {
-		return err
-	}
-	repo, err := cloneRepo(installFlags.repoAddr, signer)
-	if err != nil {
-		return err
-	}
-	m, err := installer.NewAppManager(installer.NewRepoIO(
-		repo,
-		signer,
-	))
-	if err != nil {
-		return err
-	}
-	appRepo := installer.NewInMemoryAppRepository(installer.CreateAllApps())
-	app, err := appRepo.Find(installFlags.appName)
-	if err != nil {
-		return err
-	}
-	return m.Install(*app, nil)
-}
-
-func cloneRepo(address string, signer ssh.Signer) (*git.Repository, error) {
-	return git.Clone(memory.NewStorage(), memfs.New(), &git.CloneOptions{
-		URL:             address,
-		Auth:            auth(signer),
-		RemoteName:      "origin",
-		InsecureSkipTLS: true,
-	})
-}
-
-func auth(signer ssh.Signer) *gitssh.PublicKeys {
-	return &gitssh.PublicKeys{
-		Signer: signer,
-		HostKeyCallbackHelper: gitssh.HostKeyCallbackHelper{
-			HostKeyCallback: func(hostname string, remote net.Addr, key ssh.PublicKey) error {
-				// TODO(giolekva): verify server public key
-				// fmt.Printf("## %s || %s -- \n", serverPubKey, ssh.MarshalAuthorizedKey(key))
-				return nil
-			},
-		},
-	}
-}
diff --git a/core/installer/cmd/main.go b/core/installer/cmd/main.go
index e879c62..70e58de 100644
--- a/core/installer/cmd/main.go
+++ b/core/installer/cmd/main.go
@@ -23,7 +23,6 @@
 		"",
 	)
 	rootCmd.AddCommand(bootstrapCmd())
-	rootCmd.AddCommand(installCmd())
 	rootCmd.AddCommand(appManagerCmd())
 	rootCmd.AddCommand(envManagerCmd())
 	rootCmd.AddCommand(welcomeCmd())
