diff --git a/internal/parser/domains.go b/internal/parser/domains.go
index 884d277a..716f6b59 100644
--- a/internal/parser/domains.go
+++ b/internal/parser/domains.go
@@ -59,7 +59,8 @@ func domainsAddCommand(cmdr *commands.DryccCmd) *cobra.Command {
 		},
 	}
 
-	cmd.Flags().StringVarP(&flags.ptype, "ptype", "p", "web", i18n.T("The ptype for domain"))
+	cmd.Flags().StringVarP(&flags.ptype, "ptype", "p", "", i18n.T("The ptype for domain"))
+	cmd.MarkFlagRequired("ptype")
 
 	ptypeCompletion := completion.PtsCompletion{ArgsLen: -1, ConfigFile: &cmdr.ConfigFile, AppID: &app}
 	cmd.RegisterFlagCompletionFunc("ptype", ptypeCompletion.CompletionFunc)
diff --git a/internal/parser/healthchecks.go b/internal/parser/healthchecks.go
index e1d6626b..16882a03 100644
--- a/internal/parser/healthchecks.go
+++ b/internal/parser/healthchecks.go
@@ -27,7 +27,7 @@ func NewHealthchecksCommand(cmdr *commands.DryccCmd) *cobra.Command {
 	}
 
 	cmd.PersistentFlags().StringVarP(&app, "app", "a", "", i18n.T("The uniquely identifiable name of the application"))
-	cmd.PersistentFlags().StringVarP(&healthchecksFlags.ptype, "ptype", "p", "web", i18n.T("The ptype for which the health check needs to be removed"))
+	cmd.PersistentFlags().StringVarP(&healthchecksFlags.ptype, "ptype", "p", "", i18n.T("The ptype for which the health check needs to be listed"))
 	cmd.Flags().IntVarP(&version, "version", "v", 0, i18n.T("The version for which the health check needs to be listed"))
 
 	appCompletion := completion.AppCompletion{ArgsLen: -1, ConfigFile: &cmdr.ConfigFile}
@@ -78,7 +78,7 @@ func healthchecksSet(cmdr *commands.DryccCmd) *cobra.Command {
 
 	healthChecksCompletion := completion.HealthChecksCompletion{ConfigFile: &cmdr.ConfigFile}
 	cmd := &cobra.Command{
-		Use:  "set <health-type> <probe-type> [--] <args>...",
+		Use:  "set <health-type> <probe-type> [flags] [--] <args>...",
 		Args: cobra.MinimumNArgs(2),
 		Example: template.CustomExample(
 			"drycc healthchecks set readinessProbe httpGet --path=/health -- 8000",
@@ -177,6 +177,10 @@ port number to perform the socket connection on the Container.
 		},
 	}
 
+	cmd.Flags().StringVarP(&healthchecksFlags.ptype, "ptype", "p", "", i18n.T("The ptype for which the health check needs to be applied"))
+	ptypeCompletion := completion.PtsCompletion{ArgsLen: -1, ConfigFile: &cmdr.ConfigFile, AppID: &app}
+	cmd.RegisterFlagCompletionFunc("ptype", ptypeCompletion.CompletionFunc)
+
 	cmd.Flags().StringVar(&flags.path, "path", "/", i18n.T("The relative URL path for 'httpGet' probes"))
 	cmd.Flags().StringVar(&flags.headers, "headers", "", i18n.T("The HTTP headers to send for 'httpGet' probes, separated by commas"))
 	cmd.Flags().IntVar(&flags.initialDelay, "initial-delay-timeout", 50, i18n.T("The initial delay timeout for the probe"))
@@ -218,6 +222,10 @@ func healthchecksUnset(cmdr *commands.DryccCmd) *cobra.Command {
 			return cmdr.HealthchecksUnset(app, healthchecksFlags.ptype, flags.healths)
 		},
 	}
+	cmd.Flags().StringVarP(&healthchecksFlags.ptype, "ptype", "p", "", i18n.T("The ptype for which the health check needs to be removed"))
+	ptypeCompletion := completion.PtsCompletion{ArgsLen: -1, ConfigFile: &cmdr.ConfigFile, AppID: &app}
+	cmd.RegisterFlagCompletionFunc("ptype", ptypeCompletion.CompletionFunc)
+
 	return cmd
 }
 
diff --git a/internal/parser/perms.go b/internal/parser/perms.go
index 3c50cf3d..2181ce30 100644
--- a/internal/parser/perms.go
+++ b/internal/parser/perms.go
@@ -1,6 +1,8 @@
 package parser
 
 import (
+	"strings"
+
 	"github.com/drycc/workflow-cli/internal/commands"
 	"github.com/drycc/workflow-cli/internal/completion"
 	"github.com/drycc/workflow-cli/internal/template"
@@ -70,7 +72,7 @@ func permAddCommand(cmdr *commands.DryccCmd) *cobra.Command {
 		ValidArgsFunction: userPermsArgsCompletion.CompletionFunc,
 		RunE: func(_ *cobra.Command, args []string) error {
 			flags.username = args[0]
-			flags.permissions = args[1]
+			flags.permissions = strings.Join(args[1:], ",")
 			return cmdr.PermCreate(app, flags.username, flags.permissions)
 		},
 	}
@@ -100,7 +102,7 @@ func permUpdateCommand(cmdr *commands.DryccCmd) *cobra.Command {
 		ValidArgsFunction: permUpdateCompletion.CompletionFunc,
 		RunE: func(_ *cobra.Command, args []string) error {
 			flags.username = args[0]
-			flags.permissions = args[1]
+			flags.permissions = strings.Join(args[1:], ",")
 			return cmdr.PermUpdate(app, flags.username, flags.permissions)
 		},
 	}
diff --git a/internal/parser/ps.go b/internal/parser/ps.go
index 378a4b03..a1dc900f 100644
--- a/internal/parser/ps.go
+++ b/internal/parser/ps.go
@@ -142,7 +142,7 @@ func psDescribeCommand(cmdr *commands.DryccCmd) *cobra.Command {
 }
 
 func psDeleteCommand(cmdr *commands.DryccCmd) *cobra.Command {
-	psCompletion := completion.PsCompletion{AppID: &app, ArgsLen: 0, ConfigFile: &cmdr.ConfigFile}
+	psCompletion := completion.PsCompletion{AppID: &app, ArgsLen: -1, ConfigFile: &cmdr.ConfigFile}
 	cmd := &cobra.Command{
 		Use:  "delete <pod>...",
 		Args: cobra.MinimumNArgs(1),
diff --git a/internal/parser/registry.go b/internal/parser/registry.go
index 00ff4027..c8cb4092 100644
--- a/internal/parser/registry.go
+++ b/internal/parser/registry.go
@@ -82,7 +82,8 @@ func registrySetCommand(cmdr *commands.DryccCmd) *cobra.Command {
 		},
 	}
 
-	cmd.Flags().StringVarP(&flags.ptype, "ptype", "p", "web", i18n.T("The ptype for registry"))
+	cmd.Flags().StringVarP(&flags.ptype, "ptype", "p", "", i18n.T("The ptype for registry"))
+	cmd.MarkFlagRequired("ptype")
 
 	ptypeCompletion := completion.PtsCompletion{ArgsLen: -1, ConfigFile: &cmdr.ConfigFile, AppID: &app}
 	cmd.RegisterFlagCompletionFunc("ptype", ptypeCompletion.CompletionFunc)
@@ -103,7 +104,8 @@ func registryUnsetCommand(cmdr *commands.DryccCmd) *cobra.Command {
 		},
 	}
 
-	cmd.Flags().StringVarP(&flags.ptype, "ptype", "p", "web", i18n.T("The ptype for registry"))
+	cmd.Flags().StringVarP(&flags.ptype, "ptype", "p", "", i18n.T("The ptype for registry"))
+	cmd.MarkFlagRequired("ptype")
 
 	ptypeCompletion := completion.PtsCompletion{ArgsLen: -1, ConfigFile: &cmdr.ConfigFile, AppID: &app}
 	cmd.RegisterFlagCompletionFunc("ptype", ptypeCompletion.CompletionFunc)
diff --git a/internal/parser/resources.go b/internal/parser/resources.go
index 04f4caea..89937d5d 100644
--- a/internal/parser/resources.go
+++ b/internal/parser/resources.go
@@ -48,8 +48,6 @@ func resourcesServicesCommand(cmdr *commands.DryccCmd) *cobra.Command {
 		},
 	}
 
-	cmd.Flags().IntVarP(&limit, "limit", "l", 0, i18n.T("The maximum number of results to display"))
-
 	return cmd
 }
 
@@ -73,8 +71,6 @@ func resourcesPlansCommand(cmdr *commands.DryccCmd) *cobra.Command {
 		},
 	}
 
-	cmd.Flags().IntVarP(&limit, "limit", "l", 0, i18n.T("The maximum number of results to display"))
-
 	return cmd
 }
 
diff --git a/internal/parser/tags.go b/internal/parser/tags.go
index 069931ff..78ffe34d 100644
--- a/internal/parser/tags.go
+++ b/internal/parser/tags.go
@@ -57,7 +57,7 @@ func tagsListCommand(cmdr *commands.DryccCmd) *cobra.Command {
 		},
 	}
 
-	cmd.Flags().StringVarP(&flags.ptype, "ptype", "p", "web", i18n.T("The process name as defined in your Procfile"))
+	cmd.Flags().StringVarP(&flags.ptype, "ptype", "p", "", i18n.T("The process name as defined in your Procfile"))
 	cmd.Flags().IntVarP(&version, "version", "v", 0, i18n.T("The version for which the tag needs to be listed"))
 
 	ptypeCompletion := completion.PtsCompletion{ArgsLen: -1, ConfigFile: &cmdr.ConfigFile, AppID: &app}
@@ -97,7 +97,8 @@ scheduler-configured metadata.`),
 		},
 	}
 
-	cmd.Flags().StringVarP(&flags.ptype, "ptype", "p", "web", i18n.T("The process name as defined in your Procfile"))
+	cmd.Flags().StringVarP(&flags.ptype, "ptype", "p", "", i18n.T("The process name as defined in your Procfile"))
+	cmd.MarkFlagRequired("ptype")
 
 	ptypeCompletion := completion.PtsCompletion{ArgsLen: -1, ConfigFile: &cmdr.ConfigFile, AppID: &app}
 	cmd.RegisterFlagCompletionFunc("ptype", ptypeCompletion.CompletionFunc)
@@ -127,7 +128,8 @@ func tagsUnsetCommand(cmdr *commands.DryccCmd) *cobra.Command {
 		},
 	}
 
-	cmd.Flags().StringVarP(&flags.ptype, "ptype", "p", "web", i18n.T("The process name as defined in your Procfile"))
+	cmd.Flags().StringVarP(&flags.ptype, "ptype", "p", "", i18n.T("The process name as defined in your Procfile"))
+	cmd.MarkFlagRequired("ptype")
 
 	ptypeCompletion := completion.PtsCompletion{ArgsLen: -1, ConfigFile: &cmdr.ConfigFile, AppID: &app}
 	cmd.RegisterFlagCompletionFunc("ptype", ptypeCompletion.CompletionFunc)
diff --git a/pkg/i18n/translations/drycc/zh_CN/LC_MESSAGES/cli.po b/pkg/i18n/translations/drycc/zh_CN/LC_MESSAGES/cli.po
index ff1b0018..d59b9d57 100644
--- a/pkg/i18n/translations/drycc/zh_CN/LC_MESSAGES/cli.po
+++ b/pkg/i18n/translations/drycc/zh_CN/LC_MESSAGES/cli.po
@@ -1418,6 +1418,14 @@ msgid "The ptype for which the config needs to be unset"
 msgstr "要清除配置的进程类型"
 
 #: internal/parser/healthchecks.go:30
+msgid "The ptype for which the health check needs to be listed"
+msgstr "要列出健康检查的进程类型"
+
+#: internal/parser/healthchecks.go:180
+msgid "The ptype for which the health check needs to be applied"
+msgstr "要应用健康检查的进程类型"
+
+#: internal/parser/healthchecks.go:225
 msgid "The ptype for which the health check needs to be removed"
 msgstr "要移除健康检查的进程类型"
 
