diff --git a/cmd/gclogs/gclogs.go b/cmd/gclogs/gclogs.go
index 4ba69d5..144752e 100644
--- a/cmd/gclogs/gclogs.go
+++ b/cmd/gclogs/gclogs.go
@@ -16,7 +16,7 @@
 	"regexp"
 	"time"
 
-	"v.io/x/lib/cmdline2"
+	"v.io/x/lib/cmdline"
 )
 
 var (
@@ -25,8 +25,8 @@
 	flagVerbose  bool
 	flagDryrun   bool
 
-	cmdGCLogs = &cmdline2.Command{
-		Runner: cmdline2.RunnerFunc(garbageCollectLogs),
+	cmdGCLogs = &cmdline.Command{
+		Runner: cmdline.RunnerFunc(garbageCollectLogs),
 		Name:   "gclogs",
 		Short:  "safely deletes old log files",
 		Long: `
@@ -52,10 +52,10 @@
 }
 
 func main() {
-	cmdline2.Main(cmdGCLogs)
+	cmdline.Main(cmdGCLogs)
 }
 
-func garbageCollectLogs(env *cmdline2.Env, args []string) error {
+func garbageCollectLogs(env *cmdline.Env, args []string) error {
 	if len(args) == 0 {
 		env.UsageErrorf("gclogs requires at least one argument")
 	}
@@ -77,7 +77,7 @@
 	return lastErr
 }
 
-func processDirectory(env *cmdline2.Env, logdir string, timeCutoff time.Time, programRE *regexp.Regexp, username string) error {
+func processDirectory(env *cmdline.Env, logdir string, timeCutoff time.Time, programRE *regexp.Regexp, username string) error {
 	fmt.Fprintf(env.Stdout, "Processing: %q\n", logdir)
 
 	f, err := os.Open(logdir)
diff --git a/cmd/gclogs/gclogs_test.go b/cmd/gclogs/gclogs_test.go
index da7b0ea..c8923e4 100644
--- a/cmd/gclogs/gclogs_test.go
+++ b/cmd/gclogs/gclogs_test.go
@@ -16,7 +16,7 @@
 	"testing"
 	"time"
 
-	"v.io/x/lib/cmdline2"
+	"v.io/x/lib/cmdline"
 )
 
 func setup(t *testing.T, workdir, username string) (tmpdir string) {
@@ -161,8 +161,8 @@
 		verbose := fmt.Sprintf("--verbose=%v", tc.verbose)
 		dryrun := fmt.Sprintf("--n=%v", tc.dryrun)
 		var stdout, stderr bytes.Buffer
-		env := &cmdline2.Env{Stdout: &stdout, Stderr: &stderr}
-		if err := cmdline2.ParseAndRun(cmdGCLogs, env, []string{cutoff, verbose, dryrun, testdir}); err != nil {
+		env := &cmdline.Env{Stdout: &stdout, Stderr: &stderr}
+		if err := cmdline.ParseAndRun(cmdGCLogs, env, []string{cutoff, verbose, dryrun, testdir}); err != nil {
 			t.Fatalf("%v: %v", stderr.String(), err)
 		}
 		gotsl := strings.Split(stdout.String(), "\n")
diff --git a/cmd/mounttable/impl.go b/cmd/mounttable/impl.go
index 3acb02b..80ba494 100644
--- a/cmd/mounttable/impl.go
+++ b/cmd/mounttable/impl.go
@@ -19,18 +19,18 @@
 	"v.io/v23/options"
 	"v.io/v23/rpc"
 	"v.io/v23/security"
-	"v.io/x/lib/cmdline2"
+	"v.io/x/lib/cmdline"
 	"v.io/x/lib/vlog"
 	"v.io/x/ref/lib/v23cmd"
 	_ "v.io/x/ref/runtime/factories/generic"
 )
 
 func main() {
-	cmdline2.HideGlobalFlagsExcept(regexp.MustCompile(`^v23\.namespace\.root$`))
-	cmdline2.Main(cmdRoot)
+	cmdline.HideGlobalFlagsExcept(regexp.MustCompile(`^v23\.namespace\.root$`))
+	cmdline.Main(cmdRoot)
 }
 
-var cmdGlob = &cmdline2.Command{
+var cmdGlob = &cmdline.Command{
 	Runner:   v23cmd.RunnerFunc(runGlob),
 	Name:     "glob",
 	Short:    "returns all matching entries in the mount table",
@@ -43,7 +43,7 @@
 `,
 }
 
-func runGlob(ctx *context.T, env *cmdline2.Env, args []string) error {
+func runGlob(ctx *context.T, env *cmdline.Env, args []string) error {
 	ctx, cancel := context.WithTimeout(ctx, time.Minute)
 	defer cancel()
 
@@ -84,7 +84,7 @@
 	return nil
 }
 
-var cmdMount = &cmdline2.Command{
+var cmdMount = &cmdline.Command{
 	Runner:   v23cmd.RunnerFunc(runMount),
 	Name:     "mount",
 	Short:    "Mounts a server <name> onto a mount table",
@@ -103,7 +103,7 @@
 `,
 }
 
-func runMount(ctx *context.T, env *cmdline2.Env, args []string) error {
+func runMount(ctx *context.T, env *cmdline.Env, args []string) error {
 	got := len(args)
 	if got < 2 || got > 4 {
 		return env.UsageErrorf("mount: incorrect number of arguments, expected 2, 3, or 4, got %d", got)
@@ -140,7 +140,7 @@
 	return nil
 }
 
-var cmdUnmount = &cmdline2.Command{
+var cmdUnmount = &cmdline.Command{
 	Runner:   v23cmd.RunnerFunc(runUnmount),
 	Name:     "unmount",
 	Short:    "removes server <name> from the mount table",
@@ -152,7 +152,7 @@
 `,
 }
 
-func runUnmount(ctx *context.T, env *cmdline2.Env, args []string) error {
+func runUnmount(ctx *context.T, env *cmdline.Env, args []string) error {
 	if expected, got := 2, len(args); expected != got {
 		return env.UsageErrorf("unmount: incorrect number of arguments, expected %d, got %d", expected, got)
 	}
@@ -166,7 +166,7 @@
 	return nil
 }
 
-var cmdResolveStep = &cmdline2.Command{
+var cmdResolveStep = &cmdline.Command{
 	Runner:   v23cmd.RunnerFunc(runResolveStep),
 	Name:     "resolvestep",
 	Short:    "takes the next step in resolving a name.",
@@ -177,7 +177,7 @@
 `,
 }
 
-func runResolveStep(ctx *context.T, env *cmdline2.Env, args []string) error {
+func runResolveStep(ctx *context.T, env *cmdline.Env, args []string) error {
 	if expected, got := 1, len(args); expected != got {
 		return env.UsageErrorf("mount: incorrect number of arguments, expected %d, got %d", expected, got)
 	}
@@ -192,13 +192,13 @@
 	return nil
 }
 
-var cmdRoot = &cmdline2.Command{
+var cmdRoot = &cmdline.Command{
 	Name:  "mounttable",
 	Short: "sends commands to Vanadium mounttable services",
 	Long: `
 Command mounttable sends commands to Vanadium mounttable services.
 `,
-	Children: []*cmdline2.Command{cmdGlob, cmdMount, cmdUnmount, cmdResolveStep},
+	Children: []*cmdline.Command{cmdGlob, cmdMount, cmdUnmount, cmdResolveStep},
 }
 
 func blessingPatternsFromServer(ctx *context.T, server string) ([]security.BlessingPattern, error) {
diff --git a/cmd/mounttable/impl_test.go b/cmd/mounttable/impl_test.go
index 8628208..4e50553 100644
--- a/cmd/mounttable/impl_test.go
+++ b/cmd/mounttable/impl_test.go
@@ -19,7 +19,7 @@
 	"v.io/v23/security/access"
 	"v.io/v23/services/mounttable"
 	vdltime "v.io/v23/vdlroot/time"
-	"v.io/x/lib/cmdline2"
+	"v.io/x/lib/cmdline"
 	"v.io/x/lib/vlog"
 	"v.io/x/ref/lib/v23cmd"
 	_ "v.io/x/ref/runtime/factories/generic"
@@ -128,7 +128,7 @@
 
 	// Setup the command-line.
 	var stdout, stderr bytes.Buffer
-	env := &cmdline2.Env{Stdout: &stdout, Stderr: &stderr}
+	env := &cmdline.Env{Stdout: &stdout, Stderr: &stderr}
 
 	// Test the 'glob' command.
 	if err := v23cmd.ParseAndRun(cmdRoot, ctx, env, []string{"glob", naming.JoinAddressName(endpoint.String(), ""), "*"}); err != nil {
diff --git a/cmd/namespace/impl.go b/cmd/namespace/impl.go
index b329b9c..3b24ae3 100644
--- a/cmd/namespace/impl.go
+++ b/cmd/namespace/impl.go
@@ -21,15 +21,15 @@
 	"v.io/v23/options"
 	"v.io/v23/security/access"
 	"v.io/v23/verror"
-	"v.io/x/lib/cmdline2"
+	"v.io/x/lib/cmdline"
 	"v.io/x/lib/vlog"
 	"v.io/x/ref/lib/v23cmd"
 	_ "v.io/x/ref/runtime/factories/generic"
 )
 
 func main() {
-	cmdline2.HideGlobalFlagsExcept(regexp.MustCompile(`^v23\.namespace\.root$`))
-	cmdline2.Main(cmdRoot)
+	cmdline.HideGlobalFlagsExcept(regexp.MustCompile(`^v23\.namespace\.root$`))
+	cmdline.Main(cmdRoot)
 }
 
 var (
@@ -46,7 +46,7 @@
 	cmdDelete.Flags.BoolVar(&flagDeleteSubtree, "r", false, "Delete all children of the name in addition to the name itself.")
 }
 
-var cmdGlob = &cmdline2.Command{
+var cmdGlob = &cmdline.Command{
 	Runner:   v23cmd.RunnerFunc(runGlob),
 	Name:     "glob",
 	Short:    "Returns all matching entries from the namespace",
@@ -58,7 +58,7 @@
 `,
 }
 
-func runGlob(ctx *context.T, env *cmdline2.Env, args []string) error {
+func runGlob(ctx *context.T, env *cmdline.Env, args []string) error {
 	if expected, got := 1, len(args); expected != got {
 		return env.UsageErrorf("glob: incorrect number of arguments, expected %d, got %d", expected, got)
 	}
@@ -118,7 +118,7 @@
 	return nil
 }
 
-var cmdMount = &cmdline2.Command{
+var cmdMount = &cmdline.Command{
 	Runner:   v23cmd.RunnerFunc(runMount),
 	Name:     "mount",
 	Short:    "Adds a server to the namespace",
@@ -132,7 +132,7 @@
 `,
 }
 
-func runMount(ctx *context.T, env *cmdline2.Env, args []string) error {
+func runMount(ctx *context.T, env *cmdline.Env, args []string) error {
 	if expected, got := 3, len(args); expected != got {
 		return env.UsageErrorf("mount: incorrect number of arguments, expected %d, got %d", expected, got)
 	}
@@ -157,7 +157,7 @@
 	return nil
 }
 
-var cmdUnmount = &cmdline2.Command{
+var cmdUnmount = &cmdline.Command{
 	Runner:   v23cmd.RunnerFunc(runUnmount),
 	Name:     "unmount",
 	Short:    "Removes a server from the namespace",
@@ -169,7 +169,7 @@
 `,
 }
 
-func runUnmount(ctx *context.T, env *cmdline2.Env, args []string) error {
+func runUnmount(ctx *context.T, env *cmdline.Env, args []string) error {
 	if expected, got := 2, len(args); expected != got {
 		return env.UsageErrorf("unmount: incorrect number of arguments, expected %d, got %d", expected, got)
 	}
@@ -189,7 +189,7 @@
 	return nil
 }
 
-var cmdResolve = &cmdline2.Command{
+var cmdResolve = &cmdline.Command{
 	Runner:   v23cmd.RunnerFunc(runResolve),
 	Name:     "resolve",
 	Short:    "Translates a object name to its object address(es)",
@@ -198,7 +198,7 @@
 	ArgsLong: "<name> is the name to resolve.",
 }
 
-func runResolve(ctx *context.T, env *cmdline2.Env, args []string) error {
+func runResolve(ctx *context.T, env *cmdline.Env, args []string) error {
 	if expected, got := 1, len(args); expected != got {
 		return env.UsageErrorf("resolve: incorrect number of arguments, expected %d, got %d", expected, got)
 	}
@@ -224,7 +224,7 @@
 	return nil
 }
 
-var cmdResolveToMT = &cmdline2.Command{
+var cmdResolveToMT = &cmdline.Command{
 	Runner:   v23cmd.RunnerFunc(runResolveToMT),
 	Name:     "resolvetomt",
 	Short:    "Finds the address of the mounttable that holds an object name",
@@ -233,7 +233,7 @@
 	ArgsLong: "<name> is the name to resolve.",
 }
 
-func runResolveToMT(ctx *context.T, env *cmdline2.Env, args []string) error {
+func runResolveToMT(ctx *context.T, env *cmdline.Env, args []string) error {
 	if expected, got := 1, len(args); expected != got {
 		return env.UsageErrorf("resolvetomt: incorrect number of arguments, expected %d, got %d", expected, got)
 	}
@@ -258,7 +258,7 @@
 	return nil
 }
 
-var cmdPermissions = &cmdline2.Command{
+var cmdPermissions = &cmdline.Command{
 	Name:  "permissions",
 	Short: "Manipulates permissions on an entry in the namespace",
 	Long: `
@@ -268,10 +268,10 @@
 The permissions are provided as an JSON-encoded version of the Permissions type
 defined in v.io/v23/security/access/types.vdl.
 `,
-	Children: []*cmdline2.Command{cmdPermissionsGet, cmdPermissionsSet},
+	Children: []*cmdline.Command{cmdPermissionsGet, cmdPermissionsSet},
 }
 
-var cmdPermissionsSet = &cmdline2.Command{
+var cmdPermissionsSet = &cmdline.Command{
 	Runner: v23cmd.RunnerFunc(runPermissionsSet),
 	Name:   "set",
 	Short:  "Sets permissions on a mount name",
@@ -287,7 +287,7 @@
 `,
 }
 
-func runPermissionsSet(ctx *context.T, env *cmdline2.Env, args []string) error {
+func runPermissionsSet(ctx *context.T, env *cmdline.Env, args []string) error {
 	if expected, got := 2, len(args); expected != got {
 		return env.UsageErrorf("set: incorrect number of arguments, expected %d, got %d", expected, got)
 	}
@@ -320,7 +320,7 @@
 	}
 }
 
-var cmdPermissionsGet = &cmdline2.Command{
+var cmdPermissionsGet = &cmdline.Command{
 	Runner:   v23cmd.RunnerFunc(runPermissionsGet),
 	Name:     "get",
 	Short:    "Gets permissions on a mount name",
@@ -336,7 +336,7 @@
 `,
 }
 
-func runPermissionsGet(ctx *context.T, env *cmdline2.Env, args []string) error {
+func runPermissionsGet(ctx *context.T, env *cmdline.Env, args []string) error {
 	if expected, got := 1, len(args); expected != got {
 		return env.UsageErrorf("get: incorrect number of arguments, expected %d, got %d", expected, got)
 	}
@@ -351,7 +351,7 @@
 	return json.NewEncoder(env.Stdout).Encode(perms)
 }
 
-var cmdDelete = &cmdline2.Command{
+var cmdDelete = &cmdline.Command{
 	Runner:   v23cmd.RunnerFunc(runDelete),
 	Name:     "delete",
 	Short:    "Deletes a name from the namespace",
@@ -360,7 +360,7 @@
 	Long:     "Deletes a name from the namespace.",
 }
 
-func runDelete(ctx *context.T, env *cmdline2.Env, args []string) error {
+func runDelete(ctx *context.T, env *cmdline.Env, args []string) error {
 	if expected, got := 1, len(args); expected != got {
 		return env.UsageErrorf("delete: incorrect number of arguments, expected %d, got %d", expected, got)
 	}
@@ -371,7 +371,7 @@
 	return v23.GetNamespace(ctx).Delete(ctx, name, flagDeleteSubtree)
 }
 
-var cmdRoot = &cmdline2.Command{
+var cmdRoot = &cmdline.Command{
 	Name:  "namespace",
 	Short: "resolves and manages names in the Vanadium namespace",
 	Long: `
@@ -382,5 +382,5 @@
 with V23_NAMESPACE, e.g.  V23_NAMESPACE, V23_NAMESPACE_2, V23_NAMESPACE_GOOGLE,
 etc.  The command line options override the environment.
 `,
-	Children: []*cmdline2.Command{cmdGlob, cmdMount, cmdUnmount, cmdResolve, cmdResolveToMT, cmdPermissions, cmdDelete},
+	Children: []*cmdline.Command{cmdGlob, cmdMount, cmdUnmount, cmdResolve, cmdResolveToMT, cmdPermissions, cmdDelete},
 }
diff --git a/cmd/principal/main.go b/cmd/principal/main.go
index 948338a..b14da0e 100644
--- a/cmd/principal/main.go
+++ b/cmd/principal/main.go
@@ -27,7 +27,7 @@
 	"v.io/v23/rpc"
 	"v.io/v23/security"
 	"v.io/v23/vom"
-	"v.io/x/lib/cmdline2"
+	"v.io/x/lib/cmdline"
 	"v.io/x/ref/envvar"
 	vsecurity "v.io/x/ref/lib/security"
 	"v.io/x/ref/lib/v23cmd"
@@ -81,14 +81,14 @@
 
 	errNoCaveats = fmt.Errorf("no caveats provided: it is generally dangerous to bless another principal without any caveats as that gives them almost unrestricted access to the blesser's credentials. If you really want to do this, set --require-caveats=false")
 
-	cmdDump = &cmdline2.Command{
+	cmdDump = &cmdline.Command{
 		Name:  "dump",
 		Short: "Dump out information about the principal",
 		Long: `
 Prints out information about the principal specified by the environment
 that this tool is running in.
 `,
-		Runner: v23cmd.RunnerFunc(func(ctx *context.T, env *cmdline2.Env, args []string) error {
+		Runner: v23cmd.RunnerFunc(func(ctx *context.T, env *cmdline.Env, args []string) error {
 			p := v23.GetPrincipal(ctx)
 			if flagDumpShort {
 				fmt.Printf("%v\n", p.BlessingStore().Default())
@@ -103,7 +103,7 @@
 		}),
 	}
 
-	cmdDumpBlessings = &cmdline2.Command{
+	cmdDumpBlessings = &cmdline.Command{
 		Name:  "dumpblessings",
 		Short: "Dump out information about the provided blessings",
 		Long: `
@@ -115,7 +115,7 @@
 <file> is the path to a file containing blessings typically obtained from
 this tool. - is used for STDIN.
 `,
-		Runner: cmdline2.RunnerFunc(func(env *cmdline2.Env, args []string) error {
+		Runner: cmdline.RunnerFunc(func(env *cmdline.Env, args []string) error {
 			if len(args) != 1 {
 				return fmt.Errorf("requires exactly one argument, <file>, provided %d", len(args))
 			}
@@ -150,7 +150,7 @@
 		}),
 	}
 
-	cmdBlessSelf = &cmdline2.Command{
+	cmdBlessSelf = &cmdline.Command{
 		Name:  "blessself",
 		Short: "Generate a self-signed blessing",
 		Long: `
@@ -165,7 +165,7 @@
 specified, a name will be generated based on the hostname of the
 machine and the name of the user running this command.
 `,
-		Runner: v23cmd.RunnerFunc(func(ctx *context.T, env *cmdline2.Env, args []string) error {
+		Runner: v23cmd.RunnerFunc(func(ctx *context.T, env *cmdline.Env, args []string) error {
 			var name string
 			switch len(args) {
 			case 0:
@@ -189,7 +189,7 @@
 		}),
 	}
 
-	cmdBless = &cmdline2.Command{
+	cmdBless = &cmdline.Command{
 		Name:  "bless",
 		Short: "Bless another principal",
 		Long: `
@@ -233,7 +233,7 @@
 blessing.
 
 	`,
-		Runner: v23cmd.RunnerFunc(func(ctx *context.T, env *cmdline2.Env, args []string) error {
+		Runner: v23cmd.RunnerFunc(func(ctx *context.T, env *cmdline.Env, args []string) error {
 			if len(flagRemoteArgFile) > 0 && len(args) != 1 {
 				return fmt.Errorf("when --remote-arg-file is provided, only <extension> is expected, provided %d", len(args))
 			} else if len(flagRemoteArgFile) == 0 && len(args) != 2 {
@@ -284,7 +284,7 @@
 		}),
 	}
 
-	cmdGetPublicKey = &cmdline2.Command{
+	cmdGetPublicKey = &cmdline.Command{
 		Name:  "publickey",
 		Short: "Prints the public key of the principal.",
 		Long: `
@@ -299,7 +299,7 @@
 for humans to read and is used in output of other commands in this program, but
 is not suitable as an argument to the 'recognize' command.
 `,
-		Runner: v23cmd.RunnerFunc(func(ctx *context.T, env *cmdline2.Env, args []string) error {
+		Runner: v23cmd.RunnerFunc(func(ctx *context.T, env *cmdline.Env, args []string) error {
 			key := v23.GetPrincipal(ctx).PublicKey()
 			if flagGetPublicKeyPretty {
 				fmt.Println(key)
@@ -314,7 +314,7 @@
 		}),
 	}
 
-	cmdGetTrustedRoots = &cmdline2.Command{
+	cmdGetTrustedRoots = &cmdline.Command{
 		Name:  "recognizedroots",
 		Short: "Return recognized blessings, and their associated public key.",
 		Long: `
@@ -323,13 +323,13 @@
 appear on this list. If the principal is operating as a server, clients must
 present blessings derived from this list.
 `,
-		Runner: v23cmd.RunnerFunc(func(ctx *context.T, env *cmdline2.Env, args []string) error {
+		Runner: v23cmd.RunnerFunc(func(ctx *context.T, env *cmdline.Env, args []string) error {
 			fmt.Printf(v23.GetPrincipal(ctx).Roots().DebugString())
 			return nil
 		}),
 	}
 
-	cmdGetPeerMap = &cmdline2.Command{
+	cmdGetPeerMap = &cmdline.Command{
 		Name:  "peermap",
 		Short: "Shows the map from peer pattern to which blessing name to present.",
 		Long: `
@@ -338,13 +338,13 @@
 If the principal operates as a client, it presents the map value associated with
 the peer it contacts.
 `,
-		Runner: v23cmd.RunnerFunc(func(ctx *context.T, env *cmdline2.Env, args []string) error {
+		Runner: v23cmd.RunnerFunc(func(ctx *context.T, env *cmdline.Env, args []string) error {
 			fmt.Printf(v23.GetPrincipal(ctx).BlessingStore().DebugString())
 			return nil
 		}),
 	}
 
-	cmdGetForPeer = &cmdline2.Command{
+	cmdGetForPeer = &cmdline.Command{
 		Name:  "forpeer",
 		Short: "Return blessings marked for the provided peer",
 		Long: `
@@ -365,12 +365,12 @@
 store.forpeer returns the blessings that are marked for all peers (i.e.,
 blessings set on the store with the "..." pattern).
 `,
-		Runner: v23cmd.RunnerFunc(func(ctx *context.T, env *cmdline2.Env, args []string) error {
+		Runner: v23cmd.RunnerFunc(func(ctx *context.T, env *cmdline.Env, args []string) error {
 			return printBlessingsInfo(v23.GetPrincipal(ctx).BlessingStore().ForPeer(args...))
 		}),
 	}
 
-	cmdGetDefault = &cmdline2.Command{
+	cmdGetDefault = &cmdline.Command{
 		Name:  "default",
 		Short: "Return blessings marked as default",
 		Long: `
@@ -382,12 +382,12 @@
 Providing --caveats <chain_name> will print the caveats on the certificate chain
 with chain_name.
 `,
-		Runner: v23cmd.RunnerFunc(func(ctx *context.T, env *cmdline2.Env, args []string) error {
+		Runner: v23cmd.RunnerFunc(func(ctx *context.T, env *cmdline.Env, args []string) error {
 			return printBlessingsInfo(v23.GetPrincipal(ctx).BlessingStore().Default())
 		}),
 	}
 
-	cmdSetForPeer = &cmdline2.Command{
+	cmdSetForPeer = &cmdline.Command{
 		Name:  "forpeer",
 		Short: "Set provided blessings for peer",
 		Long: `
@@ -412,7 +412,7 @@
 <pattern> is the BlessingPattern used to identify peers with whom this
 blessing can be shared with.
 `,
-		Runner: v23cmd.RunnerFunc(func(ctx *context.T, env *cmdline2.Env, args []string) error {
+		Runner: v23cmd.RunnerFunc(func(ctx *context.T, env *cmdline.Env, args []string) error {
 			if len(args) != 2 {
 				return fmt.Errorf("requires exactly two arguments <file>, <pattern>, provided %d", len(args))
 			}
@@ -435,7 +435,7 @@
 		}),
 	}
 
-	cmdRecognize = &cmdline2.Command{
+	cmdRecognize = &cmdline.Command{
 		Name:  "recognize",
 		Short: "Add to the set of identity providers recognized by this principal",
 		Long: `
@@ -463,7 +463,7 @@
 
 <blessing pattern> is the blessing pattern for which <key> should be recognized.
 `,
-		Runner: v23cmd.RunnerFunc(func(ctx *context.T, env *cmdline2.Env, args []string) error {
+		Runner: v23cmd.RunnerFunc(func(ctx *context.T, env *cmdline.Env, args []string) error {
 			if len(args) != 1 && len(args) != 2 {
 				return fmt.Errorf("requires either one argument <file>, or two arguments <key> <blessing pattern>, provided %d", len(args))
 			}
@@ -491,7 +491,7 @@
 		}),
 	}
 
-	cmdSetDefault = &cmdline2.Command{
+	cmdSetDefault = &cmdline.Command{
 		Name:  "default",
 		Short: "Set provided blessings as default",
 		Long: `
@@ -506,7 +506,7 @@
 <file> is the path to a file containing a blessing typically obtained from
 this tool. - is used for STDIN.
 `,
-		Runner: v23cmd.RunnerFunc(func(ctx *context.T, env *cmdline2.Env, args []string) error {
+		Runner: v23cmd.RunnerFunc(func(ctx *context.T, env *cmdline.Env, args []string) error {
 			if len(args) != 1 {
 				return fmt.Errorf("requires exactly one argument, <file>, provided %d", len(args))
 			}
@@ -528,7 +528,7 @@
 		}),
 	}
 
-	cmdCreate = &cmdline2.Command{
+	cmdCreate = &cmdline.Command{
 		Name:  "create",
 		Short: "Create a new principal and persist it into a directory",
 		Long: `
@@ -546,7 +546,7 @@
 
 <blessing> is the self-blessed blessing that the principal will be setup to use by default.
 	`,
-		Runner: cmdline2.RunnerFunc(func(env *cmdline2.Env, args []string) error {
+		Runner: cmdline.RunnerFunc(func(env *cmdline.Env, args []string) error {
 			if len(args) != 2 {
 				return fmt.Errorf("requires exactly two arguments: <directory> and <blessing>, provided %d", len(args))
 			}
@@ -571,7 +571,7 @@
 		}),
 	}
 
-	cmdFork = &cmdline2.Command{
+	cmdFork = &cmdline.Command{
 		Name:  "fork",
 		Short: "Fork a new principal from the principal that this tool is running as and persist it into a directory",
 		Long: `
@@ -593,7 +593,7 @@
 
 <extension> is the extension under which the forked principal is blessed.
 	`,
-		Runner: v23cmd.RunnerFunc(func(ctx *context.T, env *cmdline2.Env, args []string) error {
+		Runner: v23cmd.RunnerFunc(func(ctx *context.T, env *cmdline.Env, args []string) error {
 			if len(args) != 2 {
 				return fmt.Errorf("requires exactly two arguments: <directory> and <extension>, provided %d", len(args))
 			}
@@ -640,7 +640,7 @@
 		}),
 	}
 
-	cmdSeekBlessings = &cmdline2.Command{
+	cmdSeekBlessings = &cmdline.Command{
 		Name:  "seekblessings",
 		Short: "Seek blessings from a web-based Vanadium blessing service",
 		Long: `
@@ -655,7 +655,7 @@
 set to true, and are also set for sharing with all peers, unless a more
 specific peer pattern is provided using the --for-peer flag.
 `,
-		Runner: v23cmd.RunnerFunc(func(ctx *context.T, env *cmdline2.Env, args []string) error {
+		Runner: v23cmd.RunnerFunc(func(ctx *context.T, env *cmdline.Env, args []string) error {
 			p := v23.GetPrincipal(ctx)
 
 			blessedChan := make(chan string)
@@ -693,7 +693,7 @@
 		}),
 	}
 
-	cmdRecvBlessings = &cmdline2.Command{
+	cmdRecvBlessings = &cmdline.Command{
 		Name:  "recvblessings",
 		Short: "Receive blessings sent by another principal and use them as the default",
 		Long: `
@@ -733,7 +733,7 @@
 		principal bless --remote-arg-file FILE EXTENSION
 
 `,
-		Runner: v23cmd.RunnerFunc(func(ctx *context.T, env *cmdline2.Env, args []string) error {
+		Runner: v23cmd.RunnerFunc(func(ctx *context.T, env *cmdline.Env, args []string) error {
 			if len(args) != 0 {
 				return fmt.Errorf("command accepts no arguments")
 			}
@@ -853,7 +853,7 @@
 }
 
 func main() {
-	cmdline2.HideGlobalFlagsExcept()
+	cmdline.HideGlobalFlagsExcept()
 	cmdBlessSelf.Flags.Var(&flagBlessSelfCaveats, "caveat", flagBlessSelfCaveats.usage())
 	cmdBlessSelf.Flags.DurationVar(&flagBlessSelfFor, "for", 0, "Duration of blessing validity (zero implies no expiration)")
 
@@ -903,7 +903,7 @@
 
 	cmdGetPublicKey.Flags.BoolVar(&flagGetPublicKeyPretty, "pretty", false, "If true, print the key out in a more human-readable but lossy representation.")
 
-	cmdSet := &cmdline2.Command{
+	cmdSet := &cmdline.Command{
 		Name:  "set",
 		Short: "Mutate the principal's blessings.",
 		Long: `
@@ -912,10 +912,10 @@
 All input blessings are expected to be serialized using base64-VOM-encoding.
 See 'principal get'.
 `,
-		Children: []*cmdline2.Command{cmdSetDefault, cmdSetForPeer},
+		Children: []*cmdline.Command{cmdSetDefault, cmdSetForPeer},
 	}
 
-	cmdGet := &cmdline2.Command{
+	cmdGet := &cmdline.Command{
 		Name:  "get",
 		Short: "Read the principal's blessings.",
 		Long: `
@@ -923,10 +923,10 @@
 
 All blessings are printed to stdout using base64-VOM-encoding.
 `,
-		Children: []*cmdline2.Command{cmdGetDefault, cmdGetForPeer, cmdGetPublicKey, cmdGetTrustedRoots, cmdGetPeerMap},
+		Children: []*cmdline.Command{cmdGetDefault, cmdGetForPeer, cmdGetPublicKey, cmdGetTrustedRoots, cmdGetPeerMap},
 	}
 
-	root := &cmdline2.Command{
+	root := &cmdline.Command{
 		Name:  "principal",
 		Short: "creates and manages Vanadium principals and blessings",
 		Long: `
@@ -934,9 +934,9 @@
 
 All objects are printed using base64-VOM-encoding.
 `,
-		Children: []*cmdline2.Command{cmdCreate, cmdFork, cmdSeekBlessings, cmdRecvBlessings, cmdDump, cmdDumpBlessings, cmdBlessSelf, cmdBless, cmdSet, cmdGet, cmdRecognize},
+		Children: []*cmdline.Command{cmdCreate, cmdFork, cmdSeekBlessings, cmdRecvBlessings, cmdDump, cmdDumpBlessings, cmdBlessSelf, cmdBless, cmdSet, cmdGet, cmdRecognize},
 	}
-	cmdline2.Main(root)
+	cmdline.Main(root)
 }
 
 func decodeBlessings(fname string) (security.Blessings, error) {
diff --git a/cmd/uniqueid/main.go b/cmd/uniqueid/main.go
index 3d27018..bd98c32 100644
--- a/cmd/uniqueid/main.go
+++ b/cmd/uniqueid/main.go
@@ -14,26 +14,26 @@
 	"regexp"
 
 	"v.io/v23/uniqueid"
-	"v.io/x/lib/cmdline2"
+	"v.io/x/lib/cmdline"
 )
 
 func main() {
-	cmdline2.Main(cmdUniqueId)
+	cmdline.Main(cmdUniqueId)
 }
 
-var cmdUniqueId = &cmdline2.Command{
+var cmdUniqueId = &cmdline.Command{
 	Name:  "uniqueid",
 	Short: "generates unique identifiers",
 	Long: `
 Command uniqueid generates unique identifiers.
 It also has an option of automatically substituting unique ids with placeholders in files.
 `,
-	Children: []*cmdline2.Command{cmdGenerate, cmdInject},
-	Topics:   []cmdline2.Topic{},
+	Children: []*cmdline.Command{cmdGenerate, cmdInject},
+	Topics:   []cmdline.Topic{},
 }
 
-var cmdGenerate = &cmdline2.Command{
-	Runner: cmdline2.RunnerFunc(runGenerate),
+var cmdGenerate = &cmdline.Command{
+	Runner: cmdline.RunnerFunc(runGenerate),
 	Name:   "generate",
 	Short:  "Generates UniqueIds",
 	Long: `
@@ -43,8 +43,8 @@
 	ArgsLong: "",
 }
 
-var cmdInject = &cmdline2.Command{
-	Runner: cmdline2.RunnerFunc(runInject),
+var cmdInject = &cmdline.Command{
+	Runner: cmdline.RunnerFunc(runInject),
 	Name:   "inject",
 	Short:  "Injects UniqueIds into existing files",
 	Long: `
@@ -56,7 +56,7 @@
 }
 
 // runGenerate implements the generate command which outputs generated ids to stdout.
-func runGenerate(env *cmdline2.Env, args []string) error {
+func runGenerate(env *cmdline.Env, args []string) error {
 	if len(args) > 0 {
 		return env.UsageErrorf("expected 0 args, got %d", len(args))
 	}
@@ -69,7 +69,7 @@
 }
 
 // runInject implements the inject command which replaces $UNIQUEID$ strings with generated ids.
-func runInject(env *cmdline2.Env, args []string) error {
+func runInject(env *cmdline.Env, args []string) error {
 	if len(args) == 0 {
 		return env.UsageErrorf("expected at least one file arg, got 0")
 	}
diff --git a/cmd/vdl/main.go b/cmd/vdl/main.go
index 4c8c557..50c4c22 100644
--- a/cmd/vdl/main.go
+++ b/cmd/vdl/main.go
@@ -17,7 +17,7 @@
 	"strings"
 
 	"v.io/v23/vdlroot/vdltool"
-	"v.io/x/lib/cmdline2"
+	"v.io/x/lib/cmdline"
 	"v.io/x/lib/textutil"
 	"v.io/x/ref/lib/vdl/build"
 	"v.io/x/ref/lib/vdl/codegen/golang"
@@ -32,7 +32,7 @@
 }
 
 func main() {
-	cmdline2.Main(cmdVDL)
+	cmdline.Main(cmdVDL)
 }
 
 func checkErrors(errs *vdlutil.Errors) error {
@@ -45,8 +45,8 @@
 
 // runHelper returns a function that generates a sorted list of transitive
 // targets, and calls the supplied run function.
-func runHelper(run func(targets []*build.Package, env *compile.Env)) cmdline2.Runner {
-	return cmdline2.RunnerFunc(func(_ *cmdline2.Env, args []string) error {
+func runHelper(run func(targets []*build.Package, env *compile.Env)) cmdline.Runner {
+	return cmdline.RunnerFunc(func(_ *cmdline.Env, args []string) error {
 		if flagVerbose {
 			vdlutil.SetVerbose()
 		}
@@ -72,7 +72,7 @@
 	})
 }
 
-var topicPackages = cmdline2.Topic{
+var topicPackages = cmdline.Topic{
 	Name:  "packages",
 	Short: "Description of package lists",
 	Long: `
@@ -105,7 +105,7 @@
 `,
 }
 
-var topicVdlPath = cmdline2.Topic{
+var topicVdlPath = cmdline.Topic{
 	Name:  "vdlpath",
 	Short: "Description of VDLPATH environment variable",
 	Long: `
@@ -135,7 +135,7 @@
 `,
 }
 
-var topicVdlRoot = cmdline2.Topic{
+var topicVdlRoot = cmdline.Topic{
 	Name:  "vdlroot",
 	Short: "Description of VDLROOT environment variable",
 	Long: `
@@ -150,7 +150,7 @@
 `,
 }
 
-var topicVdlConfig = cmdline2.Topic{
+var topicVdlConfig = cmdline.Topic{
 	Name:  "vdl.config",
 	Short: "Description of vdl.config files",
 	Long: `
@@ -170,7 +170,7 @@
 For more information, run "vdl help packages".
 `
 
-var cmdCompile = &cmdline2.Command{
+var cmdCompile = &cmdline.Command{
 	Runner: runHelper(runCompile),
 	Name:   "compile",
 	Short:  "Compile packages and dependencies, but don't generate code",
@@ -182,7 +182,7 @@
 	ArgsLong: pkgArgLong,
 }
 
-var cmdGenerate = &cmdline2.Command{
+var cmdGenerate = &cmdline.Command{
 	Runner: runHelper(runGenerate),
 	Name:   "generate",
 	Short:  "Compile packages and dependencies, and generate code",
@@ -194,7 +194,7 @@
 	ArgsLong: pkgArgLong,
 }
 
-var cmdAudit = &cmdline2.Command{
+var cmdAudit = &cmdline.Command{
 	Runner: runHelper(runAudit),
 	Name:   "audit",
 	Short:  "Check if any packages are stale and need generation",
@@ -207,7 +207,7 @@
 	ArgsLong: pkgArgLong,
 }
 
-var cmdList = &cmdline2.Command{
+var cmdList = &cmdline.Command{
 	Runner: runHelper(runList),
 	Name:   "list",
 	Short:  "List package and dependency info in transitive order",
@@ -243,7 +243,7 @@
 }
 
 func (gls *genLangs) Set(value string) error {
-	// If the flag is repeated on the cmdline2 it is overridden.  Duplicates within
+	// If the flag is repeated on the cmdline it is overridden.  Duplicates within
 	// the comma separated list are ignored, and retain their original ordering.
 	*gls = genLangs{}
 	seen := make(map[vdltool.GenLanguage]bool)
@@ -354,15 +354,15 @@
 )
 
 // Root returns the root command for the VDL tool.
-var cmdVDL = &cmdline2.Command{
+var cmdVDL = &cmdline.Command{
 	Name:  "vdl",
 	Short: "manages Vanadium Definition Language source code",
 	Long: `
 Command vdl manages Vanadium Definition Language source code.  It's similar to
 the go tool used for managing Go source code.
 `,
-	Children: []*cmdline2.Command{cmdGenerate, cmdCompile, cmdAudit, cmdList},
-	Topics:   []cmdline2.Topic{topicPackages, topicVdlPath, topicVdlRoot, topicVdlConfig},
+	Children: []*cmdline.Command{cmdGenerate, cmdCompile, cmdAudit, cmdList},
+	Topics:   []cmdline.Topic{topicPackages, topicVdlPath, topicVdlRoot, topicVdlConfig},
 }
 
 func init() {
diff --git a/cmd/vdl/vdl_test.go b/cmd/vdl/vdl_test.go
index 12848ab..0607fab 100644
--- a/cmd/vdl/vdl_test.go
+++ b/cmd/vdl/vdl_test.go
@@ -13,7 +13,7 @@
 	"strings"
 	"testing"
 
-	"v.io/x/lib/cmdline2"
+	"v.io/x/lib/cmdline"
 )
 
 const (
@@ -33,8 +33,8 @@
 	defer os.RemoveAll(outDir)
 	// TODO(toddw): test the generated java and javascript files too.
 	outOpt := fmt.Sprintf("--go-out-dir=%s", outDir)
-	env := cmdline2.NewEnv()
-	if err := cmdline2.ParseAndRun(cmdVDL, env, []string{"generate", "--lang=go", outOpt, testDir}); err != nil {
+	env := cmdline.NewEnv()
+	if err := cmdline.ParseAndRun(cmdVDL, env, []string{"generate", "--lang=go", outOpt, testDir}); err != nil {
 		t.Fatalf("Execute() failed: %v", err)
 	}
 	// Check that each *.vdl.go file in the testDir matches the generated output.
diff --git a/cmd/vom/vom.go b/cmd/vom/vom.go
index f387762..24b1d7a 100644
--- a/cmd/vom/vom.go
+++ b/cmd/vom/vom.go
@@ -19,24 +19,24 @@
 
 	"v.io/v23/vdl"
 	"v.io/v23/vom"
-	"v.io/x/lib/cmdline2"
+	"v.io/x/lib/cmdline"
 )
 
 func main() {
-	cmdline2.Main(cmdVom)
+	cmdline.Main(cmdVom)
 }
 
-var cmdVom = &cmdline2.Command{
+var cmdVom = &cmdline.Command{
 	Name:  "vom",
 	Short: "helps debug the Vanadium Object Marshaling wire protocol",
 	Long: `
 Command vom helps debug the Vanadium Object Marshaling wire protocol.
 `,
-	Children: []*cmdline2.Command{cmdDecode, cmdDump},
+	Children: []*cmdline.Command{cmdDecode, cmdDump},
 }
 
-var cmdDecode = &cmdline2.Command{
-	Runner: cmdline2.RunnerFunc(runDecode),
+var cmdDecode = &cmdline.Command{
+	Runner: cmdline.RunnerFunc(runDecode),
 	Name:   "decode",
 	Short:  "Decode data encoded in the vom format",
 	Long: `
@@ -52,8 +52,8 @@
 	ArgsLong: "[data] is the data to decode; if not specified, reads from stdin",
 }
 
-var cmdDump = &cmdline2.Command{
-	Runner: cmdline2.RunnerFunc(runDump),
+var cmdDump = &cmdline.Command{
+	Runner: cmdline.RunnerFunc(runDump),
 	Name:   "dump",
 	Short:  "Dump data encoded in the vom format into formatted output",
 	Long: `
@@ -91,7 +91,7 @@
 		"Data representation, one of "+fmt.Sprint(dataRepAll))
 }
 
-func runDecode(env *cmdline2.Env, args []string) error {
+func runDecode(env *cmdline.Env, args []string) error {
 	// Convert all inputs into a reader over binary bytes.
 	var data string
 	switch {
@@ -125,7 +125,7 @@
 	return nil
 }
 
-func runDump(env *cmdline2.Env, args []string) error {
+func runDump(env *cmdline.Env, args []string) error {
 	// Handle non-streaming cases.
 	switch {
 	case len(args) > 1:
diff --git a/cmd/vomtestgen/generate.go b/cmd/vomtestgen/generate.go
index a6bf53e..19e4ac7 100644
--- a/cmd/vomtestgen/generate.go
+++ b/cmd/vomtestgen/generate.go
@@ -18,7 +18,7 @@
 
 	"v.io/v23/vdl"
 	"v.io/v23/vom"
-	"v.io/x/lib/cmdline2"
+	"v.io/x/lib/cmdline"
 	"v.io/x/ref/lib/vdl/build"
 	"v.io/x/ref/lib/vdl/codegen"
 	"v.io/x/ref/lib/vdl/codegen/vdlgen"
@@ -32,8 +32,8 @@
 	vomdataConfig    = "vomdata.vdl.config"
 )
 
-var cmdGenerate = &cmdline2.Command{
-	Runner: cmdline2.RunnerFunc(runGenerate),
+var cmdGenerate = &cmdline.Command{
+	Runner: cmdline.RunnerFunc(runGenerate),
 	Name:   "vomtestgen",
 	Short:  "generates test data for the vom wire protocol implementation",
 	Long: `
@@ -69,10 +69,10 @@
 }
 
 func main() {
-	cmdline2.Main(cmdGenerate)
+	cmdline.Main(cmdGenerate)
 }
 
-func runGenerate(env *cmdline2.Env, args []string) error {
+func runGenerate(env *cmdline.Env, args []string) error {
 	debug := new(bytes.Buffer)
 	defer dumpDebug(env.Stderr, debug)
 	compileEnv := compile.NewEnv(optGenMaxErrors)
diff --git a/cmd/vrpc/vrpc.go b/cmd/vrpc/vrpc.go
index b3c654e..e0f35e0 100644
--- a/cmd/vrpc/vrpc.go
+++ b/cmd/vrpc/vrpc.go
@@ -22,7 +22,7 @@
 	"v.io/v23/rpc/reserved"
 	"v.io/v23/vdl"
 	"v.io/v23/vdlroot/signature"
-	"v.io/x/lib/cmdline2"
+	"v.io/x/lib/cmdline"
 	"v.io/x/ref/lib/v23cmd"
 	"v.io/x/ref/lib/vdl/build"
 	"v.io/x/ref/lib/vdl/codegen/vdlgen"
@@ -37,8 +37,8 @@
 )
 
 func main() {
-	cmdline2.HideGlobalFlagsExcept(regexp.MustCompile(`^v23\.namespace\.root$`))
-	cmdline2.Main(cmdVRPC)
+	cmdline.HideGlobalFlagsExcept(regexp.MustCompile(`^v23\.namespace\.root$`))
+	cmdline.Main(cmdVRPC)
 }
 
 func init() {
@@ -53,7 +53,7 @@
 	cmdSignature.Flags.BoolVar(&flagShowReserved, "show-reserved", false, "if true, also show the signatures of reserved methods")
 }
 
-var cmdVRPC = &cmdline2.Command{
+var cmdVRPC = &cmdline.Command{
 	Name:  "vrpc",
 	Short: "sends and receives Vanadium remote procedure calls",
 	Long: `
@@ -63,7 +63,7 @@
 	// TODO(toddw): Add cmdServe, which will take an interface as input, and set
 	// up a server capable of handling the given methods.  When a request is
 	// received, it'll allow the user to respond via stdin.
-	Children: []*cmdline2.Command{cmdSignature, cmdCall, cmdIdentify},
+	Children: []*cmdline.Command{cmdSignature, cmdCall, cmdIdentify},
 }
 
 const serverDesc = `
@@ -71,7 +71,7 @@
 the server, or an object name that will be resolved to an end-point.
 `
 
-var cmdSignature = &cmdline2.Command{
+var cmdSignature = &cmdline.Command{
 	Runner: v23cmd.RunnerFunc(runSignature),
 	Name:   "signature",
 	Short:  "Describe the interfaces of a Vanadium server",
@@ -88,7 +88,7 @@
 `,
 }
 
-var cmdCall = &cmdline2.Command{
+var cmdCall = &cmdline.Command{
 	Runner: v23cmd.RunnerFunc(runCall),
 	Name:   "call",
 	Short:  "Call a method of a Vanadium server",
@@ -119,7 +119,7 @@
 `,
 }
 
-var cmdIdentify = &cmdline2.Command{
+var cmdIdentify = &cmdline.Command{
 	Runner: v23cmd.RunnerFunc(runIdentify),
 	Name:   "identify",
 	Short:  "Reveal blessings presented by a Vanadium server",
@@ -132,7 +132,7 @@
 	ArgsLong: serverDesc,
 }
 
-func runSignature(ctx *context.T, env *cmdline2.Env, args []string) error {
+func runSignature(ctx *context.T, env *cmdline.Env, args []string) error {
 	// Error-check args.
 	var server, method string
 	switch len(args) {
@@ -180,7 +180,7 @@
 	return nil
 }
 
-func runCall(ctx *context.T, env *cmdline2.Env, args []string) error {
+func runCall(ctx *context.T, env *cmdline.Env, args []string) error {
 	// Error-check args, and set up argsdata with a comma-separated list of
 	// arguments, allowing each individual arg to already be comma-separated.
 	//
@@ -272,7 +272,7 @@
 	return ret, nil
 }
 
-func runIdentify(ctx *context.T, env *cmdline2.Env, args []string) error {
+func runIdentify(ctx *context.T, env *cmdline.Env, args []string) error {
 	if len(args) != 1 {
 		return env.UsageErrorf("wrong number of arguments")
 	}
diff --git a/cmd/vrpc/vrpc_test.go b/cmd/vrpc/vrpc_test.go
index 50b86bf..a6643fc 100644
--- a/cmd/vrpc/vrpc_test.go
+++ b/cmd/vrpc/vrpc_test.go
@@ -13,7 +13,7 @@
 	"v.io/v23"
 	"v.io/v23/context"
 	"v.io/v23/rpc"
-	"v.io/x/lib/cmdline2"
+	"v.io/x/lib/cmdline"
 	"v.io/x/lib/vlog"
 	"v.io/x/ref/cmd/vrpc/internal"
 	"v.io/x/ref/lib/v23cmd"
@@ -142,7 +142,7 @@
 	ctx, name, shutdown := initTest(t)
 	defer shutdown()
 	var stdout, stderr bytes.Buffer
-	env := &cmdline2.Env{Stdout: &stdout, Stderr: &stderr}
+	env := &cmdline.Env{Stdout: &stdout, Stderr: &stderr}
 	args := []string{"signature", fmt.Sprintf("-show-reserved=%v", showReserved), name}
 	if err := v23cmd.ParseAndRun(cmdVRPC, ctx, env, args); err != nil {
 		t.Fatalf("%s: %v", args, err)
@@ -291,7 +291,7 @@
 	}
 	for _, test := range tests {
 		var stdout, stderr bytes.Buffer
-		env := &cmdline2.Env{Stdout: &stdout, Stderr: &stderr}
+		env := &cmdline.Env{Stdout: &stdout, Stderr: &stderr}
 		if err := v23cmd.ParseAndRun(cmdVRPC, ctx, env, []string{"signature", name, test.Method}); err != nil {
 			t.Errorf("%q failed: %v", test.Method, err)
 			continue
@@ -334,7 +334,7 @@
 	}
 	for _, test := range tests {
 		var stdout, stderr bytes.Buffer
-		env := &cmdline2.Env{Stdout: &stdout, Stderr: &stderr}
+		env := &cmdline.Env{Stdout: &stdout, Stderr: &stderr}
 		if err := v23cmd.ParseAndRun(cmdVRPC, ctx, env, []string{"call", name, test.Method, test.InArgs}); err != nil {
 			t.Errorf("%q(%s) failed: %v", test.Method, test.InArgs, err)
 			continue
diff --git a/cmd/vrun/vrun.go b/cmd/vrun/vrun.go
index fb32d20..c34e61d 100644
--- a/cmd/vrun/vrun.go
+++ b/cmd/vrun/vrun.go
@@ -17,7 +17,7 @@
 	"v.io/v23"
 	"v.io/v23/context"
 	"v.io/v23/security"
-	"v.io/x/lib/cmdline2"
+	"v.io/x/lib/cmdline"
 	"v.io/x/lib/vlog"
 	"v.io/x/ref/envvar"
 	"v.io/x/ref/lib/v23cmd"
@@ -34,7 +34,7 @@
 	roleFlag     string
 )
 
-var cmdVrun = &cmdline2.Command{
+var cmdVrun = &cmdline.Command{
 	Runner:   v23cmd.RunnerFunc(vrun),
 	Name:     "vrun",
 	Short:    "executes commands with a derived Vanadium principal",
@@ -43,7 +43,7 @@
 }
 
 func main() {
-	cmdline2.HideGlobalFlagsExcept()
+	cmdline.HideGlobalFlagsExcept()
 	syscall.CloseOnExec(3)
 	syscall.CloseOnExec(4)
 
@@ -51,10 +51,10 @@
 	cmdVrun.Flags.StringVar(&nameFlag, "name", "", "Name to use for the blessing. Uses the command name if unset.")
 	cmdVrun.Flags.StringVar(&roleFlag, "role", "", "Role object from which to request the blessing. If set, the blessings from this role server are used and --name is ignored. If not set, the default blessings of the calling principal are extended with --name.")
 
-	cmdline2.Main(cmdVrun)
+	cmdline.Main(cmdVrun)
 }
 
-func vrun(ctx *context.T, env *cmdline2.Env, args []string) error {
+func vrun(ctx *context.T, env *cmdline.Env, args []string) error {
 	if len(args) == 0 {
 		args = []string{"bash", "--norc"}
 	}
diff --git a/lib/v23cmd/v23cmd.go b/lib/v23cmd/v23cmd.go
index cdca697..86154a3 100644
--- a/lib/v23cmd/v23cmd.go
+++ b/lib/v23cmd/v23cmd.go
@@ -20,7 +20,7 @@
 
 	"v.io/v23"
 	"v.io/v23/context"
-	"v.io/x/lib/cmdline2"
+	"v.io/x/lib/cmdline"
 )
 
 var (
@@ -30,7 +30,7 @@
 	// shrinks.  Here we maintain a mapping between an index number and the
 	// originally registered function, so that we can look the function up in a
 	// typesafe manner.
-	funcs  []func(*context.T, *cmdline2.Env, []string) error
+	funcs  []func(*context.T, *cmdline.Env, []string) error
 	initFn = v23.Init
 )
 
@@ -38,7 +38,7 @@
 // slice to retrieve the originally registered function.
 type indexRunner uint
 
-func (ix indexRunner) Run(env *cmdline2.Env, args []string) error {
+func (ix indexRunner) Run(env *cmdline.Env, args []string) error {
 	if int(ix) < len(funcs) {
 		ctx, shutdown := initFn()
 		err := funcs[ix](ctx, env, args)
@@ -51,7 +51,7 @@
 // RunnerFunc behaves similarly to cmdline.RunnerFunc, but takes a run function
 // fn that includes a context as the first arg.  The context is created via
 // v23.Init when Run is called on the returned Runner.
-func RunnerFunc(fn func(*context.T, *cmdline2.Env, []string) error) cmdline2.Runner {
+func RunnerFunc(fn func(*context.T, *cmdline.Env, []string) error) cmdline.Runner {
 	ix := indexRunner(len(funcs))
 	funcs = append(funcs, fn)
 	return ix
@@ -59,7 +59,7 @@
 
 // Lookup returns the function registered via RunnerFunc corresponding to
 // runner, or nil if it doesn't exist.
-func Lookup(runner cmdline2.Runner) func(*context.T, *cmdline2.Env, []string) error {
+func Lookup(runner cmdline.Runner) func(*context.T, *cmdline.Env, []string) error {
 	if ix, ok := runner.(indexRunner); ok && int(ix) < len(funcs) {
 		return funcs[ix]
 	}
@@ -70,7 +70,7 @@
 // args.
 //
 // Doesn't call v23.Init; the context initialization is up to you.
-func Run(runner cmdline2.Runner, ctx *context.T, env *cmdline2.Env, args []string) error {
+func Run(runner cmdline.Runner, ctx *context.T, env *cmdline.Env, args []string) error {
 	if fn := Lookup(runner); fn != nil {
 		return fn(ctx, env, args)
 	}
@@ -81,8 +81,8 @@
 // the returned runner with the ctx, env and args.
 //
 // Doesn't call v23.Init; the context initialization is up to you.
-func ParseAndRun(cmd *cmdline2.Command, ctx *context.T, env *cmdline2.Env, args []string) error {
-	runner, args, err := cmdline2.Parse(cmd, env, args)
+func ParseAndRun(cmd *cmdline.Command, ctx *context.T, env *cmdline.Env, args []string) error {
+	runner, args, err := cmdline.Parse(cmd, env, args)
 	if err != nil {
 		return err
 	}
diff --git a/runtime/internal/rpc/stress/mtstress/main.go b/runtime/internal/rpc/stress/mtstress/main.go
index 47a1404..b00d77e 100644
--- a/runtime/internal/rpc/stress/mtstress/main.go
+++ b/runtime/internal/rpc/stress/mtstress/main.go
@@ -18,13 +18,13 @@
 	"v.io/v23/naming"
 	"v.io/v23/options"
 	"v.io/v23/verror"
-	"v.io/x/lib/cmdline2"
+	"v.io/x/lib/cmdline"
 	"v.io/x/ref/lib/v23cmd"
 	_ "v.io/x/ref/runtime/factories/generic"
 )
 
 func init() {
-	cmdline2.HideGlobalFlagsExcept(regexp.MustCompile(`^((rate)|(duration)|(reauthenticate))$`))
+	cmdline.HideGlobalFlagsExcept(regexp.MustCompile(`^((rate)|(duration)|(reauthenticate))$`))
 }
 
 var (
@@ -32,7 +32,7 @@
 	duration = flag.Duration("duration", 10*time.Second, "Duration for sending test traffic and measuring latency")
 	reauth   = flag.Bool("reauthenticate", false, "If true, establish a new authenticated connection for each RPC, simulating load from a distinct process")
 
-	cmdMount = &cmdline2.Command{
+	cmdMount = &cmdline.Command{
 		Name:  "mount",
 		Short: "Measure latency of the Mount RPC at a fixed request rate",
 		Long: `
@@ -46,7 +46,7 @@
 seconds, 1m for 1 minute etc.
 Valid time units are "ms", "s", "m", "h".
 `,
-		Runner: v23cmd.RunnerFunc(func(ctx *context.T, env *cmdline2.Env, args []string) error {
+		Runner: v23cmd.RunnerFunc(func(ctx *context.T, env *cmdline.Env, args []string) error {
 			if got, want := len(args), 2; got != want {
 				return env.UsageErrorf("mount: got %d arguments, want %d", got, want)
 			}
@@ -75,7 +75,7 @@
 		}),
 	}
 
-	cmdResolve = &cmdline2.Command{
+	cmdResolve = &cmdline.Command{
 		Name:  "resolve",
 		Short: "Measure latency of the Resolve RPC at a fixed request rate",
 		Long: `
@@ -85,7 +85,7 @@
 		ArgsLong: `
 <name> the object name to resolve
 `,
-		Runner: v23cmd.RunnerFunc(func(ctx *context.T, env *cmdline2.Env, args []string) error {
+		Runner: v23cmd.RunnerFunc(func(ctx *context.T, env *cmdline.Env, args []string) error {
 			if got, want := len(args), 1; got != want {
 				return env.UsageErrorf("resolve: got %d arguments, want %d", got, want)
 			}
@@ -142,10 +142,10 @@
 }
 
 func main() {
-	root := &cmdline2.Command{
+	root := &cmdline.Command{
 		Name:     "mtstress",
 		Short:    "Tool to stress test a mounttable service by issuing a fixed rate of requests per second and measuring latency",
-		Children: []*cmdline2.Command{cmdMount, cmdResolve},
+		Children: []*cmdline.Command{cmdMount, cmdResolve},
 	}
-	cmdline2.Main(root)
+	cmdline.Main(root)
 }
diff --git a/runtime/internal/rpc/stress/stress/load.go b/runtime/internal/rpc/stress/stress/load.go
index e689f62..befbf21 100644
--- a/runtime/internal/rpc/stress/stress/load.go
+++ b/runtime/internal/rpc/stress/stress/load.go
@@ -12,7 +12,7 @@
 	"time"
 
 	"v.io/v23/context"
-	"v.io/x/lib/cmdline2"
+	"v.io/x/lib/cmdline"
 	"v.io/x/ref/lib/v23cmd"
 	"v.io/x/ref/runtime/internal/rpc/stress/internal"
 )
@@ -36,7 +36,7 @@
 	QpsPerCore float64
 }
 
-var cmdLoadTest = &cmdline2.Command{
+var cmdLoadTest = &cmdline.Command{
 	Runner:   v23cmd.RunnerFunc(runLoadTest),
 	Name:     "load",
 	Short:    "Run load test",
@@ -45,7 +45,7 @@
 	ArgsLong: "<server> ... A list of servers to connect to.",
 }
 
-func runLoadTest(ctx *context.T, env *cmdline2.Env, args []string) error {
+func runLoadTest(ctx *context.T, env *cmdline.Env, args []string) error {
 	if len(args) == 0 {
 		return env.UsageErrorf("no server specified")
 	}
diff --git a/runtime/internal/rpc/stress/stress/main.go b/runtime/internal/rpc/stress/stress/main.go
index 5a2e0e7..8645cad 100644
--- a/runtime/internal/rpc/stress/stress/main.go
+++ b/runtime/internal/rpc/stress/stress/main.go
@@ -6,13 +6,13 @@
 
 import (
 	"v.io/v23/context"
-	"v.io/x/lib/cmdline2"
+	"v.io/x/lib/cmdline"
 	"v.io/x/ref/lib/v23cmd"
 	_ "v.io/x/ref/runtime/factories/static"
 	"v.io/x/ref/runtime/internal/rpc/stress"
 )
 
-var cmdStopServers = &cmdline2.Command{
+var cmdStopServers = &cmdline.Command{
 	Runner:   v23cmd.RunnerFunc(runStopServers),
 	Name:     "stop",
 	Short:    "Stop servers",
@@ -21,7 +21,7 @@
 	ArgsLong: "<server> ... A list of servers to stop.",
 }
 
-func runStopServers(ctx *context.T, env *cmdline2.Env, args []string) error {
+func runStopServers(ctx *context.T, env *cmdline.Env, args []string) error {
 	if len(args) == 0 {
 		return env.UsageErrorf("no server specified")
 	}
@@ -34,16 +34,16 @@
 }
 
 func main() {
-	cmdRoot := &cmdline2.Command{
+	cmdRoot := &cmdline.Command{
 		Name:  "stress",
 		Short: "Tool to stress/load test RPC",
 		Long:  "Tool to stress/load test RPC by issuing randomly generated requests",
-		Children: []*cmdline2.Command{
+		Children: []*cmdline.Command{
 			cmdStressTest,
 			cmdStressStats,
 			cmdLoadTest,
 			cmdStopServers,
 		},
 	}
-	cmdline2.Main(cmdRoot)
+	cmdline.Main(cmdRoot)
 }
diff --git a/runtime/internal/rpc/stress/stress/stress.go b/runtime/internal/rpc/stress/stress/stress.go
index b63dc7a..41b6238 100644
--- a/runtime/internal/rpc/stress/stress/stress.go
+++ b/runtime/internal/rpc/stress/stress/stress.go
@@ -13,7 +13,7 @@
 	"time"
 
 	"v.io/v23/context"
-	"v.io/x/lib/cmdline2"
+	"v.io/x/lib/cmdline"
 	"v.io/x/ref/lib/v23cmd"
 	"v.io/x/ref/runtime/internal/rpc/stress"
 	"v.io/x/ref/runtime/internal/rpc/stress/internal"
@@ -39,7 +39,7 @@
 	cmdStressStats.Flags.StringVar(&outFormat, "format", "text", "Stats output format; either text or json")
 }
 
-var cmdStressTest = &cmdline2.Command{
+var cmdStressTest = &cmdline.Command{
 	Runner:   v23cmd.RunnerFunc(runStressTest),
 	Name:     "stress",
 	Short:    "Run stress test",
@@ -48,7 +48,7 @@
 	ArgsLong: "<server> ... A list of servers to connect to.",
 }
 
-func runStressTest(ctx *context.T, env *cmdline2.Env, args []string) error {
+func runStressTest(ctx *context.T, env *cmdline.Env, args []string) error {
 	if len(args) == 0 {
 		return env.UsageErrorf("no server specified")
 	}
@@ -99,7 +99,7 @@
 	return outSumStats(env.Stdout, outFormat, "client stats:", &merged)
 }
 
-var cmdStressStats = &cmdline2.Command{
+var cmdStressStats = &cmdline.Command{
 	Runner:   v23cmd.RunnerFunc(runStressStats),
 	Name:     "stats",
 	Short:    "Print out stress stats of servers",
@@ -108,7 +108,7 @@
 	ArgsLong: "<server> ... A list of servers to connect to.",
 }
 
-func runStressStats(ctx *context.T, env *cmdline2.Env, args []string) error {
+func runStressStats(ctx *context.T, env *cmdline.Env, args []string) error {
 	if len(args) == 0 {
 		return env.UsageErrorf("no server specified")
 	}
diff --git a/services/agent/internal/server/server.go b/services/agent/internal/server/server.go
index 55e239f..893d4e7 100644
--- a/services/agent/internal/server/server.go
+++ b/services/agent/internal/server/server.go
@@ -11,12 +11,12 @@
 	"crypto/sha512"
 	"crypto/x509"
 	"encoding/base64"
+	"fmt"
 	"io"
 	"net"
 	"os"
 	"path/filepath"
 	"strconv"
-	"sync"
 
 	"v.io/v23"
 	"v.io/v23/context"
@@ -59,10 +59,8 @@
 
 type keymgr struct {
 	path       string
-	principals map[keyHandle]keyData // GUARDED_BY(Mutex)
 	passphrase []byte
 	ctx        *context.T
-	mu         sync.Mutex
 }
 
 // RunAnonymousAgent starts the agent server listening on an
@@ -90,16 +88,16 @@
 	return remote, agentlib.AgentEndpoint(remoteFd), nil
 }
 
-// RunKeyManager starts the key manager server listening on an
-// anonymous unix domain socket. It will persist principals in 'path' using 'passphrase'.
-// Typically only used by the device manager.
-// The returned 'client' is typically passed via cmd.ExtraFiles to a child process.
+// RunKeyManager starts the key manager server listening on an anonymous unix
+// domain socket. It will persist principals in 'path' using 'passphrase'.
+// The returned 'client' is typically passed via cmd.ExtraFiles to a child
+// process.
 func RunKeyManager(ctx *context.T, path string, passphrase []byte) (client *os.File, err error) {
 	if path == "" {
 		return nil, verror.New(errStoragePathRequired, nil)
 	}
 
-	mgr := &keymgr{path: path, passphrase: passphrase, principals: make(map[keyHandle]keyData), ctx: ctx}
+	mgr := &keymgr{path: path, passphrase: passphrase, ctx: ctx}
 
 	if err := os.MkdirAll(filepath.Join(mgr.path, "keys"), 0700); err != nil {
 		return nil, err
@@ -113,12 +111,13 @@
 		return nil, err
 	}
 
-	go mgr.readDMConns(local)
+	go mgr.readConns(local)
 
 	return client, nil
 }
 
-func (a keymgr) readDMConns(conn *net.UnixConn) {
+func (a *keymgr) readConns(conn *net.UnixConn) {
+	cache := make(map[keyHandle]keyData)
 	donech := a.ctx.Done()
 	if donech != nil {
 		go func() {
@@ -144,17 +143,24 @@
 			}
 		}
 		ack()
-		var data *keyData
+		var data keyData
 		if n == len(buf) {
-			data = a.readKey(buf)
+			if cached, ok := cache[buf]; ok {
+				data = cached
+			} else if data, err = a.readKey(buf); err != nil {
+				vlog.Error(err)
+				continue
+			} else {
+				cache[buf] = data
+			}
 		} else if n == 1 {
-			var handle []byte
-			if handle, data, err = a.newKey(buf[0] == 1); err != nil {
+			if buf, data, err = a.newKey(buf[0] == 1); err != nil {
 				vlog.Infof("Error creating key: %v", err)
 				unixfd.CloseUnixAddr(addr)
 				continue
 			}
-			if _, err = conn.Write(handle); err != nil {
+			cache[buf] = data
+			if _, err = conn.Write(buf[:]); err != nil {
 				vlog.Infof("Error sending key handle: %v", err)
 				unixfd.CloseUnixAddr(addr)
 				continue
@@ -164,69 +170,52 @@
 			unixfd.CloseUnixAddr(addr)
 			continue
 		}
-		conn := dial(addr)
-		if data != nil && conn != nil {
-			if err := startAgent(a.ctx, conn, data.w, data.p); err != nil {
-				vlog.Infof("error starting agent: %v", err)
-			}
+		conn, err := dial(addr)
+		if err != nil {
+			vlog.Info(err)
+			continue
+		}
+		if err := startAgent(a.ctx, conn, data.w, data.p); err != nil {
+			vlog.Infof("error starting agent: %v", err)
 		}
 	}
 }
 
-func (a *keymgr) readKey(handle keyHandle) *keyData {
-	a.mu.Lock()
-	cachedData, ok := a.principals[handle]
-	a.mu.Unlock()
-	if ok {
-		return &cachedData
-	}
+func (a *keymgr) readKey(handle keyHandle) (keyData, error) {
+	var nodata keyData
 	filename := base64.URLEncoding.EncodeToString(handle[:])
 	in, err := os.Open(filepath.Join(a.path, "keys", filename))
 	if err != nil {
-		vlog.Errorf("unable to open key file: %v", err)
-		return nil
+		return nodata, fmt.Errorf("unable to open key file: %v", err)
 	}
 	defer in.Close()
 	key, err := vsecurity.LoadPEMKey(in, a.passphrase)
 	if err != nil {
-		vlog.Errorf("unable to load key: %v", err)
-		return nil
+		return nodata, fmt.Errorf("unable to load key in %q: %v", in.Name(), err)
 	}
 	state, err := vsecurity.NewPrincipalStateSerializer(filepath.Join(a.path, "creds", filename))
 	if err != nil {
-		vlog.Errorf("unable to create persisted state serializer: %v", err)
-		return nil
+		return nodata, fmt.Errorf("unable to create persisted state serializer: %v", err)
 	}
 	principal, err := vsecurity.NewPrincipalFromSigner(security.NewInMemoryECDSASigner(key.(*ecdsa.PrivateKey)), state)
 	if err != nil {
-		vlog.Errorf("unable to load principal: %v", err)
-		return nil
+		return nodata, fmt.Errorf("unable to load principal: %v", err)
 	}
-	data := keyData{newWatchers(), principal}
-	a.mu.Lock()
-	cachedData, ok = a.principals[handle]
-	if !ok {
-		a.principals[handle] = data
-		cachedData = data
-	}
-	a.mu.Unlock()
-
-	return &cachedData
+	return keyData{newWatchers(), principal}, nil
 }
 
-func dial(addr net.Addr) *net.UnixConn {
+func dial(addr net.Addr) (*net.UnixConn, error) {
 	fd, err := strconv.ParseInt(addr.String(), 10, 32)
 	if err != nil {
-		vlog.Errorf("Invalid address %v", addr)
-		return nil
+		return nil, fmt.Errorf("invalid address: %v", addr)
 	}
 	file := os.NewFile(uintptr(fd), "client")
 	defer file.Close()
 	conn, err := net.FileConn(file)
 	if err != nil {
-		vlog.Infof("unable to create conn: %v", err)
+		return nil, fmt.Errorf("unable to create conn: %v", err)
 	}
-	return conn.(*net.UnixConn)
+	return conn.(*net.UnixConn), nil
 }
 
 func startAgent(ctx *context.T, conn *net.UnixConn, w *watchers, principal security.Principal) error {
@@ -306,47 +295,46 @@
 	return a.principal.MintDischarge(forCaveat, caveatOnDischarge, additionalCaveatsOnDischarge...)
 }
 
-func (a keymgr) newKey(in_memory bool) (id []byte, data *keyData, err error) {
+func (a *keymgr) newKey(in_memory bool) (keyHandle, keyData, error) {
+	var handle keyHandle
+	var nodata keyData
 	if a.path == "" {
-		return nil, nil, verror.New(errNotMultiKeyMode, nil)
+		return handle, nodata, verror.New(errNotMultiKeyMode, nil)
 	}
 	key, err := ecdsa.GenerateKey(elliptic.P256(), rand.Reader)
-	keyHandle, err := keyid(key)
 	if err != nil {
-		return nil, nil, err
+		return handle, nodata, err
+	}
+	if handle, err = keyid(key); err != nil {
+		return handle, nodata, err
 	}
 	signer := security.NewInMemoryECDSASigner(key)
 	var p security.Principal
 	if in_memory {
-		p, err = vsecurity.NewPrincipalFromSigner(signer, nil)
-		if err != nil {
-			return nil, nil, err
+		if p, err = vsecurity.NewPrincipalFromSigner(signer, nil); err != nil {
+			return handle, nodata, err
 		}
 	} else {
-		filename := base64.URLEncoding.EncodeToString(keyHandle[:])
+		filename := base64.URLEncoding.EncodeToString(handle[:])
 		out, err := os.OpenFile(filepath.Join(a.path, "keys", filename), os.O_WRONLY|os.O_CREATE, 0600)
 		if err != nil {
-			return nil, nil, err
+			return handle, nodata, err
 		}
 		defer out.Close()
 		err = vsecurity.SavePEMKey(out, key, a.passphrase)
 		if err != nil {
-			return nil, nil, err
+			return handle, nodata, err
 		}
 		state, err := vsecurity.NewPrincipalStateSerializer(filepath.Join(a.path, "creds", filename))
 		if err != nil {
-			return nil, nil, err
+			return handle, nodata, err
 		}
 		p, err = vsecurity.NewPrincipalFromSigner(signer, state)
 		if err != nil {
-			return nil, nil, err
+			return handle, nodata, err
 		}
 	}
-	data = &keyData{newWatchers(), p}
-	a.mu.Lock()
-	a.principals[keyHandle] = *data
-	a.mu.Unlock()
-	return keyHandle[:], data, nil
+	return handle, keyData{newWatchers(), p}, nil
 }
 
 func keyid(key *ecdsa.PrivateKey) (handle keyHandle, err error) {
diff --git a/services/agent/vbecome/vbecome.go b/services/agent/vbecome/vbecome.go
index fb2a28c..b4cd9f6 100644
--- a/services/agent/vbecome/vbecome.go
+++ b/services/agent/vbecome/vbecome.go
@@ -21,7 +21,7 @@
 	"v.io/v23"
 	"v.io/v23/context"
 	"v.io/v23/security"
-	"v.io/x/lib/cmdline2"
+	"v.io/x/lib/cmdline"
 	"v.io/x/lib/vlog"
 	"v.io/x/ref/envvar"
 	vsecurity "v.io/x/ref/lib/security"
@@ -38,7 +38,7 @@
 	roleFlag     string
 )
 
-var cmdVbecome = &cmdline2.Command{
+var cmdVbecome = &cmdline.Command{
 	Runner:   v23cmd.RunnerFunc(vbecome),
 	Name:     "vbecome",
 	Short:    "executes commands with a derived Vanadium principal",
@@ -50,7 +50,7 @@
 const keyServerFd = 4
 
 func main() {
-	cmdline2.HideGlobalFlagsExcept()
+	cmdline.HideGlobalFlagsExcept()
 	syscall.CloseOnExec(childAgentFd)
 	syscall.CloseOnExec(keyServerFd)
 
@@ -58,10 +58,10 @@
 	cmdVbecome.Flags.StringVar(&nameFlag, "name", "", "Name to use for the blessing.")
 	cmdVbecome.Flags.StringVar(&roleFlag, "role", "", "Role object from which to request the blessing. If set, the blessings from this role server are used and --name is ignored. If not set, the default blessings of the calling principal are extended with --name.")
 
-	cmdline2.Main(cmdVbecome)
+	cmdline.Main(cmdVbecome)
 }
 
-func vbecome(ctx *context.T, env *cmdline2.Env, args []string) error {
+func vbecome(ctx *context.T, env *cmdline.Env, args []string) error {
 	if len(args) == 0 {
 		if shell := os.Getenv("SHELL"); shell != "" {
 			args = []string{shell}
diff --git a/services/application/application/impl.go b/services/application/application/impl.go
index d880b58..869caed 100644
--- a/services/application/application/impl.go
+++ b/services/application/application/impl.go
@@ -20,15 +20,15 @@
 
 	"v.io/v23/context"
 	"v.io/v23/services/application"
-	"v.io/x/lib/cmdline2"
+	"v.io/x/lib/cmdline"
 	"v.io/x/ref/lib/v23cmd"
 	_ "v.io/x/ref/runtime/factories/generic"
 	"v.io/x/ref/services/repository"
 )
 
 func main() {
-	cmdline2.HideGlobalFlagsExcept()
-	cmdline2.Main(cmdRoot)
+	cmdline.HideGlobalFlagsExcept()
+	cmdline.Main(cmdRoot)
 }
 
 func getEnvelopeJSON(ctx *context.T, app repository.ApplicationClientMethods, profiles string) ([]byte, error) {
@@ -58,7 +58,7 @@
 	return nil
 }
 
-func promptUser(env *cmdline2.Env, msg string) string {
+func promptUser(env *cmdline.Env, msg string) string {
 	fmt.Fprint(env.Stdout, msg)
 	var answer string
 	if _, err := fmt.Scanf("%s", &answer); err != nil {
@@ -67,7 +67,7 @@
 	return answer
 }
 
-var cmdMatch = &cmdline2.Command{
+var cmdMatch = &cmdline.Command{
 	Runner:   v23cmd.RunnerFunc(runMatch),
 	Name:     "match",
 	Short:    "Shows the first matching envelope that matches the given profiles.",
@@ -78,7 +78,7 @@
 <profiles> is a comma-separated list of profiles.`,
 }
 
-func runMatch(ctx *context.T, env *cmdline2.Env, args []string) error {
+func runMatch(ctx *context.T, env *cmdline.Env, args []string) error {
 	if expected, got := 2, len(args); expected != got {
 		return env.UsageErrorf("match: incorrect number of arguments, expected %d, got %d", expected, got)
 	}
@@ -92,7 +92,7 @@
 	return nil
 }
 
-var cmdPut = &cmdline2.Command{
+var cmdPut = &cmdline.Command{
 	Runner:   v23cmd.RunnerFunc(runPut),
 	Name:     "put",
 	Short:    "Add the given envelope to the application for the given profiles.",
@@ -105,7 +105,7 @@
 not provided, the user will be prompted to enter the data manually.`,
 }
 
-func runPut(ctx *context.T, env *cmdline2.Env, args []string) error {
+func runPut(ctx *context.T, env *cmdline.Env, args []string) error {
 	if got := len(args); got != 2 && got != 3 {
 		return env.UsageErrorf("put: incorrect number of arguments, expected 2 or 3, got %d", got)
 	}
@@ -134,7 +134,7 @@
 	return nil
 }
 
-var cmdRemove = &cmdline2.Command{
+var cmdRemove = &cmdline.Command{
 	Runner:   v23cmd.RunnerFunc(runRemove),
 	Name:     "remove",
 	Short:    "removes the application envelope for the given profile.",
@@ -145,7 +145,7 @@
 <profile> is a profile.`,
 }
 
-func runRemove(ctx *context.T, env *cmdline2.Env, args []string) error {
+func runRemove(ctx *context.T, env *cmdline.Env, args []string) error {
 	if expected, got := 2, len(args); expected != got {
 		return env.UsageErrorf("remove: incorrect number of arguments, expected %d, got %d", expected, got)
 	}
@@ -160,7 +160,7 @@
 	return nil
 }
 
-var cmdEdit = &cmdline2.Command{
+var cmdEdit = &cmdline.Command{
 	Runner:   v23cmd.RunnerFunc(runEdit),
 	Name:     "edit",
 	Short:    "edits the application envelope for the given profile.",
@@ -171,7 +171,7 @@
 <profile> is a profile.`,
 }
 
-func runEdit(ctx *context.T, env *cmdline2.Env, args []string) error {
+func runEdit(ctx *context.T, env *cmdline.Env, args []string) error {
 	if expected, got := 2, len(args); expected != got {
 		return env.UsageErrorf("edit: incorrect number of arguments, expected %d, got %d", expected, got)
 	}
@@ -188,7 +188,7 @@
 	return nil
 }
 
-func editAndPutEnvelopeJSON(ctx *context.T, env *cmdline2.Env, app repository.ApplicationClientMethods, profile string, envData []byte) error {
+func editAndPutEnvelopeJSON(ctx *context.T, env *cmdline.Env, app repository.ApplicationClientMethods, profile string, envData []byte) error {
 	f, err := ioutil.TempFile("", "application-edit-")
 	if err != nil {
 		return fmt.Errorf("TempFile() failed: %v", err)
@@ -236,11 +236,11 @@
 	return nil
 }
 
-var cmdRoot = &cmdline2.Command{
+var cmdRoot = &cmdline.Command{
 	Name:  "application",
 	Short: "manages the Vanadium application repository",
 	Long: `
 Command application manages the Vanadium application repository.
 `,
-	Children: []*cmdline2.Command{cmdMatch, cmdPut, cmdRemove, cmdEdit},
+	Children: []*cmdline.Command{cmdMatch, cmdPut, cmdRemove, cmdEdit},
 }
diff --git a/services/application/application/impl_test.go b/services/application/application/impl_test.go
index b990094..d9b872f 100644
--- a/services/application/application/impl_test.go
+++ b/services/application/application/impl_test.go
@@ -18,7 +18,7 @@
 	"v.io/v23/security"
 	"v.io/v23/security/access"
 	"v.io/v23/services/application"
-	"v.io/x/lib/cmdline2"
+	"v.io/x/lib/cmdline"
 	"v.io/x/lib/vlog"
 	"v.io/x/ref/lib/v23cmd"
 	_ "v.io/x/ref/runtime/factories/generic"
@@ -152,7 +152,7 @@
 	defer stopServer(t, server)
 	// Setup the command-line.
 	var stdout, stderr bytes.Buffer
-	env := &cmdline2.Env{Stdout: &stdout, Stderr: &stderr}
+	env := &cmdline.Env{Stdout: &stdout, Stderr: &stderr}
 	appName := naming.JoinAddressName(endpoint.String(), "myapp/1")
 	profile := "myprofile"
 
diff --git a/services/binary/binary/impl.go b/services/binary/binary/impl.go
index 6231bef..342eb2d 100644
--- a/services/binary/binary/impl.go
+++ b/services/binary/binary/impl.go
@@ -12,18 +12,18 @@
 	"os"
 
 	"v.io/v23/context"
-	"v.io/x/lib/cmdline2"
+	"v.io/x/lib/cmdline"
 	"v.io/x/ref/lib/v23cmd"
 	_ "v.io/x/ref/runtime/factories/generic"
 	"v.io/x/ref/services/internal/binarylib"
 )
 
 func main() {
-	cmdline2.HideGlobalFlagsExcept()
-	cmdline2.Main(cmdRoot)
+	cmdline.HideGlobalFlagsExcept()
+	cmdline.Main(cmdRoot)
 }
 
-var cmdDelete = &cmdline2.Command{
+var cmdDelete = &cmdline.Command{
 	Runner:   v23cmd.RunnerFunc(runDelete),
 	Name:     "delete",
 	Short:    "Delete a binary",
@@ -32,7 +32,7 @@
 	ArgsLong: "<von> is the vanadium object name of the binary to delete",
 }
 
-func runDelete(ctx *context.T, env *cmdline2.Env, args []string) error {
+func runDelete(ctx *context.T, env *cmdline.Env, args []string) error {
 	if expected, got := 1, len(args); expected != got {
 		return env.UsageErrorf("delete: incorrect number of arguments, expected %d, got %d", expected, got)
 	}
@@ -44,7 +44,7 @@
 	return nil
 }
 
-var cmdDownload = &cmdline2.Command{
+var cmdDownload = &cmdline.Command{
 	Runner: v23cmd.RunnerFunc(runDownload),
 	Name:   "download",
 	Short:  "Download a binary",
@@ -59,7 +59,7 @@
 `,
 }
 
-func runDownload(ctx *context.T, env *cmdline2.Env, args []string) error {
+func runDownload(ctx *context.T, env *cmdline.Env, args []string) error {
 	if expected, got := 2, len(args); expected != got {
 		return env.UsageErrorf("download: incorrect number of arguments, expected %d, got %d", expected, got)
 	}
@@ -71,7 +71,7 @@
 	return nil
 }
 
-var cmdUpload = &cmdline2.Command{
+var cmdUpload = &cmdline.Command{
 	Runner: v23cmd.RunnerFunc(runUpload),
 	Name:   "upload",
 	Short:  "Upload a binary or directory archive",
@@ -86,7 +86,7 @@
 `,
 }
 
-func runUpload(ctx *context.T, env *cmdline2.Env, args []string) error {
+func runUpload(ctx *context.T, env *cmdline.Env, args []string) error {
 	if expected, got := 2, len(args); expected != got {
 		return env.UsageErrorf("upload: incorrect number of arguments, expected %d, got %d", expected, got)
 	}
@@ -111,7 +111,7 @@
 	return nil
 }
 
-var cmdURL = &cmdline2.Command{
+var cmdURL = &cmdline.Command{
 	Runner:   v23cmd.RunnerFunc(runURL),
 	Name:     "url",
 	Short:    "Fetch a download URL",
@@ -120,7 +120,7 @@
 	ArgsLong: "<von> is the vanadium object name of the binary repository",
 }
 
-func runURL(ctx *context.T, env *cmdline2.Env, args []string) error {
+func runURL(ctx *context.T, env *cmdline.Env, args []string) error {
 	if expected, got := 1, len(args); expected != got {
 		return env.UsageErrorf("rooturl: incorrect number of arguments, expected %d, got %d", expected, got)
 	}
@@ -133,11 +133,11 @@
 	return nil
 }
 
-var cmdRoot = &cmdline2.Command{
+var cmdRoot = &cmdline.Command{
 	Name:  "binary",
 	Short: "manages the Vanadium binary repository",
 	Long: `
 Command binary manages the Vanadium binary repository.
 `,
-	Children: []*cmdline2.Command{cmdDelete, cmdDownload, cmdUpload, cmdURL},
+	Children: []*cmdline.Command{cmdDelete, cmdDownload, cmdUpload, cmdURL},
 }
diff --git a/services/binary/binary/impl_test.go b/services/binary/binary/impl_test.go
index 7854fda..85414b3 100644
--- a/services/binary/binary/impl_test.go
+++ b/services/binary/binary/impl_test.go
@@ -23,7 +23,7 @@
 	"v.io/v23/security/access"
 	"v.io/v23/services/binary"
 	"v.io/v23/services/repository"
-	"v.io/x/lib/cmdline2"
+	"v.io/x/lib/cmdline"
 	"v.io/x/lib/vlog"
 	"v.io/x/ref/lib/v23cmd"
 	_ "v.io/x/ref/runtime/factories/generic"
@@ -138,7 +138,7 @@
 
 	// Setup the command-line.
 	var out bytes.Buffer
-	env := &cmdline2.Env{Stdout: &out, Stderr: &out}
+	env := &cmdline.Env{Stdout: &out, Stderr: &out}
 
 	// Test the 'delete' command.
 	if err := v23cmd.ParseAndRun(cmdRoot, ctx, env, []string{"delete", naming.JoinAddressName(endpoint.String(), "exists")}); err != nil {
diff --git a/services/build/build/impl.go b/services/build/build/impl.go
index 22d838a..abe2639 100644
--- a/services/build/build/impl.go
+++ b/services/build/build/impl.go
@@ -19,13 +19,13 @@
 
 	"v.io/v23/context"
 	vbuild "v.io/v23/services/build"
-	"v.io/x/lib/cmdline2"
+	"v.io/x/lib/cmdline"
 	"v.io/x/ref/lib/v23cmd"
 	_ "v.io/x/ref/runtime/factories/generic"
 )
 
 func main() {
-	cmdline2.Main(cmdRoot)
+	cmdline.Main(cmdRoot)
 }
 
 var (
@@ -34,23 +34,23 @@
 )
 
 func init() {
-	cmdline2.HideGlobalFlagsExcept()
+	cmdline.HideGlobalFlagsExcept()
 	cmdBuild.Flags.StringVar(&flagArch, "arch", runtime.GOARCH, "Target architecture.  The default is the value of runtime.GOARCH.")
 	cmdBuild.Flags.Lookup("arch").DefValue = "<runtime.GOARCH>"
 	cmdBuild.Flags.StringVar(&flagOS, "os", runtime.GOOS, "Target operating system.  The default is the value of runtime.GOOS.")
 	cmdBuild.Flags.Lookup("os").DefValue = "<runtime.GOOS>"
 }
 
-var cmdRoot = &cmdline2.Command{
+var cmdRoot = &cmdline.Command{
 	Name:  "build",
 	Short: "sends commands to a Vanadium build server",
 	Long: `
 Command build sends commands to a Vanadium build server.
 `,
-	Children: []*cmdline2.Command{cmdBuild},
+	Children: []*cmdline.Command{cmdBuild},
 }
 
-var cmdBuild = &cmdline2.Command{
+var cmdBuild = &cmdline.Command{
 	Runner: v23cmd.RunnerFunc(runBuild),
 	Name:   "build",
 	Short:  "Build vanadium Go packages",
@@ -226,7 +226,7 @@
 // concurrently 1) reads the source files, 2) sends them to the build
 // server and receives binaries from the build server, and 3) writes
 // the binaries out to the disk.
-func runBuild(ctx *context.T, env *cmdline2.Env, args []string) error {
+func runBuild(ctx *context.T, env *cmdline.Env, args []string) error {
 	name, paths := args[0], args[1:]
 	pkgMap := map[string]*build.Package{}
 	if err := importPackages(paths, pkgMap); err != nil {
diff --git a/services/build/build/impl_test.go b/services/build/build/impl_test.go
index f60b3db..4df3e5a 100644
--- a/services/build/build/impl_test.go
+++ b/services/build/build/impl_test.go
@@ -16,7 +16,7 @@
 	"v.io/v23/services/binary"
 	"v.io/v23/services/build"
 	"v.io/v23/verror"
-	"v.io/x/lib/cmdline2"
+	"v.io/x/lib/cmdline"
 	"v.io/x/lib/vlog"
 	"v.io/x/ref/lib/v23cmd"
 	_ "v.io/x/ref/runtime/factories/generic"
@@ -77,7 +77,7 @@
 	defer stopServer(t, server)
 
 	var stdout, stderr bytes.Buffer
-	env := &cmdline2.Env{Stdout: &stdout, Stderr: &stderr}
+	env := &cmdline.Env{Stdout: &stdout, Stderr: &stderr}
 	args := []string{"build", naming.JoinAddressName(endpoint.String(), ""), "v.io/x/ref/services/build/build"}
 	if err := v23cmd.ParseAndRun(cmdRoot, ctx, env, args); err != nil {
 		t.Fatalf("Run failed: %v", err)
diff --git a/services/debug/debug/impl.go b/services/debug/debug/impl.go
index a9a604a..a35a70b 100644
--- a/services/debug/debug/impl.go
+++ b/services/debug/debug/impl.go
@@ -28,7 +28,7 @@
 	"v.io/v23/uniqueid"
 	"v.io/v23/vdl"
 	"v.io/v23/vtrace"
-	"v.io/x/lib/cmdline2"
+	"v.io/x/lib/cmdline"
 	"v.io/x/ref/lib/glob"
 	"v.io/x/ref/lib/signals"
 	"v.io/x/ref/lib/v23cmd"
@@ -37,7 +37,7 @@
 )
 
 func main() {
-	cmdline2.Main(cmdRoot)
+	cmdline.Main(cmdRoot)
 }
 
 var (
@@ -51,7 +51,7 @@
 )
 
 func init() {
-	cmdline2.HideGlobalFlagsExcept()
+	cmdline.HideGlobalFlagsExcept()
 
 	// logs read flags
 	cmdLogsRead.Flags.BoolVar(&follow, "f", false, "When true, read will wait for new log entries when it reaches the end of the file.")
@@ -71,7 +71,7 @@
 	cmdPProfRun.Flags.StringVar(&pprofCmd, "pprofcmd", "v23 go tool pprof", "The pprof command to use.")
 }
 
-var cmdVtrace = &cmdline2.Command{
+var cmdVtrace = &cmdline.Command{
 	Runner:   v23cmd.RunnerFunc(runVtrace),
 	Name:     "vtrace",
 	Short:    "Returns vtrace traces.",
@@ -95,7 +95,7 @@
 	}
 }
 
-func runVtrace(ctx *context.T, env *cmdline2.Env, args []string) error {
+func runVtrace(ctx *context.T, env *cmdline.Env, args []string) error {
 	arglen := len(args)
 	if arglen == 0 {
 		return env.UsageErrorf("vtrace: incorrect number of arguments, got %d want >= 1", arglen)
@@ -145,7 +145,7 @@
 	return <-errors
 }
 
-var cmdGlob = &cmdline2.Command{
+var cmdGlob = &cmdline.Command{
 	Runner:   v23cmd.RunnerFunc(runGlob),
 	Name:     "glob",
 	Short:    "Returns all matching entries from the namespace.",
@@ -156,7 +156,7 @@
 `,
 }
 
-func runGlob(ctx *context.T, env *cmdline2.Env, args []string) error {
+func runGlob(ctx *context.T, env *cmdline.Env, args []string) error {
 	if min, got := 1, len(args); got < min {
 		return env.UsageErrorf("glob: incorrect number of arguments, got %d, want >=%d", got, min)
 	}
@@ -216,7 +216,7 @@
 	}
 }
 
-var cmdLogsRead = &cmdline2.Command{
+var cmdLogsRead = &cmdline.Command{
 	Runner:   v23cmd.RunnerFunc(runLogsRead),
 	Name:     "read",
 	Short:    "Reads the content of a log file object.",
@@ -227,7 +227,7 @@
 `,
 }
 
-func runLogsRead(ctx *context.T, env *cmdline2.Env, args []string) error {
+func runLogsRead(ctx *context.T, env *cmdline.Env, args []string) error {
 	if want, got := 1, len(args); want != got {
 		return env.UsageErrorf("read: incorrect number of arguments, got %d, want %d", got, want)
 	}
@@ -259,7 +259,7 @@
 	return nil
 }
 
-var cmdLogsSize = &cmdline2.Command{
+var cmdLogsSize = &cmdline.Command{
 	Runner:   v23cmd.RunnerFunc(runLogsSize),
 	Name:     "size",
 	Short:    "Returns the size of a log file object.",
@@ -270,7 +270,7 @@
 `,
 }
 
-func runLogsSize(ctx *context.T, env *cmdline2.Env, args []string) error {
+func runLogsSize(ctx *context.T, env *cmdline.Env, args []string) error {
 	if want, got := 1, len(args); want != got {
 		return env.UsageErrorf("size: incorrect number of arguments, got %d, want %d", got, want)
 	}
@@ -284,7 +284,7 @@
 	return nil
 }
 
-var cmdStatsRead = &cmdline2.Command{
+var cmdStatsRead = &cmdline.Command{
 	Runner:   v23cmd.RunnerFunc(runStatsRead),
 	Name:     "read",
 	Short:    "Returns the value of stats objects.",
@@ -296,7 +296,7 @@
 `,
 }
 
-func runStatsRead(ctx *context.T, env *cmdline2.Env, args []string) error {
+func runStatsRead(ctx *context.T, env *cmdline.Env, args []string) error {
 	if min, got := 1, len(args); got < min {
 		return env.UsageErrorf("read: incorrect number of arguments, got %d, want >=%d", got, min)
 	}
@@ -350,7 +350,7 @@
 	output <- fmt.Sprintf("%s: %v", name, fv)
 }
 
-var cmdStatsWatch = &cmdline2.Command{
+var cmdStatsWatch = &cmdline.Command{
 	Runner:   v23cmd.RunnerFunc(runStatsWatch),
 	Name:     "watch",
 	Short:    "Returns a stream of all matching entries and their values as they change.",
@@ -361,7 +361,7 @@
 `,
 }
 
-func runStatsWatch(ctx *context.T, env *cmdline2.Env, args []string) error {
+func runStatsWatch(ctx *context.T, env *cmdline.Env, args []string) error {
 	if want, got := 1, len(args); got < want {
 		return env.UsageErrorf("watch: incorrect number of arguments, got %d, want >=%d", got, want)
 	}
@@ -456,7 +456,7 @@
 	return ret + fmt.Sprint(pretty), err
 }
 
-var cmdPProfRun = &cmdline2.Command{
+var cmdPProfRun = &cmdline.Command{
 	Runner:   v23cmd.RunnerFunc(runPProf),
 	Name:     "run",
 	Short:    "Runs the pprof tool.",
@@ -473,7 +473,7 @@
 `,
 }
 
-func runPProf(ctx *context.T, env *cmdline2.Env, args []string) error {
+func runPProf(ctx *context.T, env *cmdline.Env, args []string) error {
 	if min, got := 1, len(args); got < min {
 		return env.UsageErrorf("pprof: incorrect number of arguments, got %d, want >=%d", got, min)
 	}
@@ -504,7 +504,7 @@
 	return c.Run()
 }
 
-func showPProfProfiles(ctx *context.T, env *cmdline2.Env, name string) error {
+func showPProfProfiles(ctx *context.T, env *cmdline.Env, name string) error {
 	v, err := pprof.PProfClient(name).Profiles(ctx)
 	if err != nil {
 		return err
@@ -526,7 +526,7 @@
 	return `"` + re.ReplaceAllString(s, "\\$1") + `"`
 }
 
-var cmdPProfRunProxy = &cmdline2.Command{
+var cmdPProfRunProxy = &cmdline.Command{
 	Runner:   v23cmd.RunnerFunc(runPProfProxy),
 	Name:     "proxy",
 	Short:    "Runs an http proxy to a pprof object.",
@@ -537,7 +537,7 @@
 `,
 }
 
-func runPProfProxy(ctx *context.T, env *cmdline2.Env, args []string) error {
+func runPProfProxy(ctx *context.T, env *cmdline.Env, args []string) error {
 	if want, got := 1, len(args); got != want {
 		return env.UsageErrorf("proxy: incorrect number of arguments, got %d, want %d", got, want)
 	}
@@ -557,30 +557,30 @@
 	return nil
 }
 
-var cmdRoot = &cmdline2.Command{
+var cmdRoot = &cmdline.Command{
 	Name:  "debug",
 	Short: "supports debugging Vanadium servers.",
 	Long:  "Command debug supports debugging Vanadium servers.",
-	Children: []*cmdline2.Command{
+	Children: []*cmdline.Command{
 		cmdGlob,
 		cmdVtrace,
-		&cmdline2.Command{
+		&cmdline.Command{
 			Name:     "logs",
 			Short:    "Accesses log files",
 			Long:     "Accesses log files",
-			Children: []*cmdline2.Command{cmdLogsRead, cmdLogsSize},
+			Children: []*cmdline.Command{cmdLogsRead, cmdLogsSize},
 		},
-		&cmdline2.Command{
+		&cmdline.Command{
 			Name:     "stats",
 			Short:    "Accesses stats",
 			Long:     "Accesses stats",
-			Children: []*cmdline2.Command{cmdStatsRead, cmdStatsWatch},
+			Children: []*cmdline.Command{cmdStatsRead, cmdStatsWatch},
 		},
-		&cmdline2.Command{
+		&cmdline.Command{
 			Name:     "pprof",
 			Short:    "Accesses profiling data",
 			Long:     "Accesses profiling data",
-			Children: []*cmdline2.Command{cmdPProfRun, cmdPProfRunProxy},
+			Children: []*cmdline.Command{cmdPProfRun, cmdPProfRunProxy},
 		},
 	},
 }
diff --git a/services/device/device/acl_impl.go b/services/device/device/acl_impl.go
index 34b7a40..3c9973e 100644
--- a/services/device/device/acl_impl.go
+++ b/services/device/device/acl_impl.go
@@ -14,11 +14,11 @@
 	"v.io/v23/security/access"
 	"v.io/v23/services/device"
 	"v.io/v23/verror"
-	"v.io/x/lib/cmdline2"
+	"v.io/x/lib/cmdline"
 	"v.io/x/ref/lib/v23cmd"
 )
 
-var cmdGet = &cmdline2.Command{
+var cmdGet = &cmdline.Command{
 	Runner:   v23cmd.RunnerFunc(runGet),
 	Name:     "get",
 	Short:    "Get Permissions for the given target.",
@@ -29,7 +29,7 @@
 application installation or instance.`,
 }
 
-func runGet(ctx *context.T, env *cmdline2.Env, args []string) error {
+func runGet(ctx *context.T, env *cmdline.Env, args []string) error {
 	if expected, got := 1, len(args); expected != got {
 		return env.UsageErrorf("get: incorrect number of arguments, expected %d, got %d", expected, got)
 	}
@@ -56,7 +56,7 @@
 // TODO(caprita): Add unit test logic for 'force set'.
 var forceSet bool
 
-var cmdSet = &cmdline2.Command{
+var cmdSet = &cmdline.Command{
 	Runner:   v23cmd.RunnerFunc(runSet),
 	Name:     "set",
 	Short:    "Set Permissions for the given target.",
@@ -89,7 +89,7 @@
 	cmdSet.Flags.BoolVar(&forceSet, "f", false, "Instead of making the AccessLists additive, do a complete replacement based on the specified settings.")
 }
 
-func runSet(ctx *context.T, env *cmdline2.Env, args []string) error {
+func runSet(ctx *context.T, env *cmdline.Env, args []string) error {
 	if got := len(args); !((got%2) == 1 && got >= 3) {
 		return env.UsageErrorf("set: incorrect number of arguments %d, must be 1 + 2n", got)
 	}
@@ -136,11 +136,11 @@
 	}
 }
 
-var cmdACL = &cmdline2.Command{
+var cmdACL = &cmdline.Command{
 	Name:  "acl",
 	Short: "Tool for setting device manager Permissions",
 	Long: `
 The acl tool manages Permissions on the device manger, installations and instances.
 `,
-	Children: []*cmdline2.Command{cmdGet, cmdSet},
+	Children: []*cmdline.Command{cmdGet, cmdSet},
 }
diff --git a/services/device/device/acl_test.go b/services/device/device/acl_test.go
index 3cc5988..3e76185 100644
--- a/services/device/device/acl_test.go
+++ b/services/device/device/acl_test.go
@@ -14,7 +14,7 @@
 	"v.io/v23/security"
 	"v.io/v23/security/access"
 	"v.io/v23/verror"
-	"v.io/x/lib/cmdline2"
+	"v.io/x/lib/cmdline"
 	"v.io/x/ref/lib/v23cmd"
 	"v.io/x/ref/test"
 
@@ -41,7 +41,7 @@
 	// Setup the command-line.
 	cmd := cmd_device.CmdRoot
 	var stdout, stderr bytes.Buffer
-	env := &cmdline2.Env{Stdout: &stdout, Stderr: &stderr}
+	env := &cmdline.Env{Stdout: &stdout, Stderr: &stderr}
 	deviceName := endpoint.Name()
 
 	// Test the 'get' command.
@@ -89,7 +89,7 @@
 	// Setup the command-line.
 	cmd := cmd_device.CmdRoot
 	var stdout, stderr bytes.Buffer
-	env := &cmdline2.Env{Stdout: &stdout, Stderr: &stderr}
+	env := &cmdline.Env{Stdout: &stdout, Stderr: &stderr}
 	deviceName := endpoint.Name()
 
 	// Some tests to validate parse.
diff --git a/services/device/device/associate_impl.go b/services/device/device/associate_impl.go
index 6c1e634..a22d394 100644
--- a/services/device/device/associate_impl.go
+++ b/services/device/device/associate_impl.go
@@ -10,11 +10,11 @@
 
 	"v.io/v23/context"
 	"v.io/v23/services/device"
-	"v.io/x/lib/cmdline2"
+	"v.io/x/lib/cmdline"
 	"v.io/x/ref/lib/v23cmd"
 )
 
-var cmdList = &cmdline2.Command{
+var cmdList = &cmdline.Command{
 	Runner:   v23cmd.RunnerFunc(runList),
 	Name:     "list",
 	Short:    "Lists the account associations.",
@@ -24,7 +24,7 @@
 <devicemanager> is the name of the device manager to connect to.`,
 }
 
-func runList(ctx *context.T, env *cmdline2.Env, args []string) error {
+func runList(ctx *context.T, env *cmdline.Env, args []string) error {
 	if expected, got := 1, len(args); expected != got {
 		return env.UsageErrorf("list: incorrect number of arguments, expected %d, got %d", expected, got)
 	}
@@ -42,7 +42,7 @@
 	return nil
 }
 
-var cmdAdd = &cmdline2.Command{
+var cmdAdd = &cmdline.Command{
 	Runner:   v23cmd.RunnerFunc(runAdd),
 	Name:     "add",
 	Short:    "Add the listed blessings with the specified system account.",
@@ -54,7 +54,7 @@
 <blessing>.. are the blessings to associate systemAccount with.`,
 }
 
-func runAdd(ctx *context.T, env *cmdline2.Env, args []string) error {
+func runAdd(ctx *context.T, env *cmdline.Env, args []string) error {
 	if expected, got := 3, len(args); got < expected {
 		return env.UsageErrorf("add: incorrect number of arguments, expected at least %d, got %d", expected, got)
 	}
@@ -63,7 +63,7 @@
 	return device.DeviceClient(args[0]).AssociateAccount(ctx, args[2:], args[1])
 }
 
-var cmdRemove = &cmdline2.Command{
+var cmdRemove = &cmdline.Command{
 	Runner:   v23cmd.RunnerFunc(runRemove),
 	Name:     "remove",
 	Short:    "Removes system accounts associated with the listed blessings.",
@@ -74,7 +74,7 @@
 <blessing>... is a list of blessings.`,
 }
 
-func runRemove(ctx *context.T, env *cmdline2.Env, args []string) error {
+func runRemove(ctx *context.T, env *cmdline.Env, args []string) error {
 	if expected, got := 2, len(args); got < expected {
 		return env.UsageErrorf("remove: incorrect number of arguments, expected at least %d, got %d", expected, got)
 	}
@@ -83,11 +83,11 @@
 	return device.DeviceClient(args[0]).AssociateAccount(ctx, args[1:], "")
 }
 
-var cmdAssociate = &cmdline2.Command{
+var cmdAssociate = &cmdline.Command{
 	Name:  "associate",
 	Short: "Tool for creating associations between Vanadium blessings and a system account",
 	Long: `
 The associate tool facilitates managing blessing to system account associations.
 `,
-	Children: []*cmdline2.Command{cmdList, cmdAdd, cmdRemove},
+	Children: []*cmdline.Command{cmdList, cmdAdd, cmdRemove},
 }
diff --git a/services/device/device/impl.go b/services/device/device/impl.go
index 6ebcc63..15bd2ef 100644
--- a/services/device/device/impl.go
+++ b/services/device/device/impl.go
@@ -17,7 +17,7 @@
 	"v.io/v23/security"
 	"v.io/v23/services/application"
 	"v.io/v23/services/device"
-	"v.io/x/lib/cmdline2"
+	"v.io/x/lib/cmdline"
 	"v.io/x/ref/lib/v23cmd"
 )
 
@@ -56,7 +56,7 @@
 	cmdInstall.Flags.Var(&packagesOverride, "packages", "JSON-encoded application.Packages object, of the form: '{\"pkg1\":{\"File\":\"object name 1\"},\"pkg2\":{\"File\":\"object name 2\"}}'")
 }
 
-var cmdInstall = &cmdline2.Command{
+var cmdInstall = &cmdline.Command{
 	Runner:   v23cmd.RunnerFunc(runInstall),
 	Name:     "install",
 	Short:    "Install the given application.",
@@ -69,7 +69,7 @@
 `,
 }
 
-func runInstall(ctx *context.T, env *cmdline2.Env, args []string) error {
+func runInstall(ctx *context.T, env *cmdline.Env, args []string) error {
 	if expected, got := 2, len(args); expected != got {
 		return env.UsageErrorf("install: incorrect number of arguments, expected %d, got %d", expected, got)
 	}
@@ -87,7 +87,7 @@
 	return nil
 }
 
-var cmdUninstall = &cmdline2.Command{
+var cmdUninstall = &cmdline.Command{
 	Runner:   v23cmd.RunnerFunc(runUninstall),
 	Name:     "uninstall",
 	Short:    "Uninstall the given application installation.",
@@ -99,7 +99,7 @@
 `,
 }
 
-func runUninstall(ctx *context.T, env *cmdline2.Env, args []string) error {
+func runUninstall(ctx *context.T, env *cmdline.Env, args []string) error {
 	if expected, got := 1, len(args); expected != got {
 		return env.UsageErrorf("uninstall: incorrect number of arguments, expected %d, got %d", expected, got)
 	}
@@ -111,7 +111,7 @@
 	return nil
 }
 
-var cmdInstantiate = &cmdline2.Command{
+var cmdInstantiate = &cmdline.Command{
 	Runner:   v23cmd.RunnerFunc(runInstantiate),
 	Name:     "instantiate",
 	Short:    "Create an instance of the given application.",
@@ -135,7 +135,7 @@
 	return p.Bless(call.RemoteBlessings().PublicKey(), p.BlessingStore().Default(), g.extension, security.UnconstrainedUse())
 }
 
-func runInstantiate(ctx *context.T, env *cmdline2.Env, args []string) error {
+func runInstantiate(ctx *context.T, env *cmdline.Env, args []string) error {
 	if expected, got := 2, len(args); expected != got {
 		return env.UsageErrorf("instantiate: incorrect number of arguments, expected %d, got %d", expected, got)
 	}
@@ -174,7 +174,7 @@
 	return nil
 }
 
-var cmdClaim = &cmdline2.Command{
+var cmdClaim = &cmdline.Command{
 	Runner:   v23cmd.RunnerFunc(runClaim),
 	Name:     "claim",
 	Short:    "Claim the device.",
@@ -193,7 +193,7 @@
 are claiming.`,
 }
 
-func runClaim(ctx *context.T, env *cmdline2.Env, args []string) error {
+func runClaim(ctx *context.T, env *cmdline.Env, args []string) error {
 	if expected, max, got := 2, 4, len(args); expected > got || got > max {
 		return env.UsageErrorf("claim: incorrect number of arguments, expected atleast %d (max: %d), got %d", expected, max, got)
 	}
@@ -223,7 +223,7 @@
 	return nil
 }
 
-var cmdDescribe = &cmdline2.Command{
+var cmdDescribe = &cmdline.Command{
 	Runner:   v23cmd.RunnerFunc(runDescribe),
 	Name:     "describe",
 	Short:    "Describe the device.",
@@ -233,7 +233,7 @@
 <device> is the vanadium object name of the device manager's device service.`,
 }
 
-func runDescribe(ctx *context.T, env *cmdline2.Env, args []string) error {
+func runDescribe(ctx *context.T, env *cmdline.Env, args []string) error {
 	if expected, got := 1, len(args); expected != got {
 		return env.UsageErrorf("describe: incorrect number of arguments, expected %d, got %d", expected, got)
 	}
@@ -246,7 +246,7 @@
 	return nil
 }
 
-var cmdUpdate = &cmdline2.Command{
+var cmdUpdate = &cmdline.Command{
 	Runner:   v23cmd.RunnerFunc(runUpdate),
 	Name:     "update",
 	Short:    "Update the device manager or application",
@@ -257,7 +257,7 @@
 installation or instance to update.`,
 }
 
-func runUpdate(ctx *context.T, env *cmdline2.Env, args []string) error {
+func runUpdate(ctx *context.T, env *cmdline.Env, args []string) error {
 	if expected, got := 1, len(args); expected != got {
 		return env.UsageErrorf("update: incorrect number of arguments, expected %d, got %d", expected, got)
 	}
@@ -269,7 +269,7 @@
 	return nil
 }
 
-var cmdRevert = &cmdline2.Command{
+var cmdRevert = &cmdline.Command{
 	Runner:   v23cmd.RunnerFunc(runRevert),
 	Name:     "revert",
 	Short:    "Revert the device manager or application",
@@ -280,7 +280,7 @@
 installation to revert.`,
 }
 
-func runRevert(ctx *context.T, env *cmdline2.Env, args []string) error {
+func runRevert(ctx *context.T, env *cmdline.Env, args []string) error {
 	if expected, got := 1, len(args); expected != got {
 		return env.UsageErrorf("revert: incorrect number of arguments, expected %d, got %d", expected, got)
 	}
@@ -292,7 +292,7 @@
 	return nil
 }
 
-var cmdDebug = &cmdline2.Command{
+var cmdDebug = &cmdline.Command{
 	Runner:   v23cmd.RunnerFunc(runDebug),
 	Name:     "debug",
 	Short:    "Debug the device.",
@@ -302,7 +302,7 @@
 <app name> is the vanadium object name of an app installation or instance.`,
 }
 
-func runDebug(ctx *context.T, env *cmdline2.Env, args []string) error {
+func runDebug(ctx *context.T, env *cmdline.Env, args []string) error {
 	if expected, got := 1, len(args); expected != got {
 		return env.UsageErrorf("debug: incorrect number of arguments, expected %d, got %d", expected, got)
 	}
@@ -315,7 +315,7 @@
 	return nil
 }
 
-var cmdStatus = &cmdline2.Command{
+var cmdStatus = &cmdline.Command{
 	Runner:   v23cmd.RunnerFunc(runStatus),
 	Name:     "status",
 	Short:    "Get application status.",
@@ -325,7 +325,7 @@
 <app name> is the vanadium object name of an app installation or instance.`,
 }
 
-func runStatus(ctx *context.T, env *cmdline2.Env, args []string) error {
+func runStatus(ctx *context.T, env *cmdline.Env, args []string) error {
 	if expected, got := 1, len(args); expected != got {
 		return env.UsageErrorf("status: incorrect number of arguments, expected %d, got %d", expected, got)
 	}
diff --git a/services/device/device/impl_test.go b/services/device/device/impl_test.go
index ddd7f3b..fdef9b9 100644
--- a/services/device/device/impl_test.go
+++ b/services/device/device/impl_test.go
@@ -18,7 +18,7 @@
 	"v.io/v23/services/application"
 	"v.io/v23/services/device"
 	"v.io/v23/verror"
-	"v.io/x/lib/cmdline2"
+	"v.io/x/lib/cmdline"
 	"v.io/x/ref/lib/security"
 	"v.io/x/ref/lib/v23cmd"
 	"v.io/x/ref/test"
@@ -42,7 +42,7 @@
 	// Setup the command-line.
 	cmd := cmd_device.CmdRoot
 	var stdout, stderr bytes.Buffer
-	env := &cmdline2.Env{Stdout: &stdout, Stderr: &stderr}
+	env := &cmdline.Env{Stdout: &stdout, Stderr: &stderr}
 	deviceName := naming.JoinAddressName(endpoint.String(), "")
 
 	rootTape := tapes.forSuffix("")
@@ -96,7 +96,7 @@
 	// Setup the command-line.
 	cmd := cmd_device.CmdRoot
 	var stdout, stderr bytes.Buffer
-	env := &cmdline2.Env{Stdout: &stdout, Stderr: &stderr}
+	env := &cmdline.Env{Stdout: &stdout, Stderr: &stderr}
 	deviceName := naming.JoinAddressName(endpoint.String(), "")
 
 	if err := v23cmd.ParseAndRun(cmd, ctx, env, []string{"add", "one"}); err == nil {
@@ -148,7 +148,7 @@
 	// Setup the command-line.
 	cmd := cmd_device.CmdRoot
 	var stdout, stderr bytes.Buffer
-	env := &cmdline2.Env{Stdout: &stdout, Stderr: &stderr}
+	env := &cmdline.Env{Stdout: &stdout, Stderr: &stderr}
 	deviceName := naming.JoinAddressName(endpoint.String(), "")
 
 	if err := v23cmd.ParseAndRun(cmd, ctx, env, []string{"remove", "one"}); err == nil {
@@ -187,7 +187,7 @@
 	// Setup the command-line.
 	cmd := cmd_device.CmdRoot
 	var stdout, stderr bytes.Buffer
-	env := &cmdline2.Env{Stdout: &stdout, Stderr: &stderr}
+	env := &cmdline.Env{Stdout: &stdout, Stderr: &stderr}
 	deviceName := naming.JoinAddressName(endpoint.String(), "")
 	appId := "myBestAppID"
 	cfg := device.Config{"someflag": "somevalue"}
@@ -296,7 +296,7 @@
 	// Setup the command-line.
 	cmd := cmd_device.CmdRoot
 	var stdout, stderr bytes.Buffer
-	env := &cmdline2.Env{Stdout: &stdout, Stderr: &stderr}
+	env := &cmdline.Env{Stdout: &stdout, Stderr: &stderr}
 	deviceName := naming.JoinAddressName(endpoint.String(), "")
 	deviceKey, err := v23.GetPrincipal(ctx).PublicKey().MarshalBinary()
 	if err != nil {
@@ -394,7 +394,7 @@
 	// Setup the command-line.
 	cmd := cmd_device.CmdRoot
 	var stdout, stderr bytes.Buffer
-	env := &cmdline2.Env{Stdout: &stdout, Stderr: &stderr}
+	env := &cmdline.Env{Stdout: &stdout, Stderr: &stderr}
 	appName := naming.JoinAddressName(endpoint.String(), "")
 
 	// Confirm that we correctly enforce the number of arguments.
@@ -473,7 +473,7 @@
 	// Setup the command-line.
 	cmd := cmd_device.CmdRoot
 	var stdout, stderr bytes.Buffer
-	env := &cmdline2.Env{Stdout: &stdout, Stderr: &stderr}
+	env := &cmdline.Env{Stdout: &stdout, Stderr: &stderr}
 	appName := naming.JoinAddressName(endpoint.String(), "")
 
 	debugMessage := "the secrets of the universe, revealed"
@@ -502,7 +502,7 @@
 	// Setup the command-line.
 	cmd := cmd_device.CmdRoot
 	var stdout, stderr bytes.Buffer
-	env := &cmdline2.Env{Stdout: &stdout, Stderr: &stderr}
+	env := &cmdline.Env{Stdout: &stdout, Stderr: &stderr}
 	appName := naming.JoinAddressName(endpoint.String(), "")
 
 	rootTape := tapes.forSuffix("")
diff --git a/services/device/device/instance_impl.go b/services/device/device/instance_impl.go
index e1bcd82..779f9bd 100644
--- a/services/device/device/instance_impl.go
+++ b/services/device/device/instance_impl.go
@@ -12,11 +12,11 @@
 
 	"v.io/v23/context"
 	"v.io/v23/services/device"
-	"v.io/x/lib/cmdline2"
+	"v.io/x/lib/cmdline"
 	"v.io/x/ref/lib/v23cmd"
 )
 
-var cmdDelete = &cmdline2.Command{
+var cmdDelete = &cmdline.Command{
 	Runner:   v23cmd.RunnerFunc(runDelete),
 	Name:     "delete",
 	Short:    "Delete the given application instance.",
@@ -26,7 +26,7 @@
 <app instance> is the vanadium object name of the application instance to delete.`,
 }
 
-func runDelete(ctx *context.T, env *cmdline2.Env, args []string) error {
+func runDelete(ctx *context.T, env *cmdline.Env, args []string) error {
 	if expected, got := 1, len(args); expected != got {
 		return env.UsageErrorf("delete: incorrect number of arguments, expected %d, got %d", expected, got)
 	}
@@ -41,7 +41,7 @@
 
 const killDeadline = 10 * time.Second
 
-var cmdKill = &cmdline2.Command{
+var cmdKill = &cmdline.Command{
 	Runner:   v23cmd.RunnerFunc(runKill),
 	Name:     "kill",
 	Short:    "Kill the given application instance.",
@@ -51,7 +51,7 @@
 <app instance> is the vanadium object name of the application instance to kill.`,
 }
 
-func runKill(ctx *context.T, env *cmdline2.Env, args []string) error {
+func runKill(ctx *context.T, env *cmdline.Env, args []string) error {
 	if expected, got := 1, len(args); expected != got {
 		return env.UsageErrorf("kill: incorrect number of arguments, expected %d, got %d", expected, got)
 	}
@@ -64,7 +64,7 @@
 	return nil
 }
 
-var cmdRun = &cmdline2.Command{
+var cmdRun = &cmdline.Command{
 	Runner:   v23cmd.RunnerFunc(runRun),
 	Name:     "run",
 	Short:    "Run the given application instance.",
@@ -74,7 +74,7 @@
 <app instance> is the vanadium object name of the application instance to run.`,
 }
 
-func runRun(ctx *context.T, env *cmdline2.Env, args []string) error {
+func runRun(ctx *context.T, env *cmdline.Env, args []string) error {
 	if expected, got := 1, len(args); expected != got {
 		return env.UsageErrorf("run: incorrect number of arguments, expected %d, got %d", expected, got)
 	}
diff --git a/services/device/device/instance_impl_test.go b/services/device/device/instance_impl_test.go
index d072b04..6f56cc2 100644
--- a/services/device/device/instance_impl_test.go
+++ b/services/device/device/instance_impl_test.go
@@ -13,7 +13,7 @@
 
 	"v.io/v23/naming"
 	"v.io/v23/verror"
-	"v.io/x/lib/cmdline2"
+	"v.io/x/lib/cmdline"
 	"v.io/x/ref/lib/v23cmd"
 	"v.io/x/ref/test"
 
@@ -34,7 +34,7 @@
 	// Setup the command-line.
 	cmd := cmd_device.CmdRoot
 	var stdout, stderr bytes.Buffer
-	env := &cmdline2.Env{Stdout: &stdout, Stderr: &stderr}
+	env := &cmdline.Env{Stdout: &stdout, Stderr: &stderr}
 	appName := naming.JoinAddressName(endpoint.String(), "appname")
 
 	// Confirm that we correctly enforce the number of arguments.
@@ -107,7 +107,7 @@
 	// Setup the command-line.
 	cmd := cmd_device.CmdRoot
 	var stdout, stderr bytes.Buffer
-	env := &cmdline2.Env{Stdout: &stdout, Stderr: &stderr}
+	env := &cmdline.Env{Stdout: &stdout, Stderr: &stderr}
 	appName := naming.JoinAddressName(endpoint.String(), "appname")
 
 	// Confirm that we correctly enforce the number of arguments.
diff --git a/services/device/device/local_install.go b/services/device/device/local_install.go
index f0ef6c3..c2cf446 100644
--- a/services/device/device/local_install.go
+++ b/services/device/device/local_install.go
@@ -27,12 +27,12 @@
 	"v.io/v23/uniqueid"
 	"v.io/x/lib/vlog"
 
-	"v.io/x/lib/cmdline2"
+	"v.io/x/lib/cmdline"
 	"v.io/x/ref/lib/v23cmd"
 	"v.io/x/ref/services/internal/packages"
 )
 
-var cmdInstallLocal = &cmdline2.Command{
+var cmdInstallLocal = &cmdline.Command{
 	Runner:   v23cmd.RunnerFunc(runInstallLocal),
 	Name:     "install-local",
 	Short:    "Install the given application from the local system.",
@@ -251,7 +251,7 @@
 // TODO(caprita/ashankar): We should use bi-directional streams to get this
 // working over the same connection that the command makes to the device
 // manager.
-func runInstallLocal(ctx *context.T, env *cmdline2.Env, args []string) error {
+func runInstallLocal(ctx *context.T, env *cmdline.Env, args []string) error {
 	if expectedMin, got := 2, len(args); got < expectedMin {
 		return env.UsageErrorf("install-local: incorrect number of arguments, expected at least %d, got %d", expectedMin, got)
 	}
diff --git a/services/device/device/local_install_test.go b/services/device/device/local_install_test.go
index b996393..5899c04 100644
--- a/services/device/device/local_install_test.go
+++ b/services/device/device/local_install_test.go
@@ -19,7 +19,7 @@
 	"v.io/v23/security"
 	"v.io/v23/services/application"
 	"v.io/v23/services/device"
-	"v.io/x/lib/cmdline2"
+	"v.io/x/lib/cmdline"
 	"v.io/x/ref/lib/v23cmd"
 	"v.io/x/ref/test"
 
@@ -45,7 +45,7 @@
 	// Setup the command-line.
 	cmd := cmd_device.CmdRoot
 	var stdout, stderr bytes.Buffer
-	env := &cmdline2.Env{Stdout: &stdout, Stderr: &stderr}
+	env := &cmdline.Env{Stdout: &stdout, Stderr: &stderr}
 	deviceName := naming.JoinAddressName(endpoint.String(), "")
 	const appTitle = "Appo di tutti Appi"
 	binary := os.Args[0]
diff --git a/services/device/device/publish.go b/services/device/device/publish.go
index ae49d3c..f2524b0 100644
--- a/services/device/device/publish.go
+++ b/services/device/device/publish.go
@@ -19,7 +19,7 @@
 	"v.io/v23/services/application"
 	"v.io/v23/services/permissions"
 	"v.io/v23/verror"
-	"v.io/x/lib/cmdline2"
+	"v.io/x/lib/cmdline"
 	"v.io/x/ref/lib/v23cmd"
 	"v.io/x/ref/services/internal/binarylib"
 	"v.io/x/ref/services/repository"
@@ -29,7 +29,7 @@
 
 // TODO(caprita): Extend to include env, args, packages.
 
-var cmdPublish = &cmdline2.Command{
+var cmdPublish = &cmdline.Command{
 	Runner: v23cmd.RunnerFunc(runPublish),
 	Name:   "publish",
 	Short:  "Publish the given application(s).",
@@ -56,7 +56,7 @@
 	cmdPublish.Flags.StringVar(&readBlessings, "readers", "dev.v.io", "If non-empty, comma-separated blessing patterns to add to Read and Resolve AccessList.")
 }
 
-func setAccessLists(ctx *context.T, env *cmdline2.Env, von string) error {
+func setAccessLists(ctx *context.T, env *cmdline.Env, von string) error {
 	if readBlessings == "" {
 		return nil
 	}
@@ -81,7 +81,7 @@
 	return nil
 }
 
-func publishOne(ctx *context.T, env *cmdline2.Env, binPath, binary string) error {
+func publishOne(ctx *context.T, env *cmdline.Env, binPath, binary string) error {
 	binaryName, title := binary, binary
 	if parts := strings.SplitN(binary, "@", 2); len(parts) == 2 {
 		binaryName, title = parts[0], parts[1]
@@ -138,7 +138,7 @@
 	return nil
 }
 
-func runPublish(ctx *context.T, env *cmdline2.Env, args []string) error {
+func runPublish(ctx *context.T, env *cmdline.Env, args []string) error {
 	if expectedMin, got := 1, len(args); got < expectedMin {
 		return env.UsageErrorf("publish: incorrect number of arguments, expected at least %d, got %d", expectedMin, got)
 	}
diff --git a/services/device/device/root.go b/services/device/device/root.go
index 650838a..df28595 100644
--- a/services/device/device/root.go
+++ b/services/device/device/root.go
@@ -7,20 +7,20 @@
 import (
 	"regexp"
 
-	"v.io/x/lib/cmdline2"
+	"v.io/x/lib/cmdline"
 	_ "v.io/x/ref/runtime/factories/static"
 )
 
-var CmdRoot = &cmdline2.Command{
+var CmdRoot = &cmdline.Command{
 	Name:  "device",
 	Short: "facilitates interaction with the Vanadium device manager",
 	Long: `
 Command device facilitates interaction with the Vanadium device manager.
 `,
-	Children: []*cmdline2.Command{cmdInstall, cmdInstallLocal, cmdUninstall, cmdAssociate, cmdDescribe, cmdClaim, cmdInstantiate, cmdDelete, cmdRun, cmdKill, cmdRevert, cmdUpdate, cmdUpdateAll, cmdStatus, cmdDebug, cmdACL, cmdPublish},
+	Children: []*cmdline.Command{cmdInstall, cmdInstallLocal, cmdUninstall, cmdAssociate, cmdDescribe, cmdClaim, cmdInstantiate, cmdDelete, cmdRun, cmdKill, cmdRevert, cmdUpdate, cmdUpdateAll, cmdStatus, cmdDebug, cmdACL, cmdPublish},
 }
 
 func main() {
-	cmdline2.HideGlobalFlagsExcept(regexp.MustCompile(`^((v23\.namespace\.root)|(v23\.proxy))$`))
-	cmdline2.Main(CmdRoot)
+	cmdline.HideGlobalFlagsExcept(regexp.MustCompile(`^((v23\.namespace\.root)|(v23\.proxy))$`))
+	cmdline.Main(CmdRoot)
 }
diff --git a/services/device/device/updateall.go b/services/device/device/updateall.go
index b98b46b..e772ee9 100644
--- a/services/device/device/updateall.go
+++ b/services/device/device/updateall.go
@@ -15,7 +15,7 @@
 	"v.io/v23/naming"
 	"v.io/v23/services/device"
 	"v.io/v23/verror"
-	"v.io/x/lib/cmdline2"
+	"v.io/x/lib/cmdline"
 	"v.io/x/ref/lib/v23cmd"
 	deviceimpl "v.io/x/ref/services/device/internal/impl"
 )
@@ -25,7 +25,7 @@
 
 // TODO(caprita): Add unit test.
 
-var cmdUpdateAll = &cmdline2.Command{
+var cmdUpdateAll = &cmdline.Command{
 	Runner:   v23cmd.RunnerFunc(runUpdateAll),
 	Name:     "updateall",
 	Short:    "Update all installations/instances of an application",
@@ -44,9 +44,9 @@
 `,
 }
 
-type updater func(ctx *context.T, env *cmdline2.Env, von string) error
+type updater func(ctx *context.T, env *cmdline.Env, von string) error
 
-func updateChildren(ctx *context.T, env *cmdline2.Env, von string, updateChild updater) error {
+func updateChildren(ctx *context.T, env *cmdline.Env, von string, updateChild updater) error {
 	ns := v23.GetNamespace(ctx)
 	pattern := naming.Join(von, "*")
 	c, err := ns.Glob(ctx, pattern)
@@ -96,7 +96,7 @@
 	return s.Value.State == device.InstanceStateRunning, nil
 }
 
-func updateInstance(ctx *context.T, env *cmdline2.Env, von string) (retErr error) {
+func updateInstance(ctx *context.T, env *cmdline.Env, von string) (retErr error) {
 	defer func() {
 		if retErr == nil {
 			fmt.Fprintf(env.Stdout, "Successfully updated instance %q.\n", von)
@@ -153,7 +153,7 @@
 	}
 }
 
-func updateInstallation(ctx *context.T, env *cmdline2.Env, von string) (retErr error) {
+func updateInstallation(ctx *context.T, env *cmdline.Env, von string) (retErr error) {
 	defer func() {
 		if retErr == nil {
 			fmt.Fprintf(env.Stdout, "Successfully updated installation %q.\n", von)
@@ -179,7 +179,7 @@
 	return updateChildren(ctx, env, von, updateInstance)
 }
 
-func updateApp(ctx *context.T, env *cmdline2.Env, von string) error {
+func updateApp(ctx *context.T, env *cmdline.Env, von string) error {
 	if err := updateChildren(ctx, env, von, updateInstallation); err != nil {
 		err = fmt.Errorf("failed to update app %q: %v", von, err)
 		fmt.Fprintf(env.Stderr, "ERROR: %v.\n", err)
@@ -189,7 +189,7 @@
 	return nil
 }
 
-func updateAllApps(ctx *context.T, env *cmdline2.Env, von string) error {
+func updateAllApps(ctx *context.T, env *cmdline.Env, von string) error {
 	if err := updateChildren(ctx, env, von, updateApp); err != nil {
 		err = fmt.Errorf("failed to update all apps %q: %v", von, err)
 		fmt.Fprintf(env.Stderr, "ERROR: %v.\n", err)
@@ -199,7 +199,7 @@
 	return nil
 }
 
-func runUpdateAll(ctx *context.T, env *cmdline2.Env, args []string) error {
+func runUpdateAll(ctx *context.T, env *cmdline.Env, args []string) error {
 	if expected, got := 1, len(args); expected != got {
 		return env.UsageErrorf("updateall: incorrect number of arguments, expected %d, got %d", expected, got)
 	}
diff --git a/services/device/deviced/commands.go b/services/device/deviced/commands.go
index a2eccc2..34d819e 100644
--- a/services/device/deviced/commands.go
+++ b/services/device/deviced/commands.go
@@ -8,7 +8,7 @@
 	"fmt"
 	"os"
 
-	"v.io/x/lib/cmdline2"
+	"v.io/x/lib/cmdline"
 
 	"v.io/v23"
 	"v.io/x/lib/vlog"
@@ -41,8 +41,8 @@
 	}
 }
 
-var cmdInstall = &cmdline2.Command{
-	Runner:   cmdline2.RunnerFunc(runInstall),
+var cmdInstall = &cmdline.Command{
+	Runner:   cmdline.RunnerFunc(runInstall),
 	Name:     "install",
 	Short:    "Install the device manager.",
 	Long:     fmt.Sprintf("Performs installation of device manager into %s (if the env var set), or into the current dir otherwise", deviceDirEnv),
@@ -63,7 +63,7 @@
 	cmdInstall.Flags.BoolVar(&initMode, "init_mode", false, "if set, installs the device manager with the system init service manager")
 }
 
-func runInstall(env *cmdline2.Env, args []string) error {
+func runInstall(env *cmdline.Env, args []string) error {
 	if installFrom != "" {
 		// TODO(caprita): Also pass args into InstallFrom.
 		if err := impl.InstallFrom(installFrom); err != nil {
@@ -88,8 +88,8 @@
 	return nil
 }
 
-var cmdUninstall = &cmdline2.Command{
-	Runner: cmdline2.RunnerFunc(runUninstall),
+var cmdUninstall = &cmdline.Command{
+	Runner: cmdline.RunnerFunc(runUninstall),
 	Name:   "uninstall",
 	Short:  "Uninstall the device manager.",
 	Long:   fmt.Sprintf("Removes the device manager installation from %s (if the env var set), or the current dir otherwise", deviceDirEnv),
@@ -99,7 +99,7 @@
 	cmdUninstall.Flags.StringVar(&suidHelper, "suid_helper", "", "path to suid helper")
 }
 
-func runUninstall(env *cmdline2.Env, _ []string) error {
+func runUninstall(env *cmdline.Env, _ []string) error {
 	if suidHelper == "" {
 		return env.UsageErrorf("--suid_helper must be set")
 	}
@@ -110,14 +110,14 @@
 	return nil
 }
 
-var cmdStart = &cmdline2.Command{
-	Runner: cmdline2.RunnerFunc(runStart),
+var cmdStart = &cmdline.Command{
+	Runner: cmdline.RunnerFunc(runStart),
 	Name:   "start",
 	Short:  "Start the device manager.",
 	Long:   fmt.Sprintf("Starts the device manager installed under from %s (if the env var set), or the current dir otherwise", deviceDirEnv),
 }
 
-func runStart(env *cmdline2.Env, _ []string) error {
+func runStart(env *cmdline.Env, _ []string) error {
 	if err := impl.Start(installationDir(), env.Stderr, env.Stdout); err != nil {
 		vlog.Errorf("Start failed: %v", err)
 		return err
@@ -125,14 +125,14 @@
 	return nil
 }
 
-var cmdStop = &cmdline2.Command{
-	Runner: cmdline2.RunnerFunc(runStop),
+var cmdStop = &cmdline.Command{
+	Runner: cmdline.RunnerFunc(runStop),
 	Name:   "stop",
 	Short:  "Stop the device manager.",
 	Long:   fmt.Sprintf("Stops the device manager installed under from %s (if the env var set), or the current dir otherwise", deviceDirEnv),
 }
 
-func runStop(env *cmdline2.Env, _ []string) error {
+func runStop(env *cmdline.Env, _ []string) error {
 	ctx, shutdown := v23.Init()
 	defer shutdown()
 	if err := impl.Stop(ctx, installationDir(), env.Stderr, env.Stdout); err != nil {
@@ -142,14 +142,14 @@
 	return nil
 }
 
-var cmdProfile = &cmdline2.Command{
-	Runner: cmdline2.RunnerFunc(runProfile),
+var cmdProfile = &cmdline.Command{
+	Runner: cmdline.RunnerFunc(runProfile),
 	Name:   "profile",
 	Short:  "Dumps profile for the device manager.",
 	Long:   "Prints the internal profile description for the device manager.",
 }
 
-func runProfile(env *cmdline2.Env, _ []string) error {
+func runProfile(env *cmdline.Env, _ []string) error {
 	spec, err := impl.ComputeDeviceProfile()
 	if err != nil {
 		vlog.Errorf("ComputeDeviceProfile failed: %v", err)
diff --git a/services/device/deviced/main.go b/services/device/deviced/main.go
index 8da9320..59b6f37 100644
--- a/services/device/deviced/main.go
+++ b/services/device/deviced/main.go
@@ -11,7 +11,7 @@
 	"os"
 	"runtime"
 
-	"v.io/x/lib/cmdline2"
+	"v.io/x/lib/cmdline"
 	"v.io/x/ref/lib/v23cmd"
 )
 
@@ -22,15 +22,15 @@
 		runtime.GOMAXPROCS(runtime.NumCPU())
 	}
 
-	rootCmd := &cmdline2.Command{
+	rootCmd := &cmdline.Command{
 		Name:  "deviced",
 		Short: "launch, configure and manage the deviced daemon",
 		Long: `
 Command deviced is used to launch, configure and manage the deviced daemon,
 which implements the v.io/v23/services/device interfaces.
 `,
-		Children: []*cmdline2.Command{cmdInstall, cmdUninstall, cmdStart, cmdStop, cmdProfile},
+		Children: []*cmdline.Command{cmdInstall, cmdUninstall, cmdStart, cmdStop, cmdProfile},
 		Runner:   v23cmd.RunnerFunc(runServer),
 	}
-	cmdline2.Main(rootCmd)
+	cmdline.Main(rootCmd)
 }
diff --git a/services/device/deviced/server.go b/services/device/deviced/server.go
index 0f22aa3..8858fb4 100644
--- a/services/device/deviced/server.go
+++ b/services/device/deviced/server.go
@@ -19,7 +19,7 @@
 	"v.io/v23/context"
 	"v.io/v23/rpc"
 	"v.io/v23/verror"
-	"v.io/x/lib/cmdline2"
+	"v.io/x/lib/cmdline"
 	"v.io/x/lib/vlog"
 	vexec "v.io/x/ref/lib/exec"
 	"v.io/x/ref/lib/mgmt"
@@ -47,10 +47,10 @@
 )
 
 func init() {
-	cmdline2.HideGlobalFlagsExcept(regexp.MustCompile(`^((name)|(restart-exit-code)|(neighborhood-name)|(deviced-port)|(proxy-port)|(use-pairing-token))$`))
+	cmdline.HideGlobalFlagsExcept(regexp.MustCompile(`^((name)|(restart-exit-code)|(neighborhood-name)|(deviced-port)|(proxy-port)|(use-pairing-token))$`))
 }
 
-func runServer(ctx *context.T, _ *cmdline2.Env, _ []string) error {
+func runServer(ctx *context.T, _ *cmdline.Env, _ []string) error {
 	var testMode bool
 	// If this device manager was started by another device manager, it must
 	// be part of a self update to test that this binary works. In that
@@ -101,7 +101,7 @@
 	dev := starter.DeviceArgs{
 		ConfigState:     configState,
 		TestMode:        testMode,
-		RestartCallback: func() { exitErr = cmdline2.ErrExitCode(*restartExitCode) },
+		RestartCallback: func() { exitErr = cmdline.ErrExitCode(*restartExitCode) },
 		PairingToken:    pairingToken,
 	}
 	if testMode {
diff --git a/services/profile/profile/impl.go b/services/profile/profile/impl.go
index 489f0e2..ea27f27 100644
--- a/services/profile/profile/impl.go
+++ b/services/profile/profile/impl.go
@@ -13,7 +13,7 @@
 
 	"v.io/v23/context"
 	"v.io/v23/services/build"
-	"v.io/x/lib/cmdline2"
+	"v.io/x/lib/cmdline"
 	"v.io/x/ref/lib/v23cmd"
 	_ "v.io/x/ref/runtime/factories/generic"
 	"v.io/x/ref/services/profile"
@@ -21,14 +21,14 @@
 )
 
 func main() {
-	cmdline2.Main(cmdRoot)
+	cmdline.Main(cmdRoot)
 }
 
 func init() {
-	cmdline2.HideGlobalFlagsExcept()
+	cmdline.HideGlobalFlagsExcept()
 }
 
-var cmdLabel = &cmdline2.Command{
+var cmdLabel = &cmdline.Command{
 	Runner:   v23cmd.RunnerFunc(runLabel),
 	Name:     "label",
 	Short:    "Shows a human-readable profile key for the profile.",
@@ -37,7 +37,7 @@
 	ArgsLong: "<profile> is the full name of the profile.",
 }
 
-func runLabel(ctx *context.T, env *cmdline2.Env, args []string) error {
+func runLabel(ctx *context.T, env *cmdline.Env, args []string) error {
 	if expected, got := 1, len(args); expected != got {
 		return env.UsageErrorf("label: incorrect number of arguments, expected %d, got %d", expected, got)
 	}
@@ -53,7 +53,7 @@
 	return nil
 }
 
-var cmdDescription = &cmdline2.Command{
+var cmdDescription = &cmdline.Command{
 	Runner:   v23cmd.RunnerFunc(runDescription),
 	Name:     "description",
 	Short:    "Shows a human-readable profile description for the profile.",
@@ -62,7 +62,7 @@
 	ArgsLong: "<profile> is the full name of the profile.",
 }
 
-func runDescription(ctx *context.T, env *cmdline2.Env, args []string) error {
+func runDescription(ctx *context.T, env *cmdline.Env, args []string) error {
 	if expected, got := 1, len(args); expected != got {
 		return env.UsageErrorf("description: incorrect number of arguments, expected %d, got %d", expected, got)
 	}
@@ -78,7 +78,7 @@
 	return nil
 }
 
-var cmdSpecification = &cmdline2.Command{
+var cmdSpecification = &cmdline.Command{
 	Runner:   v23cmd.RunnerFunc(runSpecification),
 	Name:     "specification",
 	Short:    "Shows the specification of the profile.",
@@ -87,7 +87,7 @@
 	ArgsLong: "<profile> is the full name of the profile.",
 }
 
-func runSpecification(ctx *context.T, env *cmdline2.Env, args []string) error {
+func runSpecification(ctx *context.T, env *cmdline.Env, args []string) error {
 	if expected, got := 1, len(args); expected != got {
 		return env.UsageErrorf("specification: incorrect number of arguments, expected %d, got %d", expected, got)
 	}
@@ -103,7 +103,7 @@
 	return nil
 }
 
-var cmdPut = &cmdline2.Command{
+var cmdPut = &cmdline.Command{
 	Runner:   v23cmd.RunnerFunc(runPut),
 	Name:     "put",
 	Short:    "Sets a placeholder specification for the profile.",
@@ -112,7 +112,7 @@
 	ArgsLong: "<profile> is the full name of the profile.",
 }
 
-func runPut(ctx *context.T, env *cmdline2.Env, args []string) error {
+func runPut(ctx *context.T, env *cmdline.Env, args []string) error {
 	if expected, got := 1, len(args); expected != got {
 		return env.UsageErrorf("put: incorrect number of arguments, expected %d, got %d", expected, got)
 	}
@@ -137,7 +137,7 @@
 	return nil
 }
 
-var cmdRemove = &cmdline2.Command{
+var cmdRemove = &cmdline.Command{
 	Runner:   v23cmd.RunnerFunc(runRemove),
 	Name:     "remove",
 	Short:    "removes the profile specification for the profile.",
@@ -146,7 +146,7 @@
 	ArgsLong: "<profile> is the full name of the profile.",
 }
 
-func runRemove(ctx *context.T, env *cmdline2.Env, args []string) error {
+func runRemove(ctx *context.T, env *cmdline.Env, args []string) error {
 	if expected, got := 1, len(args); expected != got {
 		return env.UsageErrorf("remove: incorrect number of arguments, expected %d, got %d", expected, got)
 	}
@@ -161,11 +161,11 @@
 	return nil
 }
 
-var cmdRoot = &cmdline2.Command{
+var cmdRoot = &cmdline.Command{
 	Name:  "profile",
 	Short: "manages the Vanadium profile repository",
 	Long: `
 Command profile manages the Vanadium profile repository.
 `,
-	Children: []*cmdline2.Command{cmdLabel, cmdDescription, cmdSpecification, cmdPut, cmdRemove},
+	Children: []*cmdline.Command{cmdLabel, cmdDescription, cmdSpecification, cmdPut, cmdRemove},
 }
diff --git a/services/profile/profile/impl_test.go b/services/profile/profile/impl_test.go
index 4227e5b..2c4e135 100644
--- a/services/profile/profile/impl_test.go
+++ b/services/profile/profile/impl_test.go
@@ -17,7 +17,7 @@
 	"v.io/v23/security"
 	"v.io/v23/services/build"
 
-	"v.io/x/lib/cmdline2"
+	"v.io/x/lib/cmdline"
 	"v.io/x/lib/vlog"
 	"v.io/x/ref/lib/v23cmd"
 	_ "v.io/x/ref/runtime/factories/generic"
@@ -127,7 +127,7 @@
 	defer stopServer(t, server)
 	// Setup the command-line.
 	var stdout, stderr bytes.Buffer
-	env := &cmdline2.Env{Stdout: &stdout, Stderr: &stderr}
+	env := &cmdline.Env{Stdout: &stdout, Stderr: &stderr}
 	exists := naming.JoinAddressName(endpoint.String(), "exists")
 
 	// Test the 'label' command.
