diff --git a/services/binary/tidy/appd/mock.go b/services/binary/tidy/appd/mock.go
index 3043304..d401402 100644
--- a/services/binary/tidy/appd/mock.go
+++ b/services/binary/tidy/appd/mock.go
@@ -37,6 +37,10 @@
 	return r.Env, r.Err
 }
 
+func (mdi *mockAppdInvoker) TidyNow(ctx *context.T, _ rpc.ServerCall) error {
+	return mdi.SimpleCore("TidyNow", "TidyNow")
+}
+
 type dispatcher struct {
 	tape *servicetest.Tape
 	t    *testing.T
diff --git a/services/binary/tidy/doc.go b/services/binary/tidy/doc.go
index 209fb4c..300c929 100644
--- a/services/binary/tidy/doc.go
+++ b/services/binary/tidy/doc.go
@@ -6,13 +6,14 @@
 // DO NOT UPDATE MANUALLY
 
 /*
-Tidy tidies the Vanadium binary repository by removing unused binaries.
+Tidy tidies the Vanadium repository by removing unused envelopes and binaries.
 
 Usage:
    tidy <command>
 
 The tidy commands are:
    binary      Binary sub-command tidies a specified binaryd
+   application Application sub-command tidies a specified applicationd
    help        Display help for commands or topics
 
 The global flags are:
@@ -70,6 +71,17 @@
 <applicationd> is the name or endpoint of the applicationd instance sourcing the
 envelopes. <binaryd> is the name or endpoint of a binaryd instance to clean up.
 
+Tidy application - Application sub-command tidies a specified applicationd
+
+Application sub-command uses the Tidy RPC to clean up outdated envelopes from
+the specified appilcationd. Call this before tidying a binaryd instance for
+maximum tidiness.
+
+Usage:
+   tidy application <applicationd>
+
+<applicationd> is the name or endpoint of the applicationd instance to tidy.
+
 Tidy help - Display help for commands or topics
 
 Help with no args displays the usage of the parent command.
diff --git a/services/binary/tidy/impl.go b/services/binary/tidy/impl.go
index 12bbe7d..1f17f80 100644
--- a/services/binary/tidy/impl.go
+++ b/services/binary/tidy/impl.go
@@ -25,8 +25,8 @@
 	"v.io/x/ref/services/repository"
 )
 
-var cmdTidy = &cmdline.Command{
-	Runner: v23cmd.RunnerFunc(runTidyUp),
+var cmdBinaryTidy = &cmdline.Command{
+	Runner: v23cmd.RunnerFunc(runBinaryTidy),
 	Name:   "binary",
 	Short:  "Binary sub-command tidies a specified binaryd",
 	Long: `
@@ -109,7 +109,7 @@
 	return s, nil
 }
 
-func runTidyUp(ctx *context.T, env *cmdline.Env, args []string) error {
+func runBinaryTidy(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)
 	}
@@ -184,14 +184,39 @@
 	return nil
 }
 
+var cmdApplicationTidy = &cmdline.Command{
+	Runner: v23cmd.RunnerFunc(runApplicationTidy),
+	Name:   "application",
+	Short:  "Application sub-command tidies a specified applicationd",
+	Long: `
+Application sub-command uses the Tidy RPC to clean up outdated
+envelopes from the specified appilcationd. Call this before tidying a
+binaryd instance for maximum tidiness.
+`,
+	ArgsName: "<applicationd>",
+	ArgsLong: `
+<applicationd> is the name or endpoint of the applicationd instance
+to tidy.
+`,
+}
+
+func runApplicationTidy(ctx *context.T, env *cmdline.Env, args []string) error {
+	vlog.Infof("runApplicationTidy")
+	if expected, got := 1, len(args); expected != got {
+		return env.UsageErrorf("match: incorrect number of arguments, expected %d, got %d", expected, got)
+	}
+	ac := repository.ApplicationClient(args[0])
+	return ac.TidyNow(ctx)
+}
+
 var cmdRoot = &cmdline.Command{
 	Name:  "tidy",
 	Short: "Tidy binary repositories",
 	Long: `
-Tidy tidies the Vanadium binary repository by removing unused
-binaries.
+Tidy tidies the Vanadium repository by removing unused
+envelopes and binaries.
 `,
-	Children: []*cmdline.Command{cmdTidy},
+	Children: []*cmdline.Command{cmdBinaryTidy, cmdApplicationTidy},
 }
 
 func main() {
diff --git a/services/binary/tidy/impl_test.go b/services/binary/tidy/impl_test.go
index 44e5d00..8b05eab 100644
--- a/services/binary/tidy/impl_test.go
+++ b/services/binary/tidy/impl_test.go
@@ -24,7 +24,47 @@
 
 //go:generate v23 test generate
 
-func TestBinaryClient(t *testing.T) {
+func TestApplicationTidying(t *testing.T) {
+	ctx, shutdown := test.V23Init()
+	defer shutdown()
+
+	apptape := servicetest.NewTape()
+	appserver, err := xrpc.NewDispatchingServer(ctx, "", appd.NewDispatcher(t, apptape))
+	if err != nil {
+		t.Fatalf("applicationd NewDispatchingServer failed: %v", err)
+	}
+
+	// Setup the command-line.
+	var stdout, stderr bytes.Buffer
+	env := &cmdline.Env{Stdout: &stdout, Stderr: &stderr}
+	applicationName := appserver.Status().Endpoints[0].Name()
+
+	apptape.SetResponses(
+		// TidyNow()
+		nil,
+	)
+
+	if err := v23cmd.ParseAndRunForTest(cmdApplicationTidy, ctx, env, []string{applicationName}); err != nil {
+		t.Errorf("error: %v", err)
+	}
+
+	// Verify no output.
+	if expected, got := "", strings.TrimSpace(stdout.String()); got != expected {
+		t.Errorf("Unexpected output from tidy application. Got %q, expected %q", got, expected)
+	}
+	if expected, got := "", strings.TrimSpace(stderr.String()); got != expected {
+		t.Errorf("Unexpected error from tidy application. Got %q, expected %q", got, expected)
+	}
+
+	// Verify application tape.
+	if got, expected := apptape.Play(), []interface{}{
+		"TidyNow",
+	}; !reflect.DeepEqual(expected, got) {
+		t.Errorf("apptape invalid call sequence. Got %#v, want %#v", got, expected)
+	}
+}
+
+func TestBinaryTidying(t *testing.T) {
 	ctx, shutdown := test.V23Init()
 	defer shutdown()
 
@@ -249,16 +289,16 @@
 		},
 	)
 
-	if err := v23cmd.ParseAndRunForTest(cmdTidy, ctx, env, []string{applicationName, binaryName}); err != nil {
-		t.Fatalf("error: %v", err)
+	if err := v23cmd.ParseAndRunForTest(cmdBinaryTidy, ctx, env, []string{applicationName, binaryName}); err != nil {
+		t.Errorf("error: %v", err)
 	}
 
 	// Verify no output.
 	if expected, got := "", strings.TrimSpace(stdout.String()); got != expected {
-		t.Errorf("Unexpected output from bintidy. Got %q, expected %q", got, expected)
+		t.Errorf("Unexpected output from tidy binary. Got %q, expected %q", got, expected)
 	}
 	if expected, got := "", strings.TrimSpace(stderr.String()); got != expected {
-		t.Errorf("Unexpected error from bintidy. Got %q, expected %q", got, expected)
+		t.Errorf("Unexpected error from tidy binary. Got %q, expected %q", got, expected)
 	}
 
 	// Verify binaryd tape.
