diff --git a/cmd/cue/cmd/testdata/script/cmd_env.txt b/cmd/cue/cmd/testdata/script/cmd_env.txt
index bfda9d4..ac4329b 100644
--- a/cmd/cue/cmd/testdata/script/cmd_env.txt
+++ b/cmd/cue/cmd/testdata/script/cmd_env.txt
@@ -1,8 +1,9 @@
+env TESTNUM=10
+env MYTEXT=World
 cue cmd env
 cmp stdout cmd_env.out
 -- cmd_env.out --
 Hello World!
-Hello someone else!
 -- task_tool.cue --
 package home
 
@@ -12,28 +13,11 @@
 )
 
 command: env: {
-	setenv1: os.Setenv & {
-        TESTNUM: 10
-        MYTEXT:  "World"
-	}
-	env1: os.Getenv & {
-        $after: setenv1
-
+	env: os.Getenv & {
         TESTNUM: *<10 | string
         MYTEXT:  string
 	}
-	print1: cli.Print & {
-		text: "Hello \(env1.MYTEXT)!"
-	}
-    setenv2: os.Clearenv & {
-        $after: print1
-    }
-    env2: os.Environ & {
-        $after: setenv2
-
-        MYTEXT: string | *"someone else"
-    }
-	print2: cli.Print & {
-		text: "Hello \(env2.MYTEXT)!"
+	print: cli.Print & {
+		text: "Hello \(env.MYTEXT)!"
 	}
 }
diff --git a/pkg/tool/exec/exec.go b/pkg/tool/exec/exec.go
index 7c93e4b..7c2db97 100644
--- a/pkg/tool/exec/exec.go
+++ b/pkg/tool/exec/exec.go
@@ -154,9 +154,14 @@
 	for iter, _ := ctx.Obj.Lookup("env").Fields(); iter.Next(); {
 		label := iter.Label()
 		v := iter.Value()
-		str, err := v.String()
-		if err != nil {
-			return nil, "", errors.Wrapf(err, v.Pos(),
+		var str string
+		switch v.Kind() {
+		case cue.StringKind:
+			str, _ = v.String()
+		case cue.IntKind, cue.FloatKind, cue.NumberKind:
+			str = fmt.Sprint(v)
+		default:
+			return nil, "", errors.Newf(v.Pos(),
 				"invalid environment variable value %q", v)
 		}
 		cmd.Env = append(cmd.Env, fmt.Sprintf("%s=%s", label, str))
diff --git a/pkg/tool/os/env.go b/pkg/tool/os/env.go
index 962ec03..5065ce8 100644
--- a/pkg/tool/os/env.go
+++ b/pkg/tool/os/env.go
@@ -17,7 +17,6 @@
 //go:generate go run gen.go
 
 import (
-	"fmt"
 	"os"
 	"strings"
 
@@ -29,10 +28,8 @@
 )
 
 func init() {
-	task.Register("tool/os.Setenv", newSetenvCmd)
 	task.Register("tool/os.Getenv", newGetenvCmd)
 	task.Register("tool/os.Environ", newEnvironCmd)
-	task.Register("tool/os.Clearenv", newClearenvCmd)
 
 	// TODO:
 	// Tasks:
@@ -44,72 +41,6 @@
 	// - UserCache/Home/Config (or in os/user?)
 }
 
-type clearenvCmd struct{}
-
-func newClearenvCmd(v cue.Value) (task.Runner, error) {
-	return &clearenvCmd{}, nil
-}
-
-func (c *clearenvCmd) Run(ctx *task.Context) (res interface{}, err error) {
-	os.Clearenv()
-	return map[string]interface{}{}, nil
-}
-
-type setenvCmd struct{}
-
-func newSetenvCmd(v cue.Value) (task.Runner, error) {
-	return &setenvCmd{}, nil
-}
-
-func (c *setenvCmd) Run(ctx *task.Context) (res interface{}, err error) {
-	iter, err := ctx.Obj.Fields()
-	if err != nil {
-		return nil, err
-	}
-
-	for iter.Next() {
-		name := iter.Label()
-		if strings.HasPrefix(name, "$") {
-			continue
-		}
-
-		v, _ := iter.Value().Default()
-
-		if !v.IsConcrete() {
-			return nil, errors.Newf(v.Pos(),
-				"non-concrete environment variable %s", name)
-		}
-		switch k := v.IncompleteKind(); k {
-		case cue.ListKind, cue.StructKind:
-			return nil, errors.Newf(v.Pos(),
-				"unsupported type %s for environment variable %s", k, name)
-
-		case cue.NullKind:
-			err = os.Unsetenv(name)
-
-		case cue.BoolKind:
-			if b, _ := v.Bool(); b {
-				err = os.Setenv(name, "1")
-			} else {
-				err = os.Setenv(name, "0")
-			}
-
-		case cue.StringKind:
-			s, _ := v.String()
-			err = os.Setenv(name, s)
-
-		default:
-			err = os.Setenv(name, fmt.Sprint(v))
-		}
-
-		if err != nil {
-			return nil, err
-		}
-	}
-
-	return map[string]interface{}{}, err
-}
-
 type getenvCmd struct{}
 
 func newGetenvCmd(v cue.Value) (task.Runner, error) {
diff --git a/pkg/tool/os/env_test.go b/pkg/tool/os/env_test.go
index 40c6161..8a6d9fb 100644
--- a/pkg/tool/os/env_test.go
+++ b/pkg/tool/os/env_test.go
@@ -30,45 +30,6 @@
 	"cuelang.org/go/internal/task"
 )
 
-func TestSetenv(t *testing.T) {
-	os.Setenv("CUEOSTESTUNSET", "SET")
-	v := parse(t, "tool/os.Setenv", `{
-		CUEOSTESTMOOD:  "yippie"
-		CUEOSTESTTRUE:  true
-		CUEOSTESTFALSE: false
-		CUEOSTESTNUM:   34K
-		CUEOSTESTUNSET: null
-	}`)
-	_, err := (*setenvCmd).Run(nil, &task.Context{Obj: v})
-	if err != nil {
-		t.Fatal(err)
-	}
-	for _, p := range [][2]string{
-		{"CUEOSTESTMOOD", "yippie"},
-		{"CUEOSTESTTRUE", "1"},
-		{"CUEOSTESTFALSE", "0"},
-		{"CUEOSTESTNUM", "34000"},
-	} {
-		got := os.Getenv(p[0])
-		if got != p[1] {
-			t.Errorf("got %v; want %v", got, p[1])
-		}
-	}
-
-	if _, ok := os.LookupEnv("CUEOSTESTUNSET"); ok {
-		t.Error("CUEOSTESTUNSET should have been unset")
-	}
-
-	v = parse(t, "tool/os.Setenv", `{
-		CUEOSTESTMOOD: string
-	}`)
-	_, err = (*setenvCmd).Run(nil, &task.Context{Obj: v})
-	if err == nil {
-		t.Fatal("expected incomplete error")
-	}
-	// XXX: ensure error is not concrete.
-}
-
 func TestGetenv(t *testing.T) {
 
 	for _, p := range [][2]string{
