diff --git a/core/installer/cmd/app_manager.go b/core/installer/cmd/app_manager.go
index b6c083c..7b05081 100644
--- a/core/installer/cmd/app_manager.go
+++ b/core/installer/cmd/app_manager.go
@@ -27,10 +27,10 @@
 		Use:  "appmanager",
 		RunE: appManagerCmdRun,
 	}
-	cmd.Flags().StringVar(
-		&appManagerFlags.sshKey,
-		"ssh-key",
-		"",
+	cmd.Flags().IntVar(
+		&appManagerFlags.port,
+		"port",
+		8080,
 		"",
 	)
 	cmd.Flags().StringVar(
@@ -39,10 +39,10 @@
 		"",
 		"",
 	)
-	cmd.Flags().IntVar(
-		&appManagerFlags.port,
-		"port",
-		8080,
+	cmd.Flags().StringVar(
+		&appManagerFlags.sshKey,
+		"ssh-key",
+		"",
 		"",
 	)
 	cmd.Flags().StringVar(
@@ -80,7 +80,7 @@
 	if err != nil {
 		return err
 	}
-	m, err := installer.NewAppManager(repoIO, kube)
+	m, err := installer.NewAppManager(repoIO, kube, "/apps")
 	if err != nil {
 		return err
 	}
diff --git a/core/installer/cmd/main.go b/core/installer/cmd/main.go
index 70e58de..1e4ec1d 100644
--- a/core/installer/cmd/main.go
+++ b/core/installer/cmd/main.go
@@ -26,6 +26,7 @@
 	rootCmd.AddCommand(appManagerCmd())
 	rootCmd.AddCommand(envManagerCmd())
 	rootCmd.AddCommand(welcomeCmd())
+	rootCmd.AddCommand(rewriteCmd())
 }
 
 func main() {
diff --git a/core/installer/cmd/rewrite.go b/core/installer/cmd/rewrite.go
new file mode 100644
index 0000000..5eddc67
--- /dev/null
+++ b/core/installer/cmd/rewrite.go
@@ -0,0 +1,93 @@
+package main
+
+import (
+	"fmt"
+	"log"
+	"os"
+
+	"golang.org/x/crypto/ssh"
+
+	"github.com/spf13/cobra"
+
+	"github.com/giolekva/pcloud/core/installer"
+	"github.com/giolekva/pcloud/core/installer/soft"
+)
+
+var rewriteFlags struct {
+	path string
+}
+
+func rewriteCmd() *cobra.Command {
+	cmd := &cobra.Command{
+		Use:  "rewrite",
+		RunE: rewriteCmdRun,
+	}
+	cmd.Flags().StringVar(
+		&appManagerFlags.repoAddr,
+		"repo-addr",
+		"",
+		"",
+	)
+	cmd.Flags().StringVar(
+		&appManagerFlags.sshKey,
+		"ssh-key",
+		"",
+		"",
+	)
+	return cmd
+}
+
+func rewriteCmdRun(cmd *cobra.Command, args []string) error {
+	sshKey, err := os.ReadFile(appManagerFlags.sshKey)
+	if err != nil {
+		return err
+	}
+	signer, err := ssh.ParsePrivateKey(sshKey)
+	if err != nil {
+		return err
+	}
+	addr, err := soft.ParseRepositoryAddress(appManagerFlags.repoAddr)
+	if err != nil {
+		return err
+	}
+	repo, err := soft.CloneRepository(addr, signer)
+	if err != nil {
+		return err
+	}
+	log.Println("Cloned repository")
+	repoIO, err := installer.NewRepoIO(repo, signer)
+	if err != nil {
+		return err
+	}
+	log.Println("Creating repository")
+	r := installer.NewInMemoryAppRepository(installer.CreateStoreApps())
+	mgr, err := installer.NewAppManager(repoIO, nil, "/apps")
+	if err != nil {
+		return err
+	}
+	env, err := mgr.Config()
+	if err != nil {
+		return err
+	}
+	fmt.Printf("%+v\n", env)
+	log.Println("Read config")
+	if err != nil {
+		return err
+	}
+	all, err := mgr.FindAllInstances()
+	if err != nil {
+		return err
+	}
+	for _, inst := range all {
+		app, err := installer.FindEnvApp(r, inst.AppId)
+		if err != nil {
+			return err
+		}
+		v := inst.InputToValues(app.Schema())
+		if err := mgr.Update(app, inst.Id, v, installer.WithNoCommit()); err != nil {
+			return err
+		}
+	}
+	repoIO.CommitAndPush("upgrade: persist cue files")
+	return nil
+}
