I agree there should be an "undo", or as I call it, a "takeback" command. At worse, the GTP (server) can respond with an "not implemented" error message.
Undo is the better name.
Also, we need a way to determine if a command is implemented. I was thinking that a command prefixed by a question mark, like "[id] ?[command]" would return either a successful response "=" if implemented, otherwise a "?" if not.
No need for such special cases. This could easily be implemented within the standard syntax with a command "is_implemented" taking a command name as argument. But I think a better solution is to have a command "known_commands" which would return a list of all the known commands, just like the GNU Go "help" command works.
I also think it would be valuable to define a way to pass back error and status codes, and not just a success or failure and an results or error messages. We could implement this as an optional field; a number before the result or error message, prefixed with a colon. I was thinking the the response format could be: "=[id] [status code]: [result]" or "?[id] [error code]: [error message]". I have not put too much thought into this, so feedback would be helpful.
Keep the protocol simple! Unless someone can convince me that this really is necessary I'm strongly against it.
/Gunnar