You need to bind the shader to an object. Look at the next example(attached):
if you apply the binding of the shader to the jit.gl.gridshape and then turn on the matrixoutput attribute, the jit.gl.mesh stills retrieves the original data from the gridshape. The shader wouldn’t work until you bind it to the mesh object.
Due to the nature of the programmable pipeline, you don’t have access to the results of a vertex program, except within the fragment program of the same shader (as varying variables). The easy answer is that this is just not possible, and you should just do whatever vertex processing on the CPU if you want matrix-level access. Theoretically, you could find a way to capture vertex points to float32 texture using a special shader that passes the vertex positions as varying to the fragment program, but this would be a completely separate rendering stage and seems kinda overkill. To maintain your sanity, I would encourage you to not think too hard about it, and just use jit.expr to manipulate your vertex positions as you like.