"offset" can be passed transparently to db to retrieve a range of records while "cursor" is customarily implemented in the API layer. I think that's what "opaque" meant in GP's context.
A starting read is needed to obtain the first cursor, hence the synchronous read.
A starting read is needed to obtain the first cursor, hence the synchronous read.