diff --git a/cmd/cue/cmd/common.go b/cmd/cue/cmd/common.go
index 0a8e36a..9908328 100644
--- a/cmd/cue/cmd/common.go
+++ b/cmd/cue/cmd/common.go
@@ -118,6 +118,23 @@
 	return instances
 }
 
+func buildToolInstances(cmd *cobra.Command, binst []*build.Instance) ([]*cue.Instance, error) {
+	instances := cue.Build(binst)
+	for _, inst := range instances {
+		if inst.Err != nil {
+			return nil, inst.Err
+		}
+	}
+
+	// TODO check errors after the fact in case of ignore.
+	for _, inst := range instances {
+		if err := inst.Value().Validate(); err != nil {
+			return nil, err
+		}
+	}
+	return instances, nil
+}
+
 func buildTools(cmd *cobra.Command, args []string) (*cue.Instance, error) {
 	binst := loadFromArgs(cmd, args)
 	if len(binst) == 0 {
@@ -136,6 +153,11 @@
 		}
 	}
 
-	inst := cue.Merge(buildInstances(cmd, binst)...).Build(ti)
+	insts, err := buildToolInstances(cmd, binst)
+	if err != nil {
+		return nil, err
+	}
+
+	inst := cue.Merge(insts...).Build(ti)
 	return inst, inst.Err
 }
diff --git a/cmd/cue/cmd/root.go b/cmd/cue/cmd/root.go
index 6dfefa1..e34a40a 100644
--- a/cmd/cue/cmd/root.go
+++ b/cmd/cue/cmd/root.go
@@ -161,7 +161,9 @@
 	}
 
 	if args[0] == "help" {
-		return cmd, addSubcommands(cmd, sub, args[1:])
+		// Allow errors.
+		_ = addSubcommands(cmd, sub, args[1:])
+		return cmd, nil
 	}
 
 	if _, ok := sub[args[0]]; ok {
diff --git a/cmd/cue/cmd/root_test.go b/cmd/cue/cmd/root_test.go
new file mode 100644
index 0000000..1a5a14f
--- /dev/null
+++ b/cmd/cue/cmd/root_test.go
@@ -0,0 +1,24 @@
+// Copyright 2019 CUE Authors
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package cmd
+
+import "testing"
+
+func TestHelp(t *testing.T) {
+	cmd, err := New([]string{"help", "cmd"})
+	if err != nil || cmd == nil {
+		t.Error("help command failed unexpectedly")
+	}
+}
