One suggestion for the spell manager. Have a token specific name for the frame like Spells: Token Name. That way I can open multiple frames for multiple tokens. Also, always set the target with macro links [macroLink(text, macroName, output, args, target)].
At the various macroLink macros you'll have to make a check for the token. If the currentToken is blank that probably means the token is not on the current map, instead of using getSelected.
[H: onMap = if(currentToken() != "",1,0)]
[H: assert(onMap,"<b><font color=red>Failed to Process Form Data:</font><BR>Token is not on current map.</b>",0)]
This could also be do to the id of the token changing, so before that you could do another check, but you would also need to pass the token name in the arguments and use findToken with token name to verify token is on map. I will probably do this for myself, but not right now. I'll let you know if/when I do this and post an update.