After reviewing your design, I suspect you have a confusion regarding the difference between sessions (server-side sessions) and JWTs. This answer is very useful to understand the most important differences.
However, I will give you a small summary:
Server-side sessions are used to implement stateful authentication protocols, because the state of a session is stored on the server. On the other hand, JWTs are used to implement stateless authentication protocols, because the state of a "session" (notice the quotes) is NOT stored on the server, but on the client (for example, a browser). Both approaches have their advantages and disadvantages (such as those mentioned in the answer mentioned above).
That said, using JWTs you have no way to run these processes of your design (unless you store the JWTs on the server):

Now, in case you are thinking of storing the JWTs on the server, let me tell you that you might be losing some advantages of the stateless approach.
I made this diagram to illustrate the simplest way to use JWTs (you could add the refresh token mechanism, but that's another matter):

Note that the same JWT obtained in step 2 is being sent to 2 different application servers, and they do not need to store the state of the "session" to validate the JWT, since the JWT contains all the information necessary. The only condition is that the 3 servers have the same secret key. That's it.
If you want to implement the above using server-side sessions, you would have to synchronize the application servers so that they have the same session state at all times, and this can be a bit of a complex task. This demonstrates one of the most powerful advantages of JWTs: high scalability.
Second, i'm wondering what's the best way to deal with a user that
open more than one session from the same agent. Should i close last
session and create a new one or like on the diagram, get the last open
session from the db and create new tokens from that ?
Basically, when using JWTs you don't have to worry about these things you mention. A user should be able to request as many JWTs as he wants, and this is not a problem as long as the expiration time of the JWTs is short. That's it. However, there are times when it is necessary to invalidate JWTs, for example when changing passwords.