diff --git a/cmd/repo-health-checker/main.go b/cmd/repo-health-checker/main.go
index fad7c1e..2abfea6 100644
--- a/cmd/repo-health-checker/main.go
+++ b/cmd/repo-health-checker/main.go
@@ -39,7 +39,7 @@ var Version string
 
 // Generally, err is used for runtime errors, and checkRes is used for the result of the checks.
 func main() {
-	var gitWhitelist, metaFile []string
+	var gitWhitelist, metaFile, releaseTag []string
 	showVersion := flag.Bool("version", false, "print current version")
 	checkRelease := flag.Bool("checkRelease", true, "trigger release check")
 	rootDir := flag.String("root", "", "")
@@ -47,12 +47,11 @@ func main() {
 	size := flag.Float64("reposize", 2, "size of the repo")
 	localList := flag.String("localList", "", "")
 	droneBranch := flag.String("droneBranch", "", "")
-	releaseCategories := flag.String("releaseCategories", "", "")
-	releaseNumber := flag.Int("releaseNumber", 0, "")
 	checkFileNameList := flag.String("checkFileNameList", "", "Comma-separated list of files to check.")
 	checkFileSumList := flag.String("checkFileSumList", "", "Comma-separated list of expected checksums.")
 	parseMultiValueFlag(&gitWhitelist, "whitelist", "")
 	parseMultiValueFlag(&metaFile, "meta", "")
+	parseMultiValueFlag(&releaseTag, "releaseTag", "Recommended tags")
 	flag.Parse()
 	if *showVersion {
 		fmt.Println(Version)
@@ -80,7 +79,7 @@ func main() {
 	if err != nil {
 		fmt.Printf("### Non-ASCII Characters Commit Message Check Failed:\n%s\n", err.Error())
 	}
-	err = healthcheck.CheckTags(*rootDir, *checkRelease, *releaseCategories, *releaseNumber)
+	err = healthcheck.CheckTags(*rootDir, *checkRelease, *releaseTag)
 	if err != nil {
 		fmt.Printf("### Release Tag Check Failed:\n%s\n", err.Error())
 	}
diff --git a/pkg/healthcheck/tag.go b/pkg/healthcheck/tag.go
index 371f486..8142d60 100644
--- a/pkg/healthcheck/tag.go
+++ b/pkg/healthcheck/tag.go
@@ -77,33 +77,21 @@ func checkConsist(tags []string, target string) (err error) {
 }
 
 // INFO: check whether release tag follow the tag list we give
-func checkStyle(tags []string, category string, n int) (err error) {
-	var prefix string
-	switch category {
-	case "exam":
-		prefix = "e"
-	case "project":
-		prefix = "p"
-	case "homework":
-		prefix = "h"
-	default:
-		prefix = "a"
-	}
-	target := prefix + fmt.Sprintf("%d", n)
+func checkStyle(target string, recommendTag []string) (err error) {
 	found := false
-	for _, tag := range tags {
+	for _, tag := range recommendTag {
 		if tag == target {
 			found = true
 			break
 		}
 	}
 	if !found {
-		return fmt.Errorf("Wrong release tag '%s' or missing release tags. Please use one of '%s'.", strings.Join(tags, "', '"), target)
+		return fmt.Errorf("Wrong release tag '%s' or missing release tags. Please use one of '%s'.", target, strings.Join(recommendTag, "', '"))
 	}
 	return nil
 }
 
-func CheckTags(repoPath string, skip bool, category string, n int) error {
+func CheckTags(repoPath string, skip bool, recommendTag []string) error {
 	if skip {
 		return nil
 	}
@@ -120,7 +108,7 @@ func CheckTags(repoPath string, skip bool, category string, n int) error {
 	if err != nil {
 		return err
 	}
-	err = checkStyle(tags, category, n)
+	err = checkStyle(target, recommendTag)
 	if err != nil {
 		return err
 	}