diff --git a/mage_helpers/cdk.go b/mage_helpers/cdk.go
index 96c8937b1cf5b66047ada29c74cf1c71b5d13931..6f0ce01bd47f03023d6ec230f5c3345809ca730e 100644
--- a/mage_helpers/cdk.go
+++ b/mage_helpers/cdk.go
@@ -101,6 +101,39 @@ func CDKDeploy(cdkDir string, env string, stack string, exclusively bool, local
 	return nil
 }
 
+func CDKWatch(cdkDir string, env string, stack string, exclusively bool, profile string) error {
+	commandArgs := []string{
+		`watch`,
+		fmt.Sprintf(`"%s"`, stack),
+		`-c`,
+		fmt.Sprintf(`config=%v`, env),
+	}
+
+	if exclusively {
+		commandArgs = append(commandArgs, `-c`,
+			fmt.Sprintf(`exclusively="%v"`, stack))
+	}
+
+	commandArgs = append(commandArgs, fmt.Sprintf(`--profile=%v`, profile))
+
+	commandArgs = append(commandArgs,
+		`--require-approval=never`,
+		fmt.Sprintf(`--exclusively=%v`, strconv.FormatBool(exclusively)))
+
+	cmd := BuildCommand("cdk", commandArgs)
+	cmd.Dir = cdkDir
+	cmd.Stdout = os.Stdout
+	cmd.Stderr = os.Stderr
+
+	fmt.Printf("==================%v==================\n", stack)
+	err := cmd.Run()
+	if err != nil {
+		return err
+	}
+	fmt.Printf("==================%v==================\n\n\n\n", stack)
+	return nil
+}
+
 func CDKSynthAll(cdkDir string, env string, profile string, local bool) error {
 	commandArgs := []string{
 		`synth`,