diff --git a/cloud/agent/agent.go b/cloud/agent/agent.go
index c5873eb..028a7d6 100644
--- a/cloud/agent/agent.go
+++ b/cloud/agent/agent.go
@@ -128,7 +128,7 @@
 	b.MaxElapsedTime = 0
 	// Main heartbeat loop
 	for {
-		req := bpb.AgentHeartbeatRequest{
+		req := bpb.HeartbeatRequest{
 			MachineId: agentInit.TakeoverInit.MachineId,
 		}
 		if sentFirstHeartBeat && !hwReportSent {
diff --git a/cloud/agent/e2e/main_test.go b/cloud/agent/e2e/main_test.go
index 84fd611..bcc38f3 100644
--- a/cloud/agent/e2e/main_test.go
+++ b/cloud/agent/e2e/main_test.go
@@ -67,8 +67,8 @@
 	installationReport  *bpb.OSInstallationReport
 }
 
-func (f *fakeServer) Heartbeat(ctx context.Context, req *bpb.AgentHeartbeatRequest) (*bpb.AgentHeartbeatResponse, error) {
-	var res bpb.AgentHeartbeatResponse
+func (f *fakeServer) Heartbeat(ctx context.Context, req *bpb.HeartbeatRequest) (*bpb.HeartbeatResponse, error) {
+	var res bpb.HeartbeatResponse
 	if req.HardwareReport != nil {
 		f.hardwareReport = req.HardwareReport
 	}
diff --git a/cloud/bmaas/server/agent_callback_service.go b/cloud/bmaas/server/agent_callback_service.go
index cbd912a..b664231 100644
--- a/cloud/bmaas/server/agent_callback_service.go
+++ b/cloud/bmaas/server/agent_callback_service.go
@@ -31,7 +31,7 @@
 	errAgentUnauthenticated = errors.New("machine id or public key unknown")
 )
 
-func (a *agentCallbackService) Heartbeat(ctx context.Context, req *apb.AgentHeartbeatRequest) (*apb.AgentHeartbeatResponse, error) {
+func (a *agentCallbackService) Heartbeat(ctx context.Context, req *apb.HeartbeatRequest) (*apb.HeartbeatResponse, error) {
 	// Extract ED25519 self-signed certificate from client connection.
 	cert, err := rpc.GetPeerCertificate(ctx)
 	if err != nil {
@@ -160,7 +160,7 @@
 		klog.Errorf("Failure during OS installation request retrieval: %v", err)
 	}
 
-	return &apb.AgentHeartbeatResponse{
+	return &apb.HeartbeatResponse{
 		InstallationRequest: installRequest,
 	}, nil
 }
diff --git a/cloud/bmaas/server/agent_callback_service_test.go b/cloud/bmaas/server/agent_callback_service_test.go
index f5d1383..e0ec9d0 100644
--- a/cloud/bmaas/server/agent_callback_service_test.go
+++ b/cloud/bmaas/server/agent_callback_service_test.go
@@ -72,7 +72,7 @@
 		defer conn.Close()
 
 		stub := apb.NewAgentCallbackClient(conn)
-		_, err = stub.Heartbeat(ctx, &apb.AgentHeartbeatRequest{
+		_, err = stub.Heartbeat(ctx, &apb.HeartbeatRequest{
 			MachineId:      mid.String(),
 			HardwareReport: &apb.AgentHardwareReport{},
 		})
@@ -138,7 +138,7 @@
 		t.Fatalf("could not start session")
 	}
 
-	heartbeat := func(mid uuid.UUID, report *apb.OSInstallationReport) (*apb.AgentHeartbeatResponse, error) {
+	heartbeat := func(mid uuid.UUID, report *apb.OSInstallationReport) (*apb.HeartbeatResponse, error) {
 		creds, err := rpc.NewEphemeralCredentials(priv, rpc.WantInsecure())
 		if err != nil {
 			t.Fatalf("could not generate ephemeral credentials: %v", err)
@@ -150,7 +150,7 @@
 		defer conn.Close()
 
 		stub := apb.NewAgentCallbackClient(conn)
-		return stub.Heartbeat(ctx, &apb.AgentHeartbeatRequest{
+		return stub.Heartbeat(ctx, &apb.HeartbeatRequest{
 			MachineId:          mid.String(),
 			HardwareReport:     &apb.AgentHardwareReport{},
 			InstallationReport: report,
diff --git a/cloud/bmaas/server/api/BUILD.bazel b/cloud/bmaas/server/api/BUILD.bazel
index 15d649f..56a9426 100644
--- a/cloud/bmaas/server/api/BUILD.bazel
+++ b/cloud/bmaas/server/api/BUILD.bazel
@@ -7,8 +7,6 @@
     name = "api_proto_lint_test",
     except_rules = [
         "PACKAGE_VERSION_SUFFIX",
-        "RPC_REQUEST_STANDARD_NAME",  # TODO: evaluate correctness
-        "RPC_RESPONSE_STANDARD_NAME",  # TODO: evaluate correctness
         "SERVICE_SUFFIX",
     ],
     protos = [":api_proto"],
diff --git a/cloud/bmaas/server/api/agent.proto b/cloud/bmaas/server/api/agent.proto
index 5bebef5..67ec4a3 100644
--- a/cloud/bmaas/server/api/agent.proto
+++ b/cloud/bmaas/server/api/agent.proto
@@ -17,7 +17,7 @@
   // isn't reactive, so it would have to do its own inner polling to create
   // a stream of updates. To keep things simple, we instead let the agent decide
   // on the cadence of updates it wants to keep up with.
-  rpc Heartbeat(AgentHeartbeatRequest) returns (AgentHeartbeatResponse);
+  rpc Heartbeat(HeartbeatRequest) returns (HeartbeatResponse);
 }
 
 message AgentHardwareReport {
@@ -50,7 +50,7 @@
   }
 }
 
-message AgentHeartbeatRequest {
+message HeartbeatRequest {
   // MachineID that this agent represents. Technically not necessary since
   // keypairs between agents should be unique, but this provides an extra layer
   // of protection against programming bugs.
@@ -90,7 +90,7 @@
   }
 }
 
-message AgentHeartbeatResponse {
+message HeartbeatResponse {
   // If set, the control plane is requesting the installation of an operating
   // system.
   OSInstallationRequest installation_request = 1;
diff --git a/metropolis/cli/dbg/main.go b/metropolis/cli/dbg/main.go
index 1845ad1..4a3d32e 100644
--- a/metropolis/cli/dbg/main.go
+++ b/metropolis/cli/dbg/main.go
@@ -77,24 +77,24 @@
 	case "logs":
 		logsCmd.Parse(os.Args[2:])
 		dn := logsCmd.Arg(0)
-		req := &apb.GetLogsRequest{
+		req := &apb.LogsRequest{
 			Dn:          dn,
-			BacklogMode: apb.GetLogsRequest_BACKLOG_MODE_DISABLE,
-			StreamMode:  apb.GetLogsRequest_STREAM_MODE_DISABLE,
+			BacklogMode: apb.LogsRequest_BACKLOG_MODE_DISABLE,
+			StreamMode:  apb.LogsRequest_STREAM_MODE_DISABLE,
 			Filters:     nil,
 		}
 
 		switch *logsTailN {
 		case 0:
 		case -1:
-			req.BacklogMode = apb.GetLogsRequest_BACKLOG_MODE_ALL
+			req.BacklogMode = apb.LogsRequest_BACKLOG_MODE_ALL
 		default:
-			req.BacklogMode = apb.GetLogsRequest_BACKLOG_MODE_COUNT
+			req.BacklogMode = apb.LogsRequest_BACKLOG_MODE_COUNT
 			req.BacklogCount = int64(*logsTailN)
 		}
 
 		if *logsStream {
-			req.StreamMode = apb.GetLogsRequest_STREAM_MODE_UNBUFFERED
+			req.StreamMode = apb.LogsRequest_STREAM_MODE_UNBUFFERED
 		}
 
 		if *logsRecursive {
@@ -103,7 +103,7 @@
 			})
 		}
 
-		stream, err := debugClient.GetLogs(ctx, req)
+		stream, err := debugClient.Logs(ctx, req)
 		if err != nil {
 			fmt.Fprintf(os.Stderr, "Failed to get logs: %v\n", err)
 			os.Exit(1)
diff --git a/metropolis/cli/metroctl/cmd_node_logs.go b/metropolis/cli/metroctl/cmd_node_logs.go
index 36ccd00..5baf2f6 100644
--- a/metropolis/cli/metroctl/cmd_node_logs.go
+++ b/metropolis/cli/metroctl/cmd_node_logs.go
@@ -97,9 +97,9 @@
 		}
 		nmgmt := api.NewNodeManagementClient(cl)
 
-		streamMode := api.GetLogsRequest_STREAM_MODE_DISABLE
+		streamMode := api.LogsRequest_STREAM_MODE_DISABLE
 		if logFlags.follow {
-			streamMode = api.GetLogsRequest_STREAM_MODE_UNBUFFERED
+			streamMode = api.LogsRequest_STREAM_MODE_UNBUFFERED
 		}
 		var filters []*cpb.LogFilter
 		if !logFlags.exact {
@@ -109,17 +109,17 @@
 				},
 			})
 		}
-		backlogMode := api.GetLogsRequest_BACKLOG_MODE_ALL
+		backlogMode := api.LogsRequest_BACKLOG_MODE_ALL
 		var backlogCount int64
 		switch {
 		case logFlags.backlog > 0:
-			backlogMode = api.GetLogsRequest_BACKLOG_MODE_COUNT
+			backlogMode = api.LogsRequest_BACKLOG_MODE_COUNT
 			backlogCount = int64(logFlags.backlog)
 		case logFlags.backlog == 0:
-			backlogMode = api.GetLogsRequest_BACKLOG_MODE_DISABLE
+			backlogMode = api.LogsRequest_BACKLOG_MODE_DISABLE
 		}
 
-		srv, err := nmgmt.Logs(ctx, &api.GetLogsRequest{
+		srv, err := nmgmt.Logs(ctx, &api.LogsRequest{
 			Dn:           logFlags.dn,
 			BacklogMode:  backlogMode,
 			BacklogCount: backlogCount,
diff --git a/metropolis/node/core/curator/impl_leader_aaa.go b/metropolis/node/core/curator/impl_leader_aaa.go
index 8813108..40e4c7e 100644
--- a/metropolis/node/core/curator/impl_leader_aaa.go
+++ b/metropolis/node/core/curator/impl_leader_aaa.go
@@ -98,10 +98,10 @@
 	pk := peerInfo.Unauthenticated.SelfSignedPublicKey
 	if pk == nil {
 		// No cert was presented, respond with REFRESH_CERTIFICATE request.
-		err := srv.Send(&apb.EscrowFromServer{
-			Needed: []*apb.EscrowFromServer_ProofRequest{
+		err := srv.Send(&apb.EscrowResponse{
+			Needed: []*apb.EscrowResponse_ProofRequest{
 				{
-					Kind: apb.EscrowFromServer_ProofRequest_KIND_REFRESH_CERTIFICATE,
+					Kind: apb.EscrowResponse_ProofRequest_KIND_REFRESH_CERTIFICATE,
 				},
 			},
 		})
@@ -141,10 +141,10 @@
 		return status.Errorf(codes.Unavailable, "ensuring new certificate failed: %v", err)
 	}
 
-	return srv.Send(&apb.EscrowFromServer{
-		Fulfilled: []*apb.EscrowFromServer_ProofRequest{
+	return srv.Send(&apb.EscrowResponse{
+		Fulfilled: []*apb.EscrowResponse_ProofRequest{
 			{
-				Kind: apb.EscrowFromServer_ProofRequest_KIND_REFRESH_CERTIFICATE,
+				Kind: apb.EscrowResponse_ProofRequest_KIND_REFRESH_CERTIFICATE,
 			},
 		},
 		EmittedCertificate: ocBytes,
diff --git a/metropolis/node/core/curator/impl_leader_curator.go b/metropolis/node/core/curator/impl_leader_curator.go
index addd789..bcf7d42 100644
--- a/metropolis/node/core/curator/impl_leader_curator.go
+++ b/metropolis/node/core/curator/impl_leader_curator.go
@@ -291,7 +291,7 @@
 		// Update the node's timestamp within the local Curator state.
 		l.ls.heartbeatTimestamps.Store(id, time.Now())
 
-		rsp := &ipb.HeartbeatUpdateResponse{}
+		rsp := &ipb.HeartbeatResponse{}
 		if err := stream.Send(rsp); err != nil {
 			return err
 		}
diff --git a/metropolis/node/core/curator/impl_leader_test.go b/metropolis/node/core/curator/impl_leader_test.go
index 59788e8..72c8658 100644
--- a/metropolis/node/core/curator/impl_leader_test.go
+++ b/metropolis/node/core/curator/impl_leader_test.go
@@ -1001,7 +1001,7 @@
 		t.Fatalf("While initializing heartbeat stream: %v", err)
 	}
 	for i := 0; i < 3; i++ {
-		if err := stream.Send(&ipb.HeartbeatUpdateRequest{}); err != nil {
+		if err := stream.Send(&ipb.HeartbeatRequest{}); err != nil {
 			t.Fatalf("While sending a heartbeat: %v", err)
 		}
 
diff --git a/metropolis/node/core/curator/proto/api/BUILD.bazel b/metropolis/node/core/curator/proto/api/BUILD.bazel
index 146c8d2..e5b826d 100644
--- a/metropolis/node/core/curator/proto/api/BUILD.bazel
+++ b/metropolis/node/core/curator/proto/api/BUILD.bazel
@@ -8,8 +8,7 @@
     except_rules = [
         "PACKAGE_VERSION_SUFFIX",
         "ENUM_ZERO_VALUE_SUFFIX",
-        "RPC_REQUEST_STANDARD_NAME",  # TODO: evaluate correctness
-        "RPC_RESPONSE_STANDARD_NAME",  # TODO: evaluate correctness
+        "RPC_RESPONSE_STANDARD_NAME",
         "SERVICE_SUFFIX",
     ],
     protos = [":api_proto"],
diff --git a/metropolis/node/core/curator/proto/api/api.proto b/metropolis/node/core/curator/proto/api/api.proto
index 9641c24..16b1ae1 100644
--- a/metropolis/node/core/curator/proto/api/api.proto
+++ b/metropolis/node/core/curator/proto/api/api.proto
@@ -50,7 +50,7 @@
 
     // Heartbeat is used by nodes to periodicall update their heartbeat
     // timestamps within the current Curator leader.
-    rpc Heartbeat(stream HeartbeatUpdateRequest) returns (stream HeartbeatUpdateResponse) {
+    rpc Heartbeat(stream HeartbeatRequest) returns (stream HeartbeatResponse) {
         option (metropolis.proto.ext.authorization) = {
             need: PERMISSION_UPDATE_NODE_SELF
         };
@@ -252,10 +252,10 @@
 message UpdateNodeStatusResponse {
 }
 
-message HeartbeatUpdateRequest {
+message HeartbeatRequest {
 }
 
-message HeartbeatUpdateResponse {
+message HeartbeatResponse {
 }
 
 message RegisterNodeRequest {
diff --git a/metropolis/node/core/debug_service_enabled.go b/metropolis/node/core/debug_service_enabled.go
index 4f8495f..ff20a55 100644
--- a/metropolis/node/core/debug_service_enabled.go
+++ b/metropolis/node/core/debug_service_enabled.go
@@ -85,7 +85,7 @@
 	}
 }
 
-func (s *debugService) GetLogs(req *apb.GetLogsRequest, srv apb.NodeDebugService_GetLogsServer) error {
+func (s *debugService) Logs(req *apb.LogsRequest, srv apb.NodeDebugService_LogsServer) error {
 	svc := mgmt.LogService{
 		LogTree: s.logtree,
 	}
diff --git a/metropolis/node/core/mgmt/svc_logs.go b/metropolis/node/core/mgmt/svc_logs.go
index 7a6ded5..ebc7800 100644
--- a/metropolis/node/core/mgmt/svc_logs.go
+++ b/metropolis/node/core/mgmt/svc_logs.go
@@ -62,7 +62,7 @@
 	return res
 }
 
-func (s *LogService) Logs(req *api.GetLogsRequest, srv api.NodeManagement_LogsServer) error {
+func (s *LogService) Logs(req *api.LogsRequest, srv api.NodeManagement_LogsServer) error {
 	if len(req.Filters) > logFilterMax {
 		return status.Errorf(codes.InvalidArgument, "requested %d filters, maximum permitted is %d", len(req.Filters), logFilterMax)
 	}
@@ -80,10 +80,10 @@
 
 	// Turn backlog mode into logtree option(s).
 	switch req.BacklogMode {
-	case api.GetLogsRequest_BACKLOG_MODE_DISABLE:
-	case api.GetLogsRequest_BACKLOG_MODE_ALL:
+	case api.LogsRequest_BACKLOG_MODE_DISABLE:
+	case api.LogsRequest_BACKLOG_MODE_ALL:
 		options = append(options, logtree.WithBacklog(logtree.BacklogAllAvailable))
-	case api.GetLogsRequest_BACKLOG_MODE_COUNT:
+	case api.LogsRequest_BACKLOG_MODE_COUNT:
 		count := int(req.BacklogCount)
 		if count <= 0 {
 			return status.Errorf(codes.InvalidArgument, "backlog_count must be > 0 if backlog_mode is BACKLOG_COUNT")
@@ -96,8 +96,8 @@
 	// Turn stream mode into logtree option(s).
 	streamEnable := false
 	switch req.StreamMode {
-	case api.GetLogsRequest_STREAM_MODE_DISABLE:
-	case api.GetLogsRequest_STREAM_MODE_UNBUFFERED:
+	case api.LogsRequest_STREAM_MODE_DISABLE:
+	case api.LogsRequest_STREAM_MODE_UNBUFFERED:
 		streamEnable = true
 		options = append(options, logtree.WithStream())
 	}
@@ -155,7 +155,7 @@
 		chunk = append(chunk, p)
 
 		if len(chunk) >= maxChunkSize {
-			err := srv.Send(&api.GetLogsResponse{
+			err := srv.Send(&api.LogsResponse{
 				BacklogEntries: sanitizedEntries(chunk),
 			})
 			if err != nil {
@@ -167,7 +167,7 @@
 
 	// Send last chunk of backlog, if present..
 	if len(chunk) > 0 {
-		err := srv.Send(&api.GetLogsResponse{
+		err := srv.Send(&api.LogsResponse{
 			BacklogEntries: sanitizedEntries(chunk),
 		})
 		if err != nil {
@@ -191,7 +191,7 @@
 			// TODO(q3k): log this once we have logtree/gRPC compatibility.
 			continue
 		}
-		err := srv.Send(&api.GetLogsResponse{
+		err := srv.Send(&api.LogsResponse{
 			StreamEntries: []*lpb.LogEntry{p},
 		})
 		if err != nil {
diff --git a/metropolis/node/core/mgmt/svc_logs_test.go b/metropolis/node/core/mgmt/svc_logs_test.go
index f778084..f650b4e 100644
--- a/metropolis/node/core/mgmt/svc_logs_test.go
+++ b/metropolis/node/core/mgmt/svc_logs_test.go
@@ -128,26 +128,26 @@
 	s.LogTree.MustLeveledFor("main.roleserver.controlplane").Infof("Starting etcd...")
 	s.LogTree.MustLeveledFor("main.weirdo").Infof("Here comes some invalid utf-8: a\xc5z")
 
-	mkReq := func(dn string, backlog int64) *api.GetLogsRequest {
-		var backlogMode api.GetLogsRequest_BacklogMode
+	mkReq := func(dn string, backlog int64) *api.LogsRequest {
+		var backlogMode api.LogsRequest_BacklogMode
 		var backlogCount int64
 		switch {
 		case backlog < 0:
-			backlogMode = api.GetLogsRequest_BACKLOG_MODE_ALL
+			backlogMode = api.LogsRequest_BACKLOG_MODE_ALL
 		case backlog > 0:
-			backlogMode = api.GetLogsRequest_BACKLOG_MODE_COUNT
+			backlogMode = api.LogsRequest_BACKLOG_MODE_COUNT
 			backlogCount = backlog
 		case backlog == 0:
-			backlogMode = api.GetLogsRequest_BACKLOG_MODE_DISABLE
+			backlogMode = api.LogsRequest_BACKLOG_MODE_DISABLE
 		}
-		return &api.GetLogsRequest{
+		return &api.LogsRequest{
 			Dn:           dn,
 			BacklogMode:  backlogMode,
 			BacklogCount: backlogCount,
-			StreamMode:   api.GetLogsRequest_STREAM_MODE_DISABLE,
+			StreamMode:   api.LogsRequest_STREAM_MODE_DISABLE,
 		}
 	}
-	mkRecursive := func(in *api.GetLogsRequest) *api.GetLogsRequest {
+	mkRecursive := func(in *api.LogsRequest) *api.LogsRequest {
 		in.Filters = append(in.Filters, &cpb.LogFilter{
 			Filter: &cpb.LogFilter_WithChildren_{
 				WithChildren: &cpb.LogFilter_WithChildren{},
@@ -156,7 +156,7 @@
 		return in
 	}
 	for i, te := range []struct {
-		req  *api.GetLogsRequest
+		req  *api.LogsRequest
 		want []*lpb.LogEntry
 	}{
 		{
@@ -221,10 +221,10 @@
 
 	// Start streaming all logs.
 	mgmt := api.NewNodeManagementClient(cl)
-	srv, err := mgmt.Logs(ctx, &api.GetLogsRequest{
+	srv, err := mgmt.Logs(ctx, &api.LogsRequest{
 		Dn:          "",
-		BacklogMode: api.GetLogsRequest_BACKLOG_MODE_ALL,
-		StreamMode:  api.GetLogsRequest_STREAM_MODE_UNBUFFERED,
+		BacklogMode: api.LogsRequest_BACKLOG_MODE_ALL,
+		StreamMode:  api.LogsRequest_STREAM_MODE_UNBUFFERED,
 		Filters: []*cpb.LogFilter{
 			{
 				Filter: &cpb.LogFilter_WithChildren_{
@@ -295,15 +295,15 @@
 	s.LogTree.MustLeveledFor("main").Errorf("Something failed very hard!")
 
 	for i, te := range []struct {
-		req  *api.GetLogsRequest
+		req  *api.LogsRequest
 		want []*lpb.LogEntry
 	}{
 		// Case 0: request given level
 		{
-			req: &api.GetLogsRequest{
+			req: &api.LogsRequest{
 				Dn:          "main",
-				BacklogMode: api.GetLogsRequest_BACKLOG_MODE_ALL,
-				StreamMode:  api.GetLogsRequest_STREAM_MODE_DISABLE,
+				BacklogMode: api.LogsRequest_BACKLOG_MODE_ALL,
+				StreamMode:  api.LogsRequest_STREAM_MODE_DISABLE,
 				Filters: []*cpb.LogFilter{
 					{
 						Filter: &cpb.LogFilter_LeveledWithMinimumSeverity_{
@@ -321,10 +321,10 @@
 		},
 		// Case 1: request raw only
 		{
-			req: &api.GetLogsRequest{
+			req: &api.LogsRequest{
 				Dn:          "main",
-				BacklogMode: api.GetLogsRequest_BACKLOG_MODE_ALL,
-				StreamMode:  api.GetLogsRequest_STREAM_MODE_DISABLE,
+				BacklogMode: api.LogsRequest_BACKLOG_MODE_ALL,
+				StreamMode:  api.LogsRequest_STREAM_MODE_DISABLE,
 				Filters: []*cpb.LogFilter{
 					{
 						Filter: &cpb.LogFilter_OnlyRaw_{
@@ -339,10 +339,10 @@
 		},
 		// Case 2: request leveled only
 		{
-			req: &api.GetLogsRequest{
+			req: &api.LogsRequest{
 				Dn:          "main",
-				BacklogMode: api.GetLogsRequest_BACKLOG_MODE_ALL,
-				StreamMode:  api.GetLogsRequest_STREAM_MODE_DISABLE,
+				BacklogMode: api.LogsRequest_BACKLOG_MODE_ALL,
+				StreamMode:  api.LogsRequest_STREAM_MODE_DISABLE,
 				Filters: []*cpb.LogFilter{
 					{
 						Filter: &cpb.LogFilter_OnlyLeveled_{
diff --git a/metropolis/node/core/roleserve/worker_heartbeat.go b/metropolis/node/core/roleserve/worker_heartbeat.go
index c31d203..bac11d9 100644
--- a/metropolis/node/core/roleserve/worker_heartbeat.go
+++ b/metropolis/node/core/roleserve/worker_heartbeat.go
@@ -45,7 +45,7 @@
 	}
 
 	for {
-		if err := stream.Send(&ipb.HeartbeatUpdateRequest{}); err != nil {
+		if err := stream.Send(&ipb.HeartbeatRequest{}); err != nil {
 			return fmt.Errorf("while sending a heartbeat: %w", err)
 		}
 		next := time.Now().Add(curator.HeartbeatTimeout)
diff --git a/metropolis/node/core/rpc/client.go b/metropolis/node/core/rpc/client.go
index f364c5a..74965c1 100644
--- a/metropolis/node/core/rpc/client.go
+++ b/metropolis/node/core/rpc/client.go
@@ -218,8 +218,8 @@
 		}
 		return nil, err
 	}
-	if err := srv.Send(&apb.EscrowFromClient{
-		Parameters: &apb.EscrowFromClient_Parameters{
+	if err := srv.Send(&apb.EscrowRequest{
+		Parameters: &apb.EscrowRequest_Parameters{
 			RequestedIdentityName: "owner",
 			PublicKey:             private.Public().(ed25519.PublicKey),
 		},
diff --git a/metropolis/proto/api/BUILD.bazel b/metropolis/proto/api/BUILD.bazel
index 28d1fb9..a849a07 100644
--- a/metropolis/proto/api/BUILD.bazel
+++ b/metropolis/proto/api/BUILD.bazel
@@ -8,9 +8,9 @@
     except_rules = [
         "PACKAGE_VERSION_SUFFIX",
         "ENUM_ZERO_VALUE_SUFFIX",
-        "RPC_REQUEST_RESPONSE_UNIQUE",  # TODO: evaluate correctness
-        "RPC_REQUEST_STANDARD_NAME",  # TODO: evaluate correctness
-        "RPC_RESPONSE_STANDARD_NAME",  # TODO: evaluate correctness
+        "RPC_REQUEST_RESPONSE_UNIQUE",
+        "RPC_REQUEST_STANDARD_NAME",
+        "RPC_RESPONSE_STANDARD_NAME",
         "SERVICE_SUFFIX",
     ],
     protos = [":api_proto"],
diff --git a/metropolis/proto/api/aaa.proto b/metropolis/proto/api/aaa.proto
index faf6dda..4cdfa18 100644
--- a/metropolis/proto/api/aaa.proto
+++ b/metropolis/proto/api/aaa.proto
@@ -45,7 +45,7 @@
     // channel opened from a given IP address or with a given existing TLS
     // certificate), and some dependent on external systems (eg. SSO).
     //
-    // If the requested identity within the first EscrowFromClient is not
+    // If the requested identity within the first EscrowRequest is not
     // defined, the server may:
     //
     //  - Abort the connection immediately with an error about an unknown
@@ -146,7 +146,7 @@
     // will lead to retrieving identities from with the same namespace of
     // entities.
     //
-    rpc Escrow(stream EscrowFromClient) returns (stream EscrowFromServer) {
+    rpc Escrow(stream EscrowRequest) returns (stream EscrowResponse) {
         option (metropolis.proto.ext.authorization) = {
             // The AAA implementation performs its own checks as needed, so the
             // RPC middleware should allow everything through.
@@ -155,9 +155,9 @@
     }
 }
 
-message EscrowFromClient {
+message EscrowRequest {
     // Parameters used for the entirety of the escrow flow. These must be set
-    // only during the first EscrowFromClient message, and are ignored in
+    // only during the first EscrowRequest message, and are ignored in
     // further messages.
     message Parameters {
         // The requested identity name. This is currently opaque and not defined,
@@ -178,7 +178,7 @@
 
     // Proofs. These should only be submitted by the client after the server
     // requests them, but if they are submitted within the first
-    // EscrowFromClientMessage they will be interpreted too. The problem with
+    // EscrowRequestMessage they will be interpreted too. The problem with
     // ahead of time proofs is that different a proof request from the server
     // might parametrize the request in a way that would elicit a different
     // answer from the client, so care must be taken to ensure that the
@@ -193,7 +193,7 @@
     Proofs proofs = 2;
 }
 
-message EscrowFromServer {
+message EscrowResponse {
     // A proof requested from the server. Within an Escrow RPC, proofs can be
     // either 'needed' or 'fulfilled'. Each proof has a kind, and kinds within
     // all proof requests (either needed or fulfilled) are unique.
@@ -209,7 +209,7 @@
             KIND_REFRESH_CERTIFICATE = 1;
             // The client needs to present a static, plaintext password/token.
             // This can be fulfilled by setting
-            // EscrowFromClient.proofs.plaintext_password.
+            // EscrowRequest.proofs.plaintext_password.
             // If the client presents an invalid password, the Escrow RPC will
             // fail.
             KIND_PLAINTEXT_PASSWORD = 2;
diff --git a/metropolis/proto/api/debug.proto b/metropolis/proto/api/debug.proto
index e5529f9..fba5470 100644
--- a/metropolis/proto/api/debug.proto
+++ b/metropolis/proto/api/debug.proto
@@ -29,7 +29,7 @@
 
     // A reimplementation of metropolis.api.NodeManagement.Logs that's available
     // before the node starts up the management service.
-    rpc GetLogs(GetLogsRequest) returns (stream GetLogsResponse);
+    rpc Logs(LogsRequest) returns (stream LogsResponse);
 
     // Trace enables tracing of Metropolis using the Linux ftrace infrastructure.
     rpc Trace(TraceRequest) returns (stream TraceEvent);
diff --git a/metropolis/proto/api/management.proto b/metropolis/proto/api/management.proto
index 59fd038..9a81082 100644
--- a/metropolis/proto/api/management.proto
+++ b/metropolis/proto/api/management.proto
@@ -377,7 +377,7 @@
 // NodeManagement runs on every node of the cluster and providers management
 // and troubleshooting RPCs to operators. All requests must be authenticated.
 service NodeManagement {
-  // GetLogs Returns historical and/or streaming logs for a given DN with given
+  // Logs Returns historical and/or streaming logs for a given DN with given
   // filters from the system global LogTree.
   //
   // For more information about this API, see //osbase/logtree. But, in
@@ -393,7 +393,7 @@
   //     example paths, see the console logs of a running Metropolis node, or
   //     request all logs (at DN "").
   //
-  rpc Logs(GetLogsRequest) returns (stream GetLogsResponse) {
+  rpc Logs(LogsRequest) returns (stream LogsResponse) {
     option (metropolis.proto.ext.authorization) = {
       need: PERMISSION_READ_NODE_LOGS
     };
@@ -418,7 +418,7 @@
   }
 }
 
-message GetLogsRequest {
+message LogsRequest {
   // DN from which to request logs. All supervised runnables live at `root.`,
   // the init code lives at `init.`.
   string dn = 1;
@@ -449,7 +449,7 @@
   StreamMode stream_mode = 5;
 }
 
-message GetLogsResponse {
+message LogsResponse {
   // Entries from the requested historical entries (via WithBackLog). They will
   // all be served before the first stream_entries are served (if any).
   repeated osbase.logtree.proto.LogEntry backlog_entries = 1;
