diff --git a/tools/metadata/OWNERS b/tools/metadata/OWNERS
new file mode 100644
index 0000000..03bcdf1
--- /dev/null
+++ b/tools/metadata/OWNERS
@@ -0,0 +1,4 @@
+dariofreni@google.com
+joeo@google.com
+ronish@google.com
+caditya@google.com
diff --git a/tools/metadata/generator.go b/tools/metadata/generator.go
index 8e82f7f..eb87755 100644
--- a/tools/metadata/generator.go
+++ b/tools/metadata/generator.go
@@ -73,7 +73,7 @@
 	return string(data)
 }
 
-func processProtobuf(
+func processTestSpecProtobuf(
 	filePath string, ownershipMetadataMap *sync.Map, keyLocks *keyToLocksMap,
 	errCh chan error, wg *sync.WaitGroup,
 ) {
@@ -130,10 +130,11 @@
 func main() {
 	inputFile := flag.String("inputFile", "", "Input file path")
 	outputFile := flag.String("outputFile", "", "Output file path")
+	rule := flag.String("rule", "", "Metadata rule (Hint: test_spec or code_metadata)")
 	flag.Parse()
 
-	if *inputFile == "" || *outputFile == "" {
-		fmt.Println("Usage: metadata -inputFile <input file path> -outputFile <output file path>")
+	if *inputFile == "" || *outputFile == "" || *rule == "" {
+		fmt.Println("Usage: metadata -rule <rule> -inputFile <input file path> -outputFile <output file path>")
 		os.Exit(1)
 	}
 
@@ -144,26 +145,33 @@
 	errCh := make(chan error, len(filePaths))
 	var wg sync.WaitGroup
 
-	for _, filePath := range filePaths {
-		wg.Add(1)
-		go processProtobuf(filePath, ownershipMetadataMap, keyLocks, errCh, &wg)
+	switch *rule {
+	case "test_spec":
+		for _, filePath := range filePaths {
+			wg.Add(1)
+			go processTestSpecProtobuf(filePath, ownershipMetadataMap, keyLocks, errCh, &wg)
+		}
+
+		wg.Wait()
+		close(errCh)
+
+		for err := range errCh {
+			log.Fatal(err)
+		}
+
+		allKeys := getSortedKeys(ownershipMetadataMap)
+		var allMetadata []*test_spec_proto.TestSpec_OwnershipMetadata
+
+		for _, key := range allKeys {
+			value, _ := ownershipMetadataMap.Load(key)
+			metadataList := value.([]*test_spec_proto.TestSpec_OwnershipMetadata)
+			allMetadata = append(allMetadata, metadataList...)
+		}
+
+		writeOutput(*outputFile, allMetadata)
+		break
+	case "code_metadata":
+	default:
+		log.Fatalf("No specific processing implemented for rule '%s'.\n", *rule)
 	}
-
-	wg.Wait()
-	close(errCh)
-
-	for err := range errCh {
-		log.Fatal(err)
-	}
-
-	allKeys := getSortedKeys(ownershipMetadataMap)
-	var allMetadata []*test_spec_proto.TestSpec_OwnershipMetadata
-
-	for _, key := range allKeys {
-		value, _ := ownershipMetadataMap.Load(key)
-		metadataList := value.([]*test_spec_proto.TestSpec_OwnershipMetadata)
-		allMetadata = append(allMetadata, metadataList...)
-	}
-
-	writeOutput(*outputFile, allMetadata)
 }
diff --git a/tools/metadata/testdata/metadata_test.go b/tools/metadata/testdata/metadata_test.go
index 0cb80c3..03c4f29 100644
--- a/tools/metadata/testdata/metadata_test.go
+++ b/tools/metadata/testdata/metadata_test.go
@@ -10,7 +10,7 @@
 
 func TestMetadata(t *testing.T) {
 	cmd := exec.Command(
-		"metadata", "-inputFile", "./inputFiles.txt", "-outputFile",
+		"metadata", "-rule", "test_spec", "-inputFile", "./inputFiles.txt", "-outputFile",
 		"./generatedOutputFile.txt",
 	)
 	stderr, err := cmd.CombinedOutput()
@@ -40,7 +40,7 @@
 
 func TestMetadataNegativeCase(t *testing.T) {
 	cmd := exec.Command(
-		"metadata", "-inputFile", "./inputFilesNegativeCase.txt", "-outputFile",
+		"metadata", "-rule", "test_spec", "-inputFile", "./inputFilesNegativeCase.txt", "-outputFile",
 		"./generatedOutputFileNegativeCase.txt",
 	)
 	stderr, err := cmd.CombinedOutput()
