diff --git a/cmd/pts.go b/cmd/pts.go
index 9940e6b7..7eb106ce 100644
--- a/cmd/pts.go
+++ b/cmd/pts.go
@@ -169,6 +169,10 @@ func printProcessTypeDetail(d *DryccCmd, ptypeStates api.PtypeStates, events api
 				tpt.Append([]string{"", fmt.Sprintf("%s from %s", mount.MountPath, mount.Name)})
 			}
 		}
+		sp := getHealthcheckString("", "", &containerState.StartupProbe)
+		if sp != "" {
+			tpt.Append([]string{"Startup:", strings.TrimSpace(sp)})
+		}
 		lp := getHealthcheckString("", "", &containerState.LivenessProbe)
 		if lp != "" {
 			tpt.Append([]string{"Liveness:", strings.TrimSpace(lp)})
diff --git a/cmd/volumes.go b/cmd/volumes.go
index c2222acd..169915a4 100644
--- a/cmd/volumes.go
+++ b/cmd/volumes.go
@@ -291,6 +291,9 @@ func (d *DryccCmd) volumesClientCp(appID, src, dst string) error {
 		if err != nil {
 			return err
 		}
+		if urlpath == "" || urlpath == "/" {
+			return fmt.Errorf("path is a directory, not a file")
+		}
 		res, err := volumes.GetFile(s.Client, appID, name, urlpath)
 		if err != nil {
 			return err
@@ -302,7 +305,7 @@ func (d *DryccCmd) volumesClientCp(appID, src, dst string) error {
 				dst = path.Join(dst, arrays[len(arrays)-1])
 			}
 		}
-		w, err := os.OpenFile(dst, os.O_CREATE|os.O_WRONLY, 0644)
+		w, err := os.OpenFile(dst, os.O_CREATE|os.O_WRONLY|os.O_TRUNC, 0644)
 		if err != nil {
 			return err
 		}
diff --git a/go.mod b/go.mod
index efd6c175..a132bc5d 100644
--- a/go.mod
+++ b/go.mod
@@ -5,7 +5,7 @@ go 1.22
 require (
 	github.com/containerd/console v1.0.4
 	github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815
-	github.com/drycc/controller-sdk-go v0.0.0-20240710072101-82db20de8e4a
+	github.com/drycc/controller-sdk-go v0.0.0-20240712012621-75bd5ebae3da
 	github.com/drycc/pkg v0.0.0-20240225112316-78fc9239f51f
 	github.com/olekukonko/tablewriter v0.0.5
 	github.com/stretchr/testify v1.9.0
diff --git a/go.sum b/go.sum
index 6aabc93b..f6b7507a 100644
--- a/go.sum
+++ b/go.sum
@@ -4,8 +4,8 @@ github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c
 github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
 github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815 h1:bWDMxwH3px2JBh6AyO7hdCn/PkvCZXii8TGj7sbtEbQ=
 github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE=
-github.com/drycc/controller-sdk-go v0.0.0-20240710072101-82db20de8e4a h1:ETfWMgVW7ZR5PqFwnaCYbZHsejFym/vPdsv5RLTjNkE=
-github.com/drycc/controller-sdk-go v0.0.0-20240710072101-82db20de8e4a/go.mod h1:n6eQe1irJqjwLo/7t9+Dhdv6faSESQN+ATnZRBP3/Uc=
+github.com/drycc/controller-sdk-go v0.0.0-20240712012621-75bd5ebae3da h1:tNidQf7Aey4QTNC5oFHG8SAEwuXA74DZQjJYABKToVg=
+github.com/drycc/controller-sdk-go v0.0.0-20240712012621-75bd5ebae3da/go.mod h1:n6eQe1irJqjwLo/7t9+Dhdv6faSESQN+ATnZRBP3/Uc=
 github.com/drycc/pkg v0.0.0-20240225112316-78fc9239f51f h1:kgjvUQJeAszDoU1Vo4vTTE92KI8Av3JPb6Qn890niXg=
 github.com/drycc/pkg v0.0.0-20240225112316-78fc9239f51f/go.mod h1:n+QxGif6ha9CEoxVnlipxb9IdmerybcUSzTEDFkvjiA=
 github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38=
diff --git a/parser/healthchecks.go b/parser/healthchecks.go
index 163059de..c6ec6da3 100644
--- a/parser/healthchecks.go
+++ b/parser/healthchecks.go
@@ -82,16 +82,20 @@ Sets healthchecks for an application.
 
 By default, Workflow only checks that the application starts in their Container. A health
 check may be added by configuring a health check probe for the application. The health
-checks are implemented as Kubernetes Container Probes. A 'liveness' and a 'readiness'
-probe can be configured, and each probe can be of type 'httpGet', 'exec' or 'tcpSocket'
-depending on the type of probe the Container requires.
+checks are implemented as Kubernetes Container Probes. A 'startupProbe' 'livenessProbe' 
+and a 'readinessProbe' can be configured, and each probe can be of type 'httpGet', 'exec' 
+or 'tcpSocket' depending on the type of probe the Container requires.
 
-A 'liveness' probe is useful for applications running for long periods of time, eventually
+A 'startupProbe' indicates whether the application within the container is started.
+All other probes are disabled if a startup probe is provided, until it succeeds.
+If the startup probe fails, the container is subjected to its restart policy.
+
+A 'livenessProbe' is useful for applications running for long periods of time, eventually
 transitioning to broken states and cannot recover except by restarting them.
 
-Other times, a 'readiness' probe is useful when the Container is only temporarily unable
-to serve, and will recover on its own. In this case, if a Container fails its 'readiness'
-probe, the Container will not be shut down, but rather the Container will stop receiving
+Other times, a 'readinessProbe' is useful when the Container is only temporarily unable
+to serve, and will recover on its own. In this case, if a Container fails its 'readinessProbe'
+, the Container will not be shut down, but rather the Container will stop receiving
 incoming requests.
 
 'httpGet' probes are just as it sounds: it performs a HTTP GET operation on the Container.
@@ -110,7 +114,7 @@ Usage: drycc healthchecks:set <health-type> <probe-type> [options] [--] <args>..
 
 Arguments:
   <health-type>
-    the healthcheck type, such as 'livenessProbe' or 'readinessProbe'.
+    the healthcheck type, such as 'startupProbe' 'livenessProbe' or 'readinessProbe'.
   <probe-type>
     the healthcheck probe type, such as 'httpGet', 'exec' or 'tcpSocket'.
   <args>
diff --git a/parser/limits.go b/parser/limits.go
index 42db3922..03851291 100644
--- a/parser/limits.go
+++ b/parser/limits.go
@@ -13,8 +13,8 @@ Valid commands for limits:
 limits:list        list resource limits for an app
 limits:set         set resource limits for an app
 limits:unset       unset resource limits for an app
-limits:specs       unset resource limits for an app
-limits:plans       unset resource limits for an app
+limits:specs       list specification information of the server
+limits:plans       list resource limit plans
 
 Use 'drycc help [command]' to learn more.
 `
diff --git a/parser/volumes.go b/parser/volumes.go
index 5370e683..3a8aacc9 100644
--- a/parser/volumes.go
+++ b/parser/volumes.go
@@ -232,7 +232,8 @@ Arguments:
     cp         copy volume files
     rm         remove volume files
   <args>
-    arguments for running commands
+    arguments for running commands, when cmd is 'cp', args should be '[source] [dest]'.
+    volume path format 'vol://volumename/', '/' is equivalent to the mount path.
 
 Options:
   -a --app=<app>
