diff --git a/cmd/root.go b/cmd/root.go
index ef08eb864fc8a25cb95a0208b51af68562505dcc..38b5c88f0bc311c901ac6b3f8ae90f8b1c98fe62 100644
--- a/cmd/root.go
+++ b/cmd/root.go
@@ -27,6 +27,8 @@ const (
 	flagJpath      = "jpath"
 	flagExtVar     = "ext-str"
 	flagExtVarFile = "ext-str-file"
+	flagTlaVar     = "tla-str"
+	flagTlaVarFile = "tla-str-file"
 	flagResolver   = "resolve-images"
 	flagResolvFail = "resolve-images-error"
 )
@@ -37,6 +39,8 @@ func init() {
 	RootCmd.PersistentFlags().StringP(flagJpath, "J", "", "Additional jsonnet library search path")
 	RootCmd.PersistentFlags().StringSliceP(flagExtVar, "V", nil, "Values of external variables")
 	RootCmd.PersistentFlags().StringSlice(flagExtVarFile, nil, "Read external variable from a file")
+	RootCmd.PersistentFlags().StringSliceP(flagTlaVar, "A", nil, "Values of top level arguments")
+	RootCmd.PersistentFlags().StringSlice(flagTlaVarFile, nil, "Read top level argument from a file")
 	RootCmd.PersistentFlags().String(flagResolver, "noop", "Change implementation of resolveImage native function. One of: noop, registry")
 	RootCmd.PersistentFlags().String(flagResolvFail, "warn", "Action when resolveImage fails. One of ignore,warn,error")
 
@@ -122,6 +126,41 @@ func JsonnetVM(cmd *cobra.Command) (*jsonnet.VM, error) {
 		vm.ExtVar(kv[0], string(v))
 	}
 
+	tlavars, err := flags.GetStringSlice(flagTlaVar)
+	if err != nil {
+		return nil, err
+	}
+	for _, tlavar := range tlavars {
+		kv := strings.SplitN(tlavar, "=", 2)
+		switch len(kv) {
+		case 1:
+			v, present := os.LookupEnv(kv[0])
+			if present {
+				vm.TlaVar(kv[0], v)
+			} else {
+				return nil, fmt.Errorf("Missing environment variable: %s", kv[0])
+			}
+		case 2:
+			vm.TlaVar(kv[0], kv[1])
+		}
+	}
+
+	tlavarfiles, err := flags.GetStringSlice(flagTlaVarFile)
+	if err != nil {
+		return nil, err
+	}
+	for _, tlavar := range tlavarfiles {
+		kv := strings.SplitN(tlavar, "=", 2)
+		if len(kv) != 2 {
+			return nil, fmt.Errorf("Failed to parse tla-str-file: missing '=' in %s", tlavar)
+		}
+		v, err := ioutil.ReadFile(kv[1])
+		if err != nil {
+			return nil, err
+		}
+		vm.TlaVar(kv[0], string(v))
+	}
+
 	resolver, err := buildResolver(cmd)
 	if err != nil {
 		return nil, err