diff --git a/cmd/cue/cmd/cmd.go b/cmd/cue/cmd/cmd.go
index 8850811..b0daf5a 100644
--- a/cmd/cue/cmd/cmd.go
+++ b/cmd/cue/cmd/cmd.go
@@ -149,8 +149,8 @@
 	}
 
 	cmd.Flags().SetInterspersed(false)
-	cmd.Flags().StringArrayP(string(flagInject), "t", nil,
-		"set the value of a tagged field")
+
+	addInjectionFlags(cmd.Flags(), true)
 
 	return cmd
 }
diff --git a/cmd/cue/cmd/common.go b/cmd/cue/cmd/common.go
index eddf609..9f6fbbf 100644
--- a/cmd/cue/cmd/common.go
+++ b/cmd/cue/cmd/common.go
@@ -22,6 +22,7 @@
 	"regexp"
 	"strings"
 
+	"github.com/spf13/pflag"
 	"golang.org/x/text/language"
 	"golang.org/x/text/message"
 
@@ -392,7 +393,9 @@
 	}
 	cfg.reFile = re
 
-	cfg.loadCfg.Tags = flagInject.StringArray(cmd)
+	if err := setTags(cmd.Flags(), cfg.loadCfg); err != nil {
+		return nil, err
+	}
 
 	return p, nil
 }
@@ -401,6 +404,12 @@
 	return p.cfg.reFile.MatchString(file)
 }
 
+func setTags(f *pflag.FlagSet, cfg *load.Config) error {
+	tags, _ := f.GetStringArray(string(flagInject))
+	cfg.Tags = tags
+	return nil
+}
+
 type decoderInfo struct {
 	file *build.File
 	d    *encoding.Decoder // may be nil if delayed
@@ -728,12 +737,16 @@
 	return instances, nil
 }
 
-func buildTools(cmd *Command, tags, args []string) (*cue.Instance, error) {
+func buildTools(cmd *Command, args []string) (*cue.Instance, error) {
 
 	cfg := &load.Config{
-		Tags:  tags,
 		Tools: true,
 	}
+	f := cmd.cmd.Flags()
+	if err := setTags(f, cfg); err != nil {
+		return nil, err
+	}
+
 	binst := loadFromArgs(cmd, args, cfg)
 	if len(binst) == 0 {
 		return nil, nil
diff --git a/cmd/cue/cmd/def.go b/cmd/cue/cmd/def.go
index 9173ceb..32fce52 100644
--- a/cmd/cue/cmd/def.go
+++ b/cmd/cue/cmd/def.go
@@ -37,15 +37,13 @@
 
 	addOutFlags(cmd.Flags(), true)
 	addOrphanFlags(cmd.Flags())
+	addInjectionFlags(cmd.Flags(), false)
 
 	cmd.Flags().StringArrayP(string(flagExpression), "e", nil, "evaluate this expression only")
 
 	cmd.Flags().BoolP(string(flagAttributes), "A", false,
 		"display field attributes")
 
-	cmd.Flags().StringArrayP(string(flagInject), "t", nil,
-		"set the value of a tagged field")
-
 	// TODO: Option to include comments in output.
 	return cmd
 }
diff --git a/cmd/cue/cmd/eval.go b/cmd/cue/cmd/eval.go
index 244f053..fcebb7f 100644
--- a/cmd/cue/cmd/eval.go
+++ b/cmd/cue/cmd/eval.go
@@ -53,6 +53,7 @@
 
 	addOutFlags(cmd.Flags(), true)
 	addOrphanFlags(cmd.Flags())
+	addInjectionFlags(cmd.Flags(), false)
 
 	cmd.Flags().StringArrayP(string(flagExpression), "e", nil, "evaluate this expression only")
 
@@ -71,9 +72,6 @@
 	cmd.Flags().BoolP(string(flagAll), "a", false,
 		"show optional and hidden fields")
 
-	cmd.Flags().StringArrayP(string(flagInject), "t", nil,
-		"set the value of a tagged field")
-
 	// TODO: Option to include comments in output.
 	return cmd
 }
diff --git a/cmd/cue/cmd/export.go b/cmd/cue/cmd/export.go
index a675261..bec6704 100644
--- a/cmd/cue/cmd/export.go
+++ b/cmd/cue/cmd/export.go
@@ -94,11 +94,10 @@
 
 	addOutFlags(cmd.Flags(), true)
 	addOrphanFlags(cmd.Flags())
+	addInjectionFlags(cmd.Flags(), false)
 
 	cmd.Flags().Bool(string(flagEscape), false, "use HTML escaping")
 	cmd.Flags().StringArrayP(string(flagExpression), "e", nil, "export this expression only")
-	cmd.Flags().StringArrayP(string(flagInject), "t", nil,
-		"set the value of a tagged field")
 
 	return cmd
 }
diff --git a/cmd/cue/cmd/flags.go b/cmd/cue/cmd/flags.go
index edfa8dd..a9edfe4 100644
--- a/cmd/cue/cmd/flags.go
+++ b/cmd/cue/cmd/flags.go
@@ -87,6 +87,11 @@
 	f.Bool(string(flagMerge), true, "merge non-CUE files")
 }
 
+func addInjectionFlags(f *pflag.FlagSet, auto bool) {
+	f.StringArrayP(string(flagInject), "t", nil,
+		"set the value of a tagged field")
+}
+
 type flagName string
 
 func (f flagName) Bool(cmd *Command) bool {
diff --git a/cmd/cue/cmd/root.go b/cmd/cue/cmd/root.go
index de4c8f6..c0c3dbd 100644
--- a/cmd/cue/cmd/root.go
+++ b/cmd/cue/cmd/root.go
@@ -257,10 +257,6 @@
 		return nil, err
 	}
 
-	tags, err := cmd.cmd.Flags().GetStringArray(string(flagInject))
-	if err != nil {
-		return nil, err
-	}
 	args = cmd.cmd.Flags().Args()
 	rootCmd.SetArgs(args)
 
@@ -272,7 +268,7 @@
 		return cmd, nil // Forces unknown command message from Cobra.
 	}
 
-	tools, err := buildTools(cmd, tags, args[1:])
+	tools, err := buildTools(cmd, args[1:])
 	if err != nil {
 		return cmd, err
 	}
@@ -295,7 +291,6 @@
 }
 
 func addSubcommands(cmd *Command, sub map[string]*subSpec, args []string, isHelp bool) error {
-	var tags []string
 	if len(args) > 0 {
 		if _, ok := sub[args[0]]; ok {
 			oldargs := []string{args[0]}
@@ -313,10 +308,6 @@
 				if err != nil {
 					return err
 				}
-				tags, err = cmd.cmd.Flags().GetStringArray(string(flagInject))
-				if err != nil {
-					return err
-				}
 				args = cmd.cmd.Flags().Args()
 				cmd.root.SetArgs(append(oldargs, args...))
 			}
@@ -330,7 +321,7 @@
 		args = args[1:]
 	}
 
-	tools, err := buildTools(cmd, tags, args)
+	tools, err := buildTools(cmd, args)
 	if err != nil {
 		return err
 	}
diff --git a/cmd/cue/cmd/vet.go b/cmd/cue/cmd/vet.go
index 61baf28..e2e1280 100644
--- a/cmd/cue/cmd/vet.go
+++ b/cmd/cue/cmd/vet.go
@@ -70,13 +70,11 @@
 	}
 
 	addOrphanFlags(cmd.Flags())
+	addInjectionFlags(cmd.Flags(), false)
 
 	cmd.Flags().BoolP(string(flagConcrete), "c", false,
 		"require the evaluation to be concrete")
 
-	cmd.Flags().StringArrayP(string(flagInject), "t", nil,
-		"set the value of a tagged field")
-
 	return cmd
 }
 
